BmnRoot
Loading...
Searching...
No Matches
BmnSiliconHitProducerSRC.cxx
Go to the documentation of this file.
2#include "BmnSiliconPoint.h"
3#include "BmnSiliconHit.h"
4#include "CbmStsPoint.h"
5#include "CbmMCTrack.h"
6
7#include "FairRootManager.h"
8
9#include "TRandom.h"
10#include "TCanvas.h"
11#include "TFile.h"
12#include "TH1F.h"
13#include "TSystem.h"
14
15using std::cout;
16using namespace TMath;
17
19
20 fInputBranchName = "SiliconPoint";
21 fOutputHitsBranchName = "BmnSiliconHitClean";
22 fOutputHitsBranchName2 = "BmnSiliconHitSim";
23}
24
29
31 if (fDebug) cout << " BmnSiliconHitProducerSRC::Init() " << endl;
32 rand_gen.SetSeed(5);
33
34 //Get ROOT Manager
35 FairRootManager* ioman = FairRootManager::Instance();
36
37 fBmnPointsArray = (TClonesArray*) ioman->GetObject(fInputBranchName);
38 fMCTracksArray = (TClonesArray*) ioman->GetObject("MCTrack");
39
40 fBmnHitsArray = new TClonesArray("BmnHit");
41 ioman->Register(fOutputHitsBranchName, "SILICON", fBmnHitsArray, kTRUE);
42
43 fBmnHitsArray2 = new TClonesArray("BmnHit");
44 ioman->Register(fOutputHitsBranchName2, "SILICON", fBmnHitsArray2, kTRUE);
45
46 TString gPathConfig = gSystem->Getenv("VMCWORKDIR");
47 gPathConfig += "/parameters/silicon/XMLConfigs/";
48 SiliconStationSet = new BmnSiliconStationSet(gPathConfig + "SiliconRunSpring2018.xml");
49
50 //--some hists--
51 if (fDebug) {
52 hdX = new TH1D("dX","dX ", 100,-0.015,0.015); fList.Add(hdX);
53 hdXp = new TH1D("dXp","dXp ", 100,-0.017,0.017);fList.Add(hdXp);
54 }
55
56 return kSUCCESS;
57}
58
59void BmnSiliconHitProducerSRC::Exec(Option_t* opt) {
60
61 fBmnHitsArray->Delete();
62 fBmnHitsArray2->Delete();
63
64
65 if (fDebug) cout<<"======================== BmnSiliconHitProducerSRC ========================"<<endl;
66
67 if (!fBmnPointsArray) {
68 Error("BmnSiliconHitProducerSRC::Init()", " !!! Unknown branch name !!! ");
69 return;
70 }
71 // x xp z
72 Float_t err[3] = {0.0030, 0.0035, 0.}; // Uncertainties of coordinates //[cm], i.e. 30 & 35 mk
73
74 for (Int_t iPoint = 0; iPoint < fBmnPointsArray->GetEntriesFast(); iPoint++) {
75
76 //TRandom* rand_gen = new TRandom();
77 BmnSiliconPoint* siliconPoint = (BmnSiliconPoint*) fBmnPointsArray->UncheckedAt(iPoint);
78
79 Int_t charge = siliconPoint->GetCharge();
80 if (charge == 0) continue; //qgsm
81 //if (charge != 18) continue;//ion carbon
82 Int_t IsPrimary = siliconPoint->GetIsPrimary();
83 Double_t Pz = siliconPoint->GetPz();
84 Int_t pdgId = siliconPoint->GetPdgId();
85 if (IsPrimary == 0) continue;
86 if (Pz < 1.) continue;
87
88 Int_t track_id = siliconPoint->GetTrackID();
89 Float_t dX = rand_gen.Gaus(0,err[0]);
90 Float_t dXp= rand_gen.Gaus(0,err[1]);
91 Float_t dZ = rand_gen.Gaus(0,err[2]);
92 if (fDebug) hdX ->Fill(dX);
93 if (fDebug) hdXp->Fill(dXp);
94
95 Float_t x = siliconPoint->GetXIn();
96 Float_t y = siliconPoint->GetYIn();
97 Float_t z = siliconPoint->GetZIn();
98 Float_t xp = y*tan(2.5*TMath::Pi()/180.) + x;
99
100 Float_t x_smeared = siliconPoint->GetXIn() + dX;
101 Float_t xp_smeared = xp + dXp;
102 Float_t z_smeared = siliconPoint->GetZIn() + dZ;
103
104 if (fDebug) cout<<" track_id "<<track_id<<" charge "<<charge<<" x "<<x<<" x_sm "<<x_smeared<<" y "<<y<<" y_sm "<<(xp_smeared - x_smeared)/tan(2.5*TMath::Pi()/180.)<<" xp_sm "<<xp_smeared<<" z "<<z<<endl;
105 if (fDebug && z > -320.) cout<<" ----------"<<endl;
106
107 //---faile for Goran---
108 //if (pdgId == PDG_B11 ){//if ( pdgId == PDG_He4 || pdgId == PDG_Li7){//
109 if (fDebug) cout<<" pdgId "<<pdgId<<endl;
110 //|| pdgId == PDG_Li7 || pdgId == PDG_Li8 || pdgId == PDG_He4 || pdgId == PDG_Be9 || pdgId == PDG_H2){
111
112 //clean/true hit
113 BmnHit* hit = new((*fBmnHitsArray)[fBmnHitsArray->GetEntriesFast()])BmnHit(0, TVector3(x, y, z),
114 TVector3(err[0], err[1], err[2]), iPoint);
115 //hit->SetIndex(fBmnHitsArray->GetEntriesFast() - 1);
116 hit->SetType(1);
117 hit->SetStation(SiliconStationSet->GetPointStationOwnership(siliconPoint->GetZIn()));
118 hit->SetIndex(track_id);
119 hit->SetType(pdgId);
120 //hit->SetELoss(static_cast< double>(pdgId));//tmp
121 if(rand_gen.Uniform() <= .25) xp_smeared = -999.;
122
123 if(rand_gen.Uniform() <= .90) {
124
125 //sim hit smeared
126 BmnHit* hit2 = new((*fBmnHitsArray2)[fBmnHitsArray2->GetEntriesFast()])BmnHit(0, TVector3(x_smeared, xp_smeared, z_smeared),
127 TVector3(err[0], err[1], err[2]), iPoint);
128 //hit2->SetIndex(fBmnHitsArray2->GetEntriesFast() - 1);
129 hit2->SetType(pdgId);
130 hit2->SetStation(SiliconStationSet->GetPointStationOwnership(siliconPoint->GetZIn()));
131 hit2->SetIndex(track_id);
132
133 }
134 // }
135
136 }//iPoint
137
138}
139
141
142 if (fDebug) {
143
144 printf("BmnSiliconHitProducerSRC: ");
145 fOutputFileName = "hSiliconHitProducerSRC.root";
146 cout<< fOutputFileName <<endl;
147 TFile file(fOutputFileName, "RECREATE");
148 fList.Write();
149 file.Close();
150 }
151
152}
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)
Double_t GetZIn() const
Double_t GetXIn() const
Double_t GetYIn() const
Double_t GetPdgId()
Double_t GetCharge()
Int_t GetPointStationOwnership(Double_t zcoord)