87StatusCode L2MuonSAIOMon :: fillVariablesPerOfflineMuonPerChain(
const EventContext& ctx,
const xAOD::Muon* mu,
const std::string &chain)
const {
100 offPt = mu->pt()/1e3 * mu->charge();
103 float offCharge = mu->charge();
106 if( chain.find(
"probe") != std::string::npos ){
107 if(chain.find(
"L1MU14FCH") != std::string::npos){
110 else if(chain.find(
"L1MU18VFCH") != std::string::npos){
115 return StatusCode::SUCCESS;
120 if( tag ==
nullptr )
return StatusCode::SUCCESS;
128 if( !tag_ms_track.
isValid() )
return StatusCode::SUCCESS;
130 if( !probe_ms_track.
isValid() )
return StatusCode::SUCCESS;
131 float tpext_deta = (*tag_ms_track)->eta() - (*probe_ms_track)->eta();
133 offdR = std::sqrt(tpext_deta*tpext_deta + tpext_dphi*tpext_dphi);
135 passL2InsideOut =
false;
139 int legIndex_probe = 1;
148 ATH_CHECK( probe_L2SALinkInfo.isValid() );
150 if(
m_matchTool->isMatchedL2SA( (*probe_L2SAobject), mu ) ){
155 if(passL2SA ==
true){
156 if(
m_matchTool->isMatchedL2InsideOut( Trig_L2IOobject, mu ))
160 passL2InsideOut = isPass;
164 return StatusCode::SUCCESS;
168 fill(
m_group+
"_"+chain, passL2InsideOut, passL2SA, offPt);
171 fill(
m_group+
"_"+chain, passL2InsideOut, passL2SA, offEta, offPhi, offdR);
175 if( Trig_L2IOobject ==
nullptr )
return StatusCode::SUCCESS;
176 if( !
m_matchTool->isMatchedL2InsideOut(Trig_L2IOobject, mu) )
return StatusCode::SUCCESS;
188 std::vector< int > L2Muon_chamberID_index;
189 auto mon_L2Muon_chamberID_index =
Monitored::Collection(chain+
"_L2Muon_chamberID_index",L2Muon_chamberID_index);
190 for(
int i = 0; i < 6; i++){
191 L2Muon_chamberID_index.push_back(i);
199 const float ETA_OF_BARREL = 1.05;
214 if( std::abs(offEta) < ETA_OF_BARREL ) {
217 if( offEta > 0. ) isBarrelA =
true;
218 else isBarrelC =
true;
223 if( offEta > 0. ) isEndcapA =
true;
224 else isEndcapC =
true;
227 if( std::abs(offPt) > 4 ){
228 if( std::abs(offPt) < 6 ) pt4to6 =
true;
229 else if( std::abs(offPt) < 8 ) pt6to8 =
true;
237 cbioPt = Trig_L2IOobject->
pt()/1e3 * Trig_L2IOobject->
charge();
238 cbioEta = Trig_L2IOobject->
eta();
239 cbioPhi = Trig_L2IOobject->
phi();
243 L2InsideOut_multiplicity = 0;
244 std::vector< const xAOD::L2CombinedMuon* > Trig_L2IOobjects_tmp;
246 for(
const auto& Trig_L2IOobject_tmp : Trig_L2IOobjects_tmp){
247 if( Trig_L2IOobject_tmp->muSATrack()->roiWord() == Trig_L2IOobject->
muSATrack()->
roiWord() ) L2InsideOut_multiplicity++;
253 ptresol = std::abs(cbioPt)/std::abs(offPt) - 1.;
256 std::vector< float > ptresol_pos, ptresol_neg;
259 if( offCharge > 0. ) ptresol_pos.push_back(ptresol);
260 else ptresol_neg.push_back(ptresol);
263 std::vector< float > distance_bw_FTFroad_and_offlinesegment_Inn_Barrel;
264 std::vector< float > distance_bw_FTFroad_and_offlinesegment_Mid_Barrel;
265 std::vector< float > distance_bw_FTFroad_and_offlinesegment_Out_Barrel;
266 std::vector< float > distance_bw_FTFroad_and_offlinesegment_Inn_Endcap;
267 std::vector< float > distance_bw_FTFroad_and_offlinesegment_Mid_Endcap;
268 std::vector< float > distance_bw_FTFroad_and_offlinesegment_Out_Endcap;
269 auto mon_distance_bw_FTFroad_and_offlinesegment_Inn_Barrel =
Monitored::Collection(chain+
"_distance_bw_FTFroad_and_offlinesegment_Inn_Barrel",distance_bw_FTFroad_and_offlinesegment_Inn_Barrel);
270 auto mon_distance_bw_FTFroad_and_offlinesegment_Mid_Barrel =
Monitored::Collection(chain+
"_distance_bw_FTFroad_and_offlinesegment_Mid_Barrel",distance_bw_FTFroad_and_offlinesegment_Mid_Barrel);
271 auto mon_distance_bw_FTFroad_and_offlinesegment_Out_Barrel =
Monitored::Collection(chain+
"_distance_bw_FTFroad_and_offlinesegment_Out_Barrel",distance_bw_FTFroad_and_offlinesegment_Out_Barrel);
272 auto mon_distance_bw_FTFroad_and_offlinesegment_Inn_Endcap =
Monitored::Collection(chain+
"_distance_bw_FTFroad_and_offlinesegment_Inn_Endcap",distance_bw_FTFroad_and_offlinesegment_Inn_Endcap);
273 auto mon_distance_bw_FTFroad_and_offlinesegment_Mid_Endcap =
Monitored::Collection(chain+
"_distance_bw_FTFroad_and_offlinesegment_Mid_Endcap",distance_bw_FTFroad_and_offlinesegment_Mid_Endcap);
274 auto mon_distance_bw_FTFroad_and_offlinesegment_Out_Endcap =
Monitored::Collection(chain+
"_distance_bw_FTFroad_and_offlinesegment_Out_Endcap",distance_bw_FTFroad_and_offlinesegment_Out_Endcap);
276 std::vector< float > distance_bw_FTFroad_and_offlinesegment_vec;
277 std::vector< float > FTFroad_Aw;
278 std::vector< float > FTFroad_Bw;
279 std::vector< bool > FTFroad_fill;
280 for(
int i=0; i<6; i++){
281 distance_bw_FTFroad_and_offlinesegment_vec.push_back(10000.);
284 FTFroad_fill.push_back(
false);
288 std::vector<float> res_Inn_Barrel, res_Mid_Barrel, res_Out_Barrel, res_Inn_Endcap, res_Mid_Endcap, res_Out_Endcap;
297 std::vector< float > distance_bw_MDT_and_offlinesegment_Inn_Barrel;
298 std::vector< float > distance_bw_MDT_and_offlinesegment_Mid_Barrel;
299 std::vector< float > distance_bw_MDT_and_offlinesegment_Out_Barrel;
300 std::vector< float > distance_bw_MDT_and_offlinesegment_Inn_Endcap;
301 std::vector< float > distance_bw_MDT_and_offlinesegment_Mid_Endcap;
302 std::vector< float > distance_bw_MDT_and_offlinesegment_Out_Endcap;
303 auto mon_distance_bw_MDT_and_offlinesegment_Inn_Barrel =
Monitored::Collection(chain+
"_distance_bw_MDT_and_offlinesegment_Inn_Barrel",distance_bw_MDT_and_offlinesegment_Inn_Barrel);
304 auto mon_distance_bw_MDT_and_offlinesegment_Mid_Barrel =
Monitored::Collection(chain+
"_distance_bw_MDT_and_offlinesegment_Mid_Barrel",distance_bw_MDT_and_offlinesegment_Mid_Barrel);
305 auto mon_distance_bw_MDT_and_offlinesegment_Out_Barrel =
Monitored::Collection(chain+
"_distance_bw_MDT_and_offlinesegment_Out_Barrel",distance_bw_MDT_and_offlinesegment_Out_Barrel);
306 auto mon_distance_bw_MDT_and_offlinesegment_Inn_Endcap =
Monitored::Collection(chain+
"_distance_bw_MDT_and_offlinesegment_Inn_Endcap",distance_bw_MDT_and_offlinesegment_Inn_Endcap);
307 auto mon_distance_bw_MDT_and_offlinesegment_Mid_Endcap =
Monitored::Collection(chain+
"_distance_bw_MDT_and_offlinesegment_Mid_Endcap",distance_bw_MDT_and_offlinesegment_Mid_Endcap);
308 auto mon_distance_bw_MDT_and_offlinesegment_Out_Endcap =
Monitored::Collection(chain+
"_distance_bw_MDT_and_offlinesegment_Out_Endcap",distance_bw_MDT_and_offlinesegment_Out_Endcap);
309 std::vector< float > distance_bw_MDT_and_offlinesegment_vec;
310 std::vector< int > MDTHitChamber_fill;
311 std::vector< int > MDTHitChamber;
312 std::vector< float > MDTHitR;
313 std::vector< float > MDTHitZ;
316 std::vector<int> MDT_N_Inn_Barrel, MDT_N_Mid_Barrel, MDT_N_Out_Barrel, MDT_N_Inn_Endcap, MDT_N_Mid_Endcap, MDT_N_Out_Endcap;
323 int n_mdthits_BI = 0;
324 int n_mdthits_BM = 0;
325 int n_mdthits_BO = 0;
326 int n_mdthits_EI = 0;
327 int n_mdthits_EM = 0;
328 int n_mdthits_EO = 0;
331 for(
int i_tube=0; i_tube<n_mdt_hits; i_tube++){
335 MDTHitChamber.push_back(imr);
339 if( imr == Inn_Barrel ){
341 res_Inn_Barrel.push_back(
res);
343 else if( imr == Mid_Barrel ){
345 res_Mid_Barrel.push_back(
res);
347 else if( imr == Out_Barrel ){
349 res_Out_Barrel.push_back(
res);
351 else if( imr == Inn_Endcap ){
353 res_Inn_Endcap.push_back(
res);
355 else if( imr == Mid_Endcap ){
357 res_Mid_Endcap.push_back(
res);
359 else if( imr == Out_Endcap ){
361 res_Out_Endcap.push_back(
res);
366 std::vector<bool> superpoint_exist_pt4to6, superpoint_exist_pt6to8, superpoint_exist_ptover8;
367 auto mon_superpoint_exist_pt4to6 =
Monitored::Collection(chain+
"_superpoint_pt4to6",superpoint_exist_pt4to6);
368 auto mon_superpoint_exist_pt6to8 =
Monitored::Collection(chain+
"_superpoint_pt6to8",superpoint_exist_pt6to8);
369 auto mon_superpoint_exist_ptover8 =
Monitored::Collection(chain+
"_superpoint_ptover8",superpoint_exist_ptover8);
370 std::vector<bool> segment_superpoint_exist(6,
false);
371 std::vector<bool> offlinesegment_exist_pt4to6, offlinesegment_exist_pt6to8, offlinesegment_exist_ptover8;
372 auto mon_offlinesegment_exist_pt4to6 =
Monitored::Collection(chain+
"_offlinesegment_pt4to6",offlinesegment_exist_pt4to6);
373 auto mon_offlinesegment_exist_pt6to8 =
Monitored::Collection(chain+
"_offlinesegment_pt6to8",offlinesegment_exist_pt6to8);
374 auto mon_offlinesegment_exist_ptover8 =
Monitored::Collection(chain+
"_offlinesegment_ptover8",offlinesegment_exist_ptover8);
378 std::vector< bool > superpoint_exist;
379 std::vector< float > superpointR;
380 int Num_L2Muon_chamberID = 12;
381 for(
int i_chamber = 0; i_chamber < Num_L2Muon_chamberID; i_chamber++){
383 superpoint_exist.push_back(
false);
386 superpoint_exist.push_back(
true);
387 superpoint_multiplicity++;
393 std::vector< bool > segment_exist(6,
false);
394 for(
unsigned int i_seg = 0; i_seg < mu->nMuonSegments(); i_seg++){
396 if(!segment)
continue;
397 float segmentX = segment->
x();
398 float segmentY = segment->
y();
399 float segmentZ = segment->
z();
400 float segmentR = std::sqrt( std::pow(segmentX, 2.0) + std::pow(segmentY, 2.0) );
401 float segmentPx = segment->
px();
402 float segmentPy = segment->
py();
403 float segmentPz = segment->
pz();
404 float segmentSector = segment->
sector();
407 float distance_bw_FTFroad_and_offlinesegment = 99999.;
408 float distance_bw_MDT_and_offlinesegment = 99999.;
409 int roadChamberIndex = -1;
410 int MDTChamberIndex = -1;
411 if( segmentChamberIndex == 0 || segmentChamberIndex == 1 ){
412 segment_exist.at(Inn_Barrel) =
true;
413 roadChamberIndex = Inn_Barrel;
414 MDTChamberIndex = Inn_Barrel;
416 else if( segmentChamberIndex == 2 || segmentChamberIndex == 3 ){
417 segment_exist.at(Mid_Barrel) =
true;
418 roadChamberIndex = Mid_Barrel;
419 MDTChamberIndex = Mid_Barrel;
421 else if( segmentChamberIndex == 4 || segmentChamberIndex == 5 ){
422 segment_exist.at(Out_Barrel) =
true;
423 roadChamberIndex = Out_Barrel;
424 MDTChamberIndex = Out_Barrel;
426 else if( segmentChamberIndex == 7 || segmentChamberIndex == 8 ){
427 segment_exist.at(Inn_Endcap) =
true;
428 roadChamberIndex = Inn_Endcap;
429 MDTChamberIndex = Inn_Endcap;
431 else if( segmentChamberIndex == 9 || segmentChamberIndex == 10 ){
432 segment_exist.at(Mid_Endcap) =
true;
433 roadChamberIndex = Mid_Endcap;
434 MDTChamberIndex = Mid_Endcap;
436 else if( segmentChamberIndex == 11 || segmentChamberIndex == 12 ){
437 segment_exist.at(Out_Endcap) =
true;
438 roadChamberIndex = Out_Endcap;
439 MDTChamberIndex = Out_Endcap;
443 if( roadChamberIndex != -1 ){
444 if( FTFroad_Aw.at(roadChamberIndex) >
ZERO_LIMIT || FTFroad_Bw.at(roadChamberIndex) >
ZERO_LIMIT ){
445 FTFroad_fill.at(roadChamberIndex) =
true;
446 if( FTFroad_Aw.at(roadChamberIndex) <
ZERO_LIMIT) distance_bw_FTFroad_and_offlinesegment = segmentR - FTFroad_Bw.at(roadChamberIndex);
448 float ia = 1.0/FTFroad_Aw.at(roadChamberIndex);
450 distance_bw_FTFroad_and_offlinesegment = (segmentZ - ia * (segmentR - FTFroad_Bw.at(roadChamberIndex)))/std::sqrt(1.0 + iaq);
452 if( std::abs(distance_bw_FTFroad_and_offlinesegment) < std::abs(distance_bw_FTFroad_and_offlinesegment_vec.at(roadChamberIndex)) )
453 distance_bw_FTFroad_and_offlinesegment_vec.at(roadChamberIndex) = distance_bw_FTFroad_and_offlinesegment;
458 if( MDTChamberIndex != -1 ){
459 float sector_phi =
M_PI*(segmentSector - 1.0)/8.0;
460 float segmentR_projection = segmentX * std::cos(sector_phi) + segmentY * std::sin(sector_phi);
461 float segmentPr_projection = segmentPx * std::cos(sector_phi) + segmentPy * std::sin(sector_phi);
463 for(
unsigned int i_tube=0; i_tube<MDTHitChamber.size(); i_tube++){
464 if( MDTHitChamber.at(i_tube) != MDTChamberIndex )
continue;
465 if( MDTChamberIndex < 3 ){
466 if( std::abs(segmentPz) <
ZERO_LIMIT ) distance_bw_MDT_and_offlinesegment = MDTHitZ.at(i_tube) - segmentZ;
468 float denominator = segmentPr_projection/segmentPz;
469 if( std::abs(denominator) <
ZERO_LIMIT )
continue;
470 distance_bw_MDT_and_offlinesegment = MDTHitZ.at(i_tube) - ((MDTHitR.at(i_tube) - segmentR_projection)/denominator + segmentZ);
475 distance_bw_MDT_and_offlinesegment = MDTHitR.at(i_tube) - segmentR;
478 float coeffi = (MDTHitZ.at(i_tube) - segmentZ)/segmentPz;
479 float segmentR_extrapolated = std::sqrt(std::pow(segmentX + coeffi * segmentPx, 2.0) + std::pow(segmentY + coeffi * segmentPy, 2.0));
480 distance_bw_MDT_and_offlinesegment = MDTHitR.at(i_tube) - segmentR_extrapolated;
483 distance_bw_MDT_and_offlinesegment_vec.push_back(distance_bw_MDT_and_offlinesegment);
484 MDTHitChamber_fill.push_back(MDTHitChamber.at(i_tube));
489 if( FTFroad_fill.at(Inn_Barrel) ){
490 distance_bw_FTFroad_and_offlinesegment_Inn_Barrel.push_back(distance_bw_FTFroad_and_offlinesegment_vec.at(Inn_Barrel));
492 if( FTFroad_fill.at(Mid_Barrel) ){
493 distance_bw_FTFroad_and_offlinesegment_Mid_Barrel.push_back(distance_bw_FTFroad_and_offlinesegment_vec.at(Mid_Barrel));
495 if( FTFroad_fill.at(Out_Barrel) ){
496 distance_bw_FTFroad_and_offlinesegment_Out_Barrel.push_back(distance_bw_FTFroad_and_offlinesegment_vec.at(Out_Barrel));
498 if( FTFroad_fill.at(Inn_Endcap) ){
499 distance_bw_FTFroad_and_offlinesegment_Inn_Endcap.push_back(distance_bw_FTFroad_and_offlinesegment_vec.at(Inn_Endcap));
501 if( FTFroad_fill.at(Mid_Endcap) ){
502 distance_bw_FTFroad_and_offlinesegment_Mid_Endcap.push_back(distance_bw_FTFroad_and_offlinesegment_vec.at(Mid_Endcap));
504 if( FTFroad_fill.at(Out_Endcap) ){
505 distance_bw_FTFroad_and_offlinesegment_Out_Endcap.push_back(distance_bw_FTFroad_and_offlinesegment_vec.at(Out_Endcap));
508 for(
unsigned int i = 0; i < distance_bw_MDT_and_offlinesegment_vec.size(); i++ ){
509 if( MDTHitChamber_fill.at(i) == Inn_Barrel ){
510 distance_bw_MDT_and_offlinesegment_Inn_Barrel.push_back(distance_bw_MDT_and_offlinesegment_vec.at(i));
512 else if( MDTHitChamber_fill.at(i) == Mid_Barrel ){
513 distance_bw_MDT_and_offlinesegment_Mid_Barrel.push_back(distance_bw_MDT_and_offlinesegment_vec.at(i));
515 else if( MDTHitChamber_fill.at(i) == Out_Barrel ){
516 distance_bw_MDT_and_offlinesegment_Out_Barrel.push_back(distance_bw_MDT_and_offlinesegment_vec.at(i));
518 else if( MDTHitChamber_fill.at(i) == Inn_Endcap ){
519 distance_bw_MDT_and_offlinesegment_Inn_Endcap.push_back(distance_bw_MDT_and_offlinesegment_vec.at(i));
521 else if( MDTHitChamber_fill.at(i) == Mid_Endcap ){
522 distance_bw_MDT_and_offlinesegment_Mid_Endcap.push_back(distance_bw_MDT_and_offlinesegment_vec.at(i));
524 else if( MDTHitChamber_fill.at(i) == Out_Endcap ){
525 distance_bw_MDT_and_offlinesegment_Out_Endcap.push_back(distance_bw_MDT_and_offlinesegment_vec.at(i));
528 ATH_MSG_WARNING(
"undefined chamberID is pushed back into MDTHitChamber_fill" );
532 if( segment_exist.at(Inn_Barrel) ){
533 MDT_N_Inn_Barrel.push_back(n_mdthits_BI);
534 segment_superpoint_exist.at(Inn_Barrel) = superpoint_exist.at(Inn_Barrel);
536 if( segment_exist.at(Mid_Barrel) ){
537 MDT_N_Mid_Barrel.push_back(n_mdthits_BM);
538 segment_superpoint_exist.at(Mid_Barrel) = superpoint_exist.at(Mid_Barrel);
540 if( segment_exist.at(Out_Barrel) ){
541 MDT_N_Out_Barrel.push_back(n_mdthits_BO);
542 segment_superpoint_exist.at(Out_Barrel) = superpoint_exist.at(Out_Barrel);
544 if( segment_exist.at(Inn_Endcap) ){
545 MDT_N_Inn_Endcap.push_back(n_mdthits_EI);
546 segment_superpoint_exist.at(Inn_Endcap) = superpoint_exist.at(Inn_Endcap);
548 if( segment_exist.at(Mid_Endcap) ){
549 MDT_N_Mid_Endcap.push_back(n_mdthits_EM);
550 segment_superpoint_exist.at(Mid_Endcap) = superpoint_exist.at(Mid_Endcap);
552 if( segment_exist.at(Out_Endcap) ){
553 MDT_N_Out_Endcap.push_back(n_mdthits_EO);
554 segment_superpoint_exist.at(Out_Endcap) = superpoint_exist.at(Out_Endcap);
558 offlinesegment_exist_pt4to6 = segment_exist;
559 superpoint_exist_pt4to6 = segment_superpoint_exist;
562 offlinesegment_exist_pt6to8 = segment_exist;
563 superpoint_exist_pt6to8 = segment_superpoint_exist;
566 offlinesegment_exist_ptover8 = segment_exist;
567 superpoint_exist_ptover8 = segment_superpoint_exist;
575 fill(
m_group+
"_"+chain, ptresol, offEta, pt4to6, pt6to8, ptover8);
576 fill(
m_group+
"_"+chain, ptresol, offPt, isBarrelA, isBarrelC, isEndcapA, isEndcapC);
577 fill(
m_group+
"_"+chain, mon_ptresol_pos, mon_ptresol_neg, isBarrelA, isBarrelC, isEndcapA, isEndcapC);
578 fill(
m_group+
"_"+chain, mon_distance_bw_FTFroad_and_offlinesegment_Inn_Barrel, pt4to6, pt6to8, ptover8);
579 fill(
m_group+
"_"+chain, mon_distance_bw_FTFroad_and_offlinesegment_Mid_Barrel, pt4to6, pt6to8, ptover8);
580 fill(
m_group+
"_"+chain, mon_distance_bw_FTFroad_and_offlinesegment_Out_Barrel, pt4to6, pt6to8, ptover8);
581 fill(
m_group+
"_"+chain, mon_distance_bw_FTFroad_and_offlinesegment_Inn_Endcap, pt4to6, pt6to8, ptover8);
582 fill(
m_group+
"_"+chain, mon_distance_bw_FTFroad_and_offlinesegment_Mid_Endcap, pt4to6, pt6to8, ptover8);
583 fill(
m_group+
"_"+chain, mon_distance_bw_FTFroad_and_offlinesegment_Out_Endcap, pt4to6, pt6to8, ptover8);
590 fill(
m_group+
"_"+chain, mon_distance_bw_MDT_and_offlinesegment_Inn_Barrel);
591 fill(
m_group+
"_"+chain, mon_distance_bw_MDT_and_offlinesegment_Mid_Barrel);
592 fill(
m_group+
"_"+chain, mon_distance_bw_MDT_and_offlinesegment_Out_Barrel);
593 fill(
m_group+
"_"+chain, mon_distance_bw_MDT_and_offlinesegment_Inn_Endcap);
594 fill(
m_group+
"_"+chain, mon_distance_bw_MDT_and_offlinesegment_Mid_Endcap);
595 fill(
m_group+
"_"+chain, mon_distance_bw_MDT_and_offlinesegment_Out_Endcap);
602 fill(
m_group+
"_"+chain, superpoint_multiplicity, regionBE, pt4to6, pt6to8, ptover8);
603 fill(
m_group+
"_"+chain, mon_L2Muon_chamberID_index, mon_superpoint_exist_pt4to6, mon_offlinesegment_exist_pt4to6);
604 fill(
m_group+
"_"+chain, mon_L2Muon_chamberID_index, mon_superpoint_exist_pt6to8, mon_offlinesegment_exist_pt6to8);
605 fill(
m_group+
"_"+chain, mon_L2Muon_chamberID_index, mon_superpoint_exist_ptover8, mon_offlinesegment_exist_ptover8);
608 return StatusCode::SUCCESS;