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