BmnRoot
Loading...
Searching...
No Matches
BmnGemHitProducer.cxx
Go to the documentation of this file.
1#include "BmnGemHitProducer.h"
2#include "BmnHit.h"
3#include "CbmStsPoint.h"
4
5#include "FairRootManager.h"
6
7#include "TRandom.h"
8#include "TSystem.h"
9
10using std::cout;
11
13 fInputBranchName = "StsPoint";
14 fOutputHitsBranchName = "BmnHit";
15 fOutputGemHitMatchesBranchName = "BmnGemStripHitMatch";
16}
17
20
22
23 cout << " BmnGemHitProducer::Init() " << endl;
24
25 //Get ROOT Manager
26 FairRootManager* ioman = FairRootManager::Instance();
27
28 fBmnPointsArray = (TClonesArray*) ioman->GetObject(fInputBranchName);
29 fMCTracksArray = (TClonesArray*) ioman->GetObject("MCTrack");
30
31 fBmnHitsArray = new TClonesArray(fOutputHitsBranchName, 100);
32 ioman->Register("BmnGemStripHit", "GEM", fBmnHitsArray, kTRUE);
33
34 fBmnGemStripHitMatchesArray = new TClonesArray("BmnMatch");
35 ioman->Register(fOutputGemHitMatchesBranchName, "GEM", fBmnGemStripHitMatchesArray, kTRUE);
36
37 TString gPathGemConfig = gSystem->Getenv("VMCWORKDIR");
38 gPathGemConfig += "/parameters/gem/XMLConfigs/";
39 GemStationSet = new BmnGemStripStationSet(gPathGemConfig + "GemRunSpring2018.xml");
40
41 return kSUCCESS;
42}
43
44void BmnGemHitProducer::Exec(Option_t* opt) {
45
46 fBmnHitsArray->Delete();
47 fBmnGemStripHitMatchesArray->Delete();
48
49 if (!fBmnPointsArray) {
50 Error("BmnGemHitProducer::Init()", " !!! Unknown branch name !!! ");
51 return;
52 }
53
54 Float_t err[3] = {0.03, 0.03, 0.03}; // Uncertainties of coordinates
55// Float_t err[3] = {0.0, 0.0, 0.0}; // Uncertainties of coordinates
56
57 for (Int_t iPoint = 0; iPoint < fBmnPointsArray->GetEntriesFast(); iPoint++) {
58
59 TRandom* rand_gen = new TRandom();
60
61 CbmStsPoint* gemPoint = (CbmStsPoint*) fBmnPointsArray->UncheckedAt(iPoint);
62
63 const Float_t dX = rand_gen->Gaus(0, err[0]);
64 const Float_t dY = rand_gen->Gaus(0, err[1]);
65 const Float_t dZ = rand_gen->Gaus(0, err[2]);
66
67 const Float_t x_smeared = gemPoint->GetXIn() + dX;
68 const Float_t y_smeared = gemPoint->GetYIn() + dY;
69 const Float_t z_smeared = gemPoint->GetZIn() + dZ;
70
71 BmnHit* hit = new((*fBmnHitsArray)[fBmnHitsArray->GetEntriesFast()])BmnHit(0, TVector3(x_smeared, y_smeared, z_smeared), TVector3(err[0], err[1], err[2]), iPoint);
72// BmnHit* hit = new ((*fBmnHitsArray)[fBmnHitsArray->GetEntriesFast()]) BmnHit(kGEM, TVector3(x_smeared, y_smeared, z_smeared), TVector3(1.0, 1.0, 0.0), iPoint);
73 hit->SetIndex(fBmnHitsArray->GetEntriesFast() - 1);
74 hit->SetType(1);
75 hit->SetStation(GemStationSet->GetPointStationOwnership(gemPoint->GetZIn()));
76// hit->SetStation(DefineStationByZ(gemPoint->GetZIn()));
77
78 BmnMatch* match = new ((*fBmnGemStripHitMatchesArray)[fBmnGemStripHitMatchesArray->GetEntriesFast()]) BmnMatch();
79 match->AddLink(100.0, iPoint);
80
81 delete rand_gen;
82 }
83}
84
86 const Int_t nStation = 7;
87 Int_t minIdx = -1;
88 Double_t minDz = 10000;
89
90 Double_t zPos[nStation] = {100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0};
91
92 for (Int_t i = 0; i < nStation; ++i) {
93 Double_t dz = Abs(z - zPos[i]);
94 if (dz < minDz) {
95 minDz = dz;
96 minIdx = i;
97 }
98 }
99 return minIdx;
100}
101
int i
Definition P4_F32vec4.h:22
virtual InitStatus Init()
Int_t DefineStationByZ(Double_t z)
virtual void Exec(Option_t *opt)
Int_t GetPointStationOwnership(Double_t zcoord)
void SetType(Int_t type)
Definition BmnHit.h:81
void SetIndex(Int_t id)
Definition BmnHit.h:57
void SetStation(Short_t st)
Definition BmnHit.h:69
Double_t GetXIn() const
Definition CbmStsPoint.h:69
Double_t GetZIn() const
Definition CbmStsPoint.h:71
Double_t GetYIn() const
Definition CbmStsPoint.h:70