44 m_bookedhistos(false) {
66 ATH_MSG_WARNING (
"CSCSegmValAlg: Unable to retrieve trigger decision tool");
74 ATH_MSG_WARNING(
"Event selection triggers not specified. Switching off trigger-aware monitoring");
104 return StatusCode::SUCCESS;
119 float nyminEC = -17.;
128 float nclustmin = .5;
129 float nclustmax = 5.5;
145 std::string segm_detailA =
"Muon/MuonSegmentMonitoring/EndCapA/Detail/";
146 std::string segm_detailC =
"Muon/MuonSegmentMonitoring/EndCapC/Detail/";
147 std::string segm_oviewA =
"Muon/MuonSegmentMonitoring/EndCapA/Overview/";
148 std::string segm_oviewC =
"Muon/MuonSegmentMonitoring/EndCapC/Overview/";
166 Form(
"EndCap A: No. of segments; #segments;[sector] + [0.2 #times layer]"),
167 nsegbins,nsegmin,nsegmax,nybinsEA,nyminEA,nymaxEA);
169 Form(
"EndCap C: No. of segments; #segments;[sector] + [0.2 #times layer]"),
170 nsegbins,nsegmin,nsegmax,nybinsEC,nyminEC,nymaxEC);
177 Form(
"EndCap A: #eta-number of 3 and 4 cluster segments with each layer;counts;[sector] + [0.2 #times layer]"),
178 nclustbins,nclustmin,nclustmax,nybinsEA,nyminEA,nymaxEA);
181 Form(
"EndCap C: #eta-number of 3 and 4 cluster segments with each layer;counts;[sector] + [0.2 #times layer]"),
182 nclustbins,nclustmin,nclustmax,nybinsEC,nyminEC,nymaxEC);
193 Form(
"EndCap A: #eta-segment efficiency per sector;[sector] + [0.2 #times layer];efficiency"),
194 nybinsEA,nyminEA,nymaxEA);
197 Form(
"EndCap C: #eta-segment efficiency per sector;[sector] + [0.2 #times layer];efficiency"),
198 nybinsEC,nyminEC,nymaxEC);
205 Form(
"EndCap A: #eta-cluster charge per layer;counts;[sector] + [0.2 #times layer]"),
206 nqbins,nqmin,nqmax,nybinsEA,nyminEA,nymaxEA);
209 Form(
"EndCap C: #eta-cluster charge per layer;counts;[sector] + [0.2 #times layer]"),
210 nqbins,nqmin,nqmax,nybinsEC,nyminEC,nymaxEC);
216 Form(
"EndCap A: #eta-cluster time per layer;time [ns];[sector] + [0.2 #times layer]"),
217 ntbins,ntmin,ntmax,nybinsEA,nyminEA,nymaxEA);
220 Form(
"EndCap C: #eta-cluster time per layer;time [ns];[sector] + [0.2 #times layer]"),
221 ntbins,ntmin,ntmax,nybinsEC,nyminEC,nymaxEC);
228 "Endcap A: #eta-cluster status;;entries",
nbins,binmin,binmax);
231 "Endcap C: #eta-cluster status;;entries",
nbins,binmin,binmax);
240 "Endcap A: No. of #eta-clusters on segment;#clusters;entries", nsbins,nsmin,nsmax);
242 "Endcap C: No. of #eta-clusters on segment;#clusters;entries", nsbins,nsmin,nsmax);
247 "Endcap A: No. of good #eta-clusters on segment;#good-clusters;entries", nsbins,nsmin,nsmax);
249 "Endcap C: No. of good #eta-clusters on segment;#good-clusters;entries", nsbins,nsmin,nsmax);
254 "Endcap A: #eta-cluster Qsum;counts;entries", nqbins,nqmin,nqmax );
256 "Endcap C: #eta-cluster Qsum;counts;entries", nqbins,nqmin,nqmax );
261 "Endcap A: #eta-cluster Time;time [ns];entries", ntbins,ntmin,ntmax );
263 "Endcap C: #eta-cluster Time;time [ns];entries", ntbins,ntmin,ntmax );
268 "Endcap A: Good #eta-cluster Qsum;counts;entries", nqbins,nqmin,nqmax );
270 "Endcap C: Good #eta-cluster Qsum;counts;entries", nqbins,nqmin,nqmax );
275 "Endcap A: Good #eta-cluster Time;time [ns];entries", ntbins,ntmin,ntmax );
277 "Endcap C: Good #eta-cluster Time;time [ns];entries", ntbins,ntmin,ntmax );
284 Form(
"EndCap A: #phi-cluster charge per layer;counts;[sector] + [0.2 #times layer]"),
285 nqbins,nqmin,nqmax,nybinsEA,nyminEA,nymaxEA);
288 Form(
"EndCap C: #phi-cluster charge per layer;counts;[sector] + [0.2 #times layer]"),
289 nqbins,nqmin,nqmax,nybinsEC,nyminEC,nymaxEC);
295 Form(
"EndCap A: #phi-cluster time per layer;time [ns];[sector] + [0.2 #times layer]"),
296 ntbins,ntmin,ntmax,nybinsEA,nyminEA,nymaxEA);
299 Form(
"EndCap C: #phi-cluster time per layer;time [ns];[sector] + [0.2 #times layer]"),
300 ntbins,ntmin,ntmax,nybinsEC,nyminEC,nymaxEC);
306 "Endcap A: #phi-cluster status;;entries",
nbins,binmin,binmax);
309 "Endcap C: #phi-cluster status;;entries",
nbins,binmin,binmax);
319 "Endcap A: No. of #phi-clusters on segment;#clusters;entries", nsbins,nsmin,nsmax);
321 "Endcap C: No. of #phi-clusters on segment;#clusters;entries", nsbins,nsmin,nsmax);
326 "Endcap A: No. of good #phi-clusters on segment;#good-clusters;entries", nsbins,nsmin,nsmax);
328 "Endcap C: No. of good #phi-clusters on segment;#good-clusters;entries", nsbins,nsmin,nsmax);
333 "Endcap A: #phi-cluster Qsum;counts;entries", nqbins,nqmin,nqmax );
335 "Endcap C: #phi-cluster Qsum;counts;entries", nqbins,nqmin,nqmax );
340 "Endcap A: #phi-cluster Time;time [ns];entries", ntbins,ntmin,ntmax );
342 "Endcap C: #phi-cluster Time;time [ns];entries", ntbins,ntmin,ntmax );
347 "Endcap A: Good #phi-cluster Qsum;counts;entries", nqbins,nqmin,nqmax );
349 "Endcap C: Good #phi-cluster Qsum;counts;entries", nqbins,nqmin,nqmax );
354 "Endcap A: Good #phi-cluster Time;time [ns];entries", ntbins,ntmin,ntmax );
356 "Endcap C: Good #phi-cluster Time;time [ns];entries", ntbins,ntmin,ntmax );
362 "Endcap A: #phi-cluster vs. good #eta-cluster;good #eta-cluster counts;good #phi-cluster counts", nqbins,nqmin,nqmax, nqbins,nqmin,nqmax);
364 "Endcap A: #phi-cluster vs. good #eta-cluster;good #eta-cluster counts;good #phi-cluster counts", nqbins,nqmin,nqmax, nqbins,nqmin,nqmax);
398 int segmClustCount[33];
402 int clusCount[33][9];
403 for(
unsigned int kl = 0;
kl < 33;
kl++ ) {
404 for(
unsigned int cm3 = 0;
cm3 < 9;
cm3++ ) {
405 clusCount[
kl][
cm3] = 0;
412 if ( segments->
empty() ){
417 return StatusCode::SUCCESS;
425 if ( segments->
size() > 0 ){
427 ATH_MSG_DEBUG(
"This algorithm is designed to operate for single segm / event only" );
428 ATH_MSG_DEBUG(
"Processing only the first segm in the segm collection" );
439 if (segm ==
nullptr) {
449 if (
cscHits(segm)<1 )
continue;
456 int n_clust=meas.size();
457 if ( n_clust < 2 )
continue;
463 for(
int sect = 0; sect < 33; sect++) {
464 segmClustCount[sect] = 0;
465 for(
unsigned int ilay = 0; ilay < 9; ilay++ ) {
466 clusCount[sect][ilay] = 0;
487 bool segmAngle_cut =
segmSlopeCut(segm_ly, segm_ayz, segm_cut);
489 "\tangle_yz: " << segm_ayz <<
"\tcut: " << segm_cut <<
"\t pass = " << segmAngle_cut );
518 int segm_stationPhi =
m_idHelperSvc->cscIdHelper().stationPhi(segmId);
519 int segm_stationEta =
m_idHelperSvc->cscIdHelper().stationEta(segmId);
520 int segm_stationName =
m_idHelperSvc->cscIdHelper().stationName(segmId);
521 std::string segm_stationString =
m_idHelperSvc->cscIdHelper().stationNameString(segm_stationName);
522 int segm_chamberType = segm_stationString ==
"CSS" ? 0 : 1;
523 int segm_sectorNo = segm_stationEta * (2 * segm_stationPhi - segm_chamberType);
524 int segm_isec = segm_sectorNo < 0 ? segm_sectorNo*(-1) : segm_sectorNo+16;
525 ATH_MSG_DEBUG(
" sgsec = " << segm_isec <<
"\tsec = " << segm_sectorNo);
530 float clus_kiloele = 1.0e-3;
531 int eta_clus_count[2][2] = {{0},{0}}, phi_clus_count[2][2] = {{0},{0}};
532 float eta_clus_qsum[2][5] = {{-1.}, {-1.}}, phi_clus_qsum[2][5] = {{-1.}, {-1.}};
533 float eta_clus_time[2][5] = {{-1.}, {-1.}}, phi_clus_time[2][5] = {{-1.}, {-1.}};
534 int eta_clus_use[2][5] = {{0},{0}}, phi_clus_use[2][5] = {{0}, {0}};
545 int clus_stationName =
m_idHelperSvc->cscIdHelper().stationName(clusId);
546 std::string clus_stationString =
m_idHelperSvc->cscIdHelper().stationNameString(clus_stationName);
547 int clus_chamberType = clus_stationString ==
"CSS" ? 0 : 1;
548 int clus_stationEta =
m_idHelperSvc->cscIdHelper().stationEta(clusId);
549 int clus_stationPhi =
m_idHelperSvc->cscIdHelper().stationPhi(clusId);
550 int clus_wireLayer =
m_idHelperSvc->cscIdHelper().wireLayer(clusId);
551 int clus_measuresPhi =
m_idHelperSvc->cscIdHelper().measuresPhi(clusId);
554 int clus_sectorNo = clus_stationEta * (2 * clus_stationPhi - clus_chamberType);
555 float clus_secLayer = clus_sectorNo + 0.2 * (clus_wireLayer - 1) + 0.1;
556 int clus_isec = clus_sectorNo < 0 ? clus_sectorNo*(-1) : clus_sectorNo+16;
557 int clus_ilay = (clus_measuresPhi ? clus_wireLayer : clus_wireLayer+4);
561 if(segm_stationEta == 1) {
570 bool clus_status = ( (clus_stat ==
"unspoiled") ||
571 (clus_stat ==
"unspoiled with split") ||
572 (clus_stat ==
"simple")
579 float clus_qsum = 0, clus_time = -1.;
580 unsigned int clus_noStrips=0;
582 clus_qsum = theClus->
charge() * clus_kiloele;
583 clus_time = theClus->
time();
585 if(clus_measuresPhi == 0) {
586 if(clus_stationEta == 1) eta_clus_count[0][0]++;
587 else eta_clus_count[1][0]++;
589 if(clus_stationEta == 1) phi_clus_count[0][0]++;
590 else phi_clus_count[1][0]++;
593 clus_noStrips = theClus->
rdoList().size();
598 bool clus_eta_status = clus_status && ( clus_noStrips > 2 ) && (clus_measuresPhi == 0);
599 bool clus_eta_eff = clus_stat_eff && ( clus_noStrips > 2 ) && (clus_measuresPhi == 0);
601 if(clus_stationEta == 1) {
602 eta_clus_count[0][1]++;
604 eta_clus_count[1][1]++;
607 if(clus_eta_status) {
608 if(clus_stationEta == 1) {
609 eta_clus_qsum[0][clus_wireLayer] = clus_qsum;
610 eta_clus_time[0][clus_wireLayer] = clus_time;
611 eta_clus_use[0][clus_wireLayer] = 1;
615 eta_clus_qsum[1][clus_wireLayer] = clus_qsum;
616 eta_clus_time[1][clus_wireLayer] = clus_time;
617 eta_clus_use[1][clus_wireLayer] = 1;
624 bool clus_phi_status = clus_status && ( clus_noStrips > 0 ) && (clus_measuresPhi == 1);
625 if(clus_phi_status) {
626 if(clus_stationEta == 1) {
627 phi_clus_qsum[0][clus_wireLayer] = clus_qsum;
628 phi_clus_time[0][clus_wireLayer] = clus_time;
629 phi_clus_use[0][clus_wireLayer] = 1;
630 phi_clus_count[0][1]++;
634 phi_clus_qsum[1][clus_wireLayer] = clus_qsum;
635 phi_clus_time[1][clus_wireLayer] = clus_time;
636 phi_clus_use[1][clus_wireLayer] = 1;
637 phi_clus_count[1][1]++;
644 if(clus_eta_status || clus_phi_status) clusCount[clus_isec][clus_ilay]++;
647 if(clus_eta_status) segmClustCount[clus_isec]++;
649 if(clus_eta_status) layerindex+=clus_wireLayer;
651 ATH_MSG_DEBUG(
"status = " << clus_stat <<
"\tcharge = " << clus_qsum <<
"\ttime= " << clus_time <<
"\tnstrips = " << clus_noStrips);
667 for (
int isect = 1; isect < 17; isect++) {
668 if(segmClustCount[isect+16] > 2){
671 if(segmClustCount[isect] > 2){
674 if(segmClustCount[isect+16] > 3){
680 if(segmClustCount[isect] > 3){
688 float eta_clus_qsum_tot = 0., phi_clus_qsum_tot = 0.;
689 for(
unsigned int i = 0;
i < 2;
i++) {
690 eta_clus_qsum_tot = 0; phi_clus_qsum_tot = 0.;
691 for(
unsigned int j = 1; j < 5; j++) {
700 if(phi_clus_use[
i][j] && eta_clus_use[
i][j]) {
701 eta_clus_qsum_tot += eta_clus_qsum[
i][j];
706 phi_clus_qsum_tot += phi_clus_qsum[
i][j];
725 return StatusCode::SUCCESS;
737 return StatusCode::SUCCESS;
744 std::vector<std::string>::const_iterator
747 if (
m_trigDec->isPassed(*
it, TrigDefs::eventAccepted)) {
760 for(
unsigned int i = 0;
i< mbs.size(); ++
i){
779 unsigned int nrHits(0);
783 for(
unsigned int i = 0;
i< mbs.size(); ++
i){
803 if(!(
side == 1 ||
side == -1))
return;
804 if(
h->GetNbinsX() < 85)
return;
806 h->GetXaxis()->SetTitle(
"");
807 h->GetXaxis()->SetLabelSize(0.03);
809 for(
unsigned int j=6; j<86; j++) {
811 float xmid =
h->GetBinLowEdge(j) +
h->GetBinWidth(j);
812 xmid -= 1.0; xmid *= -1.0;
813 int seclay =
int(ceil(xmid*10));
815 int lay = (seclay%10)/2 ;
817 h->GetXaxis()->SetBinLabel(j,Form(
"%c%02d:%d",(sec%2==0?
'S':
'L'),sec,lay));
820 }
else if (
side == 1) {
821 for(
unsigned int j=6; j<86; j++) {
823 float xmid =
h->GetBinLowEdge(j) +
h->GetBinWidth(j);
824 int seclay =
int(ceil(xmid*10));
826 int lay = (seclay%10)/2 ;
827 h->GetXaxis()->SetBinLabel(j,Form(
"%c%02d:%d",(sec%2==0?
'S':
'L'),sec,lay));
838 if(!
cm3 || !
h)
return;
840 ATH_MSG_INFO (
"registering histogram: " <<
h->GetName() <<
" with group: " <<
cm3->system() );
842 if (
sc.isFailure() ) {
843 ATH_MSG_ERROR (
"Failed to register histogram: " <<
h->GetName() <<
" with group: " <<
cm3->system() );
845 ATH_MSG_VERBOSE (
"registered histogram: " <<
h->GetName() <<
" with group: " <<
cm3->system() );
851 float s1 = -
tan(csc_ax);
852 float s1corr =
s1 - 0.000119 * s0;
853 bool good_segm = std::abs(s1corr)<
cut ? true :
false;