5252#include " FT0Base/Geometry.h"
5353#include " GlobalTracking/MatchTOF.h"
5454#include " ReconstructionDataFormats/Cascade.h"
55+ #include " GlobalTracking/MatchGlobalFwd.h"
5556#include " MCHTracking/TrackExtrap.h"
5657#include " MCHTracking/TrackParam.h"
5758#include " ITSMFTBase/DPLAlpideParam.h"
@@ -574,10 +575,12 @@ void AODProducerWorkflowDPL::addToFwdTracksTable(FwdTracksCursorType& fwdTracksC
574575 }
575576
576577 o2::mch::TrackParam trackParamAtVertex (track.getZ (), track.getParameters (), track.getCovariances ());
577- double errVtx{0.0 }; // FIXME: get errors associated with vertex if available
578- double errVty{0.0 };
579- if (!o2::mch::TrackExtrap::extrapToVertex (trackParamAtVertex, vx, vy, vz, errVtx, errVty)) {
580- return false ;
578+ if (mPropMuons ) {
579+ double errVtx{0.0 }; // FIXME: get errors associated with vertex if available
580+ double errVty{0.0 };
581+ if (!o2::mch::TrackExtrap::extrapToVertex (trackParamAtVertex, vx, vy, vz, errVtx, errVty)) {
582+ return false ;
583+ }
581584 }
582585
583586 // extrapolate to DCA
@@ -599,43 +602,37 @@ void AODProducerWorkflowDPL::addToFwdTracksTable(FwdTracksCursorType& fwdTracksC
599602 double xAbs = trackParamAtRAbs.getNonBendingCoor ();
600603 double yAbs = trackParamAtRAbs.getBendingCoor ();
601604
602- double px = trackParamAtVertex.px ();
603- double py = trackParamAtVertex.py ();
604- double pz = trackParamAtVertex.pz ();
605-
606- double pt = std::sqrt (px * px + py * py);
607- double dphi = std::atan2 (py, px);
608- double dtanl = pz / pt;
609- double dinvqpt = 1.0 / (trackParamAtVertex.getCharge () * pt);
610605 double dpdca = track.getP () * dca;
611606 double dchi2 = track.getChi2OverNDF ();
612607
613- fwdInfo.x = trackParamAtVertex.getNonBendingCoor ();
614- fwdInfo.y = trackParamAtVertex.getBendingCoor ();
615- fwdInfo.z = trackParamAtVertex.getZ ();
608+ auto fwdmuon = mMatching .MCHtoFwd (trackParamAtVertex);
609+
610+ fwdInfo.x = fwdmuon.getX ();
611+ fwdInfo.y = fwdmuon.getY ();
612+ fwdInfo.z = fwdmuon.getZ ();
613+ fwdInfo.phi = fwdmuon.getPhi ();
614+ fwdInfo.tanl = fwdmuon.getTgl ();
615+ fwdInfo.invqpt = fwdmuon.getInvQPt ();
616616 fwdInfo.rabs = std::sqrt (xAbs * xAbs + yAbs * yAbs);
617- fwdInfo.phi = dphi;
618- fwdInfo.tanl = dtanl;
619- fwdInfo.invqpt = dinvqpt;
620617 fwdInfo.chi2 = dchi2;
621618 fwdInfo.pdca = dpdca;
622619 fwdInfo.nClusters = track.getNClusters ();
623620
624- fwdCovInfo.sigX = TMath::Sqrt (trackParamAtVertex .getCovariances ()(0 , 0 ));
625- fwdCovInfo.sigY = TMath::Sqrt (trackParamAtVertex .getCovariances ()(1 , 1 ));
626- fwdCovInfo.sigPhi = TMath::Sqrt (trackParamAtVertex .getCovariances ()(2 , 2 ));
627- fwdCovInfo.sigTgl = TMath::Sqrt (trackParamAtVertex .getCovariances ()(3 , 3 ));
628- fwdCovInfo.sig1Pt = TMath::Sqrt (trackParamAtVertex .getCovariances ()(4 , 4 ));
629- fwdCovInfo.rhoXY = (Char_t)(128 . * trackParamAtVertex .getCovariances ()(0 , 1 ) / (fwdCovInfo.sigX * fwdCovInfo.sigY ));
630- fwdCovInfo.rhoPhiX = (Char_t)(128 . * trackParamAtVertex .getCovariances ()(0 , 2 ) / (fwdCovInfo.sigPhi * fwdCovInfo.sigX ));
631- fwdCovInfo.rhoPhiY = (Char_t)(128 . * trackParamAtVertex .getCovariances ()(1 , 2 ) / (fwdCovInfo.sigPhi * fwdCovInfo.sigY ));
632- fwdCovInfo.rhoTglX = (Char_t)(128 . * trackParamAtVertex .getCovariances ()(0 , 3 ) / (fwdCovInfo.sigTgl * fwdCovInfo.sigX ));
633- fwdCovInfo.rhoTglY = (Char_t)(128 . * trackParamAtVertex .getCovariances ()(1 , 3 ) / (fwdCovInfo.sigTgl * fwdCovInfo.sigY ));
634- fwdCovInfo.rhoTglPhi = (Char_t)(128 . * trackParamAtVertex .getCovariances ()(2 , 3 ) / (fwdCovInfo.sigTgl * fwdCovInfo.sigPhi ));
635- fwdCovInfo.rho1PtX = (Char_t)(128 . * trackParamAtVertex .getCovariances ()(0 , 4 ) / (fwdCovInfo.sig1Pt * fwdCovInfo.sigX ));
636- fwdCovInfo.rho1PtY = (Char_t)(128 . * trackParamAtVertex .getCovariances ()(1 , 4 ) / (fwdCovInfo.sig1Pt * fwdCovInfo.sigY ));
637- fwdCovInfo.rho1PtPhi = (Char_t)(128 . * trackParamAtVertex .getCovariances ()(2 , 4 ) / (fwdCovInfo.sig1Pt * fwdCovInfo.sigPhi ));
638- fwdCovInfo.rho1PtTgl = (Char_t)(128 . * trackParamAtVertex .getCovariances ()(3 , 4 ) / (fwdCovInfo.sig1Pt * fwdCovInfo.sigTgl ));
621+ fwdCovInfo.sigX = TMath::Sqrt (fwdmuon .getCovariances ()(0 , 0 ));
622+ fwdCovInfo.sigY = TMath::Sqrt (fwdmuon .getCovariances ()(1 , 1 ));
623+ fwdCovInfo.sigPhi = TMath::Sqrt (fwdmuon .getCovariances ()(2 , 2 ));
624+ fwdCovInfo.sigTgl = TMath::Sqrt (fwdmuon .getCovariances ()(3 , 3 ));
625+ fwdCovInfo.sig1Pt = TMath::Sqrt (fwdmuon .getCovariances ()(4 , 4 ));
626+ fwdCovInfo.rhoXY = (Char_t)(128 . * fwdmuon .getCovariances ()(0 , 1 ) / (fwdCovInfo.sigX * fwdCovInfo.sigY ));
627+ fwdCovInfo.rhoPhiX = (Char_t)(128 . * fwdmuon .getCovariances ()(0 , 2 ) / (fwdCovInfo.sigPhi * fwdCovInfo.sigX ));
628+ fwdCovInfo.rhoPhiY = (Char_t)(128 . * fwdmuon .getCovariances ()(1 , 2 ) / (fwdCovInfo.sigPhi * fwdCovInfo.sigY ));
629+ fwdCovInfo.rhoTglX = (Char_t)(128 . * fwdmuon .getCovariances ()(0 , 3 ) / (fwdCovInfo.sigTgl * fwdCovInfo.sigX ));
630+ fwdCovInfo.rhoTglY = (Char_t)(128 . * fwdmuon .getCovariances ()(1 , 3 ) / (fwdCovInfo.sigTgl * fwdCovInfo.sigY ));
631+ fwdCovInfo.rhoTglPhi = (Char_t)(128 . * fwdmuon .getCovariances ()(2 , 3 ) / (fwdCovInfo.sigTgl * fwdCovInfo.sigPhi ));
632+ fwdCovInfo.rho1PtX = (Char_t)(128 . * fwdmuon .getCovariances ()(0 , 4 ) / (fwdCovInfo.sig1Pt * fwdCovInfo.sigX ));
633+ fwdCovInfo.rho1PtY = (Char_t)(128 . * fwdmuon .getCovariances ()(1 , 4 ) / (fwdCovInfo.sig1Pt * fwdCovInfo.sigY ));
634+ fwdCovInfo.rho1PtPhi = (Char_t)(128 . * fwdmuon .getCovariances ()(2 , 4 ) / (fwdCovInfo.sig1Pt * fwdCovInfo.sigPhi ));
635+ fwdCovInfo.rho1PtTgl = (Char_t)(128 . * fwdmuon .getCovariances ()(3 , 4 ) / (fwdCovInfo.sig1Pt * fwdCovInfo.sigTgl ));
639636
640637 return true ;
641638 };
@@ -1626,6 +1623,7 @@ void AODProducerWorkflowDPL::init(InitContext& ic)
16261623 mNThreads = std::max (1 , ic.options ().get <int >(" nthreads" ));
16271624 mEMCselectLeading = ic.options ().get <bool >(" emc-select-leading" );
16281625 mPropTracks = ic.options ().get <bool >(" propagate-tracks" );
1626+ mPropMuons = ic.options ().get <bool >(" propagate-muons" );
16291627#ifdef WITH_OPENMP
16301628 LOGP (info, " Multi-threaded parts will run with {} OpenMP threads" , mNThreads );
16311629#else
@@ -2831,7 +2829,8 @@ DataProcessorSpec getAODProducerWorkflowSpec(GID::mask_t src, bool enableSV, boo
28312829 ConfigParamSpec{" reco-mctracks-only" , VariantType::Int, 0 , {" Store only reconstructed MC tracks and their mothers/daughters. 0 -- off, != 0 -- on" }},
28322830 ConfigParamSpec{" ctpreadout-create" , VariantType::Int, 0 , {" Create CTP digits from detector readout and CTP inputs. !=1 -- off, 1 -- on" }},
28332831 ConfigParamSpec{" emc-select-leading" , VariantType::Bool, false , {" Flag to select if only the leading contributing particle for an EMCal cell should be stored" }},
2834- ConfigParamSpec{" propagate-tracks" , VariantType::Bool, false , {" Propagate tracks (not used for secondary vertices) to IP" }}}};
2832+ ConfigParamSpec{" propagate-tracks" , VariantType::Bool, false , {" Propagate tracks (not used for secondary vertices) to IP" }},
2833+ ConfigParamSpec{" propagate-muons" , VariantType::Bool, false , {" Propagate muons to IP" }}}};
28352834}
28362835
28372836} // namespace o2::aodproducer
0 commit comments