ATLAS Offline Software
LUCID_HitsMoniTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include <sstream>
6 
7 #include "LUCID_HitsMoniTool.h"
8 
9 LUCID_HitsMoniTool::LUCID_HitsMoniTool(const std::string& type, const std::string& name, const IInterface* parent):
11 {
12 }
13 
15 
19  return StatusCode::SUCCESS;
20 }
21 
23 
24  ATH_MSG_DEBUG(" LUCID_HitsMoniTool::bookHistograms ");
25 
26  m_LUCID_Histos.clear();
27 
28  int nbin = m_nLucidTubes;
29 
30  m_LUCID_Histos.push_back(new TH1F("tube_occupancy_cBX", "Tube occupancy (current BX)" , nbin, -0.5, nbin - 0.5));
31  m_LUCID_Histos.push_back(new TH1F("tube_occupancy_pBX", "Tube occupancy (previous BX)", nbin, -0.5, nbin - 0.5));
32  m_LUCID_Histos.push_back(new TH1F("tube_occupancy_nBX", "Tube occupancy (next BX)" , nbin, -0.5, nbin - 0.5));
33 
34  m_LUCID_Histos.push_back(new TH1F("hitsPMT_cBX_sing_sideA", "Number of hitsPMT on sideA (single side mode, current BX)" , nbin + 1, -0.5, nbin + 0.5));
35  m_LUCID_Histos.push_back(new TH1F("hitsPMT_cBX_sing_sideC", "Number of hitsPMT on sideC (single side mode, current BX)" , nbin + 1, -0.5, nbin + 0.5));
36  m_LUCID_Histos.push_back(new TH1F("hitsPMT_cBX_sing_total", "Number of hitsPMT in total (single side mode, current BX)" , nbin + 1, -0.5, nbin + 0.5));
37 
38  m_LUCID_Histos.push_back(new TH1F("hitsPMT_cBX_coin_sideA", "Number of hitsPMT on sideA (coincidence mode, current BX)" , nbin + 1, -0.5, nbin + 0.5));
39  m_LUCID_Histos.push_back(new TH1F("hitsPMT_cBX_coin_sideC", "Number of hitsPMT on sideC (coincidence mode, current BX)" , nbin + 1, -0.5, nbin + 0.5));
40  m_LUCID_Histos.push_back(new TH1F("hitsPMT_cBX_coin_total", "Number of hitsPMT in total (coincidence mode, current BX)" , nbin + 1, -0.5, nbin + 0.5));
41 
42  m_LUCID_Histos.push_back(new TH1F("hitsFIB_cBX_sing_sideA", "Number of hitsFIB on sideA (single side mode, current BX)" , nbin + 1, -0.5, nbin + 0.5));
43  m_LUCID_Histos.push_back(new TH1F("hitsFIB_cBX_sing_sideC", "Number of hitsFIB on sideC (single side mode, current BX)" , nbin + 1, -0.5, nbin + 0.5));
44  m_LUCID_Histos.push_back(new TH1F("hitsFIB_cBX_sing_total", "Number of hitsFIB in total (single side mode, current BX)" , nbin + 1, -0.5, nbin + 0.5));
45 
46  m_LUCID_Histos.push_back(new TH1F("hitsFIB_cBX_coin_sideA", "Number of hitsFIB on sideA (coincidence mode, current BX)" , nbin + 1, -0.5, nbin + 0.5));
47  m_LUCID_Histos.push_back(new TH1F("hitsFIB_cBX_coin_sideC", "Number of hitsFIB on sideC (coincidence mode, current BX)" , nbin + 1, -0.5, nbin + 0.5));
48  m_LUCID_Histos.push_back(new TH1F("hitsFIB_cBX_coin_total", "Number of hitsFIB in total (coincidence mode, current BX)" , nbin + 1, -0.5, nbin + 0.5));
49 
50  m_LUCID_Histos.push_back(new TH1F("hitsPMT_pBX_sing_sideA", "Number of hitsPMT on sideA (single side mode, previous BX)", nbin + 1, -0.5, nbin + 0.5));
51  m_LUCID_Histos.push_back(new TH1F("hitsPMT_pBX_sing_sideC", "Number of hitsPMT on sideC (single side mode, previous BX)", nbin + 1, -0.5, nbin + 0.5));
52  m_LUCID_Histos.push_back(new TH1F("hitsPMT_pBX_sing_total", "Number of hitsPMT in total (single side mode, previous BX)", nbin + 1, -0.5, nbin + 0.5));
53 
54  m_LUCID_Histos.push_back(new TH1F("hitsPMT_pBX_coin_sideA", "Number of hitsPMT on sideA (coincidence mode, previous BX)", nbin + 1, -0.5, nbin + 0.5));
55  m_LUCID_Histos.push_back(new TH1F("hitsPMT_pBX_coin_sideC", "Number of hitsPMT on sideC (coincidence mode, previous BX)", nbin + 1, -0.5, nbin + 0.5));
56  m_LUCID_Histos.push_back(new TH1F("hitsPMT_pBX_coin_total", "Number of hitsPMT in total (coincidence mode, previous BX)", nbin + 1, -0.5, nbin + 0.5));
57 
58  m_LUCID_Histos.push_back(new TH1F("hitsFIB_pBX_sing_sideA", "Number of hitsFIB on sideA (single side mode, previous BX)", nbin + 1, -0.5, nbin + 0.5));
59  m_LUCID_Histos.push_back(new TH1F("hitsFIB_pBX_sing_sideC", "Number of hitsFIB on sideC (single side mode, previous BX)", nbin + 1, -0.5, nbin + 0.5));
60  m_LUCID_Histos.push_back(new TH1F("hitsFIB_pBX_sing_total", "Number of hitsFIB in total (single side mode, previous BX)", nbin + 1, -0.5, nbin + 0.5));
61 
62  m_LUCID_Histos.push_back(new TH1F("hitsFIB_pBX_coin_sideA", "Number of hitsFIB on sideA (coincidence mode, previous BX)", nbin + 1, -0.5, nbin + 0.5));
63  m_LUCID_Histos.push_back(new TH1F("hitsFIB_pBX_coin_sideC", "Number of hitsFIB on sideC (coincidence mode, previous BX)", nbin + 1, -0.5, nbin + 0.5));
64  m_LUCID_Histos.push_back(new TH1F("hitsFIB_pBX_coin_total", "Number of hitsFIB in total (coincidence mode, previous BX)", nbin + 1, -0.5, nbin + 0.5));
65 
66  m_LUCID_Histos.push_back(new TH1F("hitsPMT_nBX_sing_sideA", "Number of hitsPMT on sideA (single side mode, next BX)" , nbin + 1, -0.5, nbin + 0.5));
67  m_LUCID_Histos.push_back(new TH1F("hitsPMT_nBX_sing_sideC", "Number of hitsPMT on sideC (single side mode, next BX)" , nbin + 1, -0.5, nbin + 0.5));
68  m_LUCID_Histos.push_back(new TH1F("hitsPMT_nBX_sing_total", "Number of hitsPMT in total (single side mode, next BX)" , nbin + 1, -0.5, nbin + 0.5));
69 
70  m_LUCID_Histos.push_back(new TH1F("hitsPMT_nBX_coin_sideA", "Number of hitsPMT on sideA (coincidence mode, next BX)" , nbin + 1, -0.5, nbin + 0.5));
71  m_LUCID_Histos.push_back(new TH1F("hitsPMT_nBX_coin_sideC", "Number of hitsPMT on sideC (coincidence mode, next BX)" , nbin + 1, -0.5, nbin + 0.5));
72  m_LUCID_Histos.push_back(new TH1F("hitsPMT_nBX_coin_total", "Number of hitsPMT in total (coincidence mode, next BX)" , nbin + 1, -0.5, nbin + 0.5));
73 
74  m_LUCID_Histos.push_back(new TH1F("hitsFIB_nBX_sing_sideA", "Number of hitsFIB on sideA (single side mode, next BX)" , nbin + 1, -0.5, nbin + 0.5));
75  m_LUCID_Histos.push_back(new TH1F("hitsFIB_nBX_sing_sideC", "Number of hitsFIB on sideC (single side mode, next BX)" , nbin + 1, -0.5, nbin + 0.5));
76  m_LUCID_Histos.push_back(new TH1F("hitsFIB_nBX_sing_total", "Number of hitsFIB in total (single side mode, next BX)" , nbin + 1, -0.5, nbin + 0.5));
77 
78  m_LUCID_Histos.push_back(new TH1F("hitsFIB_nBX_coin_sideA", "Number of hitsFIB on sideA (coincidence mode, next BX)" , nbin + 1, -0.5, nbin + 0.5));
79  m_LUCID_Histos.push_back(new TH1F("hitsFIB_nBX_coin_sideC", "Number of hitsFIB on sideC (coincidence mode, next BX)" , nbin + 1, -0.5, nbin + 0.5));
80  m_LUCID_Histos.push_back(new TH1F("hitsFIB_nBX_coin_total", "Number of hitsFIB in total (coincidence mode, next BX)" , nbin + 1, -0.5, nbin + 0.5));
81 
82  std::vector<TH1F*>::const_iterator histo_itr = m_LUCID_Histos.begin();
83  std::vector<TH1F*>::const_iterator histo_end = m_LUCID_Histos.end();
84 
85  int hCounter = 0;
86 
87  for(; histo_itr != histo_end; ++histo_itr) {
88 
89  if (hCounter < 3) {
90 
91  (*histo_itr)->GetXaxis()->SetTitle("Tube Number");
92  (*histo_itr)->GetYaxis()->SetTitle("Occupancy");
93  }
94  else (*histo_itr)->GetXaxis()->SetTitle("Number of hits");
95 
96  regHist(*histo_itr, "LUCID", run).ignore();
97 
98  hCounter++;
99  }
100 
101  return StatusCode::SUCCESS;
102 }
103 
105 
106  ATH_MSG_DEBUG(" LUCID_HitsMoniTool::fillHistograms ");
107 
109 
110  if (!rawdata.isValid()) { ATH_MSG_WARNING(" Could not retireved LUCID_RawDataContainer from StoreGate "); return StatusCode::FAILURE; }
111  else ATH_MSG_DEBUG(" LUCID_RawDataContainer is retireved from StoreGate ");
112 
113  for (const auto LUCID_RawData_itr : *rawdata) {
114 
115  ATH_MSG_DEBUG(LUCID_RawData_itr);
116 
117  for (int bxID=0; bxID<3; bxID++) {
118  for (int tub=0; tub<m_nLucidTubes; tub++) {
119 
120  bool isTubeFired = LUCID_RawData_itr->isTubeFired(tub, bxID);
121 
123  " bxID: " << std::setw(10) << bxID
124  << " tub: " << std::setw(10) << tub
125  << " fire: " << std::setw(10) << isTubeFired
126  );
127 
128  if (isTubeFired) m_LUCID_Histos[bxID]->Fill(tub);
129  }
130  }
131 
132  int hitsA, hitsC, hitsT;
133  bool coinFlag;
134 
135  hitsA = LUCID_RawData_itr->getNhitsPMTsideA();
136  hitsC = LUCID_RawData_itr->getNhitsPMTsideC();
137  hitsT = hitsA + hitsC;
138  coinFlag = (hitsA>0 && hitsC>0);
139 
140  m_LUCID_Histos[3]->Fill(hitsA);
141  m_LUCID_Histos[4]->Fill(hitsC);
142  m_LUCID_Histos[5]->Fill(hitsT);
143 
144  m_LUCID_Histos[6]->Fill(hitsA*coinFlag);
145  m_LUCID_Histos[7]->Fill(hitsC*coinFlag);
146  m_LUCID_Histos[8]->Fill(hitsT*coinFlag);
147 
148  hitsA = LUCID_RawData_itr->getNhitsFIBsideA();
149  hitsC = LUCID_RawData_itr->getNhitsFIBsideC();
150  hitsT = hitsA + hitsC;
151  coinFlag = (hitsA>0 && hitsC>0);
152 
153  m_LUCID_Histos[ 9]->Fill(hitsA);
154  m_LUCID_Histos[10]->Fill(hitsC);
155  m_LUCID_Histos[11]->Fill(hitsT);
156 
157  m_LUCID_Histos[12]->Fill(hitsA*coinFlag);
158  m_LUCID_Histos[13]->Fill(hitsC*coinFlag);
159  m_LUCID_Histos[14]->Fill(hitsT*coinFlag);
160 
161  hitsA = LUCID_RawData_itr->getNhitsPMTsideAprevBX();
162  hitsC = LUCID_RawData_itr->getNhitsPMTsideCprevBX();
163  hitsT = hitsA + hitsC;
164  coinFlag = (hitsA>0 && hitsC>0);
165 
166  m_LUCID_Histos[15]->Fill(hitsA);
167  m_LUCID_Histos[16]->Fill(hitsC);
168  m_LUCID_Histos[17]->Fill(hitsT);
169 
170  m_LUCID_Histos[18]->Fill(hitsA*coinFlag);
171  m_LUCID_Histos[19]->Fill(hitsC*coinFlag);
172  m_LUCID_Histos[20]->Fill(hitsT*coinFlag);
173 
174  hitsA = LUCID_RawData_itr->getNhitsFIBsideAprevBX();
175  hitsC = LUCID_RawData_itr->getNhitsFIBsideCprevBX();
176  hitsT = hitsA + hitsC;
177  coinFlag = (hitsA>0 && hitsC>0);
178 
179  m_LUCID_Histos[21]->Fill(hitsA);
180  m_LUCID_Histos[22]->Fill(hitsC);
181  m_LUCID_Histos[23]->Fill(hitsT);
182 
183  m_LUCID_Histos[24]->Fill(hitsA*coinFlag);
184  m_LUCID_Histos[25]->Fill(hitsC*coinFlag);
185  m_LUCID_Histos[26]->Fill(hitsT*coinFlag);
186 
187  hitsA = LUCID_RawData_itr->getNhitsPMTsideAnextBX();
188  hitsC = LUCID_RawData_itr->getNhitsPMTsideCnextBX();
189  hitsT = hitsA + hitsC;
190  coinFlag = (hitsA>0 && hitsC>0);
191 
192  m_LUCID_Histos[27]->Fill(hitsA);
193  m_LUCID_Histos[28]->Fill(hitsC);
194  m_LUCID_Histos[29]->Fill(hitsT);
195 
196  m_LUCID_Histos[30]->Fill(hitsA*coinFlag);
197  m_LUCID_Histos[31]->Fill(hitsC*coinFlag);
198  m_LUCID_Histos[32]->Fill(hitsT*coinFlag);
199 
200  hitsA = LUCID_RawData_itr->getNhitsFIBsideAnextBX();
201  hitsC = LUCID_RawData_itr->getNhitsFIBsideCnextBX();
202  hitsT = hitsA + hitsC;
203  coinFlag = (hitsA>0 && hitsC>0);
204 
205  m_LUCID_Histos[33]->Fill(hitsA);
206  m_LUCID_Histos[34]->Fill(hitsC);
207  m_LUCID_Histos[35]->Fill(hitsT);
208 
209  m_LUCID_Histos[36]->Fill(hitsA*coinFlag);
210  m_LUCID_Histos[37]->Fill(hitsC*coinFlag);
211  m_LUCID_Histos[38]->Fill(hitsT*coinFlag);
212  }
213 
214  return StatusCode::SUCCESS;
215 }
216 
218 
219  ATH_MSG_DEBUG(" LUCID_HitsMoniTool::procHistograms ");
220 
221  if (endOfRunFlag()) {
222 
223  ATH_MSG_DEBUG(" m_nEvents: " << m_nEvents);
224 
225  for (int bxID=0; bxID<3; bxID++) m_LUCID_Histos[18+bxID]->Scale(1./m_nEvents);
226  }
227 
228  return StatusCode::SUCCESS;
229 }
230 
ManagedMonitorToolBase::m_nEvents
unsigned int m_nEvents
Definition: ManagedMonitorToolBase.h:926
LUCID_HitsMoniTool::procHistograms
virtual StatusCode procHistograms() override
An inheriting class should either override this function or finalHists().
Definition: LUCID_HitsMoniTool.cxx:217
LUCID_HitsMoniTool::~LUCID_HitsMoniTool
virtual ~LUCID_HitsMoniTool()
Definition: LUCID_HitsMoniTool.cxx:14
ManagedMonitorToolBase
Provides functionality for users to implement and save histograms, ntuples, and summary data,...
Definition: ManagedMonitorToolBase.h:74
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
LUCID_HitsMoniTool::bookHistograms
virtual StatusCode bookHistograms() override
An inheriting class should either override this function or bookHists().
Definition: LUCID_HitsMoniTool.cxx:22
LUCID_HitsMoniTool::fillHistograms
virtual StatusCode fillHistograms() override
An inheriting class should either override this function or fillHists().
Definition: LUCID_HitsMoniTool.cxx:104
LUCID_HitsMoniTool::m_LUCID_Histos
std::vector< TH1F * > m_LUCID_Histos
Definition: LUCID_HitsMoniTool.h:35
LUCID_HitsMoniTool::m_nLucidTubes
static const int m_nLucidTubes
Definition: LUCID_HitsMoniTool.h:37
LUCID_HitsMoniTool.h
ManagedMonitorToolBase::initialize
virtual StatusCode initialize()
Definition: ManagedMonitorToolBase.cxx:669
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
test_pyathena.parent
parent
Definition: test_pyathena.py:15
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
run
Definition: run.py:1
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
Scale
void Scale(TH1 *h, double d=1)
Definition: comparitor.cxx:76
LUCID_HitsMoniTool::m_LUCID_RawDataContainerKey
SG::ReadHandleKey< LUCID_RawDataContainer > m_LUCID_RawDataContainerKey
Definition: LUCID_HitsMoniTool.h:33
LUCID_HitsMoniTool::LUCID_HitsMoniTool
LUCID_HitsMoniTool(const std::string &type, const std::string &name, const IInterface *parent)
Definition: LUCID_HitsMoniTool.cxx:9
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
ManagedMonitorToolBase::endOfRunFlag
bool endOfRunFlag() const
Definition: ManagedMonitorToolBase.h:859
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
python.TrigEgammaMonitorHelper.TH1F
def TH1F(name, title, nxbins, bins_par2, bins_par3=None, path='', **kwargs)
Definition: TrigEgammaMonitorHelper.py:24
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
LUCID_HitsMoniTool::initialize
virtual StatusCode initialize() override
Definition: LUCID_HitsMoniTool.cxx:16