52 std::unique_ptr<ROOT::Math::Minimizer> mMinimizer;
55 std::unique_ptr<o2::steer::MCKinematicsReader> mMCReader;
59 short getDetIDFromPath(
const std::string&
path)
const;
63 enum HitType : uint8_t {
69 WorkingHit() =
default;
71 WorkingHit(
int eventID, HitType t,
const o2::itsmft::Hit& hit) : mEvent(eventID),
72 mTrackID(hit.GetTrackID()),
74 mDetID(hit.GetDetectorID()),
75 mLayerID(constants::detID::getDetID2Layer(mDetID)),
76 mSensorID(constants::detID::getSensorID(mDetID))
78 if (mType == kEntering) {
87 const bool isTop = mSensorID % 2 == 0;
88 mPhi = o2::math_utils::to02Pi(std::atan2(mPoint.Y(), mPoint.X()));
89 mPhiBorder1 = o2::math_utils::to02Pi(((isTop) ? 0.f : 1.f) * TMath::
Pi() +
std::asin(constants::
equatorialGap / 2.f / mRadius));
90 mPhiBorder2 = o2::math_utils::to02Pi(((isTop) ? 1.f : 2.f) * TMath::
Pi() -
std::asin(constants::
equatorialGap / 2.f / mRadius));
91 mU = ((mPhi - mPhiBorder1) * 2.f) / (mPhiBorder2 - mPhiBorder1) - 1.f;
92 mV = (2.f * mPoint.Z() + constants::segment::lengthSensitive) / constants::segment::lengthSensitive - 1.f;
95 void recalculateIdeal(
float phi,
float z)
97 mPointDef.SetX(mRadius * std::cos(phi));
98 mPointDef.SetY(mRadius * std::sin(phi));
118 std::array<WorkingHit, WorkingHit::kTypes> mCurWorkingHits;
121 bool deformHit(WorkingHit::HitType t);
123 auto getDeformation(
unsigned int id,
double u,
double v)
const
134 StraightLine(
const MisAlignmentHits*
m) : mMis(
m) {}
136 std::array<double, 3> mD;
138 unsigned int mSensorID;
140 const MisAlignmentHits* mMis;
145 unsigned int NDim()
const override {
return 3; }
149 double DoEval(
const double*
x)
const override;
151 StraightLine mLine{
this};
152 void prepareLineMethod(WorkingHit::HitType from);
162 unsigned int mSensorID;
164 const MisAlignmentHits* mMis;
169 unsigned int NDim()
const override {
return 3; }
173 double DoEval(
const double*
x)
const override;
176 bool preparePropagatorMethod(WorkingHit::HitType from);
211 std::array<ULong64_t, Stats::kALL> mStats;