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

In This Package:

ROsTriggerDataPackerTool.cc

Go to the documentation of this file.
00001 #include "ROsTriggerDataPackerTool.h"
00002 
00003 #include "Conventions/Electronics.h"
00004 #include "Event/SimTrigCommand.h"
00005 #include "Event/SimTrigCommandHeader.h"
00006 #include "Event/SimTrigCommandCollection.h"
00007 #include "Event/ReadoutTriggerDataPkg.h"
00008 #include "Event/ReadoutTriggerDataFrame.h"
00009 
00010 #include "CLHEP/Units/SystemOfUnits.h"
00011 
00012 #include <vector>
00013 #include <map>
00014 
00015 ROsTriggerDataPackerTool::ROsTriggerDataPackerTool(const std::string& type,
00016                                      const std::string& name, 
00017                                      const IInterface* parent)
00018   : GaudiTool(type,name,parent)
00019 {
00020   declareInterface< IROsTriggerDataPackerTool >(this) ;
00021   declareProperty("RecoveryTime",m_recoveryCycles=12,
00022                   "Number of (80 MHz) clock cycles for trigger recovery time");
00023   //declareProperty("ReadoutCycles",m_roCycles,
00024   //                "Clock Cycles to readout relative to reference");
00025 }
00026 
00027 ROsTriggerDataPackerTool::~ROsTriggerDataPackerTool(){}
00028 
00029 StatusCode ROsTriggerDataPackerTool::initialize()
00030 {
00031   debug() << "Initializing Trigger Data Packer" << endreq;
00032   return StatusCode::SUCCESS;
00033 }
00034 
00035 StatusCode ROsTriggerDataPackerTool::finalize()
00036 {
00037   debug() << "Finalizing Trigger Data Packer" << endreq;
00038   return StatusCode::SUCCESS;
00039 }
00040 
00041 StatusCode ROsTriggerDataPackerTool::fillDataPakages(std::vector<DayaBay::ReadoutTriggerDataPkg*>& dataPkgs,
00042                                                      const DayaBay::SimTrigHeader& trigHeader)
00043 {  
00044   debug() << "Packing Trigger Data" << endreq; 
00045   
00047   const DayaBay::SimTrigCommandHeader *tch = trigHeader.commandHeader();
00048   const DayaBay::SimTrigCommandHeader::detCollMap trigCollMap = tch->collections();
00049   
00050   DayaBay::SimTrigCommandHeader::detCollMap::const_iterator trigIt;  
00051   
00053   for(trigIt  = trigCollMap.begin(); trigIt != trigCollMap.end(); ++trigIt)
00054   {
00055     DayaBay::Detector det(trigIt->first);
00056     debug() << "found " << (trigIt->second)->commands().size() << " commands for " << det.detName() << endreq;
00057     
00058     DayaBay::SimTrigCommandCollection *triggerColl = trigIt->second ;
00059     const DayaBay::SimTrigCommandCollection::CommandContainer& detTriggers = triggerColl->commands();
00060     DayaBay::SimTrigCommandCollection::CommandContainer::const_iterator tcIt;
00061     
00062     DayaBay::ReadoutTriggerDataPkg *tdpkg = 0;
00063     int prevCycle=0;
00064     for(tcIt=detTriggers.begin();tcIt!=detTriggers.end();++tcIt){
00065          verbose() << "Trigger: " << **tcIt << endreq;
00066          verbose() << "Creating Trigger Data Frame" << endreq;
00068          DayaBay::ReadoutTriggerDataFrame *tdf = new DayaBay::ReadoutTriggerDataFrame();
00069          tdf->setCycle((*tcIt)->clockCycle());
00070          TimeStamp triggerTime( trigHeader.earliest() );
00071          triggerTime.Add((*tcIt)->clockCycle() / double(DayaBay::NhitFrequencyHz));
00072          tdf->setTriggerTime(triggerTime);
00073          tdf->setTriggerType((*tcIt)->type());
00074          tdf->setNhit((*tcIt)->nhit());
00075          tdf->setEsumAdc((*tcIt)->esumAdc());
00076          tdf->setEsumComp((*tcIt)->esumComp());
00077          
00078          //tdf->setReadoutType();
00079          //tdf->setCrossSource();
00080          //tdf->setSeqNumber();
00081          
00082          // done by addFrame() so don't set package here
00083          // tdf->setPackage() 
00084          
00085          int thiscycle = (*tcIt)->clockCycle();
00086          unsigned int dt = (unsigned int) (thiscycle-prevCycle);
00087          bool shouldBeMasked =  dt < m_recoveryCycles;
00088          
00090          if ( ! tdpkg || ! shouldBeMasked ){
00092              verbose() << "Creating a new trigger data package" << endreq;
00093              tdpkg = new DayaBay::ReadoutTriggerDataPkg();
00094              tdpkg->setDetector(det);
00095              tdpkg->addFrame(tdf);
00096              dataPkgs.push_back(tdpkg);
00097              prevCycle=thiscycle;
00098          }else{
00101              debug() << "Adding a masked trigger" << endreq;
00102              if(!tdpkg){
00103                  fatal() << "This should never happen!!!\n"
00104                      << "A trigger frame was produced "
00105                      << "with not package to put it in"
00106                      << endreq;
00107                  return StatusCode::FAILURE;
00108              }
00109              tdpkg->addFrame(tdf);
00110          }
00111          verbose() << "Done Packing Detector " << *tdpkg << endreq;
00112     }
00113     debug() << "Done Packing Triggers. " <<  endreq;
00114   }
00115   
00116   return StatusCode::SUCCESS;
00117 }
00118 
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:50:36 2011 for ReadoutSim by doxygen 1.4.7