00001 #include "otsdaq-core/MonicelliInterface/MonicelliEventAnalyzer.h"
00002 #include "otsdaq-core/MonicelliInterface/MonicelliFileReader.h"
00003 #include "otsdaq-core/MonicelliInterface/Visual3DEvent.h"
00004
00005 #include "otsdaq-core/MonicelliInterface/Event.h"
00006 #include "otsdaq-core/MonicelliInterface/Geometry.h"
00007 #include "otsdaq-core/MonicelliInterface/Detector.h"
00008
00009 using namespace ots;
00010
00011
00012 MonicelliEventAnalyzer::MonicelliEventAnalyzer(void)
00013 {}
00014
00015
00016 MonicelliEventAnalyzer::~MonicelliEventAnalyzer(void)
00017 {}
00018
00019
00020 void MonicelliEventAnalyzer::load(std::string fileName)
00021 {
00022 theVisualEvents_.clear();
00023 if(!theReader_.openEventsFile(fileName)) return;
00024 if(!theReader_.openGeoFile(fileName.replace(fileName.find('.')+1,4,"geo"))) return;
00025
00026 theMonicelliEvent_ = theReader_.getEventPointer () ;
00027 theMonicelliHeader_ = theReader_.getEventHeaderPointer() ;
00028 theMonicelliGeometry_ = theReader_.getGeometryPointer () ;
00029
00030 unsigned int numberOfEvents = theReader_.getNumberOfEvents() ;
00031 std::cout << __COUT_HDR_FL__ << __PRETTY_FUNCTION__ << "Number of events: " << numberOfEvents << std::endl;
00032 theVisualEvents_.resize(numberOfEvents);
00033 for(unsigned int event=0; event<numberOfEvents && event<1000; event++)
00034
00035 {
00036 theReader_.readEvent(event) ;
00037 this->analyzeEvent(event) ;
00038 }
00039 theReader_.closeGeoFile();
00040 theReader_.closeEventsFile();
00041 std::cout << __COUT_HDR_FL__ << __PRETTY_FUNCTION__ << "Done!" << std::endl;
00042 }
00043
00044
00045 const Visual3DEvents& MonicelliEventAnalyzer::getEvents(void)
00046 {
00047 return theVisualEvents_;
00048 }
00049
00050
00051 void MonicelliEventAnalyzer::analyzeEvent(unsigned int event)
00052 {
00053
00054
00055 monicelli::Event::clustersMapDef & clusters = theMonicelliEvent_->getClusters () ;
00056 monicelli::Event::fittedTracksDef & fittedTracks = theMonicelliEvent_->getFittedTracks () ;
00057
00058
00059
00060
00061 if( fittedTracks.size() == 0 ) return;
00062
00063 for(unsigned int tr=0; tr<fittedTracks.size(); tr++)
00064 {
00065 ROOT::Math::SVector<double,4> tParameters = fittedTracks[tr] ;
00066 VisualTrack tmpVisualTrack;
00067 tmpVisualTrack.slopeX = tParameters[0];
00068 tmpVisualTrack.interceptX = tParameters[1]*10;
00069 tmpVisualTrack.slopeY = tParameters[2];
00070 tmpVisualTrack.interceptY = tParameters[3]*10;
00071
00072 theVisualEvents_[event].addTrack(tmpVisualTrack);
00073 }
00074
00075 for(monicelli::Event::clustersMapDef::iterator itClusters=clusters.begin(); itClusters != clusters.end(); itClusters++)
00076 for(monicelli::Event::aClusterMapDef::iterator itClusterMap=itClusters->second.begin(); itClusterMap != itClusters->second.end(); itClusterMap++)
00077 {
00078 VisualHit tmpVisualHit;
00079 tmpVisualHit.x = itClusterMap->second["x"];
00080 tmpVisualHit.y = itClusterMap->second["y"];
00081 tmpVisualHit.z = 0;
00082 tmpVisualHit.charge = itClusterMap->second["charge"];
00083
00084 monicelli::Detector* detector = theMonicelliGeometry_->getDetector(itClusters->first);
00085 detector->fromLocalToGlobal(&(tmpVisualHit.x),&(tmpVisualHit.y),&(tmpVisualHit.z));
00086 theVisualEvents_[event].addHit(tmpVisualHit*10);
00087
00088 }
00089 }