00001
00002
00003 #include "Stiostream.h"
00004 #include <cmath>
00005 #include <vector>
00006 using namespace std;
00007
00008
00009 #include "TFile.h"
00010 #include "TTree.h"
00011
00012
00013 #include "StJetMuEvent.h"
00014 #include "StJetFilter.h"
00015
00016 ClassImp(StJetFilter)
00017
00018 StJetFilter::StJetFilter(ioType type, const char* file)
00019 : mIoType(type), mEventCounter(0), mFile(0), mTree(0), mEvent(new StJetMuEvent)
00020 {
00021 cout <<"StJetFilter::StJetFilter()"<<endl;
00022
00023 if (type==kWrite) {
00024 cout <<"\tOpen file in write mode"<<endl;
00025 mFile = new TFile(file,"RECREATE");
00026 mFile->SetCompressionLevel(9);
00027
00028
00029 mTree = new TTree("mTree","StUpsilon Tree");
00030 mTree->SetBranchStyle(0);
00031
00032 Int_t bufsize = 20000;
00033 Int_t split = 1;
00034
00035 mTree->Branch("StJetMuEvent","StJetMuEvent",&mEvent,bufsize,split);
00036 }
00037 else if (type==kRead) {
00038 cout <<"\tOpen file in read mode"<<endl;
00039 mFile = new TFile(file,"READ");
00040
00041
00042 TTree* temp = dynamic_cast<TTree*>(mFile->Get("mTree"));
00043 if (!temp) {
00044 cout <<"Could not recover TTree from file:\t"<<file<<" Prepare to crash"<<endl;
00045 }
00046 mTree=temp;
00047 mTree->SetBranchAddress("StJetMuEvent",&mEvent);
00048
00049 }
00050 else {
00051 cout <<"StJetFilter::StJetFilter(). ERROR:\t"
00052 <<"Undefined ioType. Abort"<<endl;
00053 }
00054 }
00055
00056 StJetFilter::~StJetFilter()
00057 {
00058 cout <<"StJetFilter::~StJetFilter()"<<endl;
00059
00060 if (mIoType==kWrite) {
00061 mFile->Write();
00062 }
00063 mFile->Close();
00064
00065
00066
00067
00068
00069
00070
00071 delete mEvent;
00072 mEvent=0;
00073 }
00074
00075 int StJetFilter::nEvents() const
00076 {
00077 return (mTree) ? static_cast<int>(mTree->GetEntries()) : 0;
00078 }
00079
00080 void StJetFilter::setCuts(const AnaCuts& c)
00081 {
00082 mEvent->setCuts(c);
00083 }
00084
00085 void StJetFilter::fill(StMuDstMaker* maker)
00086 {
00087
00088 if (mIoType==kWrite) {
00089 if (mEvent->fill(maker)) {
00090 cout <<"Event Accepted. Fill TTree"<<endl;
00091 mTree->Fill();
00092 }
00093 else {
00094 cout <<"Event Rejected, write log"<<endl;
00095 }
00096 }
00097 else if (mIoType==kRead) {
00098
00099 if (mEventCounter<mTree->GetEntries()) {
00100 mTree->GetEntry(mEventCounter++);
00101 }
00102 else {
00103 cout <<"StJetFilter::fill(StMuDstMaker*). Error:\t"
00104 <<"No more entries to get. No action taken"<<endl;
00105 }
00106 }
00107 else {
00108 cout <<"StJetFilter::fill(StMuDstMaker*). ERROR:\t"
00109 <<"Undefined ioType. No action taken"<<endl;
00110 }
00111 }