BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
BmnGemResiduals.cxx
Go to the documentation of this file.
1#include <BmnGemResiduals.h>
2#include <Fit/FitResult.h>
3#include <TSystem.h>
4
5BmnGemResiduals::BmnGemResiduals(Int_t run_period, Int_t run_number, Double_t fieldScale)
9 , outRes(NULL)
12{
13 fPeriod = run_period;
14 fNumber = run_number;
15
16 if (Abs(fieldScale) > DBL_EPSILON)
17 isField = kTRUE;
18
19 TString gPathConfig = gSystem->Getenv("VMCWORKDIR");
20 TString gPathGemConfig = gPathConfig + "/parameters/gem/XMLConfigs/";
21 TString confGem = (fPeriod == 7) ? "GemRunSpring2018.xml" : (fPeriod == 6) ? "GemRunSpring2017.xml" : "";
22 if (confGem == "") {
23 printf(ANSI_COLOR_RED "No GEM geometry defined!\n" ANSI_COLOR_RESET);
24 throw;
25 }
26 fDetector = new BmnGemStripStationSet(gPathGemConfig + confGem);
27
28 fBranchGemHits = "BmnGemStripHit";
29 fBranchGemTracks = "BmnGemTrack";
30 fBranchResiduals = "BmnResiduals";
31 fBranchFairEventHeader = "EventHeader.";
32}
33
35{
36 FairRootManager* ioman = FairRootManager::Instance();
37
38 fGemHits = (TClonesArray*)ioman->GetObject(fBranchGemHits.Data());
39 fGemTracks = (TClonesArray*)ioman->GetObject(fBranchGemTracks.Data());
40 fFairEventHeader = (FairEventHeader*)ioman->GetObject(fBranchFairEventHeader.Data());
41
43
44 ioman->Register("BmnGemResiduals", "RESID", fGemResiduals, kTRUE);
45 if (TString(ioman->GetInFile()->GetName()).Contains("merge"))
47}
48
50{
51 fFairEventHeader->SetRunId((isMergedDigits) ? 0 : fNumber);
52 fGemResiduals->Delete();
54}
55
57{
58 if (isMergedDigits) {
59 // To be used for rough alignment (1205 + 1233 in RUN6 as an example)
60 // 2 tracks simultaneously separated and satisfying Tx1 * Tx2 < 0
61 if (fGemTracks->GetEntriesFast() != 2)
62 return;
63 Double_t Tx1 = ((BmnGemTrack*)fGemTracks->UncheckedAt(0))->GetParamFirst()->GetTx();
64 Double_t Tx2 = ((BmnGemTrack*)fGemTracks->UncheckedAt(1))->GetParamFirst()->GetTx();
65 if (Tx1 * Tx2 > 0)
66 return;
67 }
68
69 for (Int_t iTrack = 0; iTrack < fGemTracks->GetEntriesFast(); iTrack++) {
70 BmnGemTrack* track = (BmnGemTrack*)fGemTracks->UncheckedAt(iTrack);
71
72 Double_t tx = track->GetParamFirst()->GetTx();
73 Double_t ty = track->GetParamFirst()->GetTy();
74
75 Double_t xFirst = track->GetParamFirst()->GetX();
76 Double_t yFirst = track->GetParamFirst()->GetY();
77 Double_t zFirst = track->GetParamFirst()->GetZ();
78
79 for (Int_t iHit = 0; iHit < track->GetNHits(); iHit++) {
80 BmnGemStripHit* hit = (BmnGemStripHit*)fGemHits->At(track->GetHitIndex(iHit));
81 Double_t x = hit->GetX();
82 Double_t y = hit->GetY();
83 Double_t z = hit->GetZ();
84
85 Double_t xRes = 0., yRes = 0.;
86 if (!isField) {
87 if (isResid) {
88 xRes = x - (xFirst + tx * (z - zFirst));
89 yRes = y - (yFirst + ty * (z - zFirst));
90 } else {
91 Double_t a = 0., b = 0.;
92 LineFit(a, b, track, fGemHits, 1, iHit); // bmnbase/BmnMath.h
93 xRes = x - (a * z + b);
94 LineFit(a, b, track, fGemHits, 2, iHit);
95 yRes = y - (a * z + b);
96 }
97 } else {
99 Double_t A = 0., B = 0., C = 0.;
100 Pol2Fit(track, fGemHits, A, B, C, iHit); // XZ-plane
101 xRes = x - A * z * z - B * z - C;
102
103 Double_t a = 0., b = 0.;
104 LineFit(a, b, track, fGemHits, 2, iHit);
105 yRes = y - (a * z + b); // YZ-plane
106 }
107
108 BmnResiduals* resid = new ((*fGemResiduals)[fGemResiduals->GetEntriesFast()])
109 BmnResiduals(hit->GetStation(), hit->GetModule(), xRes, yRes, 0., isField, isResid);
110 resid->SetTrackId(iTrack);
111 resid->SetHitId(track->GetHitIndex(iHit));
112 resid->SetIsMergedDigits(isMergedDigits);
113 }
114 }
115}
116
118{
119 delete fDetector;
120}
TVector3 LineFit(BmnTrack *track, const TClonesArray *arr, TString type)
Definition BmnMath.cxx:113
void Pol2Fit(BmnTrack *track, const TClonesArray *arr, Double_t &A, Double_t &B, Double_t &C, Int_t idSkip)
Definition BmnMath.cxx:781
int Int_t
constexpr Bool_t kFALSE
double Double_t
constexpr Bool_t kTRUE
const char Option_t
R__EXTERN TSystem * gSystem
#define ANSI_COLOR_RED
Definition BmnMath.h:16
#define ANSI_COLOR_RESET
Definition BmnMath.h:18
virtual InitStatus Init()
TClonesArray * fGemHits
BmnGemStripStationSet * fDetector
FairEventHeader * fFairEventHeader
virtual void Exec(Option_t *opt)
virtual void Finish()
TClonesArray * fGemTracks
TClonesArray * fGemResiduals
TString fBranchFairEventHeader
Int_t GetModule()
Definition BmnHit.h:36
Short_t GetStation() const
Definition BmnHit.h:35
FairTrackParam * GetParamFirst()
Definition BmnTrack.h:63
Int_t GetNHits() const
Accessors.
Definition BmnTrack.h:49
Int_t GetHitIndex(Int_t iHit) const
Definition BmnTrack.h:51
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
constexpr Double_t C()
Double_t Abs(Double_t d)