1818#include < TPDGCode.h>
1919#include < CCDB/BasicCCDBManager.h>
2020#include < vector>
21+ #include < algorithm>
2122#include < cstdio>
2223#include < memory>
2324#include < string>
@@ -581,11 +582,11 @@ struct QAExtraDataCollectingEngine {
581582 // ===================================================
582583 /* pairs histograms */
583584 std::vector<std::vector<std::vector<std::shared_ptr<TH2>>>> fhPhiPhiA{2 , {nsp, {nsp, nullptr }}};
584- std::vector<std::vector<std::vector<std::shared_ptr<TH3>>>> fhDeltaPhiVsPhiPhiA{2 , {nsp, {nsp, nullptr }}};
585- std::vector<std::vector<std::vector<std::shared_ptr<TH3>>>> fhDeltaPhiVsEtaEtaA{2 , {nsp, {nsp, nullptr }}};
586585 std::vector<std::vector<std::vector<std::shared_ptr<TH2>>>> fhEtaEtaA{2 , {nsp, {nsp, nullptr }}};
587- std::vector<std::vector<std::vector<std::shared_ptr<TH3>>>> fhDeltaEtaVsEtaEtaA{2 , {nsp, {nsp, nullptr }}};
588- std::vector<std::vector<std::vector<std::shared_ptr<TH3>>>> fhDeltaEtaVsPhiPhiA{2 , {nsp, {nsp, nullptr }}};
586+ TAxis ptAxis{analysis::dptdptfilter::ptbins, analysis::dptdptfilter::ptlow, analysis::dptdptfilter::ptup};
587+ Configurable<std::vector<int >> cfgPtBinsOfInterest{" cfgPtBinsOfInterest" , {1 , 2 , 3 }, " The pt bins of interest" };
588+ std::vector<std::vector<std::vector<std::vector<std::vector<std::shared_ptr<TH3>>>>>> fhInSectorDeltaPhiVsPhiPhiPerPtBinA{2 , {nsp, {nsp, {cfgPtBinsOfInterest->size (), {cfgPtBinsOfInterest->size (), nullptr }}}}};
589+ std::vector<std::vector<std::vector<std::vector<std::vector<std::shared_ptr<TH3>>>>>> fhInSectorDeltaPhiVsEtaEtaPerPtBinA{2 , {nsp, {nsp, {cfgPtBinsOfInterest->size (), {cfgPtBinsOfInterest->size (), nullptr }}}}};
589590
590591 template <efficiencyandqatask::KindOfData kindOfData>
591592 void init (HistogramRegistry& registry, const char * dirname)
@@ -594,26 +595,31 @@ struct QAExtraDataCollectingEngine {
594595 using namespace analysis ::dptdptfilter;
595596
596597 AxisSpec phiAxis = {phibins, 0 .0f , constants::math::TwoPI, " #varphi" };
597- AxisSpec deltaPhiAxis = {phibins, 0 .0f , constants::math::TwoPI, " #Delta#varphi" };
598+ AxisSpec phiSectorAxis = {144 , 0 .0f , kTpcPhiSectorWidth , " #varphi (mod(2#pi/18)) (rad)" };
599+ AxisSpec deltaPhiAxis = {phibins, 0 .0f , constants::math::TwoPI, " #Delta#varphi (rad)" };
600+ AxisSpec deltaPhiInSectorAxis = {288 , -kTpcPhiSectorWidth , kTpcPhiSectorWidth , " #Delta#varphi (rad)" };
598601 AxisSpec etaAxis = {etabins, etalow, etaup, " #eta" };
599- AxisSpec deltaEtaAxis = {2 * etabins - 1 , etalow - etaup, etaup - etalow, " #Delta#eta" };
600602
601603 /* the reconstructed and generated levels histograms */
602604 std::string recogen = (kindOfData == kReco ) ? " Reco" : " Gen" ;
603605 for (uint isp = 0 ; isp < nsp; ++isp) {
604606 for (uint jsp = 0 ; jsp < nsp; ++jsp) {
605607 fhPhiPhiA[kindOfData][isp][jsp] = ADDHISTOGRAM (TH2, DIRECTORYSTRING (" %s/%s/%s" , dirname, recogen.c_str (), " After" ), HNAMESTRING (" PhiPhi_%s%s" , tnames[isp].c_str (), tnames[jsp].c_str ()),
606608 HTITLESTRING (" %s%s pairs" , tnames[isp].c_str (), tnames[jsp].c_str ()), kTH2F , {phiAxis, phiAxis});
607- fhDeltaPhiVsPhiPhiA[kindOfData][isp][jsp] = ADDHISTOGRAM (TH3, DIRECTORYSTRING (" %s/%s/%s" , dirname, recogen.c_str (), " After" ), HNAMESTRING (" DeltaPhiVsPhiPhi_%s%s" , tnames[isp].c_str (), tnames[jsp].c_str ()),
608- HTITLESTRING (" %s%s pairs" , tnames[isp].c_str (), tnames[jsp].c_str ()), kTH3F , {phiAxis, phiAxis, deltaPhiAxis});
609- fhDeltaEtaVsPhiPhiA[kindOfData][isp][jsp] = ADDHISTOGRAM (TH3, DIRECTORYSTRING (" %s/%s/%s" , dirname, recogen.c_str (), " After" ), HNAMESTRING (" DeltaEtaVsPhiPhi_%s%s" , tnames[isp].c_str (), tnames[jsp].c_str ()),
610- HTITLESTRING (" %s%s pairs" , tnames[isp].c_str (), tnames[jsp].c_str ()), kTH3F , {phiAxis, phiAxis, deltaEtaAxis});
611609 fhEtaEtaA[kindOfData][isp][jsp] = ADDHISTOGRAM (TH2, DIRECTORYSTRING (" %s/%s/%s" , dirname, recogen.c_str (), " After" ), HNAMESTRING (" EtaEta_%s%s" , tnames[isp].c_str (), tnames[jsp].c_str ()),
612610 HTITLESTRING (" %s%s pairs" , tnames[isp].c_str (), tnames[jsp].c_str ()), kTH2F , {etaAxis, etaAxis});
613- fhDeltaEtaVsEtaEtaA[kindOfData][isp][jsp] = ADDHISTOGRAM (TH3, DIRECTORYSTRING (" %s/%s/%s" , dirname, recogen.c_str (), " After" ), HNAMESTRING (" DeltaEtaVsEtaEta_%s%s" , tnames[isp].c_str (), tnames[jsp].c_str ()),
614- HTITLESTRING (" %s%s pairs" , tnames[isp].c_str (), tnames[jsp].c_str ()), kTH3F , {etaAxis, etaAxis, deltaEtaAxis});
615- fhDeltaPhiVsEtaEtaA[kindOfData][isp][jsp] = ADDHISTOGRAM (TH3, DIRECTORYSTRING (" %s/%s/%s" , dirname, recogen.c_str (), " After" ), HNAMESTRING (" DeltaPhiVsEtaEta_%s%s" , tnames[isp].c_str (), tnames[jsp].c_str ()),
616- HTITLESTRING (" %s%s pairs" , tnames[isp].c_str (), tnames[jsp].c_str ()), kTH3F , {etaAxis, etaAxis, deltaPhiAxis});
611+ /* first resize them to the actual configured size */
612+ fhInSectorDeltaPhiVsPhiPhiPerPtBinA[kindOfData][isp][jsp].resize (cfgPtBinsOfInterest->size ());
613+ for (uint ipt = 0 ; ipt < cfgPtBinsOfInterest->size (); ++ipt) {
614+ /* first resize them to the actual configured size */
615+ fhInSectorDeltaPhiVsPhiPhiPerPtBinA[kindOfData][isp][jsp][ipt].resize (cfgPtBinsOfInterest->size (), nullptr );
616+ for (uint jpt = 0 ; jpt < cfgPtBinsOfInterest->size (); ++jpt) {
617+ fhInSectorDeltaPhiVsPhiPhiPerPtBinA[kindOfData][isp][jsp][ipt][jpt] = ADDHISTOGRAM (TH3, DIRECTORYSTRING (" %s/%s/%s" , dirname, recogen.c_str (), " After" ), HNAMESTRING (" DeltaPhiVsPhiPhiPt%02d%02d_%s%s" , ipt, jpt, tnames[isp].c_str (), tnames[jsp].c_str ()),
618+ HTITLESTRING (" %s%s pairs" , tnames[isp].c_str (), tnames[jsp].c_str ()), kTH3F , {phiSectorAxis, phiSectorAxis, deltaPhiInSectorAxis});
619+ fhInSectorDeltaPhiVsEtaEtaPerPtBinA[kindOfData][isp][jsp][ipt][jpt] = ADDHISTOGRAM (TH3, DIRECTORYSTRING (" %s/%s/%s" , dirname, recogen.c_str (), " After" ), HNAMESTRING (" DeltaPhiVsEtaEtaPt%02d%02d_%s%s" , ipt, jpt, tnames[isp].c_str (), tnames[jsp].c_str ()),
620+ HTITLESTRING (" %s%s pairs" , tnames[isp].c_str (), tnames[jsp].c_str ()), kTH3F , {etaAxis, etaAxis, deltaPhiInSectorAxis});
621+ }
622+ }
617623 }
618624 }
619625 }
@@ -626,20 +632,40 @@ struct QAExtraDataCollectingEngine {
626632
627633 /* we should only receive accepted tracks */
628634 for (auto const & track1 : tracks1) {
635+ auto indexForPt = [&](auto const & track) {
636+ int ptBin = ptAxis.FindFixBin (track.pt ());
637+ if (std::find (cfgPtBinsOfInterest->begin (), cfgPtBinsOfInterest->end (), ptBin) != cfgPtBinsOfInterest->end ()) {
638+ /* of interest */
639+ return ptBin - 1 ;
640+ } else {
641+ return -1 ;
642+ }
643+ };
644+ int ptBinIx1 = indexForPt (track1);
645+ if (ptBinIx1 < 0 ) {
646+ continue ;
647+ }
648+ float inTpcSectorPhi1 = std::fmod (track1.phi (), kTpcPhiSectorWidth );
629649 for (auto const & track2 : tracks2) {
630650 /* checking the same track id condition */
631651 if (track1 == track2) {
632652 /* exclude autocorrelations */
633653 continue ;
634654 }
635- float deltaPhi = RecoDecay::constrainAngle (track1.phi () - track2.phi ());
636- float deltaEta = track1.eta () - track2.eta ();
655+ int ptBinIx2 = indexForPt (track2);
656+ if (ptBinIx2 < 0 ) {
657+ continue ;
658+ }
637659 fhPhiPhiA[kindOfData][track1.trackacceptedid ()][track2.trackacceptedid ()]->Fill (track1.phi (), track2.phi ());
638- fhDeltaPhiVsPhiPhiA[kindOfData][track1.trackacceptedid ()][track2.trackacceptedid ()]->Fill (track1.phi (), track2.phi (), deltaPhi);
639- fhDeltaEtaVsPhiPhiA[kindOfData][track1.trackacceptedid ()][track2.trackacceptedid ()]->Fill (track1.phi (), track2.phi (), deltaEta);
640660 fhEtaEtaA[kindOfData][track1.trackacceptedid ()][track2.trackacceptedid ()]->Fill (track1.eta (), track2.eta ());
641- fhDeltaEtaVsEtaEtaA[kindOfData][track1.trackacceptedid ()][track2.trackacceptedid ()]->Fill (track1.eta (), track2.eta (), deltaEta);
642- fhDeltaPhiVsEtaEtaA[kindOfData][track1.trackacceptedid ()][track2.trackacceptedid ()]->Fill (track1.eta (), track2.eta (), deltaPhi);
661+ if (static_cast <int >(track1.phi () / kTpcPhiSectorWidth ) == static_cast <int >(track2.phi () / kTpcPhiSectorWidth )) {
662+ /* only if, for sure, both tracks are within the same sector */
663+ float inTpcSectorPhi2 = std::fmod (track2.phi (), kTpcPhiSectorWidth );
664+ float deltaPhi = inTpcSectorPhi1 - inTpcSectorPhi2;
665+
666+ fhInSectorDeltaPhiVsPhiPhiPerPtBinA[kindOfData][track1.trackacceptedid ()][track2.trackacceptedid ()][ptBinIx1][ptBinIx2]->Fill (track1.phi (), track2.phi (), deltaPhi);
667+ fhInSectorDeltaPhiVsEtaEtaPerPtBinA[kindOfData][track1.trackacceptedid ()][track2.trackacceptedid ()][ptBinIx1][ptBinIx2]->Fill (track1.eta (), track2.eta (), deltaPhi);
668+ }
643669 }
644670 }
645671 }
0 commit comments