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

In This Package:

TsExternalTriggerTool.cc

Go to the documentation of this file.
00001 #include "TsExternalTriggerTool.h"
00002 
00003 #include "Conventions/Site.h"
00004 
00005 #include "Event/ElecCrateHeader.h"
00006 #include "Event/ElecFeeCrate.h"
00007 
00008 #include "Event/SimTrigCommand.h"
00009 #include "Event/SimTrigCommandHeader.h"
00010 #include "Event/SimTrigCommandCollection.h"
00011 #include "CLHEP/Units/SystemOfUnits.h"
00012 
00013 TsExternalTriggerTool::TsExternalTriggerTool(const std::string& type,
00014                                              const std::string& name, 
00015                                              const IInterface* parent)
00016     : GaudiTool(type,name,parent)
00017 {
00018   declareInterface< ITsTriggerTool >(this) ;
00019   // for now add all but RPC's as default.
00020   m_detectorsToProcess.push_back("DayaBayAD1");
00021   m_detectorsToProcess.push_back("DayaBayAD2");
00022   m_detectorsToProcess.push_back("DayaBayIWS");
00023   m_detectorsToProcess.push_back("DayaBayOWS");
00024   m_detectorsToProcess.push_back("LingAoAD1");
00025   m_detectorsToProcess.push_back("LingAoAD2");
00026   m_detectorsToProcess.push_back("LingAoIWS");
00027   m_detectorsToProcess.push_back("LingAoOWS"); 
00028   m_detectorsToProcess.push_back("FarAD1");
00029   m_detectorsToProcess.push_back("FarAD2");
00030   m_detectorsToProcess.push_back("FarAD3");
00031   m_detectorsToProcess.push_back("FarAD4");
00032   m_detectorsToProcess.push_back("FarIWS");
00033   m_detectorsToProcess.push_back("FarOWS");
00034   
00035   declareProperty("DetectorsToProcess",m_detectorsToProcess,
00036                   "List of detectors to process with this tool");
00037   declareProperty("TriggerOffset",m_triggerOffset=24,
00038                   "Adjustable trigger offset for external triggering, in trigger clock cycles");
00039   declareProperty("Frequency",m_frequency=1.0*CLHEP::hertz,
00040                   "Frequency of external triggering");
00041   declareProperty("AutoSet",m_autoSet=true,
00042                   "Auto-set the external triggering based on electronics simulation input");
00043 }
00044 
00045 TsExternalTriggerTool::~TsExternalTriggerTool(){}
00046 
00047 StatusCode TsExternalTriggerTool::initialize()
00048 {
00049   return StatusCode::SUCCESS;
00050 }
00051 
00052 StatusCode TsExternalTriggerTool::finalize()
00053 {
00054   return StatusCode::SUCCESS;
00055 }
00056 
00057 StatusCode TsExternalTriggerTool::mutate(DayaBay::SimTrigHeader* trigHeader,
00058                                          const DayaBay::ElecHeader& elecHeader)
00059 {     
00060   debug() << "running mutate()" << endreq;
00061   DayaBay::SimTrigCommandHeader* trigCH 
00062      = const_cast<DayaBay::SimTrigCommandHeader*>(trigHeader->commandHeader());
00063   
00064   const DayaBay::ElecCrateHeader* crateHeader = elecHeader.crateHeader();
00065   DayaBay::ElecCrateHeader::CrateMap cmap = crateHeader->crates();
00066   DayaBay::ElecCrateHeader::CrateMap::iterator detIterator;
00067   
00068   std::vector<std::string>::iterator it;
00069   debug() << "processing " << m_detectorsToProcess.size() 
00070           << " detectors." << endreq;
00071   
00072   // loop over detectors 
00073   for(it = m_detectorsToProcess.begin(); 
00074       it != m_detectorsToProcess.end(); 
00075       ++it){
00076     short int detId =  DayaBay::Detector::siteDetPackedFromString(*it);
00077     DayaBay::Detector det(detId);
00078     debug() << "Processing " << *it << " which is " << det << endreq;
00079     
00080     // create and add a triggerCollection for this detector
00081     DayaBay::SimTrigCommandCollection *tcc 
00082       = new DayaBay::SimTrigCommandCollection();
00083     tcc->setHeader(trigCH);
00084     tcc->setDetector(det);
00085     trigCH->addCollection(tcc);
00086     detIterator = cmap.find(det);
00087     if(detIterator != cmap.end()){
00088       // A crate was found for this detector
00089       debug() << "A crate was found for " << det 
00090               << " processing..." << endreq;
00091 
00092       int i = 0;
00093       if(m_autoSet){
00094         i = 0;
00095       }else{
00096         // FIXME: implement non-auto external triggering
00097         error() << "Non-auto external triggering not yet implemented." 
00098                 << endreq;
00099       }
00100       
00101       DayaBay::Trigger::TriggerType_t type = getTriggerType(det);
00102       i += m_triggerOffset;
00103       DayaBay::SimTrigCommand *tc = new DayaBay::SimTrigCommand(det,type,i,0,0,0);
00104       trigCH->addCommand(tc);
00105       debug() << "Adding Trigger at cycle\t" <<  i
00106               << " With type " << type <<  endreq;
00107     }// end if crate exists
00108   }
00109   return StatusCode::SUCCESS;                               
00110 }
00111 
00112 DayaBay::Trigger::TriggerType_t TsExternalTriggerTool::getTriggerType(DayaBay::Detector det){
00113   DayaBay::Trigger::TriggerType_t type = DayaBay::Trigger::kUnknown;
00114   if(det.detectorId() == DetectorId::kAD1) type = DayaBay::Trigger::kAD1;
00115   if(det.detectorId() == DetectorId::kAD2) type = DayaBay::Trigger::kAD2;
00116   if(det.detectorId() == DetectorId::kAD3) type = DayaBay::Trigger::kAD3;
00117   if(det.detectorId() == DetectorId::kAD4) type = DayaBay::Trigger::kAD4;
00118   if(det.detectorId() == DetectorId::kIWS) type = DayaBay::Trigger::kIWS;
00119   if(det.detectorId() == DetectorId::kOWS) type = DayaBay::Trigger::kOWS;
00120   return DayaBay::Trigger::TriggerType_t(DayaBay::Trigger::kExternal | type); 
00121 }
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:50:03 2011 for TrigSim by doxygen 1.4.7