ATLAS Offline Software
AFPHitsMonitorTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3 */
4 
9 
10 #include <xAODForward/AFPSiHit.h>
13 
16 #include <GaudiKernel/MsgStream.h>
17 #include <GaudiKernel/StatusCode.h>
18 
19 #include <LWHists/TH1F_LW.h>
20 #include <TH1.h>
21 #include <TProfile.h>
22 
24 AFPHitsMonitorTool( const std::string & type, const std::string & name,
25  const IInterface* parent )
27  m_histsDirectoryName ("AFP/"),
28  m_summaryManager(new AFPSiLayerSummaryManager),
29  m_lumiBlockMuTool("LumiBlockMuTool/LumiBlockMuTool")
30 {
31  declareProperty("stationsMonitors", m_stationsMonitors, "Array of station monitors.");
32  declareProperty("luminosityTool", m_lumiBlockMuTool, "Luminosity tool used for reading pile-up value.");
33 }
34 
35 
38 {
39  delete m_summaryManager;
40 }
41 
43 {
44  if (!m_stationsMonitors.empty()) {
45  // loop over tools
46  for (ToolHandle<IAFPSiStationMonitor>& stationMon : m_stationsMonitors) {
47  if (stationMon.retrieve().isFailure())
48  ATH_MSG_WARNING("Failed to retrieve AlgTool " << stationMon);
49  else
50  stationMon->setAllLayersParent(this);
51  }
52  }
53  else {
54  ATH_MSG_ERROR("No station monitors defined. Aborting.");
55  return StatusCode::FAILURE;
56  }
57 
58 
59  ATH_CHECK(m_lumiBlockMuTool.retrieve());
60 
62 
63  ManagedMonitorToolBase::MonGroup managedBookingLumiBlock(this, histsDirectoryName() + "shifter/", lumiBlock, ManagedMonitorToolBase::ATTRIB_MANAGED); // to re-booked every luminosity block
64  AFPSiLayerSummaryProfileBase* timeOverThresholdMean = m_summaryManager->createSummaryHits(this,
65  managedBookingLumiBlock,
66  "h_timeOverThresholdMeanp",
67  "Mean hitstime over threshold per plane",
69  timeOverThresholdMean->profile()->SetYTitle("mean time-over-threshold");
70 
71  AFPSiLayerSummaryProfileBase* hitsPerPlaneScaledMean =
73  managedBookingLumiBlock,
74  "h_hitsPerPlaneScaledMean",
75  "Mean number of hits in an event per plane",
77  hitsPerPlaneScaledMean->profile()->SetYTitle("Mean number of hits in an event.");
78 
79  AFPSiLayerSummaryProfileBase* hitsPerPlaneScaledHotSpotMean =
81  managedBookingLumiBlock,
82  "h_hitsPerPlaneScaledHotSpotMean",
83  "Mean number of hits in a hotspot in an event per plane",
85  hitsPerPlaneScaledHotSpotMean->profile()->SetYTitle("Mean number of hits in hotspot in an event");
86 
87  ATH_CHECK( m_afpHitContainerKey.initialize() );
88 
89  return StatusCode::SUCCESS;
90 }
91 
92 // Description: Used for rebooking unmanaged histograms
94 {
95  return StatusCode::SUCCESS;
96 }
97 
98 // Description: Used for re-booking managed histograms
100 {
101  for (ToolHandle<IAFPSiStationMonitor>& station : m_stationsMonitors)
102  station->bookHistograms(this);
103 
105 
106  return StatusCode::SUCCESS;
107 }
108 
110 {
112 
113  for (const xAOD::AFPSiHit* hit : *afpHitContainer) {
114  bool matchStation = false;
115  for (ToolHandle<IAFPSiStationMonitor>& station : m_stationsMonitors)
116  if (station->stationID() == hit->stationID()) {
117  station->fillHistograms(*hit);
118  matchStation = true;
119  break;
120  }
121 
122  if (!matchStation)
123  ATH_MSG_WARNING("Unrecognised station index: "<<hit->stationID());
124  }
125 
126 
127  for (ToolHandle<IAFPSiStationMonitor>& station : m_stationsMonitors)
128  station->eventEnd();
129 
130  return StatusCode::SUCCESS;
131 }
132 
133 
134 void AFPHitsMonitorTool::makeLayerSummaryHist (const std::string& inputHistName, const std::string& outputHistName, const std::string& outputHistTitle)
135 {
136  ManagedMonitorToolBase::MonGroup managedBookingLumiBlock(this, histsDirectoryName(), lumiBlock, ManagedMonitorToolBase::ATTRIB_MANAGED); // to re-booked every luminosity block
137 
138  // make histogram
139  int totalPlanes = 0;
140  for (const ToolHandle<IAFPSiStationMonitor>& station : m_stationsMonitors)
141  totalPlanes += station->layersMonitors().size();
142 
143  TProfile* outputHist = new TProfile(outputHistName.data(),
144  outputHistTitle.data(),
145  totalPlanes, - 0.5, totalPlanes + 0.5);
146 
147  regHist( outputHist, managedBookingLumiBlock ).ignore();
148 
149  TAxis* axis = outputHist->GetXaxis();
150  int binCounter = 1;
151  for (const ToolHandle<IAFPSiStationMonitor>& station : m_stationsMonitors)
152  for (const ToolHandle<IAFPSiLayerMonitor>& layer : station->layersMonitors()) {
153  std::stringstream binName;
154  binName<<"st."<<station->stationID();
155  binName<<"/lay."<<layer->layerID();
156  axis->SetBinLabel (binCounter, binName.str().data());
157  TH1* hist = nullptr;
158  if (getHist(hist, layer->makeHistName(inputHistName), layer->histsDirName(), lumiBlock).isSuccess()) {
159  const double mean = hist->GetMean()*hist->GetEntries();
160 
161  const double errorSq = hist->GetMeanError()*hist->GetMeanError();
162  const double entriesSq = hist->GetEntries()*hist->GetEntries();
163  const double valueSq = mean * mean;
164  const double meanError = sqrt( errorSq*entriesSq + (valueSq/hist->GetEntries()) );
165 
166  outputHist->SetBinEntries(binCounter, hist->GetEntries());
167  outputHist->SetBinContent(binCounter, mean);
168  outputHist->SetBinError(binCounter, meanError);
169  }
170  else
171  ATH_MSG_WARNING ("Missing "<<layer->makeHistName(inputHistName)<<" does not exist, but is needed for a summary.");
172 
173 
174  ++binCounter;
175  }
176 } // close m_hitsPerPlaneSummary
177 
178 
179 
181 {
182  if( endOfLumiBlockFlag() ) {
183 
184  for (ToolHandle<IAFPSiStationMonitor>& station : m_stationsMonitors)
185  station->endOfLumiBlock(this);
186  }
187 
188 
189  // if ( endOfEventsBlockFlag() ) {
190  // }
191 
192  // if ( endOfRunFlag() ) {
193  // }
194 
195  return StatusCode::SUCCESS;
196 }
197 
198 
ReadHandleKey.h
Property holding a SG store/key/clid from which a ReadHandle is made.
IAFPSiLayerMonitor.h
TH1F_LW.h
ManagedMonitorToolBase::getHist
virtual StatusCode getHist(TH1 *&h, const std::string &hName, const std::string &system, Interval_t interval)
Returns a TH1 via the pointer passed as the first argument.
Definition: ManagedMonitorToolBase.cxx:1589
AFPSiLayerSummaryProfileBase
Base class for summary distributions (showing mean value for each plane)
Definition: AFPSiLayerSummaryProfileBase.h:20
mean
void mean(std::vector< double > &bins, std::vector< double > &values, const std::vector< std::string > &files, const std::string &histname, const std::string &tplotname, const std::string &label="")
Definition: dependence.cxx:254
AFPHitsMonitorTool.h
ManagedMonitorToolBase::lumiBlock
@ lumiBlock
Definition: ManagedMonitorToolBase.h:114
ManagedMonitorToolBase
Provides functionality for users to implement and save histograms, ntuples, and summary data,...
Definition: ManagedMonitorToolBase.h:74
AFPHitsMonitorTool::~AFPHitsMonitorTool
virtual ~AFPHitsMonitorTool()
Deletes m_summaryManager.
Definition: AFPHitsMonitorTool.cxx:37
IAFPSiStationMonitor.h
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
ManagedMonitorToolBase::endOfLumiBlockFlag
bool endOfLumiBlockFlag() const
Definition: ManagedMonitorToolBase.h:858
AFPHitsMonitorTool::m_afpHitContainerKey
SG::ReadHandleKey< xAOD::AFPSiHitContainer > m_afpHitContainerKey
Definition: AFPHitsMonitorTool.h:121
AFPHitsMonitorTool::bookHistogramsRecurrent
StatusCode bookHistogramsRecurrent() override
Does nothing.
Definition: AFPHitsMonitorTool.cxx:93
plotmaker.hist
hist
Definition: plotmaker.py:148
AFPHitsMonitorTool::bookHistograms
StatusCode bookHistograms() override
Books all histograms with proper configuration.
Definition: AFPHitsMonitorTool.cxx:99
yodamerge_tmp.axis
list axis
Definition: yodamerge_tmp.py:241
CSV_InDetExporter.new
new
Definition: CSV_InDetExporter.py:145
xAOD::AFPSiHit_v2
Class representing a hit in silicon detector.
Definition: AFPSiHit_v2.h:30
IAFPSiLayerMonitor::hitsInEventHotSpotScaled
virtual double hitsInEventHotSpotScaled() const =0
Number of hits in hot-spot corrected for pile-up.
AFPSiLayerSummaryManager
Class managing (booking and filling) summary distributions.
Definition: AFPSiLayerSummaryManager.h:23
ManagedMonitorToolBase::MonGroup
A container of information describing a monitoring object.
Definition: ManagedMonitorToolBase.h:138
AFPHitsMonitorTool::histsDirectoryName
std::string histsDirectoryName()
name of directory to store histograms
Definition: AFPHitsMonitorTool.h:74
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ManagedMonitorToolBase::initialize
virtual StatusCode initialize()
Definition: ManagedMonitorToolBase.cxx:669
AFPHitsMonitorTool::procHistograms
StatusCode procHistograms() override
Calls AFPSiStationMonitor::endOfLumiblock();.
Definition: AFPHitsMonitorTool.cxx:180
python.TrigEgammaMonitorHelper.TProfile
def TProfile(*args, **kwargs)
Definition: TrigEgammaMonitorHelper.py:81
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
AFPHitsMonitorTool::m_stationsMonitors
ToolHandleArray< IAFPSiStationMonitor > m_stationsMonitors
Array of tools for monitoring one station (configurable in python)
Definition: AFPHitsMonitorTool.h:90
AFPSiLayerSummaryManager::book
void book() const
Executes AFPSiLayerSummaryProfileBase::book() method on all objects in AFPSiLayerSummaryManager::m_ba...
Definition: AFPSiLayerSummaryManager.cxx:15
AFPStationID.h
Definitions of AFP stations identification numbers.
test_pyathena.parent
parent
Definition: test_pyathena.py:15
AthenaMonManager.h
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
ManagedMonitorToolBase::ATTRIB_MANAGED
@ ATTRIB_MANAGED
Definition: ManagedMonitorToolBase.h:131
AFPSiHit.h
AFPSiLayerSummaryManager::createSummaryEventEnd
AFPSiLayerSummaryProfileBase * createSummaryEventEnd(AFPHitsMonitorTool *parentTool, const ManagedMonitorToolBase::MonGroup &monGrp, const std::string &name, const std::string &title, T(IAFPSiLayerMonitor::*value)() const)
Creates a new monitoring object of type AFPSiLayerSummaryProfileEventEnd adds to AFPSiLayerSummaryMan...
Definition: AFPSiLayerSummaryManager.h:133
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
AFPHitsMonitorTool::m_lumiBlockMuTool
ToolHandle< ILumiBlockMuTool > m_lumiBlockMuTool
Tool handle to tool providing information about luminosity e.g. pile-up.
Definition: AFPHitsMonitorTool.h:101
TProfile
Definition: rootspy.cxx:515
AFPHitsMonitorTool::fillHistograms
StatusCode fillHistograms() override
Fills all histograms.
Definition: AFPHitsMonitorTool.cxx:109
xAOD::AFPSiHit_v2::timeOverThreshold
float timeOverThreshold() const
Time over threshold of signal for a pixel.
AFPSiHitContainer.h
AFPHitsMonitorTool::m_summaryManager
AFPSiLayerSummaryManager * m_summaryManager
Object managing summary histograms.
Definition: AFPHitsMonitorTool.h:98
CalculateHighPtTerm.outputHist
outputHist
Definition: ICHEP2016/CalculateHighPtTerm.py:49
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
TH1
Definition: rootspy.cxx:268
AFPSiLayerSummaryManager::createSummaryHits
AFPSiLayerSummaryProfileBase * createSummaryHits(AFPHitsMonitorTool *parentTool, const ManagedMonitorToolBase::MonGroup &monGrp, const std::string &name, const std::string &title, T(xAOD::AFPSiHit::*value)() const)
Creates a new monitoring object of type AFPSiLayerSummaryProfileHit adds to AFPSiLayerSummaryManager:...
Definition: AFPSiLayerSummaryManager.h:93
AFPHitsMonitorTool::AFPHitsMonitorTool
AFPHitsMonitorTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor declaring python properties and creating subobjects.
Definition: AFPHitsMonitorTool.cxx:24
AFPHitsMonitorTool::initialize
StatusCode initialize() override
Prepares and configures the tool.
Definition: AFPHitsMonitorTool.cxx:42
AFPHitsMonitorTool::makeLayerSummaryHist
void makeLayerSummaryHist(const std::string &inputHistName, const std::string &outputHistName, const std::string &outputHistTitle)
Use only if you are sure you know what you are doing.
Definition: AFPHitsMonitorTool.cxx:134
AFPSiLayerSummaryProfileBase::profile
TProfile * profile()
Returns the profile object m_profile.
Definition: AFPSiLayerSummaryProfileBase.h:35
ManagedMonitorToolBase::regHist
virtual StatusCode regHist(TH1 *h, const std::string &system, Interval_t interval, MgmtAttr_t histo_mgmt=ATTRIB_MANAGED, const std::string &chain="", const std::string &merge="")
Registers a TH1 (including TH2, TH3, and TProfile) to be included in the output stream using logical ...
Definition: ManagedMonitorToolBase.cxx:1454
AFPSiLayerSummaryManager.h
IAFPSiLayerMonitor::hitsInEventScaled
virtual double hitsInEventScaled() const =0
Returns number of pixels fired in an event corrected for pile-up.