99// granted to it by virtue of its status as an Intergovernmental Organization
1010// or submit itself to any jurisdiction.
1111
12- #include < vector>
13- #include < TStopwatch.h>
1412#include " DataFormatsGlobalTracking/RecoContainer.h"
1513#include " DataFormatsGlobalTracking/RecoContainerCreateTracksVariadic.h"
1614#include " ReconstructionDataFormats/V0.h"
5553#include " GPUParam.h"
5654#include " GPUParam.inc"
5755#include " MathUtils/fit.h"
56+
5857#include < TRandom.h>
59- #include < map>
58+ #include < TStopwatch.h>
59+
60+ #include < vector>
6061#include < unordered_map>
6162#include < array>
6263#include < set>
6364#include < utility>
64- #include < gsl/ span>
65+ #include < span>
6566
6667// workflow to study relation of reco tracks to MCTruth
6768// o2-trackmc-study-workflow --device-verbosity all -b --run
@@ -90,6 +91,7 @@ class TrackMCStudy : public Task
9091 MCV0,
9192 MCV0NotSelected,
9293 MCFiltered,
94+ MCITSCls,
9395 };
9496
9597 public:
@@ -119,7 +121,7 @@ class TrackMCStudy : public Task
119121 void updateTimeDependentParams (ProcessingContext& pc);
120122 float getDCAYCut (float pt) const ;
121123
122- gsl ::span<const MCTrack> mCurrMCTracks ;
124+ std ::span<const MCTrack> mCurrMCTracks ;
123125 TVector3 mCurrMCVertex ;
124126 o2::tpc::VDriftHelper mTPCVDriftHelper ;
125127 o2::tpc::CorrectionMapsLoader mTPCCorrMapsLoader ;
@@ -382,7 +384,7 @@ void TrackMCStudy::process(const o2::globaltracking::RecoContainer& recoData)
382384 LOGP (info, " Event {}" , curEvMC);
383385 }
384386 const auto & mt = mcReader.getTracks (curSrcMC, curEvMC);
385- mCurrMCTracks = gsl ::span<const MCTrack>(mt.data (), mt.size ());
387+ mCurrMCTracks = std ::span<const MCTrack>(mt.data (), mt.size ());
386388 const_cast <o2::dataformats::MCEventHeader&>(mcReader.getMCEventHeader (curSrcMC, curEvMC)).GetVertex (mCurrMCVertex );
387389 if (okAccVtx) {
388390 auto & pos = mMCVtVec [curEvMC].pos ;
@@ -439,7 +441,7 @@ void TrackMCStudy::process(const o2::globaltracking::RecoContainer& recoData)
439441 curSrcMC = lbl.getSourceID ();
440442 curEvMC = lbl.getEventID ();
441443 const auto & mt = mcReader.getTracks (curSrcMC, curEvMC);
442- mCurrMCTracks = gsl ::span<const MCTrack>(mt.data (), mt.size ());
444+ mCurrMCTracks = std ::span<const MCTrack>(mt.data (), mt.size ());
443445 const_cast <o2::dataformats::MCEventHeader&>(mcReader.getMCEventHeader (curSrcMC, curEvMC)).GetVertex (mCurrMCVertex );
444446 }
445447 if (!acceptMCCharged (mCurrMCTracks [lbl.getTrackID ()], lbl)) {
@@ -527,7 +529,7 @@ void TrackMCStudy::process(const o2::globaltracking::RecoContainer& recoData)
527529 auto msk = tref.gid .getSourceDetectorsMask ();
528530 if (msk[DetID::ITS]) {
529531 if (gidSet[GTrackID::ITS].isSourceSet ()) { // has ITS track rather than AB tracklet
530- tref.pattITS = getITSPatt (gidSet[GTrackID::ITS], tref.nClITS );
532+ tref.pattClITS = getITSPatt (gidSet[GTrackID::ITS], tref.nClITS );
531533 if (trackFam.entITS < 0 ) {
532534 trackFam.entITS = tcnt;
533535 }
@@ -539,7 +541,7 @@ void TrackMCStudy::process(const o2::globaltracking::RecoContainer& recoData)
539541 trackFam.entITSFound = tcnt;
540542 }
541543 } else { // AB ITS tracklet
542- tref.pattITS = getITSPatt (gidSet[GTrackID::ITSAB], tref.nClITS );
544+ tref.pattClITS = getITSPatt (gidSet[GTrackID::ITSAB], tref.nClITS );
543545 if (recoData.getTrackMCLabel (gidSet[GTrackID::ITSAB]).isFake ()) {
544546 tref.flags |= RecTrack::FakeITS;
545547 }
@@ -603,7 +605,7 @@ void TrackMCStudy::process(const o2::globaltracking::RecoContainer& recoData)
603605 auto v0s = recoData.getV0sIdx ();
604606 auto prpr = [](o2::trackstudy::TrackFamily& f) {
605607 std::string s;
606- s += fmt::format (" par {} Ntpccl={} Nitscl={} " , f.mcTrackInfo .pdgParent , f.mcTrackInfo .nTPCCl , f.mcTrackInfo .nITSCl );
608+ s += fmt::format (" par {} Ntpccl={} Nitscl={} " , f.mcTrackInfo .pdgParent , f.mcTrackInfo .nTPCCl , f.mcTrackInfo .nClITS );
607609 for (auto & t : f.recTracks ) {
608610 s += t.gid .asString ();
609611 s += " " ;
@@ -686,7 +688,13 @@ void TrackMCStudy::process(const o2::globaltracking::RecoContainer& recoData)
686688 if (dec.foundSVID >= 0 && !refitV0 (dec.foundSVID , v0, recoData)) {
687689 v0.invalidate ();
688690 }
689- (*mDBGOut ) << decTreeName.c_str () << " pdgPar=" << dec.pdg << " trPar=" << dec.parent << " prod=" << decFam << " found=" << dec.foundSVID << " sv=" << v0 << " \n " ;
691+ (*mDBGOut ) << decTreeName.c_str ()
692+ << " pdgPar=" << dec.pdg
693+ << " trPar=" << dec.parent
694+ << " prod=" << decFam
695+ << " found=" << dec.foundSVID
696+ << " sv=" << v0
697+ << " \n " ;
690698 }
691699 }
692700 }
@@ -905,8 +913,15 @@ void TrackMCStudy::fillMCClusterInfo(const o2::globaltracking::RecoContainer& re
905913 continue ;
906914 }
907915 auto & mctr = entry->second .mcTrackInfo ;
908- mctr.nITSCl ++;
909- mctr.pattITSCl |= 0x1 << o2::itsmft::ChipMappingITS::getLayer (ITSClusters[icl].getChipID ());
916+ if (!lbl.isValid ()) {
917+ mctr.nITSClInv ++;
918+ } else {
919+ mctr.nClITS ++;
920+ mctr.pattClITS |= 0x1 << o2::itsmft::ChipMappingITS::getLayer (ITSClusters[icl].getChipID ());
921+ if (mVerbose [Verbosity::MCITSCls]) {
922+ LOGP (info, " ITS Cluster: MCParticle {}{}: patt: {:07b}[{:3d}] icl={:9d} lay={} par={:8} pdg={:8d}{} pt={:.3f} tgl={:2.3f}" , lbl.getRawValue (), lbl.asString (), mctr.pattClITS , mctr.nClITS , icl, o2::itsmft::ChipMappingITS::getLayer (ITSClusters[icl].getChipID ()), mctr.pdgParent , mctr.pdg , ITSClusters[icl].asString (), mctr.track .getPt (), mctr.track .getTgl ());
923+ }
924+ }
910925 }
911926 }
912927}
0 commit comments