ATLAS Offline Software
TileMuIdMonitorAlgorithm.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3 */
4 
7 
8 #include "StoreGate/ReadHandle.h"
9 #include "AthenaKernel/Units.h"
10 
11 using Athena::Units::GeV;
12 using Athena::Units::ns;
13 
15 
16  ATH_MSG_INFO("in initialize()");
17 
18  ATH_CHECK( m_muContainerKey.initialize() );
19 
20  using namespace Monitored;
21 
22  int nL1Triggers = getNumberOfL1Triggers();
23 
24  m_muIdTagsGroups = buildToolMap<int>(m_tools, "TileMuIdTags", nL1Triggers);
25  m_muIdEnergyGroups = buildToolMap<int>(m_tools, "TileMuIdEnergy", nL1Triggers);
26  m_muIdEtaGroups = buildToolMap<int>(m_tools, "TileMuIdEta", nL1Triggers);
27  m_muIdPhiGroups = buildToolMap<int>(m_tools, "TileMuIdPhi", nL1Triggers);
28  m_muIdQualityGroups = buildToolMap<int>(m_tools, "TileMuIdQuality", nL1Triggers);
29  m_muIdEtaPhiGroups = buildToolMap<int>(m_tools, "TileMuIdEtaPhi", nL1Triggers);
30  m_muIdEneEtaGroups = buildToolMap<int>(m_tools, "TileMuIdEneEta", nL1Triggers);
31  m_muIdEnePhiGroups = buildToolMap<int>(m_tools, "TileMuIdEnePhi", nL1Triggers);
32  m_muIdEneQualityGroups = buildToolMap<int>(m_tools, "TileMuIdEneQuality", nL1Triggers);
33 
34  m_muId1TagEnergyGroups = buildToolMap<int>(m_tools, "TileMuId1TagEnergy", nL1Triggers);
35  m_muId1TagQualityGroups = buildToolMap<int>(m_tools, "TileMuId1TagQuality", nL1Triggers);
36  m_muId1TagEtaPhiGroups = buildToolMap<int>(m_tools, "TileMuId1TagEtaPhi", nL1Triggers);
37  m_muId1TagEtaGroups = buildToolMap<int>(m_tools, "TileMuId1TagEta", nL1Triggers);
38  m_muId1TagPhiGroups = buildToolMap<int>(m_tools, "TileMuId1TagPhi", nL1Triggers);
39  m_muId1TagEneQualityGroups = buildToolMap<int>(m_tools, "TileMuId1TagEneQuality", nL1Triggers);
40 
41  m_muId2TagEnergyGroups = buildToolMap<int>(m_tools, "TileMuId2TagEnergy", nL1Triggers);
42  m_muId2TagQualityGroups = buildToolMap<int>(m_tools, "TileMuId2TagQuality", nL1Triggers);
43  m_muId2TagEtaPhiGroups = buildToolMap<int>(m_tools, "TileMuId2TagEtaPhi", nL1Triggers);
44  m_muId2TagEtaGroups = buildToolMap<int>(m_tools, "TileMuId2TagEta", nL1Triggers);
45  m_muId2TagPhiGroups = buildToolMap<int>(m_tools, "TileMuId2TagPhi", nL1Triggers);
46  m_muId2TagEneQualityGroups = buildToolMap<int>(m_tools, "TileMuId2TagEneQuality", nL1Triggers);
47 
49 }
50 
51 
52 StatusCode TileMuIdMonitorAlgorithm::fillHistograms( const EventContext& ctx ) const {
53 
54 
55  // In case you want to measure the execution time
56  auto timer = Monitored::Timer("TIME_execute");
57 
58  const xAOD::EventInfo* eventInfo = GetEventInfo(ctx).get();
59 
60  // Indices of L1 trigger histograms to be filled in the current event
61  std::vector<int> l1TriggersIndices = getL1TriggerIndices(eventInfo->level1TriggerType());
62 
64  ATH_CHECK( muContainer.isValid() );
65 
66  int nTags = muContainer->size();
67  ATH_MSG_DEBUG( "Tile MuId nubmer of tags in the event: " << nTags );
68 
69  auto monNTags = Monitored::Scalar<int>("nTags", nTags);
70  for (int l1TriggerIdx : l1TriggersIndices) {
71  fill(m_tools[m_muIdTagsGroups[l1TriggerIdx]], monNTags);
72  }
73 
74  auto monEta = Monitored::Collection("eta", *muContainer, [] (const TileMu* mu) {return mu->eta();});
75  auto monPhi = Monitored::Collection("phi", *muContainer, [] (const TileMu* mu) {return mu->phi();});
76  auto monQuality = Monitored::Collection("quality", *muContainer, [] (const TileMu* mu) {return mu->quality();});
77  auto monEnergy = Monitored::Collection("energy", *muContainer,
78  [] (const TileMu* mu) {
79  return mu->enedep()[0] + mu->enedep()[1] + mu->enedep()[2];
80  });
81 
82  for (int l1TriggerIdx : l1TriggersIndices) {
83  fill(m_tools[m_muIdEnergyGroups[l1TriggerIdx]], monEnergy);
84  fill(m_tools[m_muIdEtaGroups[l1TriggerIdx]], monEta);
85  fill(m_tools[m_muIdPhiGroups[l1TriggerIdx]], monPhi);
86  fill(m_tools[m_muIdQualityGroups[l1TriggerIdx]], monQuality);
87  fill(m_tools[m_muIdEtaPhiGroups[l1TriggerIdx]], monEta, monPhi);
88  fill(m_tools[m_muIdEneEtaGroups[l1TriggerIdx]], monEta, monEnergy);
89  fill(m_tools[m_muIdEnePhiGroups[l1TriggerIdx]], monPhi, monEnergy);
90  fill(m_tools[m_muIdEneQualityGroups[l1TriggerIdx]], monEnergy, monQuality);
91  }
92 
93  if (nTags == 1) {
94  for (int l1TriggerIdx : l1TriggersIndices) {
95  fill(m_tools[m_muId1TagEnergyGroups[l1TriggerIdx]], monEnergy);
96  fill(m_tools[m_muId1TagQualityGroups[l1TriggerIdx]], monQuality);
97  fill(m_tools[m_muId1TagEtaPhiGroups[l1TriggerIdx]], monEta, monPhi);
98  fill(m_tools[m_muId1TagEtaGroups[l1TriggerIdx]], monEta, monEnergy);
99  fill(m_tools[m_muId1TagPhiGroups[l1TriggerIdx]], monPhi, monEnergy);
100  fill(m_tools[m_muId1TagEneQualityGroups[l1TriggerIdx]], monEnergy, monQuality);
101  }
102  } else if (nTags == 2) {
103  for (int l1TriggerIdx : l1TriggersIndices) {
104  fill(m_tools[m_muId2TagEnergyGroups[l1TriggerIdx]], monEnergy);
105  fill(m_tools[m_muId2TagQualityGroups[l1TriggerIdx]], monQuality);
106  fill(m_tools[m_muId2TagEtaPhiGroups[l1TriggerIdx]], monEta, monPhi);
107  fill(m_tools[m_muId2TagEtaGroups[l1TriggerIdx]], monEta, monEnergy);
108  fill(m_tools[m_muId2TagPhiGroups[l1TriggerIdx]], monPhi, monEnergy);
109  fill(m_tools[m_muId2TagEneQualityGroups[l1TriggerIdx]], monEnergy, monQuality);
110  }
111  }
112 
113  fill("TileMuIdMonExecuteTime", timer);
114 
115  return StatusCode::SUCCESS;
116 }
TileMonitorAlgorithm::getL1TriggerIndices
std::vector< int > getL1TriggerIndices(uint32_t lvl1TriggerType) const
Return indices of histograms to be filled according fired L1 trigger type.
Definition: TileMonitorAlgorithm.cxx:67
TileMuIdMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: TileMuIdMonitorAlgorithm.cxx:14
TileMuIdMonitorAlgorithm::m_muIdEneQualityGroups
std::vector< int > m_muIdEneQualityGroups
Definition: TileMuIdMonitorAlgorithm.h:40
TileMuIdMonitorAlgorithm::m_muIdEnePhiGroups
std::vector< int > m_muIdEnePhiGroups
Definition: TileMuIdMonitorAlgorithm.h:39
TileMuIdMonitorAlgorithm::m_muIdEneEtaGroups
std::vector< int > m_muIdEneEtaGroups
Definition: TileMuIdMonitorAlgorithm.h:38
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
TileMuIdMonitorAlgorithm::m_muId2TagEtaGroups
std::vector< int > m_muId2TagEtaGroups
Definition: TileMuIdMonitorAlgorithm.h:52
TileMuIdMonitorAlgorithm::m_muIdQualityGroups
std::vector< int > m_muIdQualityGroups
Definition: TileMuIdMonitorAlgorithm.h:36
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
TileMuIdMonitorAlgorithm::m_muId1TagEtaPhiGroups
std::vector< int > m_muId1TagEtaPhiGroups
Definition: TileMuIdMonitorAlgorithm.h:44
TileCalibUtils.h
TileMuIdMonitorAlgorithm::m_muId2TagEneQualityGroups
std::vector< int > m_muId2TagEneQualityGroups
Definition: TileMuIdMonitorAlgorithm.h:54
TileMuIdMonitorAlgorithm::m_muId2TagQualityGroups
std::vector< int > m_muId2TagQualityGroups
Definition: TileMuIdMonitorAlgorithm.h:50
TileMuIdMonitorAlgorithm::m_muId1TagEneQualityGroups
std::vector< int > m_muId1TagEneQualityGroups
Definition: TileMuIdMonitorAlgorithm.h:47
python.utils.AtlRunQueryTimer.timer
def timer(name, disabled=False)
Definition: AtlRunQueryTimer.py:86
Monitored::Collection
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
Definition: MonitoredCollection.h:38
TileMuIdMonitorAlgorithm::m_muIdEtaGroups
std::vector< int > m_muIdEtaGroups
Definition: TileMuIdMonitorAlgorithm.h:34
TileMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: TileMonitorAlgorithm.cxx:10
TileMuIdMonitorAlgorithm::fillHistograms
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
Definition: TileMuIdMonitorAlgorithm.cxx:52
TileMuIdMonitorAlgorithm::m_muId2TagEtaPhiGroups
std::vector< int > m_muId2TagEtaPhiGroups
Definition: TileMuIdMonitorAlgorithm.h:51
Monitored
Generic monitoring tool for athena components.
Definition: GenericMonitoringTool.h:30
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TileMuIdMonitorAlgorithm::m_muContainerKey
SG::ReadHandleKey< TileMuContainer > m_muContainerKey
Definition: TileMuIdMonitorAlgorithm.h:29
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
AthMonitorAlgorithm::fill
void fill(const ToolHandle< GenericMonitoringTool > &groupHandle, std::vector< std::reference_wrapper< Monitored::IMonitoredVariable >> &&variables) const
Fills a vector of variables to a group by reference.
AthMonitorAlgorithm::GetEventInfo
SG::ReadHandle< xAOD::EventInfo > GetEventInfo(const EventContext &) const
Return a ReadHandle for an EventInfo object (get run/event numbers, etc.)
Definition: AthMonitorAlgorithm.cxx:107
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
TileMuIdMonitorAlgorithm::m_muIdEnergyGroups
std::vector< int > m_muIdEnergyGroups
Definition: TileMuIdMonitorAlgorithm.h:33
AthMonitorAlgorithm::m_tools
ToolHandleArray< GenericMonitoringTool > m_tools
Array of Generic Monitoring Tools.
Definition: AthMonitorAlgorithm.h:338
TileMuIdMonitorAlgorithm::m_muId2TagPhiGroups
std::vector< int > m_muId2TagPhiGroups
Definition: TileMuIdMonitorAlgorithm.h:53
TileMuIdMonitorAlgorithm::m_muId1TagQualityGroups
std::vector< int > m_muId1TagQualityGroups
Definition: TileMuIdMonitorAlgorithm.h:43
TileMuIdMonitorAlgorithm.h
Units.h
Wrapper to avoid constant divisions when using units.
TileMuIdMonitorAlgorithm::m_muId1TagEtaGroups
std::vector< int > m_muId1TagEtaGroups
Definition: TileMuIdMonitorAlgorithm.h:45
xAOD::EventInfo_v1
Class describing the basic event information.
Definition: EventInfo_v1.h:43
TileMonitorAlgorithm::getNumberOfL1Triggers
int getNumberOfL1Triggers(void) const
Return number of L1 triggers for which histograms should be filled.
Definition: TileMonitorAlgorithm.h:66
TileMuIdMonitorAlgorithm::m_muId1TagEnergyGroups
std::vector< int > m_muId1TagEnergyGroups
Definition: TileMuIdMonitorAlgorithm.h:42
xAOD::EventInfo_v1::level1TriggerType
uint16_t level1TriggerType() const
The Level-1 trigger type.
TileMuIdMonitorAlgorithm::m_muIdTagsGroups
std::vector< int > m_muIdTagsGroups
Definition: TileMuIdMonitorAlgorithm.h:32
python.SystemOfUnits.ns
int ns
Definition: SystemOfUnits.py:130
TileMuIdMonitorAlgorithm::m_muIdPhiGroups
std::vector< int > m_muIdPhiGroups
Definition: TileMuIdMonitorAlgorithm.h:35
TileMuIdMonitorAlgorithm::m_muId2TagEnergyGroups
std::vector< int > m_muId2TagEnergyGroups
Definition: TileMuIdMonitorAlgorithm.h:49
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
ReadHandle.h
Handle class for reading from StoreGate.
TileMuIdMonitorAlgorithm::m_muIdEtaPhiGroups
std::vector< int > m_muIdEtaPhiGroups
Definition: TileMuIdMonitorAlgorithm.h:37
TileMuIdMonitorAlgorithm::m_muId1TagPhiGroups
std::vector< int > m_muId1TagPhiGroups
Definition: TileMuIdMonitorAlgorithm.h:46
CaloNoise_fillDB.mu
mu
Definition: CaloNoise_fillDB.py:53
GeV
#define GeV
Definition: CaloTransverseBalanceVecMon.cxx:30
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
Monitored::Timer
A monitored timer.
Definition: MonitoredTimer.h:32
TileMu
Class to store TileMuId quantities.
Definition: TileMu.h:25