Newer
Older
TB_Chris / TbAlgorithms / src / .svn / text-base / TbTriggerMonitor.cpp.svn-base
  1. // Gaudi
  2. #include "GaudiUtils/HistoLabels.h"
  3.  
  4. // Tb/TbEvent
  5. #include "Event/TbTrigger.h"
  6.  
  7. // Local
  8. #include "TbTriggerMonitor.h"
  9.  
  10. using namespace Gaudi::Utils::Histos;
  11.  
  12. DECLARE_ALGORITHM_FACTORY(TbTriggerMonitor)
  13.  
  14. //=============================================================================
  15. // Standard constructor
  16. //=============================================================================
  17. TbTriggerMonitor::TbTriggerMonitor(const std::string& name,
  18. ISvcLocator* pSvcLocator)
  19. : TbAlgorithm(name, pSvcLocator),
  20. m_parTriggersInEvent("", 0., 1000., 200),
  21. m_nEvents(0) {
  22.  
  23. declareProperty("TriggerLocation",
  24. m_triggerLocation = LHCb::TbTriggerLocation::Default);
  25. declareProperty("ParametersTriggersInEvent", m_parTriggersInEvent);
  26. }
  27.  
  28. //=============================================================================
  29. // Destructor
  30. //=============================================================================
  31. TbTriggerMonitor::~TbTriggerMonitor() {}
  32.  
  33. //=============================================================================
  34. // Initialisation
  35. //=============================================================================
  36. StatusCode TbTriggerMonitor::initialize() {
  37.  
  38. // Initialise the base class.
  39. StatusCode sc = TbAlgorithm::initialize();
  40. if (sc.isFailure()) return sc;
  41. m_missedTriggers.resize(m_nPlanes);
  42. m_counter.resize(m_nPlanes);
  43. m_counter.resize(m_nPlanes, 0);
  44. for (unsigned int i = 0; i < m_nPlanes; ++i) {
  45. const std::string plane = std::to_string(i);
  46. std::string name = "TimeBetweenTriggers";
  47. std::string title = "Plane " + plane;
  48. m_hTimeBetweenTriggers.push_back(book1D(name, title, 0., 500., 200));
  49. setAxisLabels(m_hTimeBetweenTriggers[i], "#Deltat [ns]", "entries");
  50. unsigned int bins = m_parTriggersInEvent.bins();
  51. double low = m_parTriggersInEvent.lowEdge();
  52. double high = m_parTriggersInEvent.highEdge();
  53. name = "TriggersInEvent/Plane" + plane;
  54. m_hTriggersInEvent.push_back(book1D(name, title, low, high, bins));
  55. setAxisLabels(m_hTriggersInEvent[i], "number of triggers", "events");
  56. name = "TriggersInEventTrend/Plane" + plane;
  57. m_hTriggersInEventTrend.push_back(book1D(name, title, -0.5, 999.5, 1000));
  58. setAxisLabels(m_hTriggersInEventTrend[i], "event", "number of hits");
  59. }
  60. return StatusCode::SUCCESS;
  61. }
  62.  
  63. StatusCode TbTriggerMonitor::finalize() {
  64. /*
  65. for( unsigned int i = 0 ; i < m_nPlanes; ++i){
  66.  
  67. std::vector<std::pair<uint64_t, uint64_t>> summary = m_missedTriggers[i];
  68. if( summary.size() != 0 ){
  69. info() << "Trigger jumps on plane " << i << endmsg;;
  70. for( std::vector<std::pair<uint64_t, uint64_t >>::iterator jump =
  71. summary.begin(); jump != summary.end(); ++jump ){
  72.  
  73. info() << "Trigger jumps from " << jump->second << " to " <<
  74. jump->first << endmsg;
  75. }
  76. }
  77. }
  78. */
  79. return TbAlgorithm::finalize();
  80. }
  81.  
  82. //=============================================================================
  83. // Main execution
  84. //=============================================================================
  85. StatusCode TbTriggerMonitor::execute() {
  86.  
  87. for (unsigned int i = 0; i < m_nPlanes; ++i) {
  88. // Grab the triggers.
  89. const std::string ext = std::to_string(i);
  90. const std::string location = m_triggerLocation + ext;
  91. const LHCb::TbTriggers* triggers = getIfExists<LHCb::TbTriggers>(location);
  92. if (!triggers) return StatusCode::SUCCESS;
  93. m_hTriggersInEvent[i]->fill(triggers->size());
  94. m_hTriggersInEventTrend[i]->fill(m_nEvents, triggers->size());
  95. double tprev = 0.;
  96. LHCb::TbTriggers::const_iterator begin = triggers->begin();
  97. LHCb::TbTriggers::const_iterator end = triggers->end();
  98. for (LHCb::TbTriggers::const_iterator it = begin; it != end; ++it) {
  99. // Check for missed triggers.
  100. if ((*it)->counter() - m_counter[i] != 1 && m_counter[i] != 4095) {
  101. info() << "Counter on plane " << i << " jumps from " << m_counter[i]
  102. << " to " << (*it)->counter() << endmsg;
  103. }
  104. m_counter[i] = (*it)->counter();
  105. const double t = (*it)->htime();
  106.  
  107. if (it != begin) {
  108. m_hTimeBetweenTriggers[i]->fill(t - tprev);
  109. }
  110. tprev = t;
  111. counter("effFractionAssociated" + ext) += (*it)->associated();
  112. }
  113. }
  114. ++m_nEvents;
  115. return StatusCode::SUCCESS;
  116. }