187 const std::vector<Identifier>& stripIds = prd->
rdoList();
188 unsigned int nStrips = stripIds.size();
189 const std::vector<uint16_t>& stripNumbers = prd->
stripNumbers();
201 std::vector<short int> strip_times = prd->
stripTimes();
204 float R = std::hypot(pos.x(),pos.y());
208 vects.charge_all.push_back(
charge);
209 vects.numberofstrips_percluster.push_back(nStrips);
210 vects.x_mon.push_back(pos.x());
211 vects.y_mon.push_back(pos.y());
212 vects.z_mon.push_back(pos.z());
213 vects.R_mon.push_back(R);
220 int iside = (stationEta>0) ? 1 : 0;
222 auto& thisSect = occupancyPlots[sectorPhi-1][iside];
223 const int gap_offset=4;
224 int gas_gap8 = (multiplet==1) ? gas_gap : gas_gap + gap_offset;
229 thisSect.sector_lb.push_back(
bin);
232 vects.sector_CSide.push_back(
bin);
233 vects.stationPhi_CSide.push_back(sectorPhi);
235 vects.sector_ASide.push_back(
bin);
236 vects.stationPhi_ASide.push_back(sectorPhi);
241 float cluster_time = 0;
245 int stationEta_strip =
m_idHelperSvc->mmIdHelper().stationEta(
id);
246 vects.statEta_strip.push_back(stationEta_strip);
247 vects.strip_number.push_back(stripNumbers[sIdx]);
248 vects.strp_times.push_back(strip_times.at(sIdx));
249 cluster_time += strip_times.at(sIdx);
252 cluster_time /= strip_times.size();
253 vects.cl_times.push_back(cluster_time);
255 return StatusCode::SUCCESS;
297 const std::vector<Identifier>& stripIds = prd->
rdoList();
300 int thisStationEta =
m_idHelperSvc->mmIdHelper().stationEta(Id);
301 int thisStationPhi =
m_idHelperSvc->mmIdHelper().stationPhi(Id);
302 int thisMultiplet =
m_idHelperSvc->mmIdHelper().multilayer(Id);
305 float thisCharge=prd->
charge()*conversion_charge;
306 std::vector<short int> strip_times = prd->
stripTimes();
312 int iside = (thisStationEta>0) ? 1 : 0;
316 unsigned int csize = stripIds.size();
318 auto& Vectors = vects[iside][
phi-1][sectorEta][thisMultiplet-1][thisGasgap-1];
322 const std::vector<uint16_t>& stripNumbers=prd->
stripNumbers();
323 float cluster_time = 0;
331 Vectors.strp_times.push_back(strip_times.at(sIdx));
332 cluster_time += strip_times.at(sIdx);
334 Vectors.strip_number.push_back(stripNumbers[sIdx]);
341 Vectors.cl_size.push_back(csize);
342 Vectors.pcb.push_back(PCB);
343 cluster_time /= strip_times.size();
344 Vectors.cl_times.push_back(cluster_time);
345 Vectors.charge.push_back(thisCharge);
347 return StatusCode::SUCCESS;
352 for(
int iside=0; iside<2; ++iside) {
353 std::string MM_sideGroup =
"MM_sideGroup" + MM_Side[iside];
357 for(
int statPhi=0; statPhi<16; ++statPhi) {
358 for(
int multiplet=0; multiplet<2; ++multiplet) {
361 for(
int statEta=0; statEta<2; ++statEta) {
363 for(
int gas_gap=0; gas_gap<4; ++gas_gap) {
364 auto& Vectors = vects[iside][statPhi][statEta][multiplet][gas_gap];
365 auto sector_strip =
Monitored::Collection(
"sector_strip_" + MM_Side[iside] +
"_phi" + std::to_string(statPhi+1), Vectors.sector_strip);
366 auto strip_number =
Monitored::Collection(
"strip_number_" + MM_Side[iside] +
"_phi" + std::to_string(statPhi+1), Vectors.strip_number);
368 if(!Vectors.strip_number.empty())
370 auto cluster_size =
Monitored::Collection(
"cluster_size_" + MM_Side[iside] +
"_phi" + std::to_string(statPhi+1) +
"_eta" + std::to_string(statEta+1) +
"_ml" + std::to_string(multiplet+1) +
"_gap" + std::to_string(gas_gap+1), Vectors.cl_size);
371 auto strip_times =
Monitored::Collection(
"strp_time_" + MM_Side[iside] +
"_phi" + std::to_string(statPhi+1) +
"_eta" + std::to_string(statEta+1) +
"_ml" + std::to_string(multiplet+1) +
"_gap" + std::to_string(gas_gap+1), Vectors.strp_times);
372 auto cluster_time =
Monitored::Collection(
"cluster_time_" + MM_Side[iside] +
"_phi" + std::to_string(statPhi+1) +
"_eta" + std::to_string(statEta+1) +
"_ml" + std::to_string(multiplet+1) +
"_gap" + std::to_string(gas_gap+1), Vectors.cl_times);
373 auto charge_perPCB =
Monitored::Collection(
"charge_perPCB_" + MM_Side[iside] +
"_phi" + std::to_string(statPhi+1) +
"_eta" + std::to_string(statEta+1) +
"_ml" + std::to_string(multiplet+1) +
"_gap" + std::to_string(gas_gap+1), Vectors.charge);
374 auto charge_perlayer =
Monitored::Collection(
"charge_perlayer_" + MM_Side[iside] +
"_phi" + std::to_string(statPhi+1) +
"_ml" + std::to_string(multiplet+1) +
"_gap" + std::to_string(gas_gap+1), Vectors.charge);
375 auto cluster_size_perlayer =
Monitored::Collection(
"cluster_size_perlayer_" + MM_Side[iside] +
"_phi" + std::to_string(statPhi+1) +
"_ml" + std::to_string(multiplet+1) +
"_gap" + std::to_string(gas_gap+1), Vectors.cl_size);
376 auto pcb_mon =
Monitored::Collection(
"pcb_mon_" + MM_Side[iside] +
"_phi" + std::to_string(statPhi+1) +
"_eta" + std::to_string(statEta+1) +
"_ml" + std::to_string(multiplet+1) +
"_gap" + std::to_string(gas_gap+1), Vectors.pcb);
377 auto pcb_strip_mon =
Monitored::Collection(
"pcb_strip_mon_" + MM_Side[iside] +
"_phi" + std::to_string(statPhi+1) +
"_eta" + std::to_string(statEta+1) +
"_ml" + std::to_string(multiplet+1) +
"_gap" + std::to_string(gas_gap+1), Vectors.pcb_strip);
378 fill(MM_sideGroup, cluster_size, strip_times, cluster_time, charge_perPCB, pcb_mon, pcb_strip_mon, charge_perlayer, cluster_size_perlayer);
382 fill(MM_sideGroup, strip_number, sector_strip);
389 return StatusCode::SUCCESS;
400 for (
const auto* rdo : *mmtp) {
401 auto sourceID = rdo->sourceID();
402 auto moduleID = rdo->moduleID();
403 int s_side = (sourceID >> 16) == 107 ? 1:-1;
405 int iside= s_side>0 ? s_side : 0;
406 uint s_sector = (moduleID & 0xF) + 1;
407 int oct = (int)((s_sector-1)/2.);
408 float sector_pos=(45/180.)*
M_PI*oct;
409 if(s_sector%2==0 ) sector_pos=(45*oct+22.5)*
M_PI/180.;
410 if(sector_pos>
M_PI) sector_pos=sector_pos-2*
M_PI;
414 auto event_bcid=rdo->ROD_BCID();
418 std::vector<short unsigned int> art_bcids = rdo->art_BCID();
419 std::vector<unsigned char> layers=rdo->art_layer();
420 auto channels=rdo->art_channel();
422 fill(
"mmTrigger", trig_sector, lb_tri);
424 for (
long unsigned int i=0; i< rdo->art_BCID().
size(); i++ ){
425 auto art_layer=
static_cast<unsigned int>(layers[i]);
429 const int rollover=3564;
430 int art_bc=art_bcids[i];
431 int relative = art_bc - event_bcid;;
432 if (relative > rollover / 2) {
433 relative -= rollover;
434 }
else if (relative <= -rollover / 2) {
435 relative += rollover;
437 if (relative > (rollover-2048) / 2) {
438 relative -= (rollover-2048);
441 auto art_deltaBC_perSector=
Monitored::Scalar<int>(
"art_deltaBC_"+MM_Side[iside]+
"_s"+std::to_string(s_sector),relative);
444 fill(
"mmTrigger", art_channel, trig_sector, art_sector_layer, art_deltaBC, art_bc_mon, bcid, lb_tri, art_deltaBC_perSector);
447 auto bcids =rdo->trig_BCID();
448 auto dthetas=rdo->trig_dTheta();
449 auto rids=rdo->trig_ROI_rID();
450 auto phiids=rdo->trig_ROI_phiID() ;
453 std::unordered_map<int, int> NROIPerBC;
454 for (
int bc : bcids) NROIPerBC[bc]++;
455 for (
const auto& [value,
count] : NROIPerBC) {
457 fill(
"mmTrigger_roi", nROIPerBC, trig_sector);
460 int nROI=rdo->trig_BCID().size();
461 for (
int i=0; i< nROI; i++ ){
462 auto phiID = (phiids[i] & 0b11111) * ((phiids[i] >> 5) ? 1 : -1);
463 int sign = phiID > 0 ? 1 : -1;
464 auto phi_conv = (phiID-0.5*
sign)*(16./31.)*
M_PI/180. + sector_pos;
465 if(phi_conv>
M_PI)phi_conv = phi_conv - 2*
M_PI;
467 const float z_ref=7824.46;
468 const float r_step=(5000-900)/256.;
469 auto rID =
static_cast<unsigned int>(rids[i]);
470 float r_conv=r_step*rID+900;
471 float eta_conv=-log(0.5*atan(r_conv/z_ref))*s_side;
474 auto deltaBC_perSector=
Monitored::Scalar<int>(
"deltaBC_"+MM_Side[iside]+
"_s"+std::to_string(s_sector), bcids[i]-event_bcid);
487 fill(
"mmTrigger_roi", deltaBC, phiid, rid, trig_sector, phi_roi, eta_roi,r_roi, lb_tri, rid_sector, phiid_sector, deltaBC_perSector);
488 if(s_side>0)
fill(
"mmTrigger_roi", x_roi_sideA, y_roi_sideA);
489 if(s_side<0)
fill(
"mmTrigger_roi", x_roi_sideC, y_roi_sideC);
498 MMSummaryHistogramStruct summaryPlots[2][2][4];
499 MMSummaryHistogramStruct summaryPlots_full[2][16][2][2][4];
500 MMSummaryHistogramStruct sumPlots[2][16][2][2][4];
501 MMOverviewHistogramStruct overviewPlots;
502 MMByPhiStruct occupancyPlots[16][2];
514 if(!meTrack)
continue;
526 if(!cluster)
continue;
539 int iside = (stEta > 0) ? 1 : 0;
540 auto& vects = overviewPlots;
541 auto& thisSect = occupancyPlots[sectorPhi-1][iside];
545 const std::vector<Identifier>& stripIds = prd->
rdoList();
546 unsigned int csize = stripIds.size();
547 const std::vector<uint16_t>& stripNumbers = prd->
stripNumbers();
549 std::vector<short int> s_times = prd->
stripTimes();
551 vects.charge_all.push_back(
charge);
554 for(
unsigned int sIdx=0; sIdx<stripIds.size(); ++sIdx){
555 vects.strp_times.push_back(s_times.at(sIdx));
556 c_time += s_times.at(sIdx);
558 c_time /= s_times.size();
559 vects.cl_times.push_back(c_time);
562 auto& vect = sumPlots[iside][sectorPhi-1][std::abs(stEta)-1][multi-1][gap-1];
563 vect.cl_size.push_back(csize);
564 vect.pcb.push_back(PCB);
565 for(
unsigned int sIdx=0; sIdx<stripIds.size(); ++sIdx)
567 vect.strip_number.push_back(stripNumbers[sIdx]);
568 vect.strp_times.push_back(s_times.at(sIdx));
571 vect.cl_times.push_back(c_time);
572 vect.charge.push_back(
charge);
576 const int gap_offset=4;
577 int gas_gap8 = (multi==1) ? gap : gap + gap_offset;
581 thisSect.sector_lb_ontrack.push_back(
bin);
585 vects.sector_CSide_ontrack.push_back(
bin);
586 vects.stationPhi_CSide_ontrack.push_back(sectorPhi);
588 vects.sector_ASide_ontrack.push_back(
bin);
589 vects.stationPhi_ASide_ontrack.push_back(sectorPhi);
595 if(!(trkState))
continue;
598 Identifier surfaceId = (trkState)->surface().associatedDetectorElementIdentifier();
601 int trk_stEta =
m_idHelperSvc->mmIdHelper().stationEta(surfaceId);
602 int trk_stPhi =
m_idHelperSvc->mmIdHelper().stationPhi(surfaceId);
603 int trk_multi =
m_idHelperSvc->mmIdHelper().multilayer(surfaceId);
606 if( (trk_stPhi == stPhi) && (trk_stEta == stEta) && (trk_multi == multi) && (trk_gap == gap)) {
607 double x_trk = trkState->trackParameters()->parameters()[
Trk::loc1];
609 int side = (stEta > 0) ? 1 : 0;
610 float res_stereo = (
x - x_trk);
612 float stereo_angle = ((multi == 1 && gap < 3) || (multi == 2 && gap > 2)) ? 0 : 0.02618;
613 double y_trk = trkState->trackParameters()->parameters()[
Trk::locY];
614 float stereo_correction = ( (multi == 1 && gap < 3) || (multi == 2 && gap > 2) ) ? 0 : ( ((multi == 1 && gap == 3) || (multi == 2 && gap ==1 )) ? (-std::sin(stereo_angle)*y_trk) : std::sin(stereo_angle)*y_trk );
615 res_stereo = (
x - x_trk)*std::cos(stereo_angle) - stereo_correction;
620 fill(
"mmMonitor", residual_mon, eta_trk, phi_trk, stPhi_mon);
624 auto& vectors = summaryPlots_full[side][sectorPhi-1][abs_stEta][multi-1][gap-1];
625 vectors.residuals.push_back(res_stereo);
633 fill(
"mmMonitor", pt_trk);
637 for(
int iside = 0; iside < 2; ++iside) {
638 std::string MM_sideGroup =
"MM_sideGroup" + MM_Side[iside];
639 for(
int statPhi = 0; statPhi < 16; ++statPhi) {
641 for(
int multiplet = 0; multiplet < 2; ++multiplet) {
642 for(
int gas_gap = 0; gas_gap < 4; ++gas_gap) {
643 auto layer=gas_gap+multiplet*4;
644 MMSummaryHistogramStruct vects;
645 for(
int statEta = 0; statEta < 2; ++statEta) {
646 vects = summaryPlots_full[iside][statPhi][statEta][multiplet][gas_gap];
647 auto residuals_gap =
Monitored::Collection(
"residuals_"+MM_Side[iside]+
"_phi"+std::to_string(statPhi+1)+
"_stationEta"+EtaSector[statEta]+
"_multiplet"+std::to_string(multiplet+1)+
"_gas_gap"+std::to_string(gas_gap+1),vects.residuals);
648 auto residuals_layer =
Monitored::Collection(
"residuals_"+MM_Side[iside]+
"_phi"+std::to_string(statPhi+1)+
"_layer"+std::to_string(layer+1),vects.residuals);
650 fill(MM_sideGroup, residuals_gap,residuals_layer);
659 if(!(trkState))
continue;
661 Identifier surfaceId = (trkState)->surface().associatedDetectorElementIdentifier();
672 const Amg::Vector3D& pos = (trkState)->trackParameters()->position();
673 int stEta =
m_idHelperSvc->mmIdHelper().stationEta(surfaceId);
674 int multi =
m_idHelperSvc->mmIdHelper().multilayer(surfaceId);
678 int iside = (stEta > 0) ? 1 : 0;
679 auto& Vectors = summaryPlots[iside][multi-1][gap-1];
682 Vectors.x_ontrack.push_back(pos.x());
683 Vectors.y_ontrack.push_back(pos.y());
688 fill(
"mmMonitor", ntrack);
690 auto& vects = overviewPlots;
691 auto stationPhi_CSide_ontrack =
Monitored::Collection(
"stationPhi_CSide_ontrack",vects.stationPhi_CSide_ontrack);
692 auto stationPhi_ASide_ontrack =
Monitored::Collection(
"stationPhi_ASide_ontrack",vects.stationPhi_ASide_ontrack);
693 auto sector_ASide_ontrack =
Monitored::Collection(
"sector_ASide_ontrack",vects.sector_ASide_ontrack);
694 auto sector_CSide_ontrack =
Monitored::Collection(
"sector_CSide_ontrack",vects.sector_CSide_ontrack);
702 fill(
"mmMonitor", csize,
charge,
stime, ctime, stationPhi_CSide_ontrack, stationPhi_ASide_ontrack, sector_CSide_ontrack,sector_ASide_ontrack, lb_ontrack);
704 for(
int iside = 0; iside < 2; ++iside) {
705 std::string MM_sideGroup =
"MM_sideGroup" + MM_Side[iside];
706 for(
int statPhi = 0; statPhi < 16; ++statPhi) {
707 for(
int statEta = 0; statEta < 2; ++statEta) {
708 for(
int multiplet = 0; multiplet < 2; ++multiplet) {
709 for(
int gas_gap = 0; gas_gap < 4; ++gas_gap) {
710 auto& vects = sumPlots[iside][statPhi][statEta][multiplet][gas_gap];
712 if(!vects.strip_number.empty())
714 auto clus_size =
Monitored::Collection(
"cluster_size_ontrack_" + MM_Side[iside] +
"_phi" + std::to_string(statPhi+1) +
"_eta" + std::to_string(statEta+1) +
"_ml" + std::to_string(multiplet+1) +
"_gap" + std::to_string(gas_gap+1), vects.cl_size);
715 auto strip_times =
Monitored::Collection(
"strp_time_ontrack_" + MM_Side[iside] +
"_phi" + std::to_string(statPhi+1) +
"_eta" + std::to_string(statEta+1) +
"_ml" + std::to_string(multiplet+1) +
"_gap" + std::to_string(gas_gap+1), vects.strp_times);
716 auto cluster_time =
Monitored::Collection(
"cluster_time_ontrack_" + MM_Side[iside] +
"_phi" + std::to_string(statPhi+1) +
"_eta" + std::to_string(statEta+1) +
"_ml" + std::to_string(multiplet+1) +
"_gap" + std::to_string(gas_gap+1), vects.cl_times);
717 auto charge_perPCB =
Monitored::Collection(
"charge_perPCB_ontrack_" + MM_Side[iside] +
"_phi" + std::to_string(statPhi+1) +
"_eta" + std::to_string(statEta+1) +
"_ml" + std::to_string(multiplet+1) +
"_gap" + std::to_string(gas_gap+1), vects.charge);
718 auto charge_perlayer =
Monitored::Collection(
"charge_perlayer_ontrack_" + MM_Side[iside] +
"_phi" + std::to_string(statPhi+1) +
"_ml" + std::to_string(multiplet+1) +
"_gap" + std::to_string(gas_gap+1), vects.charge);
719 auto clus_size_perlayer =
Monitored::Collection(
"cluster_size_perlayer_ontrack_" + MM_Side[iside] +
"_phi" + std::to_string(statPhi+1) +
"_ml" + std::to_string(multiplet+1) +
"_gap" + std::to_string(gas_gap+1), vects.cl_size);
720 auto pcb_mon =
Monitored::Collection(
"pcb_mon_ontrack_" + MM_Side[iside] +
"_phi" + std::to_string(statPhi+1) +
"_eta" + std::to_string(statEta+1) +
"_ml" + std::to_string(multiplet+1) +
"_gap" + std::to_string(gas_gap+1), vects.pcb);
721 auto pcb_strip_mon =
Monitored::Collection(
"pcb_strip_mon_ontrack_" + MM_Side[iside] +
"_phi" + std::to_string(statPhi+1) +
"_eta" + std::to_string(statEta+1) +
"_ml" + std::to_string(multiplet+1) +
"_gap" + std::to_string(gas_gap+1), vects.pcb_strip);
723 fill(MM_sideGroup, clus_size, strip_times, cluster_time, charge_perPCB, pcb_mon, pcb_strip_mon,charge_perlayer,clus_size_perlayer);
730 auto& occ_lb = occupancyPlots[statPhi][iside];
731 auto sector_lb_ontrack =
Monitored::Collection(
"sector_lb_"+MM_Side[iside]+
"_phi"+std::to_string(statPhi+1)+
"_ontrack",occ_lb.sector_lb_ontrack);
732 fill(MM_sideGroup, lb_ontrack, sector_lb_ontrack);
734 for(
int multiplet=0; multiplet<2; ++multiplet) {
735 for(
int gas_gap=0; gas_gap<4; ++gas_gap) {
736 auto& Vectors = summaryPlots[iside][multiplet][gas_gap];
737 auto x_ontrack =
Monitored::Collection(
"x_"+MM_Side[iside]+
"_multiplet"+std::to_string(multiplet+1)+
"_gas_gap_"+std::to_string(gas_gap+1)+
"_ontrack", Vectors.x_ontrack);
738 auto y_ontrack =
Monitored::Collection(
"y_"+MM_Side[iside]+
"_multiplet"+std::to_string(multiplet+1)+
"_gas_gap_"+std::to_string(gas_gap+1)+
"_ontrack", Vectors.y_ontrack);
739 fill(MM_sideGroup, x_ontrack, y_ontrack);
748 MMEfficiencyHistogramStruct effPlots[2][2][16][2][4];
749 MMEfficiencyHistogramStruct Gaps[2][2][16][2];
751 static const std::array<std::string,2> MM_Side = {
"CSide",
"ASide"};
752 static const std::array<std::string,2> EtaSector = {
"1",
"2"};
759 float pt_trk = meTP->pt();
763 if(!meTrack)
continue;
774 if (!cluster)
continue;
784 int iside = (stEta > 0) ? 1 : 0;
785 if( ! (std::find( Gaps[iside][abs_stEta][
phi-1][multi-1].nGaps.begin(), Gaps[iside][abs_stEta][
phi-1][multi-1].nGaps.end(), gap ) != Gaps[iside][abs_stEta][
phi-1][multi-1].nGaps.end()) )
786 Gaps[iside][abs_stEta][
phi-1][multi-1].nGaps.push_back(gap);
788 if(effPlots[iside][abs_stEta][
phi-1][multi-1][gap-1].num.size()==0) effPlots[iside][abs_stEta][
phi-1][multi-1][gap-1].num.push_back(pcb-1);
792 unsigned int nGaptag=3;
794 for(
int s=0; s<2; ++s) {
795 std::string MM_sideGroup =
"MM_sideGroup"+MM_Side[s];
796 for(
int e=0; e<2; ++e) {
797 for(
int p=0; p<16; ++p) {
798 for(
int m=0; m<2; ++m) {
799 if(Gaps[s][e][p][m].nGaps.size()<nGaptag)
continue;
800 if(Gaps[s][e][p][m].nGaps.size()>4)
continue;
803 for (
unsigned int g=0; g<Gaps[s][e][p][m].nGaps.size(); ++g)
804 gapsum+= Gaps[s][e][p][m].nGaps.at(g);
805 int missing_gap=10-gapsum-1;
807 if(Gaps[s][e][p][m].nGaps.size()==4){
808 for (
unsigned int ga=0; ga<Gaps[s][e][p][m].nGaps.size(); ++ga){
809 for (
unsigned int i=0; i<effPlots[s][e][p][m][ga].num.size(); ++i){
810 int pcb = effPlots[s][e][p][m][ga].num.at(i);
811 auto traversed_pcb =
Monitored::Scalar<int>(
"pcb_eta"+std::to_string(e+1)+
"_"+MM_Side[s]+
"_phi"+std::to_string(p)+
"_multiplet"+std::to_string(m+1)+
"_gas_gap"+std::to_string(ga+1),pcb);
812 int layer=ga+4*m+8*p;
817 fill(MM_sideGroup, traversed_pcb, traversed_gap, hitcut);
821 int ref_gap = missing_gap+1;
822 if(missing_gap==3) ref_gap=0;
824 ATH_MSG_FATAL(
"ref_gap is out of range in MMRawDataMonAlg::MMEfficiency");
827 int ref_pcb=effPlots[s][e][p][m][ref_gap].num.at(0);
828 auto traversed_pcb =
Monitored::Scalar<int>(
"pcb_eta"+std::to_string(e+1)+
"_"+MM_Side[s]+
"_phi"+std::to_string(p)+
"_multiplet"+std::to_string(m+1)+
"_gas_gap"+std::to_string(missing_gap+1), ref_pcb);
829 int layer=missing_gap+4*m+8*p;
833 fill(MM_sideGroup, traversed_pcb, traversed_gap, hitcut);
846 MMOverviewHistogramStruct overviewPlots;
847 MMByPhiStruct occupancyPlots[16][2];
848 MMSummaryHistogramStruct summaryPlots[2][16][2][2][4];
853 if (segment ==
nullptr) {
865 if(!cluster)
continue;
877 int iside = (stEta > 0) ? 1 : 0;
880 const std::vector<Identifier>& stripIds = prd->
rdoList();
881 unsigned int csize = stripIds.size();
882 const std::vector<uint16_t>& stripNumbers = prd->
stripNumbers();
884 auto& pcb_vects = summaryPlots[iside][sectorPhi-1][std::abs(stEta)-1][multi-1][gap-1];
885 pcb_vects.cl_size.push_back(csize);
886 pcb_vects.pcb.push_back(PCB);
887 std::vector<short int> s_times = prd->
stripTimes();
889 for(
unsigned int sIdx=0; sIdx<csize; ++sIdx) {
890 pcb_vects.strp_times.push_back(s_times.at(sIdx));
892 c_time += s_times.at(sIdx);
894 c_time /= s_times.size();
895 pcb_vects.cl_times.push_back(c_time);
898 pcb_vects.charge.push_back(
charge);
900 auto& vects = overviewPlots;
902 auto& thisSect = occupancyPlots[sectorPhi-1][iside];
904 const int gap_offset=4;
905 int gas_gap8 = (multi==1) ? gap : gap + gap_offset;
909 thisSect.sector_lb_onseg.push_back(
bin);
912 vects.sector_CSide_onseg.push_back(
bin);
913 vects.stationPhi_CSide_onseg.push_back(sectorPhi);
915 vects.sector_ASide_onseg.push_back(
bin);
916 vects.stationPhi_ASide_onseg.push_back(sectorPhi);
920 if (isMM==
true) ++nseg;
924 fill(
"mmMonitor", nsegs);
926 auto& vects = overviewPlots;
927 auto stationPhi_CSide_onseg =
Monitored::Collection(
"stationPhi_CSide_onseg",vects.stationPhi_CSide_onseg);
928 auto stationPhi_ASide_onseg =
Monitored::Collection(
"stationPhi_ASide_onseg",vects.stationPhi_ASide_onseg);
934 fill(
"mmMonitor", stationPhi_CSide_onseg, stationPhi_ASide_onseg, sector_CSide_onseg, sector_ASide_onseg, lb_onseg);
936 for(
int iside = 0; iside < 2; ++iside) {
937 std::string MM_sideGroup =
"MM_sideGroup" + MM_Side[iside];
938 for(
int statPhi=0; statPhi<16; ++statPhi) {
939 auto& occ_lb = occupancyPlots[statPhi][iside];
940 auto sector_lb_onseg =
Monitored::Collection(
"sector_lb_"+MM_Side[iside]+
"_phi"+std::to_string(statPhi+1)+
"_onseg",occ_lb.sector_lb_onseg);
941 fill(MM_sideGroup, lb_onseg, sector_lb_onseg);
943 for(
int statEta = 0; statEta < 2; ++statEta) {
944 for(
int multiplet = 0; multiplet < 2; ++multiplet) {
945 for(
int gas_gap = 0; gas_gap < 4; ++gas_gap) {
946 auto& pcb_vects = summaryPlots[iside][statPhi][statEta][multiplet][gas_gap];
948 if(pcb_vects.pcb.empty())
continue;
950 auto pcb_mon =
Monitored::Collection(
"pcb_mon_onseg_" + MM_Side[iside] +
"_phi" + std::to_string(statPhi+1) +
"_eta" + std::to_string(statEta+1) +
"_ml" + std::to_string(multiplet+1) +
"_gap" + std::to_string(gas_gap+1), pcb_vects.pcb);
951 auto pcb_strip_mon =
Monitored::Collection(
"pcb_strip_mon_onseg_" + MM_Side[iside] +
"_phi" + std::to_string(statPhi+1) +
"_eta" + std::to_string(statEta+1) +
"_ml" + std::to_string(multiplet+1) +
"_gap" + std::to_string(gas_gap+1), pcb_vects.pcb_strip);
952 auto strip_times =
Monitored::Collection(
"strp_time_onseg_" + MM_Side[iside] +
"_phi" + std::to_string(statPhi+1) +
"_eta" + std::to_string(statEta+1) +
"_ml" + std::to_string(multiplet+1) +
"_gap" + std::to_string(gas_gap+1), pcb_vects.strp_times);
953 auto cluster_time =
Monitored::Collection(
"cluster_time_onseg_" + MM_Side[iside] +
"_phi" + std::to_string(statPhi+1) +
"_eta" + std::to_string(statEta+1) +
"_ml" + std::to_string(multiplet+1) +
"_gap" + std::to_string(gas_gap+1), pcb_vects.cl_times);
954 auto clus_size =
Monitored::Collection(
"cluster_size_onseg_" + MM_Side[iside] +
"_phi" + std::to_string(statPhi+1) +
"_eta" + std::to_string(statEta+1) +
"_ml" + std::to_string(multiplet+1) +
"_gap" + std::to_string(gas_gap+1), pcb_vects.cl_size);
955 auto charge_perPCB =
Monitored::Collection(
"charge_perPCB_onseg_" + MM_Side[iside] +
"_phi" + std::to_string(statPhi+1) +
"_eta" + std::to_string(statEta+1) +
"_ml" + std::to_string(multiplet+1) +
"_gap" + std::to_string(gas_gap+1), pcb_vects.charge);
957 fill(MM_sideGroup, clus_size, strip_times, charge_perPCB, cluster_time, pcb_mon, pcb_strip_mon);
962 fill(
"mmMonitor", clus_size_all, charge_all, strip_times_all);