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 using enum xAOD::Muon::Quality;
157 if (muonQuality <= Loose) {
158 LumiBlockTrackCategory = 2;
159 fill(tool, LumiBlock, LumiBlockTrackCategory);
161 if (muonQuality <= Medium) {
162 LumiBlockTrackCategory = 3;
163 fill(tool, LumiBlock, LumiBlockTrackCategory);
165 if (muonQuality == Tight) {
166 LumiBlockTrackCategory = 4;
167 fill(tool, LumiBlock, LumiBlockTrackCategory);
172 fill(tool, LumiBlock, LumiBlockTrackCategory);
174 if (muonType==xAOD::Muon::MuonType::Combined) {
178 uint8_t hitval_numberOfBLayerHits, hitval_numberOfPixelHits, hitval_numberOfSCTHits, hitval_numberOfTRTHits;
187 fill(tool, MuonEta, MuonPhi, MuonPt, MuonZ0, MuonD0);
190 MuonsNBHits =
static_cast<unsigned int>(hitval_numberOfBLayerHits);
191 MuonsNPixHits =
static_cast<unsigned int>(hitval_numberOfPixelHits);
192 MuonsNSCTHits =
static_cast<unsigned int>(hitval_numberOfSCTHits);
193 MuonsNTRTHits =
static_cast<unsigned int>(hitval_numberOfTRTHits);
194 fill(tool, MuonsNBHits, MuonsNPixHits, MuonsNSCTHits, MuonsNTRTHits);
195 MuonsNBHitsAvg = hitval_numberOfBLayerHits / vecMuons.size();
196 MuonsNPixHitsAvg = hitval_numberOfPixelHits / vecMuons.size();
197 MuonsNSCTHitsAvg = hitval_numberOfSCTHits / vecMuons.size();
198 MuonsNTRTHitsAvg = hitval_numberOfTRTHits / vecMuons.size();
199 fill(tool, MuonsNBHitsAvg, MuonsNPixHitsAvg, MuonsNSCTHitsAvg, MuonsNTRTHitsAvg);
202 uint8_t hitval_nEtaLayer1{0}, hitval_nEtaLayer2{0}, hitval_nEtaLayer3{0}, hitval_nEtaLayer4{0};
203 uint8_t hitval_nPhiLayer1{0}, hitval_nPhiLayer2{0}, hitval_nPhiLayer3{0}, hitval_nPhiLayer4{0};
212 MuonsEtaHitsLayer1 =
static_cast<unsigned int>(hitval_nEtaLayer1);
213 MuonsEtaHitsLayer2 =
static_cast<unsigned int>(hitval_nEtaLayer2);
214 MuonsEtaHitsLayer3 =
static_cast<unsigned int>(hitval_nEtaLayer3);
215 MuonsEtaHitsLayer4 =
static_cast<unsigned int>(hitval_nEtaLayer4);
216 MuonsPhiHitsLayer1 =
static_cast<unsigned int>(hitval_nPhiLayer1);
217 MuonsPhiHitsLayer2 =
static_cast<unsigned int>(hitval_nPhiLayer2);
218 MuonsPhiHitsLayer3 =
static_cast<unsigned int>(hitval_nPhiLayer3);
219 MuonsPhiHitsLayer4 =
static_cast<unsigned int>(hitval_nPhiLayer4);
220 fill(tool, MuonsEtaHitsLayer1, MuonsEtaHitsLayer2, MuonsEtaHitsLayer3, MuonsEtaHitsLayer4, MuonsPhiHitsLayer1, MuonsPhiHitsLayer2, MuonsPhiHitsLayer3, MuonsPhiHitsLayer4);
224 if (muonQuality==xAOD::Muon::Quality::Medium) {
225 MuonEtaMedium = cbtp->
eta();
226 MuonPhiMedium = cbtp->
phi();
227 fill(tool, MuonEtaMedium, MuonPhiMedium);
229 if (muonQuality==xAOD::Muon::Quality::Tight) {
230 MuonEtaTight = cbtp->
eta();
231 MuonPhiTight = cbtp->
phi();
232 fill(tool, MuonEtaTight, MuonPhiTight);
236 MuonDPTIDME = (idtp->
pt() - metp->
pt()) / idtp->
pt();
237 MuonDPTCBME = (cbtp->
pt() - metp->
pt()) / cbtp->
pt();
238 MuonDPTIDMECB = (idtp->
pt() - metp->
pt()) / cbtp->
pt();
241 fill(tool, MuonDPTIDME, MuonsIDchi2ndof, MuonsMEchi2ndof);
246 const xAOD::TrackParticle *ptp = muon->trackParticle(xAOD::Muon::TrackParticleType::Primary);
251 fill(tool, MuonEta, MuonPhi, MuonPt, MuonZ0, MuonD0);
254 uint8_t hitval_numberOfBLayerHits{0}, hitval_numberOfPixelHits{0}, hitval_numberOfSCTHits{0}, hitval_numberOfTRTHits{0};
259 MuonsNBHits =
static_cast<unsigned int>(hitval_numberOfBLayerHits);
260 MuonsNPixHits =
static_cast<unsigned int>(hitval_numberOfPixelHits);
261 MuonsNSCTHits =
static_cast<unsigned int>(hitval_numberOfSCTHits);
262 MuonsNTRTHits =
static_cast<unsigned int>(hitval_numberOfTRTHits);
263 fill(tool, MuonsNBHits, MuonsNPixHits, MuonsNSCTHits, MuonsNTRTHits);
267 MuonDPTIDME = (idtp->
pt() - metp->
pt()) / idtp->
pt();
270 fill(tool, MuonDPTIDME, MuonsIDchi2ndof, MuonsMEchi2ndof);
276 auto muonEta = muon->eta();
278 if (muonEta > 1.05) {
280 }
else if (muonEta > 0) {
282 }
else if (muonEta > -1.05) {
284 }
else if (muonEta <= -1.05) {
287 fill(tool, LumiBlock, LumiBlockTrackCategory);
290 auto muonEta = muon->eta();
291 if (muonEta > 1.05) {
293 }
else if (muonEta > 0) {
295 }
else if (muonEta > -1.05) {
297 }
else if (muonEta <= -1.05) {
300 fill(tool, LumiBlock, LumiBlockTrackCategory);
303 auto muonEta = muon->eta();
304 if (muonEta > 1.05) {
306 }
else if (muonEta > 0) {
308 }
else if (muonEta > -1.05) {
310 }
else if (muonEta <= -1.05) {
313 fill(tool, LumiBlock, LumiBlockTrackCategory);
316 return StatusCode::SUCCESS;
322 uint32_t lumiBlockID = evt.lumiBlock();
327 auto tool =
getGroup(
"MuonTrackMonitorAlgorithm");
352 for(
const auto muon :
Muons) {
353 xAOD::Muon::Quality muonQuality = muon->quality();
354 xAOD::Muon::MuonType muonType = muon->muonType();
355 xAOD::Muon::Author muonAuthor = muon->author();
356 MuonLumiBlock = lumiBlockID;
357 fill(tool, MuonLumiBlock);
360 MuonAuthor =
static_cast<int>(muonAuthor);
361 MuonQuality =
static_cast<int>(muonQuality);
362 MuonType =
static_cast<int>(muonType);
363 MuonEta = muon->eta();
364 MuonPhi = muon->phi();
365 MuonPt = muon->pt() * MeVtoGeV;
366 fill(tool, MuonAuthor, MuonQuality, MuonType, MuonEta, MuonPhi, MuonPt);
370 MuonEtaHi = muon->eta();
371 MuonPhiHi = muon->phi();
372 MuonPtHi = muon->pt() * MeVtoGeV;
373 fill(tool, MuonEtaHi, MuonPhiHi, MuonPtHi);
377 for (
size_t nSeg=0; nSeg < muon->nMuonSegments(); nSeg++) {
383 MuonSmallSectorR = MuonLargeSectorR = std::hypot(muonSegment->
x(), muonSegment->
y());
384 MuonSmallSectorZ = MuonLargeSectorZ = muonSegment->
z();
385 MuonSector = muonSegment->
sector();
387 int sector = muonSegment->
sector();
388 if(sector % 2 == 0) {
389 fill(tool, MuonLargeSectorZ, MuonLargeSectorR, MuonSector, MuonCIndex);
391 fill(tool, MuonSmallSectorZ, MuonSmallSectorR, MuonSector, MuonCIndex);
393 const double muonSegmentEta =
Amg::Vector3D(muonSegment->
px(), muonSegment->
py(), muonSegment->
pz()).eta();
394 if (std::abs(muonSegmentEta) > 1.05) {
395 SegmentXPosEndcap = muonSegment->
x();
396 SegmentYPosEndcap = muonSegment->
y();
397 fill(tool, SegmentXPosEndcap, SegmentYPosEndcap);
399 SegmentXPosBarrel = muonSegment->
x();
400 SegmentYPosBarrel = muonSegment->
y();
401 fill(tool, SegmentXPosBarrel, SegmentYPosBarrel);
406 return StatusCode::SUCCESS;
416 auto tool =
getGroup(
"MuonTrackMonitorAlgorithm");
428 std::vector<const xAOD::Muon*> vecAllCombinedMuons;
429 std::vector<const xAOD::Muon*> vecCombinedMuons;
430 std::vector<const xAOD::Muon*> vecNoTrigCombinedMuons;
433 std::vector<const xAOD::Muon*> vecAllNonCombinedMuons;
434 std::vector<const xAOD::Muon*> vecNonCombinedMuons;
435 std::vector<const xAOD::Muon*> vecNoTrigNonCombinedMuons;
437 uint32_t n_muons = 0;
438 uint32_t n_muons_trig = 0;
439 uint32_t n_muons_trig_cb = 0;
440 uint32_t n_muons_trig_noncb = 0;
441 uint32_t n_muons_no_trig_cb = 0;
442 uint32_t n_muons_no_trig_noncb = 0;
443 for(
const auto muon :
Muons) {
445 bool isTriggered =
false;
460 xAOD::Muon::MuonType muonType = muon->muonType();
461 if (muonType==xAOD::Muon::MuonType::Combined) {
462 vecAllCombinedMuons.push_back(muon);
464 vecCombinedMuons.push_back(muon);
467 MuonPrefix =
"TrigCB";
470 vecNoTrigCombinedMuons.push_back(muon);
471 MuonPrefix =
"NoTrigCB";
472 n_muons_no_trig_cb++;
476 vecAllNonCombinedMuons.push_back(muon);
478 vecNonCombinedMuons.push_back(muon);
480 n_muons_trig_noncb++;
481 MuonPrefix =
"TrigNonCB";
484 vecNoTrigNonCombinedMuons.push_back(muon);
485 MuonPrefix =
"NoTrigNonCB";
486 n_muons_no_trig_noncb++;
489 fill(tool, MuonPrefix);
490 for (
size_t nSeg=0; nSeg < muon->nMuonSegments(); nSeg++) {
491 LumiBlockNumberOfSegments = evt.lumiBlock();
492 fill(tool, LumiBlockNumberOfSegments);
496 NMuonsTrig = n_muons_trig;
497 NMuonsTrigCB = n_muons_trig_cb;
498 NMuonsTrigNonCB = n_muons_trig_noncb;
499 NMuonsNoTrigCB = n_muons_no_trig_cb;
500 NMuonsNoTrigNonCB = n_muons_no_trig_noncb;
501 fill(tool, NMuons, NMuonsTrig, NMuonsTrigCB, NMuonsTrigNonCB, NMuonsNoTrigCB, NMuonsNoTrigNonCB);
503 LumiBlockNumberOfMuonTracks = evt.lumiBlock();
504 fill(tool, LumiBlockNumberOfMuonTracks);
522 return StatusCode::SUCCESS;
529 uint32_t lumiBlockID = evt.lumiBlock();
534 auto tool =
getGroup(
"MuonTrackMonitorAlgorithm");
544 std::map<int, int> mapTagged_Resonance;
545 std::vector<const xAOD::Muon*> vecMuons;
546 for (
unsigned int n=0; n<muonCandidates.size(); n++)
547 mapTagged_Resonance[n]=0;
548 for (
unsigned int n=0; n<muonCandidates.size(); n++){
549 const TLorentzVector& tVec1 = muonCandidates[n]->p4();
550 for (
unsigned int m=n+1; m<muonCandidates.size(); m++) {
551 const TLorentzVector& tVec2 = muonCandidates[m]->p4();
552 const TLorentzVector candidate = tVec1 + tVec2;
553 const float resonance_Mass = candidate.M() * MeVtoGeV;
554 const float resonance_Eta = candidate.Eta();
555 if (muonCandidates[n]->
charge()==muonCandidates[m]->
charge())
continue;
561 if (mapTagged_Resonance[n]!=1) vecMuons.push_back(muonCandidates[n]);
562 mapTagged_Resonance[n]=1;
563 if (mapTagged_Resonance[m]!=1) vecMuons.push_back(muonCandidates[m]);
564 mapTagged_Resonance[m]=1;
566 if (muonCandidates[n]->
charge()<0){
567 muMinusEta = tVec1.Eta();
568 muPlusEta = tVec2.Eta();
571 muMinusEta = tVec2.Eta();
572 muPlusEta = tVec1.Eta();
575 const char* EtaRegio =
"out";
576 if ((muMinusEta>1.05)&&(muPlusEta>1.05)){
580 Mass2D = resonance_Mass;
582 }
else if ((muMinusEta>1.05)&&(muPlusEta>0.)&&(muPlusEta<1.05)){
586 Mass2D = resonance_Mass;
588 }
else if ((muMinusEta>1.05)&&(muPlusEta>-1.05)&&(muPlusEta<0.)){
592 Mass2D = resonance_Mass;
594 }
else if ((muMinusEta>1.05)&&(muPlusEta<-1.05)){
598 Mass2D = resonance_Mass;
600 }
else if ((muMinusEta>0.)&&(muMinusEta<1.05)&&(muPlusEta>1.05)){
604 Mass2D = resonance_Mass;
606 }
else if ((muMinusEta>0.)&&(muMinusEta<1.05)&&(muPlusEta>0.)&&(muPlusEta<1.05)){
610 Mass2D = resonance_Mass;
612 }
else if ((muMinusEta>0.)&&(muMinusEta<1.05)&&(muPlusEta>-1.05)&&(muPlusEta<0.)){
616 Mass2D = resonance_Mass;
618 }
else if ((muMinusEta>0.)&&(muMinusEta<1.05)&&(muPlusEta<-1.05)){
622 Mass2D = resonance_Mass;
624 }
else if ((muMinusEta>-1.05)&&(muMinusEta<0.)&&(muPlusEta>1.05)){
628 Mass2D = resonance_Mass;
630 }
else if ((muMinusEta>-1.05)&&(muMinusEta<0.)&&(muPlusEta>0.)&&(muPlusEta<1.05)){
634 Mass2D = resonance_Mass;
636 }
else if ((muMinusEta>-1.05)&&(muMinusEta<0.)&&(muPlusEta>-1.05)&&(muPlusEta<0.)){
640 Mass2D = resonance_Mass;
642 }
else if ((muMinusEta>-1.05)&&(muMinusEta<0.)&&(muPlusEta<-1.05)){
646 Mass2D = resonance_Mass;
648 }
else if ((muMinusEta<-1.05)&&(muPlusEta>1.05)){
652 Mass2D = resonance_Mass;
654 }
else if ((muMinusEta<-1.05)&&(muPlusEta>0.)&&(muPlusEta<1.05)){
658 Mass2D = resonance_Mass;
660 }
else if ((muMinusEta<-1.05)&&(muPlusEta>-1.05)&&(muPlusEta<0.)){
664 Mass2D = resonance_Mass;
666 }
else if ((muMinusEta<-1.05)&&(muPlusEta<-1.05)){
670 Mass2D = resonance_Mass;
677 Mass = resonance_Mass;
681 fill(tool, Mass, Eta, Eta2, Eta2D, muMinusEta, muPlusEta);
683 MuonLumiBlock = lumiBlockID;
684 fill(tool, MuonLumiBlock);
691 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.