2#include <Fit/FitResult.h>
11isMergedDigits(kFALSE) {
15 if (Abs(fieldScale) > DBL_EPSILON)
18 TString gPathConfig = gSystem->Getenv(
"VMCWORKDIR");
19 TString gPathGemConfig = gPathConfig +
"/parameters/gem/XMLConfigs/";
20 TString confGem = (fPeriod == 7) ?
"GemRunSpring2018.xml" : (fPeriod == 6) ?
"GemRunSpring2017.xml" :
"";
27 fBranchGemHits =
"BmnGemStripHit";
28 fBranchGemTracks =
"BmnGemTrack";
29 fBranchResiduals =
"BmnResiduals";
30 fBranchFairEventHeader =
"EventHeader.";
34 FairRootManager* ioman = FairRootManager::Instance();
36 fGemHits = (TClonesArray*) ioman->GetObject(fBranchGemHits.Data());
37 fGemTracks = (TClonesArray*) ioman->GetObject(fBranchGemTracks.Data());
38 fFairEventHeader = (FairEventHeader*) ioman->GetObject(fBranchFairEventHeader.Data());
40 fGemResiduals =
new TClonesArray(fBranchResiduals.Data());
42 ioman->Register(
"BmnGemResiduals",
"RESID", fGemResiduals, kTRUE);
43 if (TString(ioman->GetInFile()->GetName()).Contains(
"merge"))
44 isMergedDigits = kTRUE;
48 fFairEventHeader->SetRunId((isMergedDigits) ? 0 : fNumber);
49 fGemResiduals->Delete();
50 ResidualsAndDistances();
53void BmnGemResiduals::ResidualsAndDistances() {
57 if (fGemTracks->GetEntriesFast() != 2)
59 Double_t Tx1 = ((
BmnGemTrack*) fGemTracks->UncheckedAt(0))->GetParamFirst()->GetTx();
60 Double_t Tx2 = ((
BmnGemTrack*) fGemTracks->UncheckedAt(1))->GetParamFirst()->GetTx();
65 for (Int_t iTrack = 0; iTrack < fGemTracks->GetEntriesFast(); iTrack++) {
75 for (Int_t iHit = 0; iHit < track->
GetNHits(); iHit++) {
77 Double_t x = hit->GetX();
78 Double_t y = hit->GetY();
79 Double_t z = hit->GetZ();
81 Double_t xRes = 0., yRes = 0.;
84 xRes = x - (xFirst + tx * (z - zFirst));
85 yRes = y - (yFirst + ty * (z - zFirst));
87 Double_t a = 0., b = 0.;
88 LineFit(a, b, track, fGemHits, 1, iHit);
89 xRes = x - (a * z + b);
90 LineFit(a, b, track, fGemHits, 2, iHit);
91 yRes = y - (a * z + b);
95 Double_t A = 0., B = 0., C = 0.;
96 Pol2Fit(track, fGemHits, A, B, C, iHit);
97 xRes = x - A * z * z - B * z - C;
99 Double_t a = 0., b = 0.;
100 LineFit(a, b, track, fGemHits, 2, iHit);
101 yRes = y - (a * z + b);
105 resid->SetTrackId(iTrack);
107 resid->SetIsMergedDigits(isMergedDigits);
TVector3 LineFit(BmnTrack *track, const TClonesArray *arr, TString type)
void Pol2Fit(BmnTrack *track, const TClonesArray *arr, Double_t &A, Double_t &B, Double_t &C, Int_t idSkip)
virtual InitStatus Init()
virtual void Exec(Option_t *opt)
Short_t GetStation() const
FairTrackParam * GetParamFirst()
Int_t GetHitIndex(Int_t iHit) const