49 std::string
inFile =
"../data/mvdTestGeo.root";
51 TFile*
f =
new TFile(inFile.c_str());
52 TTree *
t=(TTree *) f->Get(
"pndsim") ;
54 TClonesArray*
mc_array=
new TClonesArray(
"PndMCTrack");
55 t->SetBranchAddress(
"MCTrack",&mc_array);
57 TClonesArray* rad_array=
new TClonesArray(
"FairRadLenPoint");
58 t->SetBranchAddress(
"RadLen",&rad_array);
60 TGeoManager *
geoMan = (TGeoManager*) gDirectory->Get(
"FAIRGeom");
64 int res = 200;
int angres = 180;
65 TH1D* hRadLenDistMat =
new TH1D(
"radldm",
"Material thicknesses",100,0,15);
66 TH1D* hRadLenDistEff =
new TH1D(
"radlde",
"Effective Radiation length values per volume",100,0,0.1);
67 TH2D*
hisxy =
new TH2D(
"hisxy",
"MC Points, xy view",res,-15.,15.,res,-15.,15.);
68 TH2D*
hisrz =
new TH2D(
"hisrz",
"MC Points, rz view",res,-20.,20.,res,-15.,25.);
70 TClonesArray* arrhisxy =
new TClonesArray(
"TH2D");
71 TClonesArray* arrhisrz =
new TClonesArray(
"TH2D");
72 TClonesArray* arrprothe =
new TClonesArray(
"TProfile");
73 TClonesArray* arrprophi =
new TClonesArray(
"TProfile");
75 std::vector<std::string> namesList;
78 namesList.push_back(
"pipe");
79 namesList.push_back(
"cave");
80 namesList.push_back(
"Sensor");
84 std::map<int,double> radlList;
85 int maxnames=namesList.size();
86 for(
int i=0;
i<maxnames;
i++){
91 name +=
i; name2 +=
i; name3 +=
i; name4 +=
i;
92 new ((*arrhisxy)[
i]) TH2D(name.Data(),(namesList[
i]).c_str(),2*
res,-15.,15.,2*
res,-15.,15.);
93 new ((*arrhisrz)[
i]) TH2D(name2.Data(),(namesList[
i]).c_str(),2*
res,-15.,15.,2*
res,-15.,15.);
94 new ((*arrprothe)[
i]) TProfile(name3.Data(),(namesList[
i]).c_str(),angres,0.,
TMath::Pi());
95 new ((*arrprophi)[
i]) TProfile(name4.Data(),(namesList[
i]).c_str(),angres,-1.*
TMath::Pi(),
TMath::Pi());
98 new ((*arrhisxy)[maxnames]) TH2D(
"hisxy-rest",
"Support",2*res,-15.,15.,2*res,-15.,15.);
99 new ((*arrhisrz)[maxnames]) TH2D(
"hisrz-rest",
"Support",2*res,-15.,15.,2*res,-15.,15.);
100 new ((*arrprothe)[maxnames]) TProfile(
"hthe-rest",
"Support",angres,0.,
TMath::Pi());
101 new ((*arrprophi)[maxnames]) TProfile(
"hphi-rest",
"Support",angres,-1.*
TMath::Pi(),
TMath::Pi());
102 radlList[maxnames]=0.;
104 TProfile* thetaprofile =
new TProfile(
"thetaprof",
"Radiaion length (#theta)",angres,0.,
TMath::Pi());
105 TProfile* phiprofile =
new TProfile(
"phiprof",
"Radiaion length (#phi)",angres,-1.*
TMath::Pi(),
TMath::Pi());
108 TProfile2D* histhephi =
new TProfile2D(
"hThePhi",
"",90,0.2,2.8,90,-1.*
TMath::Pi(),
TMath::Pi());
109 histhephi->SetTitle(
"Radiation length map #theta & #phi;#theta;#phi");
111 TH1D* hisx =
new TH1D(
"hX",
"X",100,-15.,15.);
112 TH1D* hisy =
new TH1D(
"hY",
"Y",100,-15.,15.);
113 TH1D* hisz =
new TH1D(
"hZ",
"Z",100,-15.,15.);
116 double radlen=0.,effradl=0.,effradlsum=0.,
theta=0.,
phi=0.;
120 for (Int_t event=0;
event<
nEvents &&
event<t->GetEntriesFast();
event++)
123 if(
verbose) cout<<
"Event No "<<
event<<endl;
124 else if (!(event%1000)) cout <<
"Event No "<<
event<<endl;
126 for (Int_t trackno=0; trackno<mc_array->GetEntriesFast();trackno++){
129 theta = mom.Theta();
phi = mom.Phi();
132 effradl=0.; effradlsum=0.;
133 for(uint
i=0;
i<radlList.size();
i++) radlList[
i]=0.;
134 for (Int_t k=0; k<rad_array->GetEntriesFast(); k++){
135 FairRadLenPoint* radpoint = (FairRadLenPoint*)rad_array->At(k);
136 if (radpoint->GetTrackID() != trackno)
continue;
137 radlen = radpoint->GetRadLength();
138 in = radpoint->GetPosition();
139 out = radpoint->GetPositionOut();
141 point.SetXYZ(0.5*(in.x()+out.x()),0.5*(in.y()+out.y()),0.5*(in.z()+out.z()));
142 if(in.Mag() < 0.02)
continue;
143 effradl = dist.Mag()/radlen;
144 effradlsum += effradl;
145 TGeoNode* node = geoMan->FindNode(point.x(),point.y(),point.z());
148 std::cout<<
"Warning: There is a node not defined properly!"<<std::endl;
149 cout<<
"\tEvent No "<<
event<<
" \t RadLenPoint No."<< k<<endl;
154 volname = node->GetVolume()->GetName();
156 if(
"cave"==volname && point.Mag() > 20.)
continue;
158 cout<<
"--> "<<volname.Data()<<endl;
161 hRadLenDistMat->Fill(dist.Mag());
162 hRadLenDistEff->Fill(effradl);
164 hisx->Fill(in.X(),effradl);
165 hisy->Fill(in.Y(),effradl);
166 hisz->Fill(in.Z(),effradl);
168 hisxy->Fill(in.X(),in.Y());
169 if(in.Y()>0.) hisrz->Fill(in.Z(),in.Perp());
170 else hisrz->Fill(in.Z(),-1.*in.Perp());
172 int selected = maxnames;
173 for(uint
i=0;
i<namesList.size();
i++){
174 if (volname.Contains( (namesList[
i]).c_str())){
179 radlList[selected]+=effradl;
180 ((TH2D*)arrhisxy->At(selected))->
Fill(point.X(),point.Y(),effradl);
181 if(point.Y()>0.) ((TH2D*)arrhisrz->At(selected))->
Fill(point.Z(),point.Perp(),effradl);
182 else ((TH2D*)(arrhisrz->At(selected)))->Fill(point.Z(),-1.*point.Perp(),effradl);
184 thetaprofile->Fill(
theta,effradlsum);
185 phiprofile->Fill(
phi,effradlsum);
186 histhephi->Fill(
theta,
phi,effradlsum);
188 for(
int i=0;
i<=maxnames;
i++){
190 ((TProfile*)arrprothe->At(
i))->
Fill(
theta,effradl);
191 ((TProfile*)arrprophi->At(
i))->
Fill(
phi,effradl);
203 TCanvas*
can1 =
new TCanvas(
"can1",
"MCHit view in MVD",0,0,a*resol,
b*resol);
207 hisxy->SetStats(
false);
208 hisxy->DrawCopy(
"colz");
211 hisrz->SetStats(
false);
212 hisrz->DrawCopy(
"colz");
215 TPad*
mypad = (TPad*) gPad;
218 hisx->SetFillColor(38);
221 hisy->SetFillColor(45);
224 hisz->SetFillColor(30);
242 hRadLenDistMat->SetFillColor(38);
243 hRadLenDistMat->DrawCopy();
247 hRadLenDistEff->SetFillColor(38);
248 hRadLenDistEff->DrawCopy();
254 thetaprofile->SetFillColor(30);
255 thetaprofile->SetLineColor(30);
256 thetaprofile->Draw(
"hist");
260 phiprofile->SetFillColor(45);
261 phiprofile->SetLineColor(45);
262 phiprofile->Draw(
"hist");
265 histhephi->SetStats(
false);
266 histhephi->DrawCopy(
"colz");
274 TCanvas*
can2 =
new TCanvas(
"can2",
"MCHit view in MVD",50,50,a*2*resol,
b*2*resol);
279 TCanvas*
can4 =
new TCanvas(
"can4",
"MCHit view in MVD",100,100,a*resol,
b*resol);
284 int colors[4] = {38,17,45,30};
286 THStack* thetastack =
new THStack(
"thetastack",
"");
287 thetastack->SetTitle(
"Stacked Radiation lengths #theta;#theta;X/X_{0} ");
288 THStack* phistack =
new THStack(
"phistack",
"");
289 phistack->SetTitle(
"Stacked Radiation lengths #phi;#phi;X/X_{0} ");
292 TLegend* legMat=
new TLegend(0.6, 0.75, 0.8, 0.98);
294 for(
int i=maxnames;
i>=0;
i--){
295 aprof=(TProfile*)arrprothe->At(
i);
296 ahist=aprof->ProjectionX();
297 ahist->SetFillColor(colors[
i] + coloff);
298 ahist->SetLineColor(colors[
i] + coloff);
299 legMat->AddEntry(ahist,
"",
"F");
302 ahist->DrawCopy(
"hist");
303 thetastack->Add(ahist);
305 aprof=(TProfile*)arrprophi->At(
i);
306 ahist=aprof->ProjectionX();
307 ahist->SetFillColor(colors[
i] + coloff);
308 ahist->SetLineColor(colors[
i] + coloff);
309 phistack->Add(ahist);
312 thetastack->SetMaximum(0.1);
313 thetastack->Draw(
"hist");
317 phistack->SetMaximum(0.1);
318 phistack->Draw(
"hist");
329 if(a>4) resol = int(1200/a);
330 TCanvas*
can3 =
new TCanvas(
"can3",
"MCHit view in MVD",150,150,a*resol,
b*resol);
333 for(
int i=0;
i<
a;
i++){
335 ((TH2D*)arrhisxy->At(
i))->
DrawCopy(
"colz");
337 ((TH2D*)arrhisrz->At(
i))->
DrawCopy(
"colz");
346 cout << endl << endl;
347 cout <<
"Macro finished succesfully." << endl;
350 cout <<
"Real time " << rtime <<
" s, CPU time " << ctime <<
" s" << endl;
TVector3 GetMomentum() const
HISThit_ene Fill(sum_hit_ene)