@@ -77,6 +77,11 @@ struct qaEventTrack {
7777 Configurable<float > minPhi{" minPhi" , -1 .f , " Minimum phi of accepted tracks" };
7878 Configurable<float > maxPhi{" maxPhi" , 10 .f , " Maximum phi of accepted tracks" };
7979
80+ // option to check PID for tracking before filling resolution histogras
81+ Configurable<bool > checkPIDforTracking{" checkPIDforTracking" , false , " check for PID in tracking" };
82+ Configurable<int > PartIdentifier{" PartIdentifier" , 2 , " Particle identifier for selected particle; 0: electron, 1: muon, 2: pion, 3: kaon, 4: proton, 5: deuteron, 6: triton, 7: helium3, 8: alpha" };
83+ Configurable<bool > doExtraPIDqa{" doExtraPIDqa" , false , " do extra QA for tracks with wrong PID in tracking" };
84+
8085 // options to check the track variables only for PV contributors
8186 Configurable<bool > checkOnlyPVContributor{" checkOnlyPVContributor" , false , " check the track variables only for primary vertex contributors" };
8287
@@ -257,6 +262,9 @@ struct qaEventTrack {
257262 histos.add <TH2>(" Tracks/Kine/pullInvPtVsInvPtmc" , " " , kTH2D , {axisPullInvPt, axisInvPt});
258263 histos.add <TH2>(" Tracks/Kine/pullInvPtVsInvPtmcEtaPlus" , " " , kTH2D , {axisPullInvPt, axisInvPt});
259264 histos.add <TH2>(" Tracks/Kine/pullInvPtVsInvPtmcEtaMinus" , " " , kTH2D , {axisPullInvPt, axisInvPt});
265+ histos.add <TH2>(" Tracks/Kine/pullInvPtVsPtmc" , " " , kTH2D , {axisPullInvPt, axisPt})->GetYaxis ()->SetTitle (" #it{p}_{T, gen} [GeV/c]" );
266+ histos.add <TH2>(" Tracks/Kine/pullInvPtVsPtmcEtaPlus" , " " , kTH2D , {axisPullInvPt, axisPt})->GetYaxis ()->SetTitle (" #it{p}_{T, gen} [GeV/c]" );
267+ histos.add <TH2>(" Tracks/Kine/pullInvPtVsPtmcEtaMinus" , " " , kTH2D , {axisPullInvPt, axisPt})->GetYaxis ()->SetTitle (" #it{p}_{T, gen} [GeV/c]" );
260268 histos.add <TH2>(" Tracks/Kine/resoInvPtVsPt" , " " , kTH2D , {axisDeltaInvPt, axisPt})->GetYaxis ()->SetTitle (" #it{p}_{T, gen} [GeV/c]" );
261269 histos.add <TH2>(" Tracks/Kine/resoInvPtVsPtEtaPlus" , " " , kTH2D , {axisDeltaInvPt, axisPt})->GetYaxis ()->SetTitle (" #it{p}_{T, gen} [GeV/c]" );
262270 histos.add <TH2>(" Tracks/Kine/resoInvPtVsPtEtaMinus" , " " , kTH2D , {axisDeltaInvPt, axisPt})->GetYaxis ()->SetTitle (" #it{p}_{T, gen} [GeV/c]" );
@@ -266,6 +274,22 @@ struct qaEventTrack {
266274 histos.add <TH2>(" Tracks/Kine/ptVsptmc" , " " , kTH2D , {axisPt, axisPt})->GetXaxis ()->SetTitle (" #it{p}_{T, gen} [GeV/c]" );
267275 histos.add <TH2>(" Tracks/Kine/resoEta" , " " , kTH2D , {axisDeltaEta, axisEta})->GetYaxis ()->SetTitle (" #eta_{rec}" );
268276 histos.add <TH2>(" Tracks/Kine/resoPhi" , " " , kTH2D , {axisDeltaPhi, axisPhi})->GetYaxis ()->SetTitle (" #varphi_{rec}" );
277+
278+ histos.add <TH2>(" Tracks/Kine/resoPtVsptmcWrongPIDinTrk" , " " , kTH2D , {axisDeltaPt, axisPt})->GetYaxis ()->SetTitle (" #it{p}_{T, gen} [GeV/c]" );
279+ histos.add <TH2>(" Tracks/Kine/resoPtVsptmcEtaPlusWrongPIDinTrk" , " " , kTH2D , {axisDeltaPt, axisPt})->GetYaxis ()->SetTitle (" #it{p}_{T, gen} [GeV/c]" );
280+ histos.add <TH2>(" Tracks/Kine/resoPtVsptmcEtaMinusWrongPIDinTrk" , " " , kTH2D , {axisDeltaPt, axisPt})->GetYaxis ()->SetTitle (" #it{p}_{T, gen} [GeV/c]" );
281+ histos.add <TH2>(" Tracks/Kine/pullInvPtVsInvPtmcWrongPIDinTrk" , " " , kTH2D , {axisPullInvPt, axisInvPt});
282+ histos.add <TH2>(" Tracks/Kine/pullInvPtVsInvPtmcEtaPlusWrongPIDinTrk" , " " , kTH2D , {axisPullInvPt, axisInvPt});
283+ histos.add <TH2>(" Tracks/Kine/pullInvPtVsInvPtmcEtaMinusWrongPIDinTrk" , " " , kTH2D , {axisPullInvPt, axisInvPt});
284+ histos.add <TH2>(" Tracks/Kine/pullInvPtVsPtmcWrongPIDinTrk" , " " , kTH2D , {axisPullInvPt, axisPt})->GetYaxis ()->SetTitle (" #it{p}_{T, gen} [GeV/c]" );
285+ histos.add <TH2>(" Tracks/Kine/pullInvPtVsPtmcEtaPlusWrongPIDinTrk" , " " , kTH2D , {axisPullInvPt, axisPt})->GetYaxis ()->SetTitle (" #it{p}_{T, gen} [GeV/c]" );
286+ histos.add <TH2>(" Tracks/Kine/pullInvPtVsPtmcEtaMinusWrongPIDinTrk" , " " , kTH2D , {axisPullInvPt, axisPt})->GetYaxis ()->SetTitle (" #it{p}_{T, gen} [GeV/c]" );
287+ histos.add <TH2>(" Tracks/Kine/resoInvPtVsPtWrongPIDinTrk" , " " , kTH2D , {axisDeltaInvPt, axisPt})->GetYaxis ()->SetTitle (" #it{p}_{T, gen} [GeV/c]" );
288+ histos.add <TH2>(" Tracks/Kine/resoInvPtVsPtEtaPlusWrongPIDinTrk" , " " , kTH2D , {axisDeltaInvPt, axisPt})->GetYaxis ()->SetTitle (" #it{p}_{T, gen} [GeV/c]" );
289+ histos.add <TH2>(" Tracks/Kine/resoInvPtVsPtEtaMinusWrongPIDinTrk" , " " , kTH2D , {axisDeltaInvPt, axisPt})->GetYaxis ()->SetTitle (" #it{p}_{T, gen} [GeV/c]" );
290+ histos.add <TH2>(" Tracks/Kine/resoInvPtWrongPIDinTrk" , " " , kTH2D , {axisDeltaInvPt, axisInvPt});
291+ histos.add <TH2>(" Tracks/Kine/resoInvPtEtaPlusWrongPIDinTrk" , " " , kTH2D , {axisDeltaInvPt, axisInvPt});
292+ histos.add <TH2>(" Tracks/Kine/resoInvPtEtaMinusWrongPIDinTrk" , " " , kTH2D , {axisDeltaInvPt, axisInvPt});
269293 }
270294 histos.add (" Tracks/Kine/relativeResoPt" , " relative #it{p}_{T} resolution; #it{p}_{T}; #sigma(#it{p}_{T})/#it{p}_{T}" , kTH2D , {{axisPt, {100 , 0 ., 0.3 }}});
271295 histos.add (" Tracks/Kine/relativeResoPtEtaPlus" , " relative #it{p}_{T} resolution positive #eta; #it{p}_{T}; #sigma(#it{p}_{T})/#it{p}_{T} (#eta>0)" , kTH2D , {{axisPt, {100 , 0 ., 0.3 }}});
@@ -1524,12 +1548,47 @@ void qaEventTrack::fillRecoHistogramsGroupedTracks(const C& collision, const T&
15241548
15251549 if constexpr (IS_MC) {
15261550 if (track.has_mcParticle ()) {
1527- // resolution plots
15281551 auto particle = track.mcParticle ();
1552+ // resolution plots
1553+ if (doExtraPIDqa && track.pidForTracking () != std::abs (PartIdentifier)) {
1554+ // full eta range
1555+ histos.fill (HIST (" Tracks/Kine/resoPtVsptmcWrongPIDinTrk" ), track.pt () - particle.pt (), particle.pt ());
1556+ histos.fill (HIST (" Tracks/Kine/pullInvPtVsInvPtmcWrongPIDinTrk" ), (std::abs (track.signed1Pt ()) - 1 .f / particle.pt ()) / std::sqrt (track.c1Pt21Pt2 ()), 1 .f / particle.pt ());
1557+ histos.fill (HIST (" Tracks/Kine/pullInvPtVsPtmcWrongPIDinTrk" ), (std::abs (track.signed1Pt ()) - 1 .f / particle.pt ()) / std::sqrt (track.c1Pt21Pt2 ()), particle.pt ());
1558+ if (particle.pt () > 0 .f ) {
1559+ histos.fill (HIST (" Tracks/Kine/resoInvPtWrongPIDinTrk" ), std::abs (track.signed1Pt ()) - 1 .f / particle.pt (), 1 .f / particle.pt ());
1560+ }
1561+ histos.fill (HIST (" Tracks/Kine/resoInvPtVsPtWrongPIDinTrk" ), track.signed1Pt () - 1 .f / particle.pt (), particle.pt ());
1562+ // split eta range
1563+ if (eta > 0 ) { // positive eta
1564+ histos.fill (HIST (" Tracks/Kine/resoPtVsptmcEtaPlusWrongPIDinTrk" ), track.pt () - particle.pt (), particle.pt ());
1565+ histos.fill (HIST (" Tracks/Kine/pullInvPtVsInvPtmcEtaPlusWrongPIDinTrk" ), (std::abs (track.signed1Pt ()) - 1 .f / particle.pt ()) / std::sqrt (track.c1Pt21Pt2 ()), 1 .f / particle.pt ());
1566+ histos.fill (HIST (" Tracks/Kine/pullInvPtVsPtmcEtaPlusWrongPIDinTrk" ), (std::abs (track.signed1Pt ()) - 1 .f / particle.pt ()) / std::sqrt (track.c1Pt21Pt2 ()), particle.pt ());
1567+ if (particle.pt () > 0 .f ) {
1568+ histos.fill (HIST (" Tracks/Kine/resoInvPtEtaPlusWrongPIDinTrk" ), std::abs (track.signed1Pt ()) - 1 .f / particle.pt (), 1 .f / particle.pt ());
1569+ }
1570+ histos.fill (HIST (" Tracks/Kine/resoInvPtVsPtEtaPlusWrongPIDinTrk" ), track.signed1Pt () - 1 .f / particle.pt (), particle.pt ());
1571+ } else { // negative eta
1572+ histos.fill (HIST (" Tracks/Kine/resoPtVsptmcEtaMinusWrongPIDinTrk" ), track.pt () - particle.pt (), particle.pt ()); //
1573+ histos.fill (HIST (" Tracks/Kine/pullInvPtVsInvPtmcEtaMinusWrongPIDinTrk" ), (std::abs (track.signed1Pt ()) - 1 .f / particle.pt ()) / std::sqrt (track.c1Pt21Pt2 ()), 1 .f / particle.pt ());
1574+ histos.fill (HIST (" Tracks/Kine/pullInvPtVsPtmcEtaMinusWrongPIDinTrk" ), (std::abs (track.signed1Pt ()) - 1 .f / particle.pt ()) / std::sqrt (track.c1Pt21Pt2 ()), particle.pt ());
1575+ if (particle.pt () > 0 .f ) {
1576+ histos.fill (HIST (" Tracks/Kine/resoInvPtEtaMinusWrongPIDinTrk" ), std::abs (track.signed1Pt ()) - 1 .f / particle.pt (), 1 .f / particle.pt ());
1577+ }
1578+ histos.fill (HIST (" Tracks/Kine/resoInvPtVsPtEtaMinusWrongPIDinTrk" ), track.signed1Pt () - 1 .f / particle.pt (), particle.pt ());
1579+ }
1580+ }
1581+
1582+ // optionally check for PID in tracking
1583+ if (checkPIDforTracking && track.pidForTracking () != std::abs (PartIdentifier)) {
1584+ continue ;
1585+ }
1586+
15291587 // full eta range
15301588 histos.fill (HIST (" Tracks/Kine/resoPt" ), track.pt () - particle.pt (), track.pt ());
15311589 histos.fill (HIST (" Tracks/Kine/resoPtVsptmc" ), track.pt () - particle.pt (), particle.pt ());
15321590 histos.fill (HIST (" Tracks/Kine/pullInvPtVsInvPtmc" ), (std::abs (track.signed1Pt ()) - 1 .f / particle.pt ()) / std::sqrt (track.c1Pt21Pt2 ()), 1 .f / particle.pt ());
1591+ histos.fill (HIST (" Tracks/Kine/pullInvPtVsPtmc" ), (std::abs (track.signed1Pt ()) - 1 .f / particle.pt ()) / std::sqrt (track.c1Pt21Pt2 ()), particle.pt ());
15331592 if (particle.pt () > 0 .f ) {
15341593 histos.fill (HIST (" Tracks/Kine/resoInvPt" ), std::abs (track.signed1Pt ()) - 1 .f / particle.pt (), 1 .f / particle.pt ());
15351594 }
@@ -1538,18 +1597,20 @@ void qaEventTrack::fillRecoHistogramsGroupedTracks(const C& collision, const T&
15381597 histos.fill (HIST (" Tracks/Kine/resoEta" ), track.eta () - particle.eta (), track.eta ());
15391598 histos.fill (HIST (" Tracks/Kine/resoPhi" ), track.phi () - particle.phi (), track.phi ());
15401599 // split eta range
1541- if (eta > 0 ) { // positive eta
1542- histos.fill (HIST (" Tracks/Kine/resoPtEtaPlus" ), track.pt () - particle.pt (), track.pt ()); //
1543- histos.fill (HIST (" Tracks/Kine/resoPtVsptmcEtaPlus" ), track.pt () - particle.pt (), particle.pt ()); //
1600+ if (eta > 0 ) { // positive eta
1601+ histos.fill (HIST (" Tracks/Kine/resoPtEtaPlus" ), track.pt () - particle.pt (), track.pt ());
1602+ histos.fill (HIST (" Tracks/Kine/resoPtVsptmcEtaPlus" ), track.pt () - particle.pt (), particle.pt ());
15441603 histos.fill (HIST (" Tracks/Kine/pullInvPtVsInvPtmcEtaPlus" ), (std::abs (track.signed1Pt ()) - 1 .f / particle.pt ()) / std::sqrt (track.c1Pt21Pt2 ()), 1 .f / particle.pt ());
1604+ histos.fill (HIST (" Tracks/Kine/pullInvPtVsPtmcEtaPlus" ), (std::abs (track.signed1Pt ()) - 1 .f / particle.pt ()) / std::sqrt (track.c1Pt21Pt2 ()), particle.pt ());
15451605 if (particle.pt () > 0 .f ) {
15461606 histos.fill (HIST (" Tracks/Kine/resoInvPtEtaPlus" ), std::abs (track.signed1Pt ()) - 1 .f / particle.pt (), 1 .f / particle.pt ());
15471607 }
15481608 histos.fill (HIST (" Tracks/Kine/resoInvPtVsPtEtaPlus" ), track.signed1Pt () - 1 .f / particle.pt (), particle.pt ());
15491609 } else { // negative eta
15501610 histos.fill (HIST (" Tracks/Kine/resoPtEtaMinus" ), track.pt () - particle.pt (), track.pt ());
1551- histos.fill (HIST (" Tracks/Kine/resoPtVsptmcEtaMinus" ), track.pt () - particle.pt (), particle.pt ()); //
1611+ histos.fill (HIST (" Tracks/Kine/resoPtVsptmcEtaMinus" ), track.pt () - particle.pt (), particle.pt ());
15521612 histos.fill (HIST (" Tracks/Kine/pullInvPtVsInvPtmcEtaMinus" ), (std::abs (track.signed1Pt ()) - 1 .f / particle.pt ()) / std::sqrt (track.c1Pt21Pt2 ()), 1 .f / particle.pt ());
1613+ histos.fill (HIST (" Tracks/Kine/pullInvPtVsPtmcEtaMinus" ), (std::abs (track.signed1Pt ()) - 1 .f / particle.pt ()) / std::sqrt (track.c1Pt21Pt2 ()), particle.pt ());
15531614 if (particle.pt () > 0 .f ) {
15541615 histos.fill (HIST (" Tracks/Kine/resoInvPtEtaMinus" ), std::abs (track.signed1Pt ()) - 1 .f / particle.pt (), 1 .f / particle.pt ());
15551616 }
0 commit comments