53 mParameters(tp.mParameters),
54 mClusterPtr(tp.mClusterPtr),
55 mRemovable(tp.mRemovable),
56 mTrackChi2(tp.mTrackChi2),
57 mLocalChi2(tp.mLocalChi2)
60 if (tp.mCovariances) {
61 mCovariances = std::make_unique<TMatrixD>(*(tp.mCovariances));
64 mPropagator = std::make_unique<TMatrixD>(*(tp.mPropagator));
66 if (tp.mExtrapParameters) {
67 mExtrapParameters = std::make_unique<TMatrixD>(*(tp.mExtrapParameters));
69 if (tp.mExtrapCovariances) {
70 mExtrapCovariances = std::make_unique<TMatrixD>(*(tp.mExtrapCovariances));
72 if (tp.mSmoothParameters) {
73 mSmoothParameters = std::make_unique<TMatrixD>(*(tp.mSmoothParameters));
75 if (tp.mSmoothCovariances) {
76 mSmoothCovariances = std::make_unique<TMatrixD>(*(tp.mSmoothCovariances));
90 mParameters = tp.mParameters;
92 if (tp.mCovariances) {
94 *mCovariances = *(tp.mCovariances);
96 mCovariances = std::make_unique<TMatrixD>(*(tp.mCovariances));
102 if (tp.mPropagator) {
104 *mPropagator = *(tp.mPropagator);
106 mPropagator = std::make_unique<TMatrixD>(*(tp.mPropagator));
112 if (tp.mExtrapParameters) {
113 if (mExtrapParameters) {
114 *mExtrapParameters = *(tp.mExtrapParameters);
116 mExtrapParameters = std::make_unique<TMatrixD>(*(tp.mExtrapParameters));
119 mExtrapParameters.reset();
122 if (tp.mExtrapCovariances) {
123 if (mExtrapCovariances) {
124 *mExtrapCovariances = *(tp.mExtrapCovariances);
126 mExtrapCovariances = std::make_unique<TMatrixD>(*(tp.mExtrapCovariances));
129 mExtrapCovariances.reset();
132 if (tp.mSmoothParameters) {
133 if (mSmoothParameters) {
134 *mSmoothParameters = *(tp.mSmoothParameters);
136 mSmoothParameters = std::make_unique<TMatrixD>(*(tp.mSmoothParameters));
139 mSmoothParameters.reset();
142 if (tp.mSmoothCovariances) {
143 if (mSmoothCovariances) {
144 *mSmoothCovariances = *(tp.mSmoothCovariances);
146 mSmoothCovariances = std::make_unique<TMatrixD>(*(tp.mSmoothCovariances));
149 mSmoothCovariances.reset();
152 mClusterPtr = tp.mClusterPtr;
154 mRemovable = tp.mRemovable;
156 mTrackChi2 = tp.mTrackChi2;
157 mLocalChi2 = tp.mLocalChi2;
168 mExtrapParameters.reset();
169 mExtrapCovariances.reset();
170 mSmoothParameters.reset();
171 mSmoothCovariances.reset();
179 if (TMath::Abs(mParameters(4, 0)) > 0) {
180 Double_t pYZ = TMath::Abs(1.0 / mParameters(4, 0));
181 pZ = -pYZ / (TMath::Sqrt(1.0 + mParameters(3, 0) * mParameters(3, 0)));
183 pZ = -FLT_MAX / TMath::Sqrt(1.0 + mParameters(3, 0) * mParameters(3, 0) + mParameters(1, 0) * mParameters(1, 0));
185 return pZ * mParameters(1, 0);
193 if (TMath::Abs(mParameters(4, 0)) > 0) {
194 Double_t pYZ = TMath::Abs(1.0 / mParameters(4, 0));
195 pZ = -pYZ / (TMath::Sqrt(1.0 + mParameters(3, 0) * mParameters(3, 0)));
197 pZ = -FLT_MAX / TMath::Sqrt(1.0 + mParameters(3, 0) * mParameters(3, 0) + mParameters(1, 0) * mParameters(1, 0));
199 return pZ * mParameters(3, 0);
206 if (TMath::Abs(mParameters(4, 0)) > 0) {
207 Double_t pYZ = TMath::Abs(1.0 / mParameters(4, 0));
208 return -pYZ / (TMath::Sqrt(1.0 + mParameters(3, 0) * mParameters(3, 0)));
210 return -FLT_MAX / TMath::Sqrt(1.0 + mParameters(3, 0) * mParameters(3, 0) + mParameters(1, 0) * mParameters(1, 0));
218 if (TMath::Abs(mParameters(4, 0)) > 0) {
219 Double_t pYZ = TMath::Abs(1.0 / mParameters(4, 0));
220 Double_t pZ = -pYZ / (TMath::Sqrt(1.0 + mParameters(3, 0) * mParameters(3, 0)));
221 return -pZ * TMath::Sqrt(1.0 + mParameters(3, 0) * mParameters(3, 0) + mParameters(1, 0) * mParameters(1, 0));
232 mCovariances = std::make_unique<TMatrixD>(5, 5);
233 mCovariances->Zero();
235 return *mCovariances;
243 *mCovariances = covariances;
245 mCovariances = std::make_unique<TMatrixD>(covariances);
259 mCovariances = std::make_unique<TMatrixD>(5, 5);
261 for (Int_t
i = 0;
i < 5;
i++) {
262 for (Int_t
j = 0;
j <=
i;
j++) {
263 (*mCovariances)(
i,
j) = (*mCovariances)(
j,
i) = covariances[
i * (
i + 1) / 2 +
j];
277 static constexpr int varIdx[5] = {0, 2, 5, 9, 14};
279 mCovariances = std::make_unique<TMatrixD>(5, 5);
281 mCovariances->Zero();
282 for (Int_t
i = 0;
i < 5;
i++) {
283 (*mCovariances)(
i,
i) = covariances[varIdx[
i]];
291 mCovariances.reset();
299 mPropagator = std::make_unique<TMatrixD>(5, 5);
300 mPropagator->UnitMatrix();
310 mPropagator->UnitMatrix();
319 *mPropagator = TMatrixD(propagator, TMatrixD::kMult, *mPropagator);
321 mPropagator = std::make_unique<TMatrixD>(propagator);
329 if (!mExtrapParameters) {
330 mExtrapParameters = std::make_unique<TMatrixD>(5, 1);
331 mExtrapParameters->Zero();
333 return *mExtrapParameters;
340 if (mExtrapParameters) {
341 *mExtrapParameters = extrapParameters;
343 mExtrapParameters = std::make_unique<TMatrixD>(extrapParameters);
351 if (!mExtrapCovariances) {
352 mExtrapCovariances = std::make_unique<TMatrixD>(5, 5);
353 mExtrapCovariances->Zero();
355 return *mExtrapCovariances;
362 if (mExtrapCovariances) {
363 *mExtrapCovariances = extrapCovariances;
365 mExtrapCovariances = std::make_unique<TMatrixD>(extrapCovariances);
373 if (!mSmoothParameters) {
374 mSmoothParameters = std::make_unique<TMatrixD>(5, 1);
375 mSmoothParameters->Zero();
377 return *mSmoothParameters;
384 if (mSmoothParameters) {
385 *mSmoothParameters = smoothParameters;
387 mSmoothParameters = std::make_unique<TMatrixD>(smoothParameters);
395 if (!mSmoothCovariances) {
396 mSmoothCovariances = std::make_unique<TMatrixD>(5, 5);
397 mSmoothCovariances->Zero();
399 return *mSmoothCovariances;
406 if (mSmoothCovariances) {
407 *mSmoothCovariances = smoothCovariances;
409 mSmoothCovariances = std::make_unique<TMatrixD>(smoothCovariances);
425 if (!mCovariances && !trackParam.mCovariances) {
426 LOG(error) <<
"Covariance matrix must exist for at least one set of parameters";
430 Double_t maxChi2 = 5. * sigma2Cut * sigma2Cut;
433 if (mZ != trackParam.mZ) {
434 LOG(warn) <<
"Parameters are given at different Z position (" << mZ <<
" : " << trackParam.mZ
435 <<
"): results are meaningless";
439 TMatrixD deltaParam(mParameters, TMatrixD::kMinus, trackParam.mParameters);
446 if (trackParam.mCovariances) {
447 weight += *(trackParam.mCovariances);
451 if (
weight.Determinant() == 0) {
452 LOG(error) <<
"Cannot compute the compatibility chi2";
458 TMatrixD tmp(deltaParam, TMatrixD::kTransposeMult,
weight);
459 TMatrixD mChi2(tmp, TMatrixD::kMult, deltaParam);
465 if (chi2 > maxChi2) {
494 cout <<
"<TrackParam> Bending P=" << setw(5) << setprecision(3) << 1. / mParameters(4, 0)
495 <<
", NonBendSlope=" << setw(5) << setprecision(3) << mParameters(1, 0) * 180. / TMath::Pi()
496 <<
", BendSlope=" << setw(5) << setprecision(3) << mParameters(3, 0) * 180. / TMath::Pi() <<
", (x,y,z)_IP=("
497 << setw(5) << setprecision(3) << mParameters(0, 0) <<
"," << setw(5) << setprecision(3) << mParameters(2, 0)
498 <<
"," << setw(5) << setprecision(3) << mZ <<
") cm, (px,py,pz)=(" << setw(5) << setprecision(3) <<
px() <<
","
499 << setw(5) << setprecision(3) <<
py() <<
"," << setw(5) << setprecision(3) <<
pz() <<
") GeV/c, "
Definition of the MCH track parameters for internal use.
track parameters for internal use
const TMatrixD & getExtrapCovariances() const
const TMatrixD & getSmoothCovariances() const
Double_t getLocalChi2() const
return the local chi2 of the associated cluster with respect to the track
TrackParam & operator=(const TrackParam &tp)
Double_t getNonBendingCoor() const
return non bending coordinate (cm)
Bool_t isCompatibleTrackParam(const TrackParam &trackParam, Double_t sigma2Cut, Double_t &normChi2) const
void setVariances(const Double_t covariances[15])
void setExtrapCovariances(const TMatrixD &covariances)
void setSmoothCovariances(const TMatrixD &covariances)
Double_t getZ() const
return Z coordinate (cm)
void setCovariances(const TMatrixD &covariances)
const TMatrixD & getPropagator() const
const TMatrixD & getCovariances() const
const TMatrixD & getExtrapParameters() const
Double_t getBendingCoor() const
return bending coordinate (cm)
void setParameters(const TMatrixD ¶meters)
set track parameters
void updatePropagator(const TMatrixD &propagator)
const TMatrixD & getSmoothParameters() const
TrackParamStruct getTrackParamStruct() const
void setSmoothParameters(const TMatrixD ¶meters)
void setExtrapParameters(const TMatrixD ¶meters)
Double_t getCharge() const
return the charge (assumed forward motion)
GLuint GLuint GLfloat weight
GLdouble GLdouble GLdouble z
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
Defining DataPointCompositeObject explicitly as copiable.
track parameters minimal structure
double x
track position along x
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"