00001 #include "StHbtMaker/Reader/StHbtTagReader.h"
00002 #ifdef HPUX
00003 #include <Stiostream.h>
00004 #include <string.h>
00005 #else
00006 #include "Stiostream.h"
00007 #include <string>
00008 #endif
00009
00010 #include "TFile.h"
00011 #include "TTree.h"
00012
00013 ClassImp(StHbtTagReader)
00014
00015 StHbtTagReader::StHbtTagReader(const char* tagFileName) : mTagFileName(""), mDstFileName(""), mTFile(0), mTTree(0) {
00016 cout << " StHbtTagReader::StHbtTagReader(const char* tagFileName)" << endl;
00017 mTagFileName = string(tagFileName);
00018 init();
00019 }
00020
00021 StHbtTagReader::StHbtTagReader(const StIOMaker* ioMaker) : mTagFileName(""), mDstFileName(""), mTFile(0), mTTree(0) {
00022 cout << " StHbtTagReader::StHbtTagReader(const StIOMaker* ioMaker)" << endl;
00023 mIOMaker = ioMaker;
00024 }
00025
00026 void StHbtTagReader::init() {
00027 cout << " StHbtTagReader::init()" << endl;
00028 if (mTFile) {
00029 if ( mTFile->IsOpen() ) {
00030 cout << " StHbtTagReader::init() - closing file " << endl;
00031 mTFile->Close();
00032 }
00033 delete mTFile;
00034 }
00035 mTFile = new TFile(mTagFileName.c_str(),"r");
00036 if ( mTFile->IsOpen() ) {
00037 cout << " StHbtTagReader::init() - new tags file opend : -" << mTagFileName.c_str() << "-" << endl;
00038 mDstFileName = mIOMaker->GetFile();
00039 mTTree = (TTree*)mTFile->Get("Tag");
00040 mNEvents = (int)mTTree->GetEntries();
00041 }
00042 else {
00043 cout << " StHbtTagReader::init() - coundn't open new tags file : -" << mTagFileName.c_str() << "-" << endl;
00044 }
00045 }
00046
00047 StHbtTagReader::~StHbtTagReader(){
00048 if (mTFile) mTFile->Close();
00049 }
00050
00051 int StHbtTagReader::EventMatch(int runNumber, int eventNumber) {
00052
00053 if (mIOMaker) {
00054 cout << " mIOMaker " << mIOMaker << " " << mDstFileName.c_str() << " " << mIOMaker->GetFile() << endl;
00055 if (strcmp(mDstFileName.c_str(),mIOMaker->GetFile()) ) {
00056 cout << " new file " << endl;
00057 mTagFileName = mIOMaker->GetFile();
00058 if (mTagFileName.find(".dst.") != string::npos)
00059 mTagFileName.replace(mTagFileName.find(".dst."),5,".tags.");
00060 else if (mTagFileName.find(".event.") != string::npos)
00061 mTagFileName.replace(mTagFileName.find(".event."),7,".tags.");
00062 init();
00063 }
00064 }
00065 return (GetEventIndex(runNumber,eventNumber)!=-1) ? 1 : 0;
00066 }
00067
00068 int StHbtTagReader::GetEventIndex(int runNumber, int eventNumber){
00069 cout << " StHbtTagReader::GetEventIndex(int runNumber, int eventNumber)" << endl;
00070 mRunNumber = -1;
00071 mEventNumber = -1;
00072 mEventIndex = -1;
00073 for ( int i=0; i<mNEvents; i++) {
00074 mIret = mTTree->GetEntry(i);
00075 if ( mTTree->GetBranch("EvtHddr.mEventNumber")->GetLeaf("mEventNumber")->GetValue() == eventNumber &&
00076 mTTree->GetBranch("EvtHddr.mRunNumber")->GetLeaf("mRunNumber")->GetValue() == runNumber ) {
00077 mEventIndex = i;
00078 mRunNumber = (int)mTTree->GetBranch("EvtHddr.mRunNumber")->GetLeaf("mRunNumber")->GetValue();
00079 mEventNumber = (int)mTTree->GetBranch("EvtHddr.mEventNumber")->GetLeaf("mEventNumber")->GetValue();
00080 break;
00081 }
00082 }
00083 return mEventIndex;
00084 }
00085
00086