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