BmnRoot
Loading...
Searching...
No Matches
BmnSiliconHitProducer.cxx
Go to the documentation of this file.
2#include "BmnSiliconHit.h"
3#include "CbmStsPoint.h"
4#include "CbmMCTrack.h"
5
6#include "FairRootManager.h"
7
8#include "TRandom.h"
9#include "TCanvas.h"
10#include "TH1F.h"
11#include "TSystem.h"
12
13using std::cout;
14using namespace TMath;
15
17 fInputBranchName = "SiliconPoint";
18 fOutputHitsBranchName = "BmnHit";
19 fOutputSiliconHitMatchesBranchName = "BmnSiliconHitMatch";
20}
21
26
28
29 cout << " BmnSiliconHitProducer::Init() " << endl;
30
31 //Get ROOT Manager
32 FairRootManager* ioman = FairRootManager::Instance();
33
34 fBmnPointsArray = (TClonesArray*) ioman->GetObject(fInputBranchName);
35 fMCTracksArray = (TClonesArray*) ioman->GetObject("MCTrack");
36
37 fBmnHitsArray = new TClonesArray(fOutputHitsBranchName, 100);
38 ioman->Register("BmnSiliconHit", "SILICON", fBmnHitsArray, kTRUE);
39
40 fBmnSiliconHitMatchesArray = new TClonesArray("BmnMatch");
41 ioman->Register(fOutputSiliconHitMatchesBranchName, "SILICON", fBmnSiliconHitMatchesArray, kTRUE);
42
43 TString gPathConfig = gSystem->Getenv("VMCWORKDIR");
44 gPathConfig += "/parameters/silicon/XMLConfigs/";
45 SiliconStationSet = new BmnSiliconStationSet(gPathConfig + "SiliconRunSpring2018.xml");
46
47 return kSUCCESS;
48}
49
50void BmnSiliconHitProducer::Exec(Option_t* opt) {
51
52 fBmnHitsArray->Delete();
53 fBmnSiliconHitMatchesArray->Delete();
54
55 if (!fBmnPointsArray) {
56 Error("BmnSiliconHitProducer::Init()", " !!! Unknown branch name !!! ");
57 return;
58 }
59
60 Float_t err[3] = {0.03, 0.03, 0.03}; // Uncertainties of coordinates
61 // Float_t err[3] = {0.0, 0.0, 0.0}; // Uncertainties of coordinates
62
63 for (Int_t iPoint = 0; iPoint < fBmnPointsArray->GetEntriesFast(); iPoint++) {
64
65 TRandom* rand_gen = new TRandom();
66
67 CbmStsPoint* siliconPoint = (CbmStsPoint*) fBmnPointsArray->UncheckedAt(iPoint);
68
69 const Float_t dX = rand_gen->Gaus(0, err[0]);
70 const Float_t dY = rand_gen->Gaus(0, err[1]);
71 const Float_t dZ = rand_gen->Gaus(0, err[2]);
72
73 const Float_t x_smeared = siliconPoint->GetXIn() + dX;
74 const Float_t y_smeared = siliconPoint->GetYIn() + dY;
75 const Float_t z_smeared = siliconPoint->GetZIn() + dZ;
76
77 BmnHit* hit = new((*fBmnHitsArray)[fBmnHitsArray->GetEntriesFast()])BmnHit(0, TVector3(x_smeared, y_smeared, z_smeared), TVector3(err[0], err[1], err[2]), iPoint);
78 // BmnHit* hit = new ((*fBmnHitsArray)[fBmnHitsArray->GetEntriesFast()]) BmnHit(kSILICON, TVector3(x_smeared, y_smeared, z_smeared), TVector3(1.0, 1.0, 0.0), iPoint);
79 hit->SetIndex(fBmnHitsArray->GetEntriesFast() - 1);
80 hit->SetType(1);
81 hit->SetStation(SiliconStationSet->GetPointStationOwnership(siliconPoint->GetZIn()));
82
83 BmnMatch* match = new ((*fBmnSiliconHitMatchesArray)[fBmnSiliconHitMatchesArray->GetEntriesFast()]) BmnMatch();
84 match->AddLink(100.0, iPoint);
85
86 delete rand_gen;
87 }
88}
89
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
virtual void Exec(Option_t *opt)
Int_t GetPointStationOwnership(Double_t zcoord)
Double_t GetXIn() const
Definition CbmStsPoint.h:69
Double_t GetZIn() const
Definition CbmStsPoint.h:71
Double_t GetYIn() const
Definition CbmStsPoint.h:70