Skip to content

Commit b5d96df

Browse files
authored
Adding conversion from Fwdtrack to MCH coordinate systems (#12165)
* Adding conversion method from Fwd to MCH coordinate systems * Clang format
1 parent b7923f7 commit b5d96df

File tree

2 files changed

+75
-3
lines changed

2 files changed

+75
-3
lines changed

Detectors/GlobalTracking/include/GlobalTracking/MatchGlobalFwd.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,11 @@ class MatchGlobalFwd
143143
const std::vector<o2::dataformats::MatchInfoFwd>& getMFTMCHMatchInfo() const { return mMatchingInfo; }
144144
const std::vector<o2::MCCompLabel>& getMatchLabels() const { return mMatchLabels; }
145145

146+
/// Converts mchTrack parameters to Forward coordinate system
147+
o2::dataformats::GlobalFwdTrack MCHtoFwd(const o2::mch::TrackParam& mchTrack);
148+
/// Converts FwdTrack parameters to MCH coordinate system
149+
o2::mch::TrackParam FwdtoMCH(const o2::dataformats::GlobalFwdTrack& fwdtrack);
150+
146151
private:
147152
void updateTimeDependentParams();
148153
void fillBuiltinFunctions();
@@ -280,9 +285,6 @@ class MatchGlobalFwd
280285
return true;
281286
}
282287

283-
/// Converts mchTrack parameters to Forward coordinate system
284-
o2::dataformats::GlobalFwdTrack MCHtoFwd(const o2::mch::TrackParam& mchTrack);
285-
286288
float mBz = -5.f; ///< nominal Bz in kGauss
287289
float mMatchingPlaneZ = sLastMFTPlaneZ; ///< MCH-MFT matching plane Z position
288290
Float_t mMFTDiskThicknessInX0 = 0.042 / 5; ///< MFT disk thickness in radiation length

Detectors/GlobalTracking/src/MatchGlobalFwd.cxx

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -770,6 +770,76 @@ o2::dataformats::GlobalFwdTrack MatchGlobalFwd::MCHtoFwd(const o2::mch::TrackPar
770770
return convertedTrack;
771771
}
772772

773+
//_________________________________________________________________________________________________
774+
o2::mch::TrackParam MatchGlobalFwd::FwdtoMCH(const o2::dataformats::GlobalFwdTrack& fwdtrack)
775+
{
776+
// Convert Forward Track parameters and covariances matrix to the
777+
// MCH track format.
778+
779+
// Parameter conversion
780+
double alpha1, alpha3, alpha4, x2, x3, x4;
781+
782+
x2 = fwdtrack.getPhi();
783+
x3 = fwdtrack.getTanl();
784+
x4 = fwdtrack.getInvQPt();
785+
786+
auto sinx2 = TMath::Sin(x2);
787+
auto cosx2 = TMath::Cos(x2);
788+
789+
alpha1 = cosx2 / x3;
790+
alpha3 = sinx2 / x3;
791+
alpha4 = x4 / TMath::Sqrt(x3 * x3 + sinx2 * sinx2);
792+
793+
auto K = TMath::Sqrt(x3 * x3 + sinx2 * sinx2);
794+
auto K3 = K * K * K;
795+
796+
// Covariances matrix conversion
797+
SMatrix55Std jacobian;
798+
SMatrix55Sym covariances;
799+
800+
covariances(0, 0) = fwdtrack.getCovariances()(0, 0);
801+
covariances(0, 1) = fwdtrack.getCovariances()(0, 1);
802+
covariances(0, 2) = fwdtrack.getCovariances()(0, 2);
803+
covariances(0, 3) = fwdtrack.getCovariances()(0, 3);
804+
covariances(0, 4) = fwdtrack.getCovariances()(0, 4);
805+
806+
covariances(1, 1) = fwdtrack.getCovariances()(1, 1);
807+
covariances(1, 2) = fwdtrack.getCovariances()(1, 2);
808+
covariances(1, 3) = fwdtrack.getCovariances()(1, 3);
809+
covariances(1, 4) = fwdtrack.getCovariances()(1, 4);
810+
811+
covariances(2, 2) = fwdtrack.getCovariances()(2, 2);
812+
covariances(2, 3) = fwdtrack.getCovariances()(2, 3);
813+
covariances(2, 4) = fwdtrack.getCovariances()(2, 4);
814+
815+
covariances(3, 3) = fwdtrack.getCovariances()(3, 3);
816+
covariances(3, 4) = fwdtrack.getCovariances()(3, 4);
817+
818+
covariances(4, 4) = fwdtrack.getCovariances()(4, 4);
819+
820+
jacobian(0, 0) = 1;
821+
822+
jacobian(1, 2) = -sinx2 / x3;
823+
jacobian(1, 3) = -cosx2 / (x3 * x3);
824+
825+
jacobian(2, 1) = 1;
826+
827+
jacobian(3, 2) = cosx2 / x3;
828+
jacobian(3, 3) = -sinx2 / (x3 * x3);
829+
830+
jacobian(4, 2) = -x4 * sinx2 * cosx2 / K3;
831+
jacobian(4, 3) = -x3 * x4 / K3;
832+
jacobian(4, 4) = 1 / K;
833+
// jacobian*covariances*jacobian^T
834+
covariances = ROOT::Math::Similarity(jacobian, covariances);
835+
836+
double cov[] = {covariances(0, 0), covariances(1, 0), covariances(1, 1), covariances(2, 0), covariances(2, 1), covariances(2, 2), covariances(3, 0), covariances(3, 1), covariances(3, 2), covariances(3, 3), covariances(4, 0), covariances(4, 1), covariances(4, 2), covariances(4, 3), covariances(4, 4)};
837+
double param[] = {fwdtrack.getX(), alpha1, fwdtrack.getY(), alpha3, alpha4};
838+
839+
o2::mch::TrackParam convertedTrack(fwdtrack.getZ(), param, cov);
840+
return o2::mch::TrackParam(convertedTrack);
841+
}
842+
773843
//_________________________________________________________________________________________________
774844
MatchGlobalFwd::MatchGlobalFwd()
775845
{

0 commit comments

Comments
 (0)