| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

FastTrigReadSimTool.cc

Go to the documentation of this file.
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 )  {   // muon
00054 
00055         MpMuonFate fate( (*pci)->status() );    
00057         if( fate.getRpcTriggerStat().getCode() == MpTriggerStat::kTriggered ||
00058             fate.getPoolTriggerStat().getCode() == MpTriggerStat::kTriggered )  {
00059 
00061           /* According to current RootIO for readout, 
00062              for unknown detector, a Readout won't be converted to a data file.
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 }
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 21:02:22 2011 for FastTrigReadSim by doxygen 1.4.7