00001 //---------------------------------------------------------------------------// 00009 // 00010 00011 #include "BesTDSWriter.hh" 00012 #include "BesRawDataWriter.hh" 00013 #include "BesMcTruthWriter.hh" 00014 #include "G4Event.hh" 00015 00016 #include "GaudiKernel/IDataProviderSvc.h" 00017 #include "GaudiKernel/SmartDataPtr.h" 00018 #include "GaudiKernel/ISvcLocator.h" 00019 #include "GaudiKernel/Bootstrap.h" 00020 #include "EventModel/EventHeader.h" 00021 00022 BesTDSWriter::BesTDSWriter() 00023 { 00024 m_rawWriter = new BesRawDataWriter; 00025 m_mcWriter = new BesMcTruthWriter; 00026 } 00027 00028 BesTDSWriter::~BesTDSWriter() 00029 { 00030 if(m_rawWriter) 00031 delete m_rawWriter; 00032 if(m_mcWriter) 00033 delete m_mcWriter; 00034 } 00035 00036 void BesTDSWriter::SaveAll(const G4Event* evt, int runNumber) 00037 { 00038 //interface to event data service 00039 ISvcLocator* svcLocator = Gaudi::svcLocator(); 00040 IDataProviderSvc* evtSvc; 00041 StatusCode sc=svcLocator->service("EventDataSvc", evtSvc); 00042 if (sc.isFailure()) 00043 G4cout<<"Could not accesss EventDataSvc!"<<G4endl; 00044 00045 //save event head 00046 /* 00047 SmartDataPtr<Event::EventHeader> eventHeader(evtSvc,"/Event/EventHeader"); 00048 if (!eventHeader) { 00049 //G4cout<< "Could not find Event Header" << G4endl; 00050 Event::EventHeader *eventHeader = new Event::EventHeader; 00051 StatusCode sc = evtSvc->registerObject("/Event/EventHeader",eventHeader); 00052 } 00053 eventHeader->setEventNumber( evt->GetEventID() ); 00054 eventHeader->setRunNumber( runNumber ); 00055 */ 00056 //retrieve 00057 SmartDataPtr<Event::EventHeader> aEventHeader(evtSvc,"/Event/EventHeader"); 00058 G4int run=aEventHeader->runNumber(); 00059 G4int event=aEventHeader->eventNumber(); 00060 //G4cout<<"BesTDSWriter: runNumber: "<<run<<" eventNumber:"<<event<<G4endl; 00061 00062 00063 //save raw data 00064 m_rawWriter->SaveDigits(); 00065 00066 //save MC Truth 00067 m_mcWriter->SaveMcTruth(); 00068 00069 } 00070