7 gROOT->LoadMacro(
"$VMCWORKDIR/gconfig/basiclibs.C");
9 gSystem->Load(
"libGeoBase");
10 gSystem->Load(
"libParBase");
11 gSystem->Load(
"libBase");
12 gSystem->Load(
"libPndData");
13 gSystem->Load(
"libField");
14 gSystem->Load(
"libGen");
15 gSystem->Load(
"libPassive");
17 gSystem->Load(
"libgenfit");
18 gSystem->Load(
"libtrackrep");
19 gSystem->Load(
"libtpc");
20 gSystem->Load(
"libtpcreco");
21 gSystem->Load(
"librecotasks");
23 gSystem->Load(
"libMvd");
24 gSystem->Load(
"libMvdReco");
32 TFile*
f =
new TFile(
"../data/testMCCluster.root");
33 TTree *
t=(TTree *) f->Get(
"pndsim") ;
34 TClonesArray*
hit_array=
new TClonesArray(
"MvdCluster");
35 t->SetBranchAddress(
"MVDCluster",&hit_array);
37 TFile*
F =
new TFile(
"testMC.root");
38 TTree *
T=(TTree *) F->Get(
"pndsim") ;
39 TClonesArray*
mc_array=
new TClonesArray(
"MvdMCPoint");
40 T->SetBranchAddress(
"MVDPoint",&mc_array);
42 TGeoManager *
geoMan = (TGeoManager*) gDirectory->Get(
"FAIRGeom");
44 TH2D*
hisxy =
new TH2D(
"hisxy",
"",400,-15.,15.,400,-15.,15.);
45 hisxy->SetTitle(
"MVD MC Cluster, xy view;x / cm;y / cm");
46 TH2D*
hisrz =
new TH2D(
"hisrz",
"",400,-20.,20.,400,-15.,25.);
47 hisrz->SetTitle(
"MVD MC Cluster, rz view;z / cm;r/ cm");
48 TH2D*
hisSensxy =
new TH2D(
"hisSensxy",
"",400,-15.,15.,400,-15.,15.);
49 hisSensxy->SetTitle(
"MVD MC Sensor, xy view;x / cm;y / cm");
50 TH2D*
hisSensrz =
new TH2D(
"hisSensrz",
"",400,-20.,20.,400,-15.,25.);
51 hisSensrz->SetTitle(
"MVD MC Sensor, rz view;z / cm;r/ cm");
53 TH2D*
hisDiffXY =
new TH2D(
"hisdiffxy",
"",100,-0.05,0.05,100,-0.05,0.05);
54 hisDiffXY->SetTitle(
"(MC - RECO) Hit coordinates xy view;#Deltax / cm;#Deltay / cm");
55 TH2D*
hisDiffRZ =
new TH2D(
"hisdiffrz",
"",100,-0.05,0.05,100,-0.00,0.10);
56 hisDiffRZ->SetTitle(
"(MC - RECO) Hit coordinates rz view;#Deltaz / cm;#Deltar / cm");
58 TH1D*
hisDiffX =
new TH1D(
"hisdiffx",
"",100,-0.05,0.05);
59 hisDiffX->SetTitle(
"(MC - RECO) Hit coordinate x;#Deltax / cm;");
60 TH1D*
hisDiffY =
new TH1D(
"hisdiffy",
"",100,-0.05,0.05);
61 hisDiffY->SetTitle(
"(MC - RECO) Hit coordinate y;#Deltay / cm;");
62 TH1D*
hisDiffZ =
new TH1D(
"hisdiffz",
"",100,-0.05,0.05);
63 hisDiffZ->SetTitle(
"(MC - RECO) Hit coordinate z;#Deltaz / cm;");
66 hisDiffLocalX->SetTitle(
"(MC - RECO) Local Hit coordinate x;#Deltax_{L} / cm;");
68 hisDiffLocalY->SetTitle(
"(MC - RECO) Local Hit coordinate y;#Deltay_{L} / cm;");
70 hisDiffLocalZ->SetTitle(
"(MC - RECO) Local Hit coordinate z;#Deltaz_{L} / cm;");
71 TH2D*
hisDiffLocalXY =
new TH2D(
"hisdiffLocalxy",
"",100,-0.05,0.05,100,-0.05,0.05);
72 hisDiffLocalXY->SetTitle(
"(MC - RECO) Local Hit XY;#Deltax_{L} / cm;#Deltay_{L} / cm");
73 TH2D*
hisDiffLocalRZ =
new TH2D(
"hisdiffLocalrz",
"",100,-0.05,0.05,100,-0.00,0.10);
74 hisDiffLocalRZ->SetTitle(
"(MC - RECO) Local Hit RZ;#Deltaz_{L} / cm;#Deltar_{L} / cm");
76 TH2D*
hisLocalXY =
new TH2D(
"hisLocalxy",
"",100,-5.,5.,100,-5.,5.);
77 hisLocalXY->SetTitle(
"(MC - RECO) Local Hit XY;x_{L} / cm;y_{L} / cm");
78 TH2D*
hisLocalRZ =
new TH2D(
"hisLocalrz",
"",100,-5.,5.,100,-0.,10.);
79 hisLocalRZ->SetTitle(
"(MC - RECO) Local Hit RZ;z_{L} / cm;r_{L} / cm");
80 TH2D*
hisLocalYZ =
new TH2D(
"hisLocalyz",
"",100,-5.,5.,100,-5.,5.);
81 hisLocalYZ->SetTitle(
"(MC - RECO) Local Hit YZ;z_{L} / cm;y_{L} / cm");
82 TH2D*
hisLocalXZ =
new TH2D(
"hisLocalxz",
"",100,-5.,5.,100,-5.,5.);
83 hisLocalXZ->SetTitle(
"(MC - RECO) Local Hit XZ;z_{L} / cm;x_{L} / cm");
85 TH1D*
hisPLUV =
new TH1D(
"hispluv",
"sensor unit vectors",100,0.9999,1.0001);
91 for (Int_t j=0; j<nEvents && j<t->GetEntriesFast(); j++)
95 if(verbose) cout<<
"Event No "<<j<<endl;
96 for (Int_t
i=0;
i<hit_array->GetEntriesFast();
i++)
98 if(verbose) cout<<
"Point No "<<
i<<endl;
103 geoMan->cd(point->GetDetName());
106 vecs.SetXYZ(hit->GetX(), hit->GetY(), hit->GetZ());
107 vecmc.SetXYZ(point->GetX(),point->GetY(),point->GetZ());
108 vecdiff = vecmc -
vecs;
110 Int_t
layer = Int_t(10.*vecs->Mag());
111 if(verbose) cout<<vecs.x()<<
"\t"<<vecs.y()<<
"\t"<<vecs.z()<<endl;
112 hisxy->Fill(vecs.x(),vecs.y());
113 if(vecs.y() > 0.) hisrz->Fill(vecs.z(),vecs.Perp());
114 else hisrz->Fill(vecs.z(),-1.*vecs.Perp());
116 hisDiffXY->Fill(vecdiff.x(),vecdiff.y());
117 hisDiffRZ->Fill(vecdiff.z(),vecdiff.Perp());
118 hisDiffX->Fill(vecdiff.x());
119 hisDiffY->Fill(vecdiff.y());
120 hisDiffZ->Fill(vecdiff.z());
123 DetPlane plane = hit->getDetPlane();
124 TVector3 vnorm = plane->getNormal();
125 TVector3 plO = plane->getO();
126 TVector3 plU = plane->getU();
127 TVector3 plV = plane->getV();
128 hisSensxy->Fill(plO.x(),plO.y());
129 if(plO.y()>0.)hisSensrz->Fill(plO.z(),plO.Perp());
130 else hisSensrz->Fill(plO.z(),-1.*plO.Perp());
133 tmpz = vecs.Dot(plU);
134 tmpx = vecs.Dot(plV);
135 tmpy = vecs.Dot(vnorm);
136 vecs.SetXYZ(tmpx,tmpy,tmpz);
137 hisLocalXY->Fill(vecs.x(),vecs.y());
138 hisLocalXZ->Fill(vecs.z(),vecs.x());
139 hisLocalYZ->Fill(vecs.z(),vecs.y());
140 hisLocalRZ->Fill(vecs.z(),vecs.Perp());
143 tmpz = vecmc.Dot(plU);
144 tmpx = vecmc.Dot(plV);
145 tmpy = vecmc.Dot(vnorm);
146 vecmc.SetXYZ(tmpx,tmpy,tmpz);
147 vecdiff = vecmc -
vecs;
149 tmpx = plU.Dot(plU);tmpy = plU.Dot(plV);tmpz = plU.Dot(vnorm);
150 hisPLUV->Fill(tmpx);hisPLUV->Fill(tmpy);hisPLUV->Fill(tmpz);
152 tmpx = plV.Dot(plU);tmpy = plV.Dot(plV);tmpz = plV.Dot(vnorm);
153 hisPLUV->Fill(tmpx);hisPLUV->Fill(tmpy);hisPLUV->Fill(tmpz);
155 tmpx = vnorm.Dot(plU);tmpy = vnorm.Dot(plV);tmpz = vnorm.Dot(vnorm);
156 hisPLUV->Fill(tmpx);hisPLUV->Fill(tmpy);hisPLUV->Fill(tmpz);
158 hisDiffLocalX->Fill(vecdiff.X());
159 hisDiffLocalY->Fill(vecdiff.Y());
160 hisDiffLocalZ->Fill(vecdiff.Z());
161 hisDiffLocalXY->Fill(vecdiff.X(),vecdiff.Y());
162 hisDiffLocalRZ->Fill(vecdiff.Z(),vecdiff.Perp());
171 TF1 *
g1 =
new TF1(
"g1",
"gaus",-0.007,0.007);
172 TF1 *
g2 =
new TF1(
"g2",
"gaus",-0.03,0.03);
173 TF1 *
total =
new TF1(
"total",
"gaus(0)+gaus(3)",-0.03,0.03);
175 total->SetLineColor(kRed);
176 total->SetLineWidth(1);
180 hisDiffX->Fit(g1,
"R");
181 hisDiffX->Fit(g2,
"R+");
182 g1->GetParameters(&par[0]);
183 g2->GetParameters(&par[3]);
184 total->SetParameters(par);
185 hisDiffX->Fit(total,
"R");
187 hisDiffY->Fit(g1,
"R");
188 hisDiffY->Fit(g2,
"R+");
189 g1->GetParameters(&par[0]);
190 g2->GetParameters(&par[3]);
191 total->SetParameters(par);
192 hisDiffY->Fit(total,
"R");
194 hisDiffZ->Fit(g1,
"R");
195 hisDiffZ->Fit(g2,
"R+");
196 g1->GetParameters(&par[0]);
197 g2->GetParameters(&par[3]);
198 total->SetParameters(par);
199 hisDiffZ->Fit(total,
"R");
201 hisDiffLocalX->Fit(
"gaus");
202 hisDiffLocalX->GetFunction(
"gaus")->SetLineColor(kRed);
203 hisDiffLocalX->GetFunction(
"gaus")->SetLineWidth(1);
205 hisDiffLocalY->Fit(
"gaus");
206 hisDiffLocalY->GetFunction(
"gaus")->SetLineColor(kRed);
207 hisDiffLocalY->GetFunction(
"gaus")->SetLineWidth(1);
209 hisDiffLocalZ->Fit(
"gaus");
210 hisDiffLocalZ->GetFunction(
"gaus")->SetLineColor(kRed);
211 hisDiffLocalZ->GetFunction(
"gaus")->SetLineWidth(1);
215 TCanvas*
can1 =
new TCanvas(
"MvdTestPlot",
"MCHit view in MVD",0,0,a*250,
b*250);
218 can1->cd(1);hisxy->DrawCopy(
"col");
219 can1->cd(2);hisrz->DrawCopy(
"col");
220 can1->cd(3);hisSensxy->DrawCopy(
"BOX");
221 can1->cd(4);hisSensrz->DrawCopy(
"BOX");
222 can1->cd(5);hisPLUV->DrawCopy();
224 can1->cd(6);hisDiffX->DrawCopy(
"");
225 can1->cd(7);hisDiffY->DrawCopy(
"");
226 can1->cd(8);hisDiffZ->DrawCopy(
"");
227 can1->cd(9);hisDiffXY->DrawCopy(
"col");
228 can1->cd(10);hisDiffRZ->DrawCopy(
"col");
230 can1->cd(11);hisDiffLocalX->DrawCopy(
"");
231 can1->cd(12);hisDiffLocalY->DrawCopy(
"");
232 can1->cd(13);hisDiffLocalZ->DrawCopy(
"");
233 can1->cd(14);hisDiffLocalXY->DrawCopy(
"col");
234 can1->cd(15);hisDiffLocalRZ->DrawCopy(
"col");
236 can1->cd(16);hisLocalXY->DrawCopy(
"col");
237 can1->cd(17);hisLocalXZ->DrawCopy(
"col");
238 can1->cd(18);hisLocalYZ->DrawCopy(
"col");
239 can1->cd(19);hisLocalRZ->DrawCopy(
"col");
243 can1->Print(
"testoutput.ps");
250 cout << endl << endl;
251 cout <<
"Macro finished succesfully." << endl;
252 cout <<
"Real time " << rtime <<
" s, CPU time " << ctime <<
" s" << endl;
Class to store the Digis which belong to one cluster This class holds the information which Digi belo...