4949#include " MathUtils/Primitive2D.h"
5050#include " DataFormatsGlobalTracking/RecoContainer.h"
5151#include " Common/DataModel/CollisionAssociationTables.h"
52+ #include " DataFormatsParameters/GRPMagField.h"
53+ #include " Field/MagneticField.h"
54+ #include " TGeoGlobalMagField.h"
55+ #include " DetectorsBase/Propagator.h"
56+ #include " DetectorsBase/GeometryManager.h"
5257
5358using std::cout;
5459using std::endl;
@@ -163,8 +168,14 @@ struct TableMaker {
163168 Configurable<bool > fConfigSaveElectronSample {" cfgSaveElectronSample" , false , " If true, only save electron sample" };
164169 Configurable<bool > fConfigDummyRunlist {" cfgDummyRunlist" , false , " If true, use dummy runlist" };
165170 Configurable<int > fConfigInitRunNumber {" cfgInitRunNumber" , 543215 , " Initial run number used in run by run checks" };
171+ Configurable<bool > fPropMuon {" cfgPropMuon" , false , " Propgate muon tracks through absorber" };
172+ Configurable<std::string> geoPath{" geoPath" , " GLO/Config/GeometryAligned" , " Path of the geometry file" };
173+ Configurable<std::string> grpmagPath{" grpmagPath" , " GLO/Config/GRPMagField" , " CCDB path of the GRPMagField object" };
174+
166175 Service<o2::ccdb::BasicCCDBManager> fCCDB ;
167176
177+ o2::parameters::GRPMagField* grpmag = nullptr ;
178+
168179 AnalysisCompositeCut* fEventCut ; // ! Event selection cut
169180 std::vector<AnalysisCompositeCut> fTrackCuts ; // ! Barrel track cuts
170181 std::vector<AnalysisCompositeCut> fMuonCuts ; // ! Muon track cuts
@@ -174,6 +185,7 @@ struct TableMaker {
174185 Preslice<aod::TrackAssoc> trackIndicesPerCollision = aod::track_association::collisionId;
175186 Preslice<aod::FwdTrackAssoc> fwdtrackIndicesPerCollision = aod::track_association::collisionId;
176187
188+ Service<o2::ccdb::BasicCCDBManager> ccdb;
177189 bool fDoDetailedQA = false ; // Bool to set detailed QA true, if QA is set true
178190 int fCurrentRun ; // needed to detect if the run changed and trigger update of calibrations etc.
179191
@@ -185,6 +197,14 @@ struct TableMaker {
185197 void init (o2::framework::InitContext& context)
186198 {
187199 DefineCuts ();
200+ ccdb->setURL (fConfigCcdbUrl );
201+ ccdb->setCaching (true );
202+ ccdb->setLocalObjectValidityChecking ();
203+ if (fPropMuon ) {
204+ if (!o2::base::GeometryManager::isGeometryLoaded ()) {
205+ ccdb->get <TGeoManager>(geoPath);
206+ }
207+ }
188208
189209 VarManager::SetDefaultVarNames ();
190210 fHistMan = new HistogramManager (" analysisHistos" , " aa" , VarManager::kNVars );
@@ -319,17 +339,23 @@ struct TableMaker {
319339 void fullSkimming (TEvent const & collision, aod::BCsWithTimestamps const &, TTracks const & tracksBarrel, TMuons const & tracksMuon, TAmbiTracks const & ambiTracksMid, TAmbiMuons const & ambiTracksFwd, TMFTTracks const & mftTracks = nullptr )
320340 {
321341 auto bc = collision.template bc_as <aod::BCsWithTimestamps>();
322- if (fConfigComputeTPCpostCalib && fCurrentRun != bc.runNumber ()) {
323- auto calibList = fCCDB ->getForTimeStamp <TList>(fConfigCcdbPathTPC .value , bc.timestamp ());
324- VarManager::SetCalibrationObject (VarManager::kTPCElectronMean , calibList->FindObject (" mean_map_electron" ));
325- VarManager::SetCalibrationObject (VarManager::kTPCElectronSigma , calibList->FindObject (" sigma_map_electron" ));
326- VarManager::SetCalibrationObject (VarManager::kTPCPionMean , calibList->FindObject (" mean_map_pion" ));
327- VarManager::SetCalibrationObject (VarManager::kTPCPionSigma , calibList->FindObject (" sigma_map_pion" ));
328- VarManager::SetCalibrationObject (VarManager::kTPCProtonMean , calibList->FindObject (" mean_map_proton" ));
329- VarManager::SetCalibrationObject (VarManager::kTPCProtonSigma , calibList->FindObject (" sigma_map_proton" ));
330- if (fConfigComputeTPCpostCalibKaon ) {
331- VarManager::SetCalibrationObject (VarManager::kTPCKaonMean , calibList->FindObject (" mean_map_kaon" ));
332- VarManager::SetCalibrationObject (VarManager::kTPCKaonSigma , calibList->FindObject (" sigma_map_kaon" ));
342+ if (fCurrentRun != bc.runNumber ()) {
343+ if (fConfigComputeTPCpostCalib ) {
344+ auto calibList = fCCDB ->getForTimeStamp <TList>(fConfigCcdbPathTPC .value , bc.timestamp ());
345+ VarManager::SetCalibrationObject (VarManager::kTPCElectronMean , calibList->FindObject (" mean_map_electron" ));
346+ VarManager::SetCalibrationObject (VarManager::kTPCElectronSigma , calibList->FindObject (" sigma_map_electron" ));
347+ VarManager::SetCalibrationObject (VarManager::kTPCPionMean , calibList->FindObject (" mean_map_pion" ));
348+ VarManager::SetCalibrationObject (VarManager::kTPCPionSigma , calibList->FindObject (" sigma_map_pion" ));
349+ VarManager::SetCalibrationObject (VarManager::kTPCProtonMean , calibList->FindObject (" mean_map_proton" ));
350+ VarManager::SetCalibrationObject (VarManager::kTPCProtonSigma , calibList->FindObject (" sigma_map_proton" ));
351+ if (fConfigComputeTPCpostCalibKaon ) {
352+ VarManager::SetCalibrationObject (VarManager::kTPCKaonMean , calibList->FindObject (" mean_map_kaon" ));
353+ VarManager::SetCalibrationObject (VarManager::kTPCKaonSigma , calibList->FindObject (" sigma_map_kaon" ));
354+ }
355+ }
356+ grpmag = ccdb->getForTimeStamp <o2::parameters::GRPMagField>(grpmagPath, bc.timestamp ());
357+ if (grpmag != nullptr ) {
358+ o2::base::Propagator::initFieldFromGRP (grpmag);
333359 }
334360 fCurrentRun = bc.runNumber ();
335361 }
@@ -603,6 +629,9 @@ struct TableMaker {
603629 trackTempFilterMap = uint8_t (0 );
604630
605631 VarManager::FillTrack<TMuonFillMap>(muon);
632+ if (fPropMuon ) {
633+ VarManager::FillPropagateMuon<TMuonFillMap>(muon, collision);
634+ }
606635 if (fDoDetailedQA ) {
607636 fHistMan ->FillHistClass (" Muons_BeforeCuts" , VarManager::fgValues);
608637 if (fIsAmbiguous && isAmbiguous == 1 ) {
@@ -663,18 +692,18 @@ struct TableMaker {
663692 }
664693 }
665694
666- muonBasic (event.lastIndex (), trackFilteringTag, muon. pt (), muon. eta (), muon. phi () , muon.sign (), isAmbiguous);
695+ muonBasic (event.lastIndex (), trackFilteringTag, VarManager::fgValues[VarManager:: kPt ], VarManager::fgValues[VarManager:: kEta ], VarManager::fgValues[VarManager:: kPhi ] , muon.sign (), isAmbiguous);
667696 muonExtra (muon.nClusters (), muon.pDca (), muon.rAtAbsorberEnd (),
668697 muon.chi2 (), muon.chi2MatchMCHMID (), muon.chi2MatchMCHMFT (),
669698 muon.matchScoreMCHMFT (), newMatchIndex.find (muon.index ())->second , newMFTMatchIndex.find (muon.index ())->second , muon.mchBitMap (), muon.midBitMap (),
670699 muon.midBoards (), muon.trackType (), muon.fwdDcaX (), muon.fwdDcaY (),
671700 muon.trackTime (), muon.trackTimeRes ());
672701 muonInfo (muon.collisionId (), collision.posX (), collision.posY (), collision.posZ ());
673702 if constexpr (static_cast <bool >(TMuonFillMap & VarManager::ObjTypes::MuonCov)) {
674- muonCov (muon. x (), muon. y (), muon. z (), muon. phi (), muon. tgl () , muon.signed1Pt () ,
675- muon. cXX (), muon. cXY (), muon. cYY (), muon. cPhiX (), muon. cPhiY (), muon. cPhiPhi () ,
676- muon. cTglX (), muon. cTglY (), muon. cTglPhi (), muon. cTglTgl (), muon. c1PtX (), muon. c1PtY () ,
677- muon. c1PtPhi (), muon. c1PtTgl (), muon. c1Pt21Pt2 () );
703+ muonCov (VarManager::fgValues[VarManager:: kX ], VarManager::fgValues[VarManager:: kY ], VarManager::fgValues[VarManager:: kZ ], VarManager::fgValues[VarManager:: kPhi ], VarManager::fgValues[VarManager:: kTgl ] , muon.sign () / VarManager::fgValues[VarManager:: kPt ] ,
704+ VarManager::fgValues[VarManager:: kMuonCXX ], VarManager::fgValues[VarManager:: kMuonCXY ], VarManager::fgValues[VarManager:: kMuonCYY ], VarManager::fgValues[VarManager:: kMuonCPhiX ], VarManager::fgValues[VarManager:: kMuonCPhiY ], VarManager::fgValues[VarManager:: kMuonCPhiPhi ] ,
705+ VarManager::fgValues[VarManager:: kMuonCTglX ], VarManager::fgValues[VarManager:: kMuonCTglY ], VarManager::fgValues[VarManager:: kMuonCTglPhi ], VarManager::fgValues[VarManager:: kMuonCTglTgl ], VarManager::fgValues[VarManager:: kMuonC1Pt2X ], VarManager::fgValues[VarManager:: kMuonC1Pt2Y ] ,
706+ VarManager::fgValues[VarManager:: kMuonC1Pt2Phi ], VarManager::fgValues[VarManager:: kMuonC1Pt2Tgl ], VarManager::fgValues[VarManager:: kMuonC1Pt21Pt2 ] );
678707 }
679708 }
680709 } // end if constexpr (TMuonFillMap)
@@ -924,6 +953,9 @@ struct TableMaker {
924953 trackTempFilterMap = uint8_t (0 );
925954
926955 VarManager::FillTrack<TMuonFillMap>(muon);
956+ if (fPropMuon ) {
957+ VarManager::FillPropagateMuon<TMuonFillMap>(muon, collision);
958+ }
927959 if (fDoDetailedQA ) {
928960 fHistMan ->FillHistClass (" Muons_BeforeCuts" , VarManager::fgValues);
929961 if (fIsAmbiguous && isAmbiguous == 1 ) {
@@ -970,18 +1002,18 @@ struct TableMaker {
9701002 }
9711003 }
9721004
973- muonBasic (event.lastIndex (), trackFilteringTag, muon. pt (), muon. eta (), muon. phi () , muon.sign (), isAmbiguous);
1005+ muonBasic (event.lastIndex (), trackFilteringTag, VarManager::fgValues[VarManager:: kPt ], VarManager::fgValues[VarManager:: kEta ], VarManager::fgValues[VarManager:: kPhi ] , muon.sign (), isAmbiguous);
9741006 muonExtra (muon.nClusters (), muon.pDca (), muon.rAtAbsorberEnd (),
9751007 muon.chi2 (), muon.chi2MatchMCHMID (), muon.chi2MatchMCHMFT (),
9761008 muon.matchScoreMCHMFT (), newMatchIndex.find (muon.index ())->second , -1 , muon.mchBitMap (), muon.midBitMap (),
9771009 muon.midBoards (), muon.trackType (), muon.fwdDcaX (), muon.fwdDcaY (),
9781010 muon.trackTime (), muon.trackTimeRes ());
9791011 muonInfo (muon.collisionId (), collision.posX (), collision.posY (), collision.posZ ());
9801012 if constexpr (static_cast <bool >(TMuonFillMap & VarManager::ObjTypes::MuonCov)) {
981- muonCov (muon. x (), muon. y (), muon. z (), muon. phi (), muon. tgl () , muon.signed1Pt () ,
982- muon. cXX (), muon. cXY (), muon. cYY (), muon. cPhiX (), muon. cPhiY (), muon. cPhiPhi () ,
983- muon. cTglX (), muon. cTglY (), muon. cTglPhi (), muon. cTglTgl (), muon. c1PtX (), muon. c1PtY () ,
984- muon. c1PtPhi (), muon. c1PtTgl (), muon. c1Pt21Pt2 () );
1013+ muonCov (VarManager::fgValues[VarManager:: kX ], VarManager::fgValues[VarManager:: kY ], VarManager::fgValues[VarManager:: kZ ], VarManager::fgValues[VarManager:: kPhi ], VarManager::fgValues[VarManager:: kTgl ] , muon.sign () / VarManager::fgValues[VarManager:: kPt ] ,
1014+ VarManager::fgValues[VarManager:: kMuonCXX ], VarManager::fgValues[VarManager:: kMuonCXY ], VarManager::fgValues[VarManager:: kMuonCYY ], VarManager::fgValues[VarManager:: kMuonCPhiX ], VarManager::fgValues[VarManager:: kMuonCPhiY ], VarManager::fgValues[VarManager:: kMuonCPhiPhi ] ,
1015+ VarManager::fgValues[VarManager:: kMuonCTglX ], VarManager::fgValues[VarManager:: kMuonCTglY ], VarManager::fgValues[VarManager:: kMuonCTglPhi ], VarManager::fgValues[VarManager:: kMuonCTglTgl ], VarManager::fgValues[VarManager:: kMuonC1Pt2X ], VarManager::fgValues[VarManager:: kMuonC1Pt2Y ] ,
1016+ VarManager::fgValues[VarManager:: kMuonC1Pt2Phi ], VarManager::fgValues[VarManager:: kMuonC1Pt2Tgl ], VarManager::fgValues[VarManager:: kMuonC1Pt21Pt2 ] );
9851017 }
9861018 }
9871019 } // end if constexpr (TMuonFillMap)
0 commit comments