00001 #include "otsdaq-core/MonicelliInterface/MonicelliFileReader.h"
00002
00003 #include "otsdaq-core/MonicelliInterface/Event.h"
00004 #include "otsdaq-core/MonicelliInterface/EventHeader.h"
00005 #include "otsdaq-core/MonicelliInterface/Geometry.h"
00006
00007 #include <TFile.h>
00008 #include <TTree.h>
00009 #include <TBranch.h>
00010
00011 using namespace ots;
00012
00013
00014 MonicelliFileReader::MonicelliFileReader(void) :
00015 argv (1),
00016 argc (new char*[1]),
00017 theApp_ ("MonicelliFileReaderApplication",&argv,argc),
00018 theGeoFile_ (0),
00019 theEventsFile_ (0),
00020 inputGeometryTree_(0),
00021 inputEventTree_ (0),
00022 inputEventHeader_ (0),
00023 theEvent_ (new monicelli::Event()),
00024 theEventHeader_ (new monicelli::EventHeader()),
00025 theGeometry_ (new monicelli::Geometry()),
00026 theEventBranch_ (0),
00027 theEventTree_ (0)
00028 {
00029 }
00030
00031
00032 MonicelliFileReader::~MonicelliFileReader(void)
00033 {
00034 delete theEvent_ ;
00035 delete theGeometry_ ;
00036 delete theEventHeader_;
00037 }
00038
00039
00040 bool MonicelliFileReader::openGeoFile(std::string fileName)
00041 {
00042 inputGeometryTree_ = 0;
00043 closeGeoFile();
00044 std::cout << __COUT_HDR_FL__ << __PRETTY_FUNCTION__ << "Opening file " << fileName << std::endl;
00045 TFile* theGeoFile_ = TFile::Open(fileName.c_str(), "read");
00046 if( !theGeoFile_->IsOpen() )
00047 {
00048 std::cout << __COUT_HDR_FL__ << __PRETTY_FUNCTION__ << "Can't open file " << fileName << std::endl;
00049 return false;
00050 }
00051
00052 const std::string geometryTreeName = "Geometry";
00053 if ( (TTree*)theGeoFile_->Get(geometryTreeName.c_str()) )
00054 {
00055 inputGeometryTree_ = (TTree*)theGeoFile_->Get(geometryTreeName.c_str());
00056 inputGeometryTree_->SetBranchAddress("GeometryBranch", &theGeometry_);
00057 inputGeometryTree_->GetEntry(0);
00058 }
00059 return (inputGeometryTree_ != 0);
00060 }
00061
00062
00063 bool MonicelliFileReader::openEventsFile(std::string fileName)
00064 {
00065 inputEventTree_ = 0;
00066 inputEventHeader_ = 0;
00067
00068 closeEventsFile();
00069 std::cout << __COUT_HDR_FL__ << __PRETTY_FUNCTION__ << "Opening file " << fileName << std::endl;
00070 TFile* theEventsFile_ = TFile::Open(fileName.c_str(), "read");
00071 if( !theEventsFile_->IsOpen() )
00072 {
00073 std::cout << __COUT_HDR_FL__ << __PRETTY_FUNCTION__ << "Can't open file " << fileName << std::endl;
00074 return false;
00075 }
00076
00077 std::string eventsTreeName = fileName + "Events";
00078 std::string eventsHeaderName = fileName + "Header";
00079 if( (inputEventTree_ = (TTree*)theEventsFile_->Get(eventsTreeName.c_str())) )
00080 {
00081 inputEventTree_->SetBranchAddress("EventBranch", &theEvent_);
00082 inputEventTree_->GetEntry(0);
00083
00084 if( (inputEventHeader_ = (TTree*)theEventsFile_->Get(eventsHeaderName.c_str())) )
00085 {
00086 inputEventHeader_->SetBranchAddress("EventHeader", &theEventHeader_);
00087 inputEventHeader_->GetEntry(0);
00088 }
00089 }
00090
00091 if( !inputEventTree_ )
00092 {
00093 std::cout << __COUT_HDR_FL__ << __PRETTY_FUNCTION__ << "Can't find any tree in " << fileName << std::endl;
00094 return false; ;
00095 }
00096 return true;
00097 }
00098
00099
00100 void MonicelliFileReader::closeGeoFile(void)
00101 {
00102 if(theGeoFile_)
00103 {
00104 theGeoFile_->Close();
00105 theGeoFile_ = 0;
00106 }
00107 }
00108
00109
00110 void MonicelliFileReader::closeEventsFile(void)
00111 {
00112 if(theEventsFile_)
00113 {
00114 theEventsFile_->Close();
00115 theEventsFile_ = 0;
00116 }
00117 }
00118
00119
00120 unsigned int MonicelliFileReader::getNumberOfEvents(void)
00121 {
00122 if(inputEventTree_)
00123 return inputEventTree_->GetEntries();
00124 return 0;
00125 }
00126
00127
00128 void MonicelliFileReader::readEvent(unsigned int event)
00129 {
00130 if(inputEventTree_)
00131 inputEventTree_->GetEntry(event);
00132 }
00133
00134
00135 monicelli::Event* MonicelliFileReader::getEventPointer(void)
00136 {
00137 return theEvent_;
00138 }
00139
00140
00141 monicelli::EventHeader* MonicelliFileReader::getEventHeaderPointer(void)
00142 {
00143 return theEventHeader_;
00144 }
00145
00146
00147 monicelli::Geometry* MonicelliFileReader::getGeometryPointer(void)
00148 {
00149 return theGeometry_;
00150 }