00001 #include "FastTrigReadSimTool.h"
00002 #include "Context/TimeStamp.h"
00003 #include "Conventions/Trigger.h"
00004 #include "MuonProphet/MpTriggerStat.h"
00005 #include "MuonProphet/MpMuonFate.h"
00006 #include "Event/IHeader.h"
00007 #include "Event/GenHeader.h"
00008
00009 using namespace DayaBay;
00010
00011 FastTrigReadSimTool::FastTrigReadSimTool(const std::string& type,
00012 const std::string& name,
00013 const IInterface* parent)
00014 : GaudiTool(type,name,parent)
00015 {
00016 declareInterface< IFastTrigReadSimTool >(this) ;
00017 }
00018
00019 FastTrigReadSimTool::~FastTrigReadSimTool()
00020 {}
00021
00022 StatusCode FastTrigReadSimTool::initialize()
00023 {
00024 return StatusCode::SUCCESS;
00025 }
00026
00027 StatusCode FastTrigReadSimTool::finalize()
00028 {
00029 return StatusCode::SUCCESS;
00030 }
00031
00032
00033 StatusCode FastTrigReadSimTool::mutate(SimReadoutHeader* sroHeader,
00034 SimTrigHeader* stHeader,
00035 const ElecHeader& elecHeader)
00036 {
00037 SimTrigCommandHeader* trigCommandHdr = new SimTrigCommandHeader;
00038 SimTrigCommandCollection* tcc = new SimTrigCommandCollection;
00039 trigCommandHdr->addCollection( tcc );
00040
00041 std::vector<SimReadout*> readouts;
00042 readouts.clear();
00043
00045 const IHeader* iSheader = (elecHeader.inputHeaders())[0];
00046 const IHeader* iGheader = (iSheader->inputHeaders()) [0];
00047 const GenHeader* genHeader = dynamic_cast<const GenHeader*>(iGheader);
00048 const HepMC::GenEvent* genEvent = genHeader->event();
00049
00050 HepMC::GenEvent::particle_const_iterator pci, pci_end = genEvent->particles_end();
00051
00052 for( pci = genEvent->particles_begin(); pci != pci_end; ++pci ) {
00053 if( (*pci)->pdg_id() == 13 || (*pci)->pdg_id() == -13 ) {
00054
00055 MpMuonFate fate( (*pci)->status() );
00057 if( fate.getRpcTriggerStat().getCode() == MpTriggerStat::kTriggered ||
00058 fate.getPoolTriggerStat().getCode() == MpTriggerStat::kTriggered ) {
00059
00061
00062
00063
00064 Site::Site_t siteId = elecHeader.context().GetSite();
00065 DetectorId::DetectorId_t detId = DetectorId::kUnknown;
00066 Detector det(siteId,detId);
00067
00069 Trigger::TriggerType_t type = Trigger::kUnknown;
00070
00072 SimTrigCommand *tc = new SimTrigCommand(det,type,0);
00073 std::vector<SimTrigCommand *> vtc;
00074 vtc.push_back(tc);
00075 SimTrigCommandCollection* tcc = new SimTrigCommandCollection( trigCommandHdr, det, vtc );
00076 trigCommandHdr -> addCollection( tcc );
00077
00078 SimReadout* pSimRO = new SimReadout;
00079 readouts.push_back( pSimRO );
00080
00081 Readout* pRO = new Readout;
00082 pRO -> setTriggerTime( elecHeader.earliest() );
00083 pRO -> setDetector( det );
00084 pSimRO -> setReadout( pRO );
00085 pSimRO -> setHeader( sroHeader );
00086 }
00087 }
00088 }
00089
00091 stHeader -> setCommandHeader( trigCommandHdr );
00092 trigCommandHdr -> setHeader( stHeader );
00093
00094 sroHeader->setReadouts( readouts );
00095
00096 return StatusCode::SUCCESS;
00097 }