ATLAS Offline Software
CscClusterValMonAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 // Athena include(s)
10 #include "CscClusterValMonAlg.h"
11 
12 // STL include(s)
13 #include <bitset>
14 #include <cmath>
15 
16 using namespace Muon;
17 
18 namespace {
19  struct MonStruct {
20  std::vector<int> count_mon;
21  std::vector<int> scount_mon;
22  std::vector<int> count_diff;
23  std::vector<float> tmp_val_mon;
24  std::vector<float> secLayer;
25  std::vector<int> mphi_true;
26  std::vector<int> mphi_false;
27  std::vector<int> scount_phi_false;
28  std::vector<int> scount_phi_true;
29  std::vector<int> scount_eta_false;
30  std::vector<int> scount_eta_true;
31  };
32 }
33 
34 CscClusterValMonAlg::CscClusterValMonAlg( const std::string& name, ISvcLocator* pSvcLocator ) :
35  AthMonitorAlgorithm(name,pSvcLocator)
36  { }
37 
39 
40 
41  ATH_MSG_INFO ( "Initializing : " << name() );
42  ATH_MSG_INFO ( "CSCClusterKey : " << m_cscClusterKey );
43  ATH_MSG_INFO ( "CSCPrepRawDataKey : " << m_cscPRDKey );
44 
45  ATH_CHECK(m_idHelperSvc.retrieve());
46 
47  ATH_CHECK(m_stripFitter.retrieve());
48  ATH_MSG_INFO ( "CSCStripFitter : " << "Using Fitter with name \"" << m_stripFitter->name() << "\"" );
49 
50  if( m_doEvtSel ) ATH_CHECK(m_trigDecTool.retrieve());
51 
52  ATH_CHECK(m_cscCalibTool.retrieve());
53  ATH_CHECK(m_cscClusterKey.initialize((m_idHelperSvc->hasCSC())));
54  ATH_CHECK(m_cscPRDKey.initialize((m_idHelperSvc->hasCSC())));
55 
57 }
58 
59 
60 StatusCode CscClusterValMonAlg::fillHistograms( const EventContext& ctx ) const {
61 
62 
63  StatusCode sc = StatusCode::SUCCESS;
64 
65  // check if event passed sample-selection triggers
66  if(m_doEvtSel) { if(!evtSelTriggersPassed()) return sc; }
67 
68  // retrieve cluster / strip collection
71 
72  // we can do (some) monitoring plots with just the cluster
73  // ideally we need both the cluster and the strips that make up that cluster
74  //FillCSCClusters(*cscCluster.cptr(), *cscStrip.cptr());
75 
76  if(!(cscCluster.isValid())) {
77  ATH_MSG_ERROR("evtStore() does not contain csc prd Collection with name "<< m_cscClusterKey);
78  return StatusCode::FAILURE;
79  }
80 
81  ATH_MSG_DEBUG ( " Size of Cluster Collection : " << cscCluster->size() );
82  ATH_MSG_DEBUG ( " Size of Strip Collection : " << cscStrip->size() );
83 
84  MonStruct monstruct;
85 
86  for ( CscPrepDataContainer::const_iterator Icol = cscCluster->begin(); Icol != cscCluster->end(); ++Icol )
87  {
88  const CscPrepDataCollection& clus = **Icol;
89 
90  // arrays to hold cluster-count
91  // 32 chambers and 8 layers (each has one extra - index '0' is not counted)
92  int clusCount[33][9], sigclusCount[33][9];
93  unsigned int nEtaClusWidthCnt = 0, nPhiClusWidthCnt = 0;
94  for(unsigned int kl = 0; kl < 33; kl++ ) {
95  for(unsigned int km = 0; km < 9; km++ ) {
96  clusCount[kl][km] = 0;
97  sigclusCount[kl][km] = 0;
98  }
99  }
100 
101  float stripsSum_EA = 0.;
102  float stripsSum_EAtest = -50.;
103  float stripsSum_EC = 0.;
104  float stripsSum_ECtest = -50.;
105 
106  ATH_MSG_DEBUG ( " Begin loop over clusters ============================");
107  for ( CscPrepDataCollection::const_iterator Itclu = clus.begin(); Itclu != clus.end(); ++Itclu )
108  {
109  const CscPrepData& iClus = **Itclu;
110  const std::vector<Identifier>& stripIds = iClus.rdoList();
111  float clu_charge = iClus.charge();
112  auto clu_time = Monitored::Scalar<float>("clu_time", (iClus.time()));
113 
114  ATH_MSG_DEBUG(" cluster charge = " << clu_charge << "\t cluster time = " << clu_time );
115 
116  unsigned int noStrips = stripIds.size(); // no. of strips in this cluster = stripIds.size()
117  auto noStrips_mon = Monitored::Scalar<int> ("noStrips_mon",noStrips);
118  Identifier clusId = iClus.identify();
119 
120  // get the cluster coordinates
121  int stationName = m_idHelperSvc->cscIdHelper().stationName(clusId);
122  std::string stationString = m_idHelperSvc->cscIdHelper().stationNameString(stationName);
123  int chamberType = stationString == "CSS" ? 0 : 1;
124  int stationEta = m_idHelperSvc->cscIdHelper().stationEta(clusId);
125  int stationPhi = m_idHelperSvc->cscIdHelper().stationPhi(clusId);
126  int wireLayer = m_idHelperSvc->cscIdHelper().wireLayer(clusId);
127  int measuresPhi = m_idHelperSvc->cscIdHelper().measuresPhi(clusId);
128 
129  auto x = Monitored::Scalar<float> ("x",iClus.globalPosition().x());
130  auto y = Monitored::Scalar<float> ("y",iClus.globalPosition().y());
131  auto z = Monitored::Scalar<float> ("z",iClus.globalPosition().z());
132  auto r = Monitored::Scalar<float> ("r",std::hypot(x,y));
133 
134  fill("CscClusMonitor",z,r);
135  fill("CscClusMonitor",y,x);
136 
137  // convert to my coordinates
138  int sectorNo = stationEta * (2 * stationPhi - chamberType); // [-16 -> -1] and [+1 -> +16]
139  auto secLayer = Monitored::Scalar<float> ("secLayer", (sectorNo + 0.2 * (wireLayer - 1) + 0.1) );
140  int xfac = measuresPhi ? -1 : 1; // [-1 -> -48] / [+1 -> +192]
141 
142  //total cluster width (EA and EC) calculation
143  if(secLayer > 0.) {
144  stripsSum_EA = stripsSum_EA + noStrips;
145  }
146  if(stripsSum_EA > stripsSum_EAtest) {
147  stripsSum_EAtest = stripsSum_EA;
148  }
149 
150  if(secLayer < 0. || secLayer == 0.) {
151  stripsSum_EC = stripsSum_EC + noStrips;
152  }
153  if(stripsSum_EC > stripsSum_ECtest) {
154  stripsSum_ECtest = stripsSum_EC;
155  }
156 
157  // compute the indices to store cluster count
158  int ns = sectorNo < 0 ? sectorNo*(-1) : sectorNo+16; // [-16 -> -1] shifted to [1 -> 16] and [+1 -> +16] shifted to [+17 -> +32]
159  int nl = (measuresPhi ? wireLayer : wireLayer+4); // [ 1 -> 4] (phi-layers) and [5 -> 8] (eta-layers)
160 
161  // increment the cluster-count for this layer
162  clusCount[ns][nl]++;
163 
164  // indices for ns = [+1 -> +32]; 32 places (index '0' is not counted); allocated 33 places
165  // indices for nl = [+1 -> +8]; 8 places (index '0' is not counted); allocated 9 places
166  ATH_MSG_DEBUG(" ns = " << ns << "\tm_nl = " << nl << "\tm_sec = " << sectorNo << "\t m_lay= " << wireLayer << "\tmPhi = " << measuresPhi);
167 
168 
169  // check the cluster status; probably need to read status info from jobOptions - not done for the moment
170  // status = Muon::CscStatusUnspoiled (i.e 0) or Muon::CscStatusSplitUnspoiled (i.e 10) are considered good for precision clusters
171  // status = Muon::CscStatusSimple (i.e 1) could be good for non-precision clusters (i.e for phi-layers)
172  std::string stat = Muon::toString(iClus.status());
173  bool cluster_status = ( (stat == "unspoiled") ||
174  (stat == "unspoiled with split") ||
175  (stat == "simple")
176  ) ? true : false;
177 
178  // Also need at least three strips in an eta-cluster to compute Q_max, Q_left and Q_right
179  bool eta_cluster_status = cluster_status && ( noStrips > 2 ) && (measuresPhi == 0);
180 
181  // Also need at least one strip in a phi-cluster to compute Q_max = Q_sum
182  bool phi_cluster_status = cluster_status && ( noStrips > 0 ) && (measuresPhi == 1);
183 
184  ATH_MSG_DEBUG ( " ClusterStatus eta = " << eta_cluster_status << " ,phi = " << phi_cluster_status);
185  ATH_MSG_DEBUG ( " ClusterID (eta:" << stationEta << ",phi:" << stationPhi << ",type:" << chamberType << ", measPhi: "
186  << measuresPhi << ",wire:" << wireLayer << ") = " << secLayer << " status = "
187  << stat << " #of strips = " << noStrips );
188 
189  // if cluster is okay get Qmax, Qleft, Qright and Qsum = (Qmax + Qleft + Qright)
190  if(eta_cluster_status || phi_cluster_status ) {
191  const CscStripPrepDataCollection* pcol(nullptr);
192  bool found_id = true;
193  std::vector <const CscStripPrepData*> stripVec;
194  std::vector <float> fStripIDs;
195 
196  float maxStripCharge = 0., maxStipId = 0.;
197  int sIdx = 0, mxIdx = 0; // index-counter and index of max strip in the vector of Id's
198 
199  auto clus_phi_mon = Monitored::Scalar<int>("clus_phi_mon", (int)measuresPhi);
200  auto clus_eta_mon = Monitored::Scalar<int>("clus_eta_mon", (int)(!measuresPhi));
201  fill("CscClusMonitor",noStrips_mon, secLayer,clus_phi_mon, clus_eta_mon);
202 
203  // fill cluster width (no. of strips per cluster)
204  if(measuresPhi) {
205  nPhiClusWidthCnt++;
206  } else {
207  nEtaClusWidthCnt++;
208  }
209 
210  // Loop over strip id's vector / strip collection and match the id's from vector with strips in collection
211  for ( std::vector<Identifier>::const_iterator sId = stripIds.begin(); sId != stripIds.end(); ++sId, sIdx++ ) {
212  Identifier id = *sId; // for strip Id's
213  int thisStrip = m_idHelperSvc->cscIdHelper().strip(id);
214  auto stripid = Monitored::Scalar<int> ("stripid", thisStrip*xfac);// x-axis fill value
215  fStripIDs.push_back(stripid);
216 
217  fill("CscClusMonitor",stripid, secLayer);
218 
219  if(!pcol) {
220  const CscStripPrepDataCollection* icol = cscStrip->indexFindPtr(clus.identifyHash());
221  if ( icol == nullptr ) {
222  found_id = false;
223  break; // could not identify the strips
224  } else {
225  pcol = icol;
226  }
227  } // end if !pcol
228 
229  bool found_strip = false;
230  float maxsampChVal = 0.;
231  if(found_id) {
232  for ( CscStripPrepDataCollection::const_iterator istrip= pcol->begin(); istrip != pcol->end(); ++ istrip ) {
233  found_strip = ( *istrip )->identify() == id ;
234  if(found_strip) {
235  stripVec.push_back(*istrip);
236  std::vector<float> samp_charges = ( *istrip )->sampleCharges();
237  for(unsigned int i = 0; i < samp_charges.size(); i++ ) {
238  if(samp_charges[i] > maxsampChVal) maxsampChVal = samp_charges[i];
239  }
240  if(maxsampChVal > maxStripCharge ) {
241  maxStripCharge = maxsampChVal;
242  maxStipId = stripid;
243  mxIdx = sIdx;
244  }
245  break; // break from inner loop
246  }
247  } // end for loop on strip collection
248  ATH_MSG_DEBUG ( " " << (found_strip? "FoundStrip " : "NoStripFound ") << " with max sampling = " << maxsampChVal);
249  } // end if found_id
250  } // end for loop over strips
251 
252  auto fStripIDs_col = Monitored::Collection("fStripIDs_col",fStripIDs);
253  ATH_MSG_DEBUG ( " Max Strip charge = " << maxStripCharge << " and strip Id = " << maxStipId << " and index = " << mxIdx);
254  float qmax = 0., qleft = 0., qright = 0., qsum = 0.;
255  // if we are here and loop over strips is successful we should have found_id = true
256  // and the size of strip-ID-vector == size of strips-vector
257  bool size_ids_coll = (noStrips == stripVec.size() ? true : false) ;
258 
259  if(found_id && size_ids_coll ) {
260  // store results of three strips (Qmax, Qleft, Qright)
261  std::vector<ICscStripFitter::Result> res;
262  res.resize(3);
263  bool range_check = (mxIdx > -1) && (mxIdx < int(noStrips));
264 
265  ATH_MSG_DEBUG ( " Range check = (" << mxIdx << " > -1 ) && (" << mxIdx << " < " << noStrips << " ) = " << range_check
266  << "\t size of vec check " << noStrips << " == " << stripVec.size());
267 
268  if( range_check ) {
269  // fit Q_left fit
270  if(mxIdx-1 >= 0 ) {
271  res[0] = m_stripFitter->fit(*stripVec[mxIdx-1]);
272  qleft = res[0].charge;
273  qsum += qleft;
274  ATH_MSG_DEBUG ( " Left Strip q +- dq = " << res[0].charge << " +- " << res[0].dcharge << "\t t +- dt = "
275  << res[0].time << " +- " << res[0].dtime << "\t w +- dw = " << res[0].width << " +- "
276  << res[0].dwidth << "\t status= " << res[0].status << "\t chisq= " << res[0].chsq);
277  }// end if q_left
278  // fit Q_max strip
279  res[1] = m_stripFitter->fit(*stripVec[mxIdx]);
280  qmax = res[1].charge;
281  qsum += qmax;
282  ATH_MSG_DEBUG ( " Peak Strip q +- dq = " << res[1].charge << " +- " << res[1].dcharge << "\t t +- dt = "
283  << res[1].time << " +- " << res[1].dtime << "\t w +- dw = " << res[1].width << " +- "
284  << res[1].dwidth << "\t status= " << res[1].status << "\t chisq= " << res[1].chsq);
285  // fit Q_right strip
286  if(mxIdx+1 < int(noStrips)) {
287  res[2] = m_stripFitter->fit(*stripVec[mxIdx+1]);
288  qright = res[2].charge;
289  qsum += qright;
290  ATH_MSG_DEBUG ( " Right Strip q +- dq = " << res[2].charge << " +- " << res[2].dcharge << "\t t +- dt = "
291  << res[2].time << " +- " << res[2].dtime << "\t w +- dw = " << res[2].width << " +- "
292  << res[2].dwidth << "\t status= " << res[2].status << "\t chisq= " << res[2].chsq);
293  } // end if q_right
294  } // end if range_check
295 
296  // not used at the moment
297  // 1 e = 1.602176487 10^{-19} C = 1.6022 x 10^{-4} fC
298  // float m_fCperElectron = 1.6022e-4; // multiply # of electrons by this number to get fC
299 
300  float kiloele = 1.0e-3; // multiply # of electrons by this number to get kiloElectrons (1 ke = 1 ADC)
301 
302 
303  // Assume 1000 e = 1 ADC for now = 1000 x 1.6022 x 10^{-4} fC = 0.16022 fC
304  // convert qmax, qleft, qright into ADC
305 
306  auto QmaxADC = Monitored::Scalar<float>("QmaxADC", (qmax * kiloele));
307  auto QsumADC = Monitored::Scalar<float>("QsumADC", (qsum * kiloele));
308 
309 
310  // check if signal or noise
311  // QmaxADC > m_qmaxADCCut is signal
312  bool signal = QmaxADC > m_qmaxADCCut;
313 
314  // fill signal/noise histograms
315  auto signal_mon = Monitored::Scalar<int>("signal_mon",(int)signal);
316  auto noise_mon = Monitored::Scalar<int>("noise_mon",(int)!(signal));
317  auto clus_phi = Monitored::Scalar<int>("clus_phi", (int)measuresPhi );
318  auto clus_eta = Monitored::Scalar<int>("clus_eta", (int)(!measuresPhi) );
319  auto clus_phiSig = Monitored::Scalar<int>("clus_phiSig", (int)measuresPhi && (signal));
320  auto clus_etaSig = Monitored::Scalar<int>("clus_etaSig", (int)(!measuresPhi) && (signal));
321  auto clus_phiNoise = Monitored::Scalar<int>("clus_phiNoise", (int)measuresPhi && !(signal));
322  auto clus_etaNoise = Monitored::Scalar<int>("clus_etaNoise", (int)(!measuresPhi) && !(signal));
323  auto sideA = Monitored::Scalar<int>("sideA",(int)((stationEta==1) && (signal)));
324  auto sideC = Monitored::Scalar<int>("sideC",(int)((stationEta==-1) && (signal)));
325  auto sideA_phiSig = Monitored::Scalar<int>("sideA_phiSig", (int)(signal && stationEta==1 && !measuresPhi) );
326  auto sideC_phiSig = Monitored::Scalar<int>("sideC_phiSig", (int)(signal && stationEta==-1 && !measuresPhi) );
327 
328  if(signal) sigclusCount[ns][nl]++;
329 
330  auto clu_charge_kiloele = Monitored::Scalar<float>("clu_charge_kiloele", (iClus.charge()*kiloele));
331 
332  fill("CscClusMonitor",fStripIDs_col, QmaxADC, secLayer, noStrips_mon, QsumADC, clu_time, clu_charge_kiloele, clus_phi, clus_eta, clus_phiSig, clus_etaSig, clus_phiNoise, clus_etaNoise, signal_mon, noise_mon, sideA, sideC, sideA_phiSig, sideC_phiSig);
333 
334  ATH_MSG_DEBUG ( " End of strip fits " );
335 
336  } // if found_id
337  } // end if cluster_status
338 
339  auto stripsSum_EA_mon = Monitored::Scalar<float> ("stripsSum_EA_mon",stripsSum_EA);
340  auto stripsSum_EC_mon = Monitored::Scalar<float> ("stripsSum_EC_mon",stripsSum_EC);
341  fill("CscClusMonitor",stripsSum_EA_mon, stripsSum_EC_mon);
342 
343  } // end for loop over prep-data collection
344  ATH_MSG_DEBUG ( " End loop over clusters ============================");
345  auto nPhiClusWidthCnt_mon = Monitored::Scalar<int> ("nPhiClusWidthCnt_mon",nPhiClusWidthCnt);
346  auto nEtaClusWidthCnt_mon = Monitored::Scalar<int> ("nEtaClusWidthCnt_mon",nEtaClusWidthCnt);
347  fill("CscClusMonitor",nPhiClusWidthCnt_mon,nEtaClusWidthCnt_mon);
348 
349  // Fill cluster counts
350  int numeta = 0, numphi = 0;
351  int numetasignal = 0, numphisignal = 0;
352 
353  //loop over chambers
354  for(int kl = 1; kl < 33; kl++ ) {
355 
356  // loop over layers
357  int eta_hits[4] = {0,0,0,0};
358  bool chamber_empty = true;
359  int sec = kl < 17 ? kl*(-1) : kl; // [1->16](-side) [17-32] (+side)
360  for(int km = 1; km < 9; km++ ) {
361  int lay = (km > 4 && km < 9) ? km-4 : km; // 1,2,3,4 (phi-layers) 5-4, 6-4, 7-4, 8-4 (eta-layers)
362  bool mphi = (km > 0 && km < 5) ? true : false; // 1,2,3,4 (phi-layers) 5,6,7,8 (eta-layers)
363  std::string wlay = mphi ? "Phi-Layer " : "Eta-Layer: ";
364  int count = clusCount[kl][km];
365  int scount = sigclusCount[kl][km];
366 
367  if(count){
368  ATH_MSG_DEBUG ("sec[" << sec << "]\t" << wlay << "[" << lay << "] = " << monstruct.secLayer.back() << "= " << "\tNsig = " << scount << ", Ntot = " << count);
369  if(mphi){
370  numphi += count;
371  if(scount){
372  chamber_empty = false;
373  numphisignal += scount;
374  }
375  }
376  else{
377  numeta += count;
378  if(scount){
379  eta_hits[lay-1]++;
380  chamber_empty = false;
381  numetasignal +=scount;
382  }
383  }
384  ATH_MSG_DEBUG ( wlay << "Counts sec: [" << kl-16 << "]\tlayer: [" << km << "] = " << monstruct.secLayer.back() << "\t = " << count << "\t" << scount);
385  }
386 
387  monstruct.count_mon.push_back(count);
388  monstruct.scount_mon.push_back(scount);
389  monstruct.count_diff.push_back(count-scount);
390  monstruct.mphi_true.push_back((int)mphi && count);
391  monstruct.mphi_false.push_back((int)!(mphi) && count);
392  monstruct.scount_phi_true.push_back((int)mphi && count && scount);
393  monstruct.scount_phi_false.push_back((int)mphi && count && !scount);
394  monstruct.scount_eta_true.push_back((int)!(mphi) && count && scount);
395  monstruct.scount_eta_false.push_back((int)!(mphi) && count && !scount);
396  monstruct.secLayer.push_back((sec + 0.2 * (lay - 1) + 0.1));
397 
398  }// end loop over layers
399 
400  int segNum_new = -999.;
401  if(!chamber_empty){
402  std::ostringstream nseglist;
403  std::bitset<4> segNum;
404  for(unsigned int mm = 0; mm < 4; mm++) {
405  bool set = (eta_hits[mm] > 0 ? true : false);
406  if(set) segNum.set(mm);
407  nseglist << (set ? "1" : "0");
408  }
409  segNum_new = segNum.to_ulong();
410  ATH_MSG_DEBUG("segments= " << nseglist.str() << "\t = " << segNum.to_ulong());
411  }
412  auto segNum_mon = Monitored::Scalar<int>("segNum_mon", segNum_new);
413  auto sec_mon = Monitored::Scalar<float>("sec_mon",sec+0.3);
414  fill("CscClusMonitor", segNum_mon, sec_mon);
415  } // end loop over chambers
416 
417  ATH_MSG_DEBUG(" numphi = " << numphi << "\t numeta = " << numeta << "\tm_sphi = " << numphisignal << "\t m_seta = " << numetasignal);
418  auto numphi_mon = Monitored::Scalar<int>("numphi_mon", numphi);
419  auto numeta_mon = Monitored::Scalar<int>("numeta_mon", numeta);
420  auto numphi_sig_mon = Monitored::Scalar<int>("numphi_sig_mon", numphisignal);
421  auto numeta_sig_mon = Monitored::Scalar<int>("numeta_sig_mon", numetasignal);
422  auto numphi_numeta_mon = Monitored::Scalar<int>("numphi_numeta_mon", numphi+numeta);
423  auto numphi_numeta_sig_mon = Monitored::Scalar<int>("numphi_numeta_sig_mon", numphisignal+numetasignal);
424  auto num_num_noise_mon = Monitored::Scalar<int>("num_num_noise_mon", (numphi-numphisignal)+(numeta-numetasignal));
425  auto numphi_diff_mon = Monitored::Scalar<int>("numphi_diff_mon", numphi-numphisignal);
426  auto numeta_diff_mon = Monitored::Scalar<int>("numeta_diff_mon", numeta-numetasignal);
427 
428  fill("CscClusMonitor",numphi_mon,numeta_mon,numphi_sig_mon,numeta_sig_mon,numphi_numeta_mon,numphi_numeta_sig_mon,num_num_noise_mon,numphi_diff_mon,numeta_diff_mon);
429 
430  } // end for loop over prep-data container
431 
432  auto count_mon = Monitored::Collection("count_mon", monstruct.count_mon);
433  auto scount_mon = Monitored::Collection("scount_mon", monstruct.scount_mon);
434  auto count_diff = Monitored::Collection("count_diff", monstruct.count_diff);
435  auto mphi_true = Monitored::Collection("mphi_true", monstruct.mphi_true);
436  auto mphi_false = Monitored::Collection("mphi_false", monstruct.mphi_false);
437  auto scount_phi_true = Monitored::Collection("scount_phi_true", monstruct.scount_phi_true);
438  auto scount_phi_false = Monitored::Collection("scount_phi_false", monstruct.scount_phi_false);
439  auto scount_eta_true = Monitored::Collection("scount_eta_true", monstruct.scount_eta_true);
440  auto scount_eta_false = Monitored::Collection("scount_eta_false", monstruct.scount_eta_false);
441  auto secLayer = Monitored::Collection("secLayer", monstruct.secLayer);
442  auto tmp_val_mon = Monitored::Collection("tmp_val_mon", monstruct.tmp_val_mon);
443  fill("CscClusMonitor", count_mon, scount_mon, count_diff, secLayer, mphi_true, mphi_false, scount_phi_true, scount_phi_false, scount_eta_true, scount_eta_false);
444 
445  ATH_MSG_DEBUG ( " END EVENT ============================");
446 
447  return sc;
448 
449 }
450 
451 //
452 // evtSelTriggersPassed ----------------------------------------------------------------
453 //
455 
456  if(!m_doEvtSel) return true;
457 
458  for(const auto& trig : m_sampSelTriggers) {
459  if(m_trigDecTool->isPassed(trig,TrigDefs::eventAccepted)){
460  return true;
461  }
462  }
463  return false;
464 
465 } // end evtSelTriggersPassed
466 
calibdata.scount
int scount
Definition: calibdata.py:355
beamspotman.r
def r
Definition: beamspotman.py:676
Muon::nsw::STGTPSegments::moduleIDBits::stationPhi
constexpr uint8_t stationPhi
station Phi 1 to 8
Definition: NSWSTGTPDecodeBitmaps.h:129
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
CscClusterValMonAlg::CscClusterValMonAlg
CscClusterValMonAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: CscClusterValMonAlg.cxx:34
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
AthMonitorAlgorithm::m_trigDecTool
PublicToolHandle< Trig::TrigDecisionTool > m_trigDecTool
Tool to tell whether a specific trigger is passed.
Definition: AthMonitorAlgorithm.h:340
ZDC::sideC
BySideTypeMod sideC(-1)
Muon::CscPrepData::charge
int charge() const
Returns the charge.
Definition: CscPrepData.h:153
dumpTgcDigiDeadChambers.stationName
dictionary stationName
Definition: dumpTgcDigiDeadChambers.py:30
CscClusterValMonAlg::m_doEvtSel
Gaudi::Property< bool > m_doEvtSel
Definition: CscClusterValMonAlg.h:47
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
CscClusterValMonAlg::m_sampSelTriggers
Gaudi::Property< std::vector< std::string > > m_sampSelTriggers
Definition: CscClusterValMonAlg.h:46
CscClusterValMonAlg::fillHistograms
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
Definition: CscClusterValMonAlg.cxx:60
IdentifiableContainerMT::size
size_t size() const
Duplicate of fullSize for backwards compatability.
Definition: IdentifiableContainerMT.h:209
CscStripPrepDataCollection.h
Trk::PrepRawData::rdoList
const std::vector< Identifier > & rdoList() const
return the List of rdo identifiers (pointers)
Muon
This class provides conversion from CSC RDO data to CSC Digits.
Definition: TrackSystemController.h:49
x
#define x
CscClusterValMonAlg::m_qmaxADCCut
Gaudi::Property< double > m_qmaxADCCut
Definition: CscClusterValMonAlg.h:48
XMLtoHeader.count
count
Definition: XMLtoHeader.py:85
atlasStyleMacro.icol
int icol
Definition: atlasStyleMacro.py:13
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
CscClusterValMonAlg.h
Monitored::Collection
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
Definition: MonitoredCollection.h:38
AthMonitorAlgorithm
Base class for Athena Monitoring Algorithms.
Definition: AthMonitorAlgorithm.h:36
keylayer_zslicemap.kl
kl
Definition: keylayer_zslicemap.py:109
Muon::toString
std::string toString(CscStripStatus cstat)
Return a string description of a CSC cluster status flag.
Definition: CscStripStatus.h:48
Muon::MuonPrepDataCollection::identifyHash
virtual IdentifierHash identifyHash() const override final
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
lumiFormat.i
int i
Definition: lumiFormat.py:92
z
#define z
Muon::CscPrepData
Class representing clusters from the CSC.
Definition: CscPrepData.h:39
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
Muon::CscPrepData::globalPosition
virtual const Amg::Vector3D & globalPosition() const override final
Returns the global position.
Definition: CscPrepData.h:174
Muon::CscPrepData::status
CscClusterStatus status() const
Returns the Csc status (position measurement) flag.
Definition: CscPrepData.h:163
res
std::pair< std::vector< unsigned int >, bool > res
Definition: JetGroupProductTest.cxx:14
CscClusterValMonAlg::m_stripFitter
ToolHandle< ICscStripFitter > m_stripFitter
Definition: CscClusterValMonAlg.h:37
CscClusterValMonAlg::m_cscCalibTool
ToolHandle< ICscCalibTool > m_cscCalibTool
Definition: CscClusterValMonAlg.h:40
AthenaMonManager.h
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
IdentifiableContainerMT::end
const_iterator end() const
return const_iterator for end of container
Definition: IdentifiableContainerMT.h:242
Muon::CscPrepData::time
double time() const
Returns the time.
Definition: CscPrepData.h:158
chainDump.count_diff
def count_diff(count_in, count_ref, total_in, total_ref, thr_frac, thr_num)
Definition: chainDump.py:218
IdentifiableContainerMT::const_iterator
Definition: IdentifiableContainerMT.h:82
IdentifiableContainerMT::begin
const_iterator begin() const
return const_iterator for first entry
Definition: IdentifiableContainerMT.h:236
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.
CscClusterValMonAlg::initialize
virtual StatusCode initialize() override
initialize
Definition: CscClusterValMonAlg.cxx:38
Muon::MuonPrepDataCollection
Template to hold collections of MuonPrepRawData objects.
Definition: MuonPrepDataCollection.h:46
beamspotman.stat
stat
Definition: beamspotman.py:266
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
CscClusterStatus.h
CxxUtils::set
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
Definition: bitmask.h:224
Trk::PrepRawData::identify
Identifier identify() const
return the identifier
CscClusterValMonAlg::m_cscPRDKey
SG::ReadHandleKey< Muon::CscStripPrepDataContainer > m_cscPRDKey
Definition: CscClusterValMonAlg.h:44
Cut::signal
@ signal
Definition: SUSYToolsAlg.cxx:64
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:194
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
charge
double charge(const T &p)
Definition: AtlasPID.h:494
createDCubeHistograms.cscStrip
cscStrip
Definition: createDCubeHistograms.py:88
AthMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: AthMonitorAlgorithm.cxx:18
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
ZDC::sideA
BySideTypeMod sideA(1)
y
#define y
CscClusterValMonAlg::evtSelTriggersPassed
bool evtSelTriggersPassed() const
Definition: CscClusterValMonAlg.cxx:454
Base_Fragment.width
width
Definition: Sherpa_i/share/common/Base_Fragment.py:59
CaloSwCorrections.time
def time(flags, cells_name, *args, **kw)
Definition: CaloSwCorrections.py:242
CscClusterValMonAlg::m_cscClusterKey
SG::ReadHandleKey< Muon::CscPrepDataContainer > m_cscClusterKey
Definition: CscClusterValMonAlg.h:43
python.SystemOfUnits.ns
int ns
Definition: SystemOfUnits.py:130
merge.status
status
Definition: merge.py:17
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
Muon::nsw::STGTPSegments::moduleIDBits::stationEta
constexpr uint8_t stationEta
1 to 3
Definition: NSWSTGTPDecodeBitmaps.h:127
CscClusterValMonAlg::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: CscClusterValMonAlg.h:35
python.SystemOfUnits.km
int km
Definition: SystemOfUnits.py:95
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.