BmnRoot
Loading...
Searching...
No Matches
BmnSiResiduals.cxx
Go to the documentation of this file.
1#include "BmnSiResiduals.h"
2
3BmnSiResiduals::BmnSiResiduals(Int_t run_period, Int_t run_number, Double_t fieldScale) :
4isField(kFALSE),
5fDebug(kFALSE),
6outRes(NULL),
7isPrintToFile(kFALSE),
8isMergedDigits(kFALSE) {
9 fPeriod = run_period;
10 fNumber = run_number;
11
12 if (Abs(fieldScale) > DBL_EPSILON)
13 isField = kTRUE;
14
15 TString gPathSiliconConfig = gSystem->Getenv("VMCWORKDIR");
16 gPathSiliconConfig += "/parameters/silicon/XMLConfigs/";
17
18 //Create Silicon detector --------------------------------------------------
19 TString config = (fPeriod == 6) ? "SiliconRunSpring2017.xml" : (fPeriod == 7) ? "SiliconRunSpring2018.xml" : "";
20
21 fDetector = new BmnSiliconStationSet(gPathSiliconConfig + config);
22
23 fBranchSiHits = "BmnSiliconHit";
24 fBranchGlobalTracks = "BmnGlobalTrack";
25 fBranchResiduals = "BmnResiduals";
26 fBranchFairEventHeader = "EventHeader.";
27}
28
30 delete fDetector;
31}
32
34 FairRootManager* ioman = FairRootManager::Instance();
35
36 fSiHits = (TClonesArray*) ioman->GetObject(fBranchSiHits.Data());
37 fGlobalTracks = (TClonesArray*) ioman->GetObject(fBranchGlobalTracks.Data());
38 fFairEventHeader = (FairEventHeader*) ioman->GetObject(fBranchFairEventHeader.Data());
39
40 fSiResiduals = new TClonesArray(fBranchResiduals.Data());
41
42 ioman->Register("BmnSiResiduals", "RESID", fSiResiduals, kTRUE);
43 if (TString(ioman->GetInFile()->GetName()).Contains("merge"))
44 isMergedDigits = kTRUE;
45
46}
47
48void BmnSiResiduals::Exec(Option_t* opt) {
49 // fFairEventHeader->SetRunId((isMergedDigits) ? 0 : fNumber);
50 fSiResiduals->Delete();
51 Residuals();
52}
53
54void BmnSiResiduals::Residuals() {
55 for (Int_t iGlobTrack = 0; iGlobTrack < fGlobalTracks->GetEntriesFast(); iGlobTrack++) {
56 BmnGlobalTrack* glTrack = (BmnGlobalTrack*) fGlobalTracks->UncheckedAt(iGlobTrack);
57
58 Double_t Tx = glTrack->GetParamFirst()->GetTx();
59 Double_t X0 = glTrack->GetParamFirst()->GetX();
60 Double_t Ty = glTrack->GetParamFirst()->GetTy();
61 Double_t Y0 = glTrack->GetParamFirst()->GetY();
62
63 Double_t Z0 = glTrack->GetParamFirst()->GetZ();
64
65 // Int_t silIdx = glTrack->GetSilHitIndex();
66 // if (silIdx == -1)
67 // return;
68 vector <Int_t> silIndices = glTrack->GetSilHitIndices();
69 if (silIndices.size() == 0)
70 return;
71
72 for (Int_t iHitIdx = 0; iHitIdx < silIndices.size(); iHitIdx++) {
73 Double_t xRes = 0., yRes = 0.;
74 BmnSiliconHit* hit = (BmnSiliconHit*) fSiHits->UncheckedAt(silIndices.at(iHitIdx));
75 Double_t x = hit->GetX();
76 Double_t y = hit->GetY();
77 Double_t z = hit->GetZ();
78
79 Int_t stat = hit->GetStation();
80 Int_t mod = hit->GetModule();
81
82 if (!isField) {
83 xRes = x - (X0 + Tx * (z - Z0));
84 yRes = y - (Y0 + Ty * (z - Z0));
85 }
86
87 BmnResiduals* resid = new((*fSiResiduals)[fSiResiduals->GetEntriesFast()]) BmnResiduals(stat, mod, xRes, yRes, 0., isField);
88 resid->SetTrackId(iGlobTrack);
89 resid->SetHitId(silIndices.at(iHitIdx));
90 }
91 }
92}
93
94
95
96
97
Int_t GetModule()
Definition BmnHit.h:77
Short_t GetStation() const
Definition BmnHit.h:45
virtual void Finish()
virtual InitStatus Init()
virtual void Exec(Option_t *opt)
FairTrackParam * GetParamFirst()
Definition BmnTrack.h:72