95 auto tool =
getGroup(
"MuonTrackMonitorAlgorithm");
131 uint32_t lumiBlockID = evt.lumiBlock();
132 LumiBlock = lumiBlockID;
136 for(
unsigned int n=0; n<vecMuons.size(); n++) {
138 xAOD::Muon::MuonType muonType = muon->muonType();
139 xAOD::Muon::Quality muonQuality = muon->quality();
145 MuonEta = muon->eta();
146 MuonPhi = muon->phi();
147 MuonPt = muon->pt() * MeVtoGeV;
149 const xAOD::TrackParticle *metp = muon->trackParticle(xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle);
150 const xAOD::TrackParticle *idtp = muon->trackParticle(xAOD::Muon::InnerDetectorTrackParticle);
151 const xAOD::TrackParticle *mstp = muon->trackParticle(xAOD::Muon::MuonSpectrometerTrackParticle);
153 LumiBlockTrackCategory = 1;
154 fill(tool, LumiBlock, LumiBlockTrackCategory);
156 if (muonQuality <= xAOD::Muon::Loose) {
157 LumiBlockTrackCategory = 2;
158 fill(tool, LumiBlock, LumiBlockTrackCategory);
160 if (muonQuality <= xAOD::Muon::Medium) {
161 LumiBlockTrackCategory = 3;
162 fill(tool, LumiBlock, LumiBlockTrackCategory);
164 if (muonQuality == xAOD::Muon::Tight) {
165 LumiBlockTrackCategory = 4;
166 fill(tool, LumiBlock, LumiBlockTrackCategory);
170 fill(tool, LumiBlock, LumiBlockTrackCategory);
172 if (muonType==xAOD::Muon::Combined) {
176 uint8_t hitval_numberOfBLayerHits, hitval_numberOfPixelHits, hitval_numberOfSCTHits, hitval_numberOfTRTHits;
185 fill(tool, MuonEta, MuonPhi, MuonPt, MuonZ0, MuonD0);
188 MuonsNBHits =
static_cast<unsigned int>(hitval_numberOfBLayerHits);
189 MuonsNPixHits =
static_cast<unsigned int>(hitval_numberOfPixelHits);
190 MuonsNSCTHits =
static_cast<unsigned int>(hitval_numberOfSCTHits);
191 MuonsNTRTHits =
static_cast<unsigned int>(hitval_numberOfTRTHits);
192 fill(tool, MuonsNBHits, MuonsNPixHits, MuonsNSCTHits, MuonsNTRTHits);
193 MuonsNBHitsAvg = hitval_numberOfBLayerHits / vecMuons.size();
194 MuonsNPixHitsAvg = hitval_numberOfPixelHits / vecMuons.size();
195 MuonsNSCTHitsAvg = hitval_numberOfSCTHits / vecMuons.size();
196 MuonsNTRTHitsAvg = hitval_numberOfTRTHits / vecMuons.size();
197 fill(tool, MuonsNBHitsAvg, MuonsNPixHitsAvg, MuonsNSCTHitsAvg, MuonsNTRTHitsAvg);
200 uint8_t hitval_nEtaLayer1{0}, hitval_nEtaLayer2{0}, hitval_nEtaLayer3{0}, hitval_nEtaLayer4{0};
201 uint8_t hitval_nPhiLayer1{0}, hitval_nPhiLayer2{0}, hitval_nPhiLayer3{0}, hitval_nPhiLayer4{0};
210 MuonsEtaHitsLayer1 =
static_cast<unsigned int>(hitval_nEtaLayer1);
211 MuonsEtaHitsLayer2 =
static_cast<unsigned int>(hitval_nEtaLayer2);
212 MuonsEtaHitsLayer3 =
static_cast<unsigned int>(hitval_nEtaLayer3);
213 MuonsEtaHitsLayer4 =
static_cast<unsigned int>(hitval_nEtaLayer4);
214 MuonsPhiHitsLayer1 =
static_cast<unsigned int>(hitval_nPhiLayer1);
215 MuonsPhiHitsLayer2 =
static_cast<unsigned int>(hitval_nPhiLayer2);
216 MuonsPhiHitsLayer3 =
static_cast<unsigned int>(hitval_nPhiLayer3);
217 MuonsPhiHitsLayer4 =
static_cast<unsigned int>(hitval_nPhiLayer4);
218 fill(tool, MuonsEtaHitsLayer1, MuonsEtaHitsLayer2, MuonsEtaHitsLayer3, MuonsEtaHitsLayer4, MuonsPhiHitsLayer1, MuonsPhiHitsLayer2, MuonsPhiHitsLayer3, MuonsPhiHitsLayer4);
222 if (muonQuality==xAOD::Muon::Medium) {
223 MuonEtaMedium = cbtp->
eta();
224 MuonPhiMedium = cbtp->
phi();
225 fill(tool, MuonEtaMedium, MuonPhiMedium);
227 if (muonQuality==xAOD::Muon::Tight) {
228 MuonEtaTight = cbtp->
eta();
229 MuonPhiTight = cbtp->
phi();
230 fill(tool, MuonEtaTight, MuonPhiTight);
234 MuonDPTIDME = (idtp->
pt() - metp->
pt()) / idtp->
pt();
235 MuonDPTCBME = (cbtp->
pt() - metp->
pt()) / cbtp->
pt();
236 MuonDPTIDMECB = (idtp->
pt() - metp->
pt()) / cbtp->
pt();
239 fill(tool, MuonDPTIDME, MuonsIDchi2ndof, MuonsMEchi2ndof);
249 fill(tool, MuonEta, MuonPhi, MuonPt, MuonZ0, MuonD0);
252 uint8_t hitval_numberOfBLayerHits{0}, hitval_numberOfPixelHits{0}, hitval_numberOfSCTHits{0}, hitval_numberOfTRTHits{0};
257 MuonsNBHits =
static_cast<unsigned int>(hitval_numberOfBLayerHits);
258 MuonsNPixHits =
static_cast<unsigned int>(hitval_numberOfPixelHits);
259 MuonsNSCTHits =
static_cast<unsigned int>(hitval_numberOfSCTHits);
260 MuonsNTRTHits =
static_cast<unsigned int>(hitval_numberOfTRTHits);
261 fill(tool, MuonsNBHits, MuonsNPixHits, MuonsNSCTHits, MuonsNTRTHits);
265 MuonDPTIDME = (idtp->
pt() - metp->
pt()) / idtp->
pt();
268 fill(tool, MuonDPTIDME, MuonsIDchi2ndof, MuonsMEchi2ndof);
274 auto muonEta = muon->eta();
276 if (muonEta > 1.05) {
278 }
else if (muonEta > 0) {
280 }
else if (muonEta > -1.05) {
282 }
else if (muonEta <= -1.05) {
285 fill(tool, LumiBlock, LumiBlockTrackCategory);
288 auto muonEta = muon->eta();
289 if (muonEta > 1.05) {
291 }
else if (muonEta > 0) {
293 }
else if (muonEta > -1.05) {
295 }
else if (muonEta <= -1.05) {
298 fill(tool, LumiBlock, LumiBlockTrackCategory);
301 auto muonEta = muon->eta();
302 if (muonEta > 1.05) {
304 }
else if (muonEta > 0) {
306 }
else if (muonEta > -1.05) {
308 }
else if (muonEta <= -1.05) {
311 fill(tool, LumiBlock, LumiBlockTrackCategory);
314 return StatusCode::SUCCESS;
320 uint32_t lumiBlockID = evt.lumiBlock();
325 auto tool =
getGroup(
"MuonTrackMonitorAlgorithm");
350 for(
const auto muon :
Muons) {
351 xAOD::Muon::Quality muonQuality = muon->quality();
352 xAOD::Muon::MuonType muonType = muon->muonType();
353 xAOD::Muon::Author muonAuthor = muon->author();
354 MuonLumiBlock = lumiBlockID;
355 fill(tool, MuonLumiBlock);
358 MuonAuthor = muonAuthor;
359 MuonQuality = muonQuality;
361 MuonEta = muon->eta();
362 MuonPhi = muon->phi();
363 MuonPt = muon->pt() * MeVtoGeV;
364 fill(tool, MuonAuthor, MuonQuality, MuonType, MuonEta, MuonPhi, MuonPt);
368 MuonEtaHi = muon->eta();
369 MuonPhiHi = muon->phi();
370 MuonPtHi = muon->pt() * MeVtoGeV;
371 fill(tool, MuonEtaHi, MuonPhiHi, MuonPtHi);
375 for (
size_t nSeg=0; nSeg < muon->nMuonSegments(); nSeg++) {
381 MuonSmallSectorR = MuonLargeSectorR = std::hypot(muonSegment->
x(), muonSegment->
y());
382 MuonSmallSectorZ = MuonLargeSectorZ = muonSegment->
z();
383 MuonSector = muonSegment->
sector();
385 int sector = muonSegment->
sector();
386 if(sector % 2 == 0) {
387 fill(tool, MuonLargeSectorZ, MuonLargeSectorR, MuonSector, MuonCIndex);
389 fill(tool, MuonSmallSectorZ, MuonSmallSectorR, MuonSector, MuonCIndex);
391 const double muonSegmentEta =
Amg::Vector3D(muonSegment->
px(), muonSegment->
py(), muonSegment->
pz()).eta();
392 if (std::abs(muonSegmentEta) > 1.05) {
393 SegmentXPosEndcap = muonSegment->
x();
394 SegmentYPosEndcap = muonSegment->
y();
395 fill(tool, SegmentXPosEndcap, SegmentYPosEndcap);
397 SegmentXPosBarrel = muonSegment->
x();
398 SegmentYPosBarrel = muonSegment->
y();
399 fill(tool, SegmentXPosBarrel, SegmentYPosBarrel);
404 return StatusCode::SUCCESS;
414 auto tool =
getGroup(
"MuonTrackMonitorAlgorithm");
426 std::vector<const xAOD::Muon*> vecAllCombinedMuons;
427 std::vector<const xAOD::Muon*> vecCombinedMuons;
428 std::vector<const xAOD::Muon*> vecNoTrigCombinedMuons;
431 std::vector<const xAOD::Muon*> vecAllNonCombinedMuons;
432 std::vector<const xAOD::Muon*> vecNonCombinedMuons;
433 std::vector<const xAOD::Muon*> vecNoTrigNonCombinedMuons;
435 uint32_t n_muons = 0;
436 uint32_t n_muons_trig = 0;
437 uint32_t n_muons_trig_cb = 0;
438 uint32_t n_muons_trig_noncb = 0;
439 uint32_t n_muons_no_trig_cb = 0;
440 uint32_t n_muons_no_trig_noncb = 0;
441 for(
const auto muon :
Muons) {
443 bool isTriggered =
false;
458 xAOD::Muon::MuonType muonType = muon->muonType();
459 if (muonType==xAOD::Muon::Combined) {
460 vecAllCombinedMuons.push_back(muon);
462 vecCombinedMuons.push_back(muon);
465 MuonPrefix =
"TrigCB";
468 vecNoTrigCombinedMuons.push_back(muon);
469 MuonPrefix =
"NoTrigCB";
470 n_muons_no_trig_cb++;
474 vecAllNonCombinedMuons.push_back(muon);
476 vecNonCombinedMuons.push_back(muon);
478 n_muons_trig_noncb++;
479 MuonPrefix =
"TrigNonCB";
482 vecNoTrigNonCombinedMuons.push_back(muon);
483 MuonPrefix =
"NoTrigNonCB";
484 n_muons_no_trig_noncb++;
487 fill(tool, MuonPrefix);
488 for (
size_t nSeg=0; nSeg < muon->nMuonSegments(); nSeg++) {
489 LumiBlockNumberOfSegments = evt.lumiBlock();
490 fill(tool, LumiBlockNumberOfSegments);
494 NMuonsTrig = n_muons_trig;
495 NMuonsTrigCB = n_muons_trig_cb;
496 NMuonsTrigNonCB = n_muons_trig_noncb;
497 NMuonsNoTrigCB = n_muons_no_trig_cb;
498 NMuonsNoTrigNonCB = n_muons_no_trig_noncb;
499 fill(tool, NMuons, NMuonsTrig, NMuonsTrigCB, NMuonsTrigNonCB, NMuonsNoTrigCB, NMuonsNoTrigNonCB);
501 LumiBlockNumberOfMuonTracks = evt.lumiBlock();
502 fill(tool, LumiBlockNumberOfMuonTracks);
520 return StatusCode::SUCCESS;
527 uint32_t lumiBlockID = evt.lumiBlock();
532 auto tool =
getGroup(
"MuonTrackMonitorAlgorithm");
542 std::map<int, int> mapTagged_Resonance;
543 std::vector<const xAOD::Muon*> vecMuons;
544 for (
unsigned int n=0; n<muonCandidates.size(); n++)
545 mapTagged_Resonance[n]=0;
546 for (
unsigned int n=0; n<muonCandidates.size(); n++){
547 const TLorentzVector& tVec1 = muonCandidates[n]->p4();
548 for (
unsigned int m=n+1; m<muonCandidates.size(); m++) {
549 const TLorentzVector& tVec2 = muonCandidates[m]->p4();
550 const TLorentzVector candidate = tVec1 + tVec2;
551 const float resonance_Mass = candidate.M() * MeVtoGeV;
552 const float resonance_Eta = candidate.Eta();
553 if (muonCandidates[n]->
charge()==muonCandidates[m]->
charge())
continue;
559 if (mapTagged_Resonance[n]!=1) vecMuons.push_back(muonCandidates[n]);
560 mapTagged_Resonance[n]=1;
561 if (mapTagged_Resonance[m]!=1) vecMuons.push_back(muonCandidates[m]);
562 mapTagged_Resonance[m]=1;
564 if (muonCandidates[n]->
charge()<0){
565 muMinusEta = tVec1.Eta();
566 muPlusEta = tVec2.Eta();
569 muMinusEta = tVec2.Eta();
570 muPlusEta = tVec1.Eta();
573 const char* EtaRegio =
"out";
574 if ((muMinusEta>1.05)&&(muPlusEta>1.05)){
578 Mass2D = resonance_Mass;
580 }
else if ((muMinusEta>1.05)&&(muPlusEta>0.)&&(muPlusEta<1.05)){
584 Mass2D = resonance_Mass;
586 }
else if ((muMinusEta>1.05)&&(muPlusEta>-1.05)&&(muPlusEta<0.)){
590 Mass2D = resonance_Mass;
592 }
else if ((muMinusEta>1.05)&&(muPlusEta<-1.05)){
596 Mass2D = resonance_Mass;
598 }
else if ((muMinusEta>0.)&&(muMinusEta<1.05)&&(muPlusEta>1.05)){
602 Mass2D = resonance_Mass;
604 }
else if ((muMinusEta>0.)&&(muMinusEta<1.05)&&(muPlusEta>0.)&&(muPlusEta<1.05)){
608 Mass2D = resonance_Mass;
610 }
else if ((muMinusEta>0.)&&(muMinusEta<1.05)&&(muPlusEta>-1.05)&&(muPlusEta<0.)){
614 Mass2D = resonance_Mass;
616 }
else if ((muMinusEta>0.)&&(muMinusEta<1.05)&&(muPlusEta<-1.05)){
620 Mass2D = resonance_Mass;
622 }
else if ((muMinusEta>-1.05)&&(muMinusEta<0.)&&(muPlusEta>1.05)){
626 Mass2D = resonance_Mass;
628 }
else if ((muMinusEta>-1.05)&&(muMinusEta<0.)&&(muPlusEta>0.)&&(muPlusEta<1.05)){
632 Mass2D = resonance_Mass;
634 }
else if ((muMinusEta>-1.05)&&(muMinusEta<0.)&&(muPlusEta>-1.05)&&(muPlusEta<0.)){
638 Mass2D = resonance_Mass;
640 }
else if ((muMinusEta>-1.05)&&(muMinusEta<0.)&&(muPlusEta<-1.05)){
644 Mass2D = resonance_Mass;
646 }
else if ((muMinusEta<-1.05)&&(muPlusEta>1.05)){
650 Mass2D = resonance_Mass;
652 }
else if ((muMinusEta<-1.05)&&(muPlusEta>0.)&&(muPlusEta<1.05)){
656 Mass2D = resonance_Mass;
658 }
else if ((muMinusEta<-1.05)&&(muPlusEta>-1.05)&&(muPlusEta<0.)){
662 Mass2D = resonance_Mass;
664 }
else if ((muMinusEta<-1.05)&&(muPlusEta<-1.05)){
668 Mass2D = resonance_Mass;
675 Mass = resonance_Mass;
679 fill(tool, Mass, Eta, Eta2, Eta2D, muMinusEta, muPlusEta);
681 MuonLumiBlock = lumiBlockID;
682 fill(tool, MuonLumiBlock);
689 return StatusCode::SUCCESS;
float numberDoF() const
Returns the number of degrees of freedom of the overall track or vertex fit as float.
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range to .).
bool summaryValue(uint8_t &value, const SummaryType &information) const
Accessor for TrackSummary values.
virtual double pt() const override final
The transverse momentum ( ) of the particle.
virtual double eta() const override final
The pseudorapidity ( ) of the particle.