25 #include "GaudiKernel/SystemOfUnits.h"
40 ATH_MSG_WARNING(
"Event selection triggers not specified. Switching off trigger-aware monitoring");
67 int segmClustCount[33];
72 for(
unsigned int kl = 0;
kl < 33;
kl++ ) {
73 for(
unsigned int cm3 = 0;
cm3 < 9;
cm3++ ){
74 clusCount[
kl][
cm3] = 0;
82 return StatusCode::FAILURE;
85 if ( segments->
empty() ){
87 return StatusCode::SUCCESS;
93 if(segments->
size() > 0){
95 ATH_MSG_DEBUG(
"This algorithm is designed to operate for single segm / event only" );
96 ATH_MSG_DEBUG(
"Processing only the first segm in the segm collection" );
114 if (
cscHits(segm)<1 )
continue;
123 if ( n_clust < 2 )
continue;
129 for(
int sect = 0; sect < 33; sect++) {
130 segmClustCount[sect] = 0;
131 for(
unsigned int ilay = 0; ilay < 9; ilay++ ){
132 clusCount[sect][ilay] = 0;
152 bool segmAngle_cut =
segmSlopeCut(segm_ly, segm_ayz, segm_cut);
153 ATH_MSG_DEBUG(
" local_pos: " << segm_ly <<
"\tangle_yz: " << segm_ayz <<
"\tcut: " << segm_cut <<
"\t pass = " << segmAngle_cut );
180 int segm_stationPhi =
m_idHelperSvc->cscIdHelper().stationPhi(segmId);
181 int segm_stationEta =
m_idHelperSvc->cscIdHelper().stationEta(segmId);
182 int segm_stationName =
m_idHelperSvc->cscIdHelper().stationName(segmId);
183 int segm_chamberType =
m_idHelperSvc->cscIdHelper().stationNameIndex(
"CSS") == segm_stationName ? 0 : 1;
184 auto segm_sectorNo =
Monitored::Scalar<int>(
"segm_sectorNo", (segm_stationEta * (2 * segm_stationPhi - segm_chamberType)) );
185 int segm_isec = segm_sectorNo < 0 ? segm_sectorNo*(-1) : segm_sectorNo+16;
186 ATH_MSG_DEBUG(
" sgsec = " << segm_isec <<
"\tsec = " << segm_sectorNo);
191 float clus_kiloele = 1.0e-3;
192 int eta_clus_count[2][2] = {{0, 0},{0, 0}}, phi_clus_count[2][2] = {{0, 0},{0, 0}};
193 float eta_clus_qsum[2][5] = {{-1., 0., 0., 0., 0.}, {-1., 0., 0., 0., 0.}}, phi_clus_qsum[2][5] = {{-1., 0., 0., 0., 0.}, {-1., 0., 0., 0., 0.}};
194 float eta_clus_time[2][5] = {{-1., 0., 0., 0., 0.}, {-1., 0., 0., 0., 0.}}, phi_clus_time[2][5] = {{-1., 0., 0., 0., 0.}, {-1., 0., 0., 0., 0.}};
195 int eta_clus_use[2][5] = {{0, 0, 0, 0, 0 },{0, 0, 0, 0, 0}}, phi_clus_use[2][5] = {{0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}};
205 int clus_stationName =
m_idHelperSvc->cscIdHelper().stationName(clusId);
206 int clus_chamberType =
m_idHelperSvc->cscIdHelper().stationNameIndex(
"CSS") == clus_stationName ? 0 : 1;
207 int clus_stationEta =
m_idHelperSvc->cscIdHelper().stationEta(clusId);
208 int clus_stationPhi =
m_idHelperSvc->cscIdHelper().stationPhi(clusId);
209 int clus_wireLayer =
m_idHelperSvc->cscIdHelper().wireLayer(clusId);
210 int clus_measuresPhi =
m_idHelperSvc->cscIdHelper().measuresPhi(clusId);
213 int clus_sectorNo = clus_stationEta * (2 * clus_stationPhi - clus_chamberType);
215 int clus_isec = clus_sectorNo < 0 ? clus_sectorNo*(-1) : clus_sectorNo+16;
216 int clus_ilay = (clus_measuresPhi ? clus_wireLayer : clus_wireLayer+4);
221 auto sideA_phi0 =
Monitored::Scalar<int>(
"sideA_phi0",(
int) (segm_stationEta==1)&& (
int)(clus_measuresPhi==0));
222 auto sideC_phi0 =
Monitored::Scalar<int>(
"sideC_phi0",(
int) (segm_stationEta==-1) && (
int)(clus_measuresPhi == 0));
223 auto sideA_phi =
Monitored::Scalar<int>(
"sideA_phi", (
int) (segm_stationEta==1) && (
int)(clus_measuresPhi!=0));
224 auto sideC_phi =
Monitored::Scalar<int>(
"sideC_phi", (
int) (segm_stationEta==-1) && (
int)(clus_measuresPhi!=0));
226 fill(
"CscSegmMonitor",status_mon, sideA_phi0, sideC_phi0, sideA_phi, sideC_phi);
234 float clus_qsum = 0, clus_time = -1.;
235 unsigned int clus_noStrips=0;
237 clus_qsum = theClus->
charge() * clus_kiloele;
238 clus_time = theClus->
time();
240 if(clus_measuresPhi == 0){
241 if(clus_stationEta == 1) eta_clus_count[0][0]++;
242 else eta_clus_count[1][0]++;
244 if(clus_stationEta == 1) phi_clus_count[0][0]++;
245 else phi_clus_count[1][0]++;
248 clus_noStrips = theClus->
rdoList().size();
253 bool clus_eta_status = clus_status && ( clus_noStrips > 2 ) && (clus_measuresPhi == 0);
254 bool clus_eta_eff = clus_stat_eff && ( clus_noStrips > 2 ) && (clus_measuresPhi == 0);
256 if(clus_stationEta == 1) eta_clus_count[0][1]++;
257 else eta_clus_count[1][1]++;
260 if(clus_stationEta == 1){
261 eta_clus_qsum[0][clus_wireLayer] = clus_qsum;
262 eta_clus_time[0][clus_wireLayer] = clus_time;
263 eta_clus_use[0][clus_wireLayer] = 1;
266 eta_clus_qsum[1][clus_wireLayer] = clus_qsum;
267 eta_clus_time[1][clus_wireLayer] = clus_time;
268 eta_clus_use[1][clus_wireLayer] = 1;
273 bool clus_phi_status = clus_status && ( clus_noStrips > 0 ) && (clus_measuresPhi == 1);
274 if(clus_phi_status) {
275 if(clus_stationEta==1){
276 phi_clus_qsum[0][clus_wireLayer] = clus_qsum;
277 phi_clus_time[0][clus_wireLayer] = clus_time;
278 phi_clus_use[0][clus_wireLayer] = 1;
279 phi_clus_count[0][1]++;
281 phi_clus_qsum[1][clus_wireLayer] = clus_qsum;
282 phi_clus_time[1][clus_wireLayer] = clus_time;
283 phi_clus_use[1][clus_wireLayer] = 1;
284 phi_clus_count[1][1]++;
289 if(clus_eta_status || clus_phi_status) clusCount[clus_isec][clus_ilay]++;
292 if(clus_eta_status) segmClustCount[clus_isec]++;
294 if(clus_eta_status) layerindex+=clus_wireLayer;
296 ATH_MSG_DEBUG(
"status = " << clus_stat <<
"\tcharge = " << clus_qsum <<
"\ttime= " << clus_time <<
"\tnstrips = " << clus_noStrips);
300 auto checkStatusEtaA =
Monitored::Scalar<int>(
"checkStatusEtaA", (
int) (clus_eta_status && (clus_stationEta==1)));
301 auto checkStatusEtaC =
Monitored::Scalar<int>(
"checkStatusEtaC", (
int) (clus_eta_status && (clus_stationEta==-1)));
302 auto checkTimeEtaA =
Monitored::Scalar<int>(
"checkTimeEtaA", (
int) (clus_eta_status && (clus_stationEta==1) && (std::abs(clus_time) <= 200)));
303 auto checkTimeEtaC =
Monitored::Scalar<int>(
"checkTimeEtaC", (
int) (clus_eta_status && (clus_stationEta==-1) && (std::abs(clus_time) <= 200)));
305 auto checkStatusPhiA =
Monitored::Scalar<int>(
"checkStatusPhiA", (
int) (clus_phi_status && (clus_stationEta==1)));
306 auto checkStatusPhiC =
Monitored::Scalar<int>(
"checkStatusPhiC", (
int) (clus_phi_status && (clus_stationEta==-1)));
307 auto checkTimePhiA =
Monitored::Scalar<int>(
"checkTimePhiA", (
int) (clus_phi_status && (clus_stationEta==1) && (std::abs(clus_time) <= 200)));
308 auto checkTimePhiC =
Monitored::Scalar<int>(
"checkTimePhiC", (
int) (clus_phi_status && (clus_stationEta==-1) && (std::abs(clus_time) <= 200)));
309 fill(
"CscSegmMonitor", clus_qsum_mon, clus_secLayer, clus_time_mon, checkStatusEtaA, checkStatusEtaC, checkTimeEtaA, checkTimeEtaC, checkStatusPhiA, checkStatusPhiC, checkTimePhiA, checkTimePhiC );
340 fill(
"CscSegmMonitor", tmp_etaClusA, checkClusEtaA, tmp_etaClusGoodA, checkClusEtaGoodA, tmp_phiClusA, tmp_phiClusGoodA, checkClusPhiA, checkClusPhiGoodA, tmp_etaClusC, checkClusEtaC, tmp_etaClusGoodC, checkClusEtaGoodC, tmp_phiClusC, tmp_phiClusGoodC, checkClusPhiC, checkClusPhiGoodC);
343 std::vector<int> tmp_layerIndexA;
344 std::vector<int> tmp_isectA;
345 std::vector<int> tmp_layerIndexC;
346 std::vector<int> tmp_isectC;
348 for(
int isect = 1; isect < 17; isect++) {
350 if(segmClustCount[isect+16] > 2 ) {
351 tmp_layerIndexA.push_back(layerindex-5);
352 tmp_isectA.push_back(isect);
355 if(segmClustCount[isect+16] > 3){
356 for(
int i=1;
i<=4;
i++) {
357 tmp_layerIndexA.push_back(
i);
358 tmp_isectA.push_back(isect);
362 if(segmClustCount[isect] > 2) {
363 tmp_layerIndexC.push_back(layerindex-5);
364 tmp_isectC.push_back(-1.*isect);
368 if(segmClustCount[isect] > 3) {
369 for(
int i=1;
i<=4;
i++) {
370 tmp_layerIndexC.push_back(
i);
371 tmp_isectC.push_back(-1.*isect);
380 fill(
"CscSegmMonitor", tmp_layerIndexA_mon, tmp_isectA_mon, tmp_layerIndexC_mon, tmp_isectC_mon);
382 float eta_clus_qsum_tot = 0., phi_clus_qsum_tot = 0.;
384 for(
unsigned int i=0;
i < 2;
i++){
385 eta_clus_qsum_tot = 0; phi_clus_qsum_tot = 0.;
387 for(
unsigned int j = 1; j <5; j++) {
391 fill(
"CscSegmMonitor", etaClusQSumA, phiClusQSumA);
393 if(std::abs(eta_clus_time[
i][j]) <= 200) {
395 fill(
"CscSegmMonitor", etaTimeClusA);
398 if(std::abs(phi_clus_time[
i][j]) <= 200) {
400 fill(
"CscSegmMonitor", phiTimeClusA);
407 fill(
"CscSegmMonitor", etaClusQSumC, phiClusQSumC);
409 if(std::abs(eta_clus_time[
i][j]) <= 200) {
411 fill(
"CscSegmMonitor", etaTimeClusC);
414 if(std::abs(phi_clus_time[
i][j]) <= 200) {
416 fill(
"CscSegmMonitor", phiTimeClusC);
420 if(phi_clus_use[
i][j] && eta_clus_use[
i][j]){
421 eta_clus_qsum_tot += eta_clus_qsum[
i][j];
422 phi_clus_qsum_tot += phi_clus_qsum[
i][j];
427 fill(
"CscSegmMonitor", etaQSumGoodClusA, phiQSumGoodClusA);
428 if(std::abs(eta_clus_time[
i][j]) <= 200){
430 fill(
"CscSegmMonitor", etaTimeGoodClusA);
433 if(std::abs(phi_clus_time[
i][j]) <= 200) {
435 fill(
"CscSegmMonitor", phiTimeGoodClusA);
442 fill(
"CscSegmMonitor", etaQSumGoodClusC, phiQSumGoodClusC);
443 if(std::abs(eta_clus_time[
i][j]) <= 200){
445 fill(
"CscSegmMonitor", etaTimeGoodClusC);
448 if(std::abs(phi_clus_time[
i][j]) <= 200) {
450 fill(
"CscSegmMonitor", phiTimeGoodClusC);
459 fill(
"CscSegmMonitor", etaQSumTotA, phiQSumTotA);
465 fill(
"CscSegmMonitor", etaQSumTotC, phiQSumTotC);
472 return StatusCode::SUCCESS;
494 for(
unsigned int i = 0;
i< mbs.size(); ++
i){
513 unsigned int nrHits(0);
516 for(
unsigned int i = 0;
i< mbs.size(); ++
i){
536 float s1corr =
s1 - 0.000119 * s0;
537 bool good_segm = std::abs(s1corr)<
cut ? true :
false;