BmnRoot
Loading...
Searching...
No Matches
BmnResiduals.cxx
Go to the documentation of this file.
1#include "BmnResiduals.h"
2#include "BmnKalmanFilter.h"
3
4#include "FairLogger.h"
5
6BmnResiduals::BmnResiduals(Int_t period, Int_t number)
7: fGlobalTracks(nullptr),
8 fGemHits(nullptr),
9 fSilHits(nullptr),
10 fGemTracks(nullptr),
11 fSilTracks(nullptr)
12{
13 fPeriod = period;
14 fNumber = number;
15
16 fBranchGemHits = "BmnGemStripHit";
17 fBranchSilHits = "BmnSiliconHit";
18
19 fBranchGemTracks = "BmnGemTrack";
20 fBranchSilTracks = "BmnSiliconTrack";
21 fBranchGlobTracks = "BmnGlobalTrack";
22
23 fBranchFairEventHeader = "DstEventHeader.";
24}
25
26InitStatus BmnResiduals::Init() {
27 FairRootManager* ioman = FairRootManager::Instance();
28 fFairEventHeader = (FairEventHeader*)ioman->GetObject(fBranchFairEventHeader.Data());
29
30 fGemTracks = (TClonesArray*)ioman->GetObject(fBranchGemTracks.Data());
31 fSilTracks = (TClonesArray*)ioman->GetObject(fBranchSilTracks.Data());
32 fGlobalTracks = (TClonesArray*)ioman->GetObject(fBranchGlobTracks.Data());
33
34 fGemHits = (TClonesArray*)ioman->GetObject(fBranchGemHits.Data());
35 fSilHits = (TClonesArray*)ioman->GetObject(fBranchSilHits.Data());
36
37 if (fFairEventHeader != nullptr)
38 fFairEventHeader->SetRunId(fNumber);
39 else
40 LOG(debug)<<__PRETTY_FUNCTION__<<": fFairEventHeader is not initalized. fBranchFairEventHeader == "<<fBranchFairEventHeader;
41
42 return kSUCCESS;
43}
44
45void BmnResiduals::Exec(Option_t* opt) {
46 if (!fGlobalTracks || !IsActive())
47 return;
48
49 for (Int_t iTrack = 0; iTrack < fGlobalTracks->GetEntriesFast(); iTrack++) {
50 BmnGlobalTrack* glTrack = (BmnGlobalTrack*)fGlobalTracks->UncheckedAt(iTrack);
51
52 vector<BmnHit*> allHits;
53
54 BmnTrack* gemTr = nullptr;
55 BmnTrack* silTr = nullptr;
56
57 if (glTrack->GetGemTrackIndex() != -1)
58 gemTr = (BmnTrack*)fGemTracks->UncheckedAt(glTrack->GetGemTrackIndex());
59
60 if (glTrack->GetSilTrackIndex() != -1)
61 silTr = (BmnTrack*)fSilTracks->UncheckedAt(glTrack->GetSilTrackIndex());
62
63 // GEM track
64 if (glTrack->GetGemTrackIndex() != -1)
65 for (Int_t iHit = 0; iHit < gemTr->GetNHits(); iHit++) {
66 BmnGemStripHit* hit = (BmnGemStripHit*)fGemHits->UncheckedAt(gemTr->GetHitIndex(iHit));
67 allHits.push_back(hit);
68 }
69
70 // SILICON track
71 if (glTrack->GetSilTrackIndex() != -1)
72 for (Int_t iHit = 0; iHit < silTr->GetNHits(); iHit++) {
73 BmnSiliconHit* hit = (BmnSiliconHit*)fSilHits->UncheckedAt(silTr->GetHitIndex(iHit));
74 allHits.push_back(hit);
75 }
76
77 Double_t xRes = 0., yRes = 0.;
78 //Double_t a = 0., b = 0.;
79
80 // for (Int_t iHit = 0; iHit < allHits.size(); iHit++) {
81 // Double_t x = allHits[iHit]->GetX();
82 // Double_t y = allHits[iHit]->GetY();
83 // Double_t z = allHits[iHit]->GetZ();
84
85 // // YZ-plane, linear fit
86 // a = LineFit(allHits, iHit, "ZY").X();
87 // b = LineFit(allHits, iHit, "ZY").Y();
88 // yRes = y - (a * z + b);
89
90 // // XZ-plane
91 // if (fIsField) {
92 // Double_t A = Pol2Fit(allHits, iHit).X();
93 // Double_t B = Pol2Fit(allHits, iHit).Y();
94 // Double_t C = Pol2Fit(allHits, iHit).Z();
95 // xRes = x - (A * z * z + B * z + C);
96 // } else {
97 // a = LineFit(allHits, iHit, "ZX").X();
98 // b = LineFit(allHits, iHit, "ZX").Y();
99 // xRes = x - (a * z + b);
100 // }
101 // allHits[iHit]->SetResXY(xRes, yRes);
102 // }
103
104 BmnKalmanFilter* fKalman = new BmnKalmanFilter();
105 FairTrackParam par = *(glTrack->GetParamFirst());
106
107 for (size_t iHit = 0; iHit < allHits.size(); iHit++)
108 {
109 Double_t x = allHits[iHit]->GetX();
110 Double_t y = allHits[iHit]->GetY();
111 Double_t z = allHits[iHit]->GetZ();
112 fKalman->TGeoTrackPropagate(&par, z, 2212, nullptr, nullptr);
113 xRes = x - par.GetX();
114 yRes = y - par.GetY();
115 allHits[iHit]->SetResXY(xRes, yRes);
116 }
117 delete fKalman;
118 }
119}
120
Int_t GetGemTrackIndex() const
Int_t GetSilTrackIndex() const
BmnStatus TGeoTrackPropagate(FairTrackParam *par, Double_t zOut, Int_t pdg, vector< Double_t > *F, Double_t *length, Bool_t isField)
virtual void Exec(Option_t *opt)
virtual void Finish()
virtual InitStatus Init()
FairTrackParam * GetParamFirst()
Definition BmnTrack.h:72
Int_t GetNHits() const
Definition BmnTrack.h:44
Int_t GetHitIndex(Int_t iHit) const
Definition BmnTrack.h:48