]>
Commit | Line | Data |
---|---|---|
1a5016fc | 1 | /* |
2 | .x ~/UliStyle.C | |
3 | .x ~/rootlogon.C | |
4 | gSystem->Load("libSTAT.so"); | |
5 | gSystem->Load("libANALYSIS"); | |
6 | gSystem->Load("libTPCcalib"); | |
7 | gSystem->Load("libSTAT.so"); | |
8 | gSystem->AddIncludePath("-I$ALICE_ROOT/TPC/macros"); | |
9 | ||
10 | ||
11 | ||
12 | gROOT->LoadMacro("$ALICE_ROOT/TPC/macros/AliXRDPROOFtoolkit.cxx+") | |
13 | AliXRDPROOFtoolkit tool; | |
14 | TChain * chainCosmic = tool.MakeChain("cosmic.txt","Track0",0,1000000); | |
15 | chainCosmic->Lookup(); | |
16 | chainCosmic->SetProof(kTRUE); | |
17 | TChain * chainTr = tool.MakeChain("align.txt","Tracklet",0,10200); | |
18 | chainTr->Lookup(); | |
19 | //chainTr->SetProof(kTRUE); | |
20 | // | |
21 | // | |
22 | // | |
23 | .L $ALICE_ROOT/TPC/CalibMacros/CalibAlign.C | |
24 | SetAlias(); | |
25 | InitCutsAlign(); | |
26 | MakeAlign(); | |
27 | ||
28 | */ | |
29 | /* | |
30 | #include "TMath.h" | |
31 | #include "TFile.h" | |
32 | #include "TLinearFitter.h" | |
33 | #include "TChain.h" | |
34 | #include "TTreeStream.h" | |
35 | #include "TStatToolkit.h" | |
36 | #include "TH2F.h" | |
37 | #include "TLegend.h" | |
38 | #include "TCut.h" | |
39 | #include "TPad.h" | |
40 | #include "AliTPCcalibAlign.h" | |
41 | */ | |
42 | ||
43 | ||
44 | ||
45 | AliTPCcalibAlign align; | |
46 | TChain * chainTr; | |
47 | ||
48 | void SetAlias(){ | |
49 | // | |
50 | // | |
51 | // | |
52 | chainTr->SetAlias("dP0","tp1.fP[0]-tp2.fP[0]"); | |
53 | chainTr->SetAlias("dP1","tp1.fP[1]-tp2.fP[1]"); | |
54 | chainTr->SetAlias("dP2","tp1.fP[2]-tp2.fP[2]"); | |
55 | chainTr->SetAlias("dP3","tp1.fP[3]-tp2.fP[3]"); | |
56 | chainTr->SetAlias("dP4","tp1.fP[4]-tp2.fP[4]"); | |
57 | // | |
58 | chainTr->SetAlias("sP0","sqrt(tp1.fC[0]+tp2.fC[0])"); | |
59 | chainTr->SetAlias("sP1","sqrt(tp1.fC[2]+tp2.fC[2])"); | |
60 | chainTr->SetAlias("sP2","sqrt(tp1.fC[5]+tp2.fC[5])"); | |
61 | chainTr->SetAlias("sP3","sqrt(tp1.fC[9]+tp2.fC[9])"); | |
62 | chainTr->SetAlias("sP4","sqrt(tp1.fC[14]+tp2.fC[14])"); | |
63 | // | |
64 | chainTr->SetAlias("pP0","dP0/sP0"); | |
65 | chainTr->SetAlias("pP1","dP1/sP1"); | |
66 | chainTr->SetAlias("pP2","dP2/sP2"); | |
67 | chainTr->SetAlias("pP3","dP3/sP3"); | |
68 | // | |
69 | chainTr->SetAlias("side","(sign(tp1.fP[1])+0)"); | |
70 | chainTr->SetAlias("dR","(1-abs(tp1.fP[1]/250.))"); | |
71 | chainTr->SetAlias("ta0","(tp1.fP[2]+tp2.fP[2])*0.5"); | |
72 | chainTr->SetAlias("ta1","(tp1.fP[3]+tp2.fP[3])*0.5"); | |
73 | chainTr->SetAlias("ca","cos(tp1.fAlpha+0)"); | |
74 | chainTr->SetAlias("sa","sin(tp1.fAlpha+0)"); | |
75 | // | |
76 | chainTr->SetAlias("meanZ","(tp1.fP[1]+tp2.fP[1])*0.5"); | |
77 | chainTr->SetAlias("vx1","(v1.fElements[0]+0)"); | |
78 | chainTr->SetAlias("vy1","(v1.fElements[1]+0)"); | |
79 | chainTr->SetAlias("vz1","(v1.fElements[2]+0)"); | |
80 | chainTr->SetAlias("vdydx1","(v1.fElements[3]+0)"); | |
81 | chainTr->SetAlias("vdzdx1","(v1.fElements[4]+0)"); | |
82 | chainTr->SetAlias("vx2","(v2.fElements[0]+0)"); | |
83 | chainTr->SetAlias("vy2","(v2.fElements[1]+0)"); | |
84 | chainTr->SetAlias("vz2","(v2.fElements[2]+0)"); | |
85 | chainTr->SetAlias("vdydx2","(v2.fElements[3]+0)"); | |
86 | chainTr->SetAlias("vdzdx2","(v2.fElements[4]+0)"); | |
87 | // | |
88 | // | |
89 | // | |
90 | chainTr->SetAlias("dx1","(AliTPCcalibAlign::SCorrect(0,0,s1,s2,vx1,vy1,vz1,vdydx1,vdzdx1)-vx1)"); | |
91 | chainTr->SetAlias("dy1","(AliTPCcalibAlign::SCorrect(0,1,s1,s2,vx1,vy1,vz1,vdydx1,vdzdx1)-vy1)"); | |
92 | chainTr->SetAlias("dz1","(AliTPCcalibAlign::SCorrect(0,2,s1,s2,vx1,vy1,vz1,vdydx1,vdzdx1)-vz1)"); | |
93 | chainTr->SetAlias("ddy1","(AliTPCcalibAlign::SCorrect(0,3,s1,s2,vx1,vy1,vz1,vdydx1,vdzdx1)-vdydx1)"); | |
94 | chainTr->SetAlias("ddz1","(AliTPCcalibAlign::SCorrect(0,4,s1,s2,vx1,vy1,vz1,vdydx1,vdzdx1)-vdzdx1)"); | |
95 | chainTr->SetAlias("ddy01","(AliTPCcalibAlign::SCorrect(0,5,s1,s2,vx1,vy1,vz1,vdydx1,vdzdx1)-vdydx1)"); | |
96 | chainTr->SetAlias("ddz01","(AliTPCcalibAlign::SCorrect(0,6,s1,s2,vx1,vy1,vz1,vdydx1,vdzdx1)-vdzdx1)"); | |
97 | ||
98 | ||
99 | } | |
100 | ||
101 | ||
102 | void InitCutsAlign(){ | |
103 | // resolution cuts | |
104 | TCut cutS0("sqrt(tp2.fC[0]+tp2.fC[0])<0.2"); | |
105 | TCut cutS1("sqrt(tp2.fC[2]+tp2.fC[2])<0.2"); | |
106 | TCut cutS2("sqrt(tp2.fC[5]+tp2.fC[5])<0.01"); | |
107 | TCut cutS3("sqrt(tp2.fC[9]+tp2.fC[9])<0.01"); | |
108 | TCut cutS4("sqrt(tp2.fC[14]+tp2.fC[14])<0.5"); | |
109 | TCut cutS=cutS0+cutS1+cutS2+cutS3+cutS4; | |
110 | // | |
111 | // parameters matching cuts | |
112 | TCut cutP0("abs(tp1.fP[0]-tp2.fP[0])<0.6"); | |
113 | TCut cutP1("abs(tp1.fP[1]-tp2.fP[1])<0.6"); | |
114 | TCut cutP2("abs(tp1.fP[2]-tp2.fP[2])<0.03"); | |
115 | TCut cutP3("abs(tp1.fP[3]-tp2.fP[3])<0.03"); | |
116 | TCut cutP=cutP0+cutP1+cutP2+cutP3; | |
117 | // | |
118 | TCut cutAll = cutS+cutP; | |
119 | chainTr->Draw(">>listELP",cutAll,"entryList"); | |
120 | TEntryList *elist = (TEntryList*)gDirectory->Get("listELP"); | |
121 | chainTr->SetEntryList(elist); | |
122 | ||
123 | TCut cutRun("1"); | |
124 | TCut cutN120("1"); | |
125 | ||
126 | } | |
127 | ||
128 | void MakeAlign(){ | |
129 | ||
130 | align.ProcessTree(chainTr); | |
131 | align.EvalFitters(); | |
132 | align.MakeTree("alignTree.root"); | |
133 | align.SetInstance(&align); | |
134 | } | |
135 | ||
136 | void MakeCompareAlign(){ | |
137 | // | |
138 | // | |
139 | // | |
140 | TFile falignTreeNoMag("/lustre_alpha/alice/miranov/rec/LHC08d/nomag/alignTree.root"); | |
141 | TTree * treeAlignNoMag = (TTree*)falignTreeNoMag.Get("Align"); | |
142 | TFile falignTree("alignTree.root"); | |
143 | TTree * treeAlign = (TTree*)falignTree.Get("Align"); | |
144 | treeAlign->AddFriend(treeAlignNoMag,"NoMag"); | |
145 | treeAlignNoMag->SetMarkerStyle(26); | |
146 | treeAlign->SetMarkerStyle(25); | |
147 | } | |
148 | ||
149 | TMatrixD * arrayAlign[72]; | |
150 | TMatrixD * arrayAlignTmp[72]; | |
151 | ||
152 | void ClearMatrices(){ | |
153 | // | |
154 | // | |
155 | for (Int_t i=0;i<72; i++) { | |
156 | TMatrixD * mat = new TMatrixD(4,4); | |
157 | mat->UnitMatrix(); | |
158 | arrayAlign[i]=mat; | |
159 | arrayAlignTmp[i]=(TMatrixD*)(mat->Clone()); | |
160 | } | |
161 | ||
162 | } | |
163 | ||
164 | void GlobalAlign(){ | |
165 | // | |
166 | // Global Align | |
167 | // | |
168 | TTreeSRedirector *cstream = new TTreeSRedirector("galign.root"); | |
169 | ||
170 | for (Int_t iter=0; iter<10;iter++){ | |
171 | printf("Iter=\t%d\n",iter); | |
172 | for (Int_t is0=0;is0<72; is0++) { | |
173 | // | |
174 | TMatrixD *mati0 = arrayAlign[is0]; | |
175 | TMatrixD matDiff(4,4); | |
176 | Double_t sumw=0; | |
177 | for (Int_t is1=0;is1<72; is1++) { | |
178 | Bool_t invers=kFALSE; | |
179 | const TMatrixD *mat = align.GetTransformation(is0,is1,0); | |
180 | if (!mat){ | |
181 | invers=kTRUE; | |
182 | mat = align.GetTransformation(is1,is0,0); | |
183 | } | |
184 | if (!mat) continue; | |
185 | Double_t weight=1; | |
186 | if ( (is1%18-is0%18)!=0) weight*=0.3; | |
187 | if (is1/36>is0/36) weight*=2./3.; | |
188 | if (is1/36<is0/36) weight*=1./3.; | |
189 | // | |
190 | // | |
191 | TMatrixD matT = *mat; | |
192 | if (invers) matT.Invert(); | |
193 | matDiff+=weight*(*(arrayAlign[is1]))*matT; | |
194 | sumw+=weight; | |
195 | (*cstream)<<"LAlign"<< | |
196 | "iter="<<iter<< | |
197 | "s0="<<is0<< | |
198 | "m6.="<<arrayAlign[is0]<< | |
199 | "\n"; | |
200 | ||
201 | } | |
202 | if (sumw>0){ | |
203 | matDiff*=1/sumw; | |
204 | (*arrayAlignTmp[is0]) = matDiff; | |
205 | } | |
206 | } | |
207 | for (Int_t is0=0;is0<72; is0++) { | |
208 | (*arrayAlign[is0]) = (*arrayAlignTmp[is0]); | |
209 | // TMatrixD * matM1= align.GetTransformation(is0,36+(is0+35)%36,0); | |
210 | //TMatrixD * mat = align.GetTransformation(is0,36+(is0+36)%36,0); | |
211 | //TMatrixD * matP1= align.GetTransformation(is0,36+(is0+37)%36,0); | |
212 | // | |
213 | (*cstream)<<"GAlign"<< | |
214 | "iter="<<iter<< | |
215 | "s0="<<is0<< | |
216 | "m6.="<<arrayAlign[is0]<< | |
217 | "\n"; | |
218 | } | |
219 | } | |
220 | delete cstream; | |
221 | } | |
222 | ||
223 | ||
224 | ||
225 | ||
226 | ||
227 | void MakeGlobalCorr(){ | |
228 | // | |
229 | // | |
230 | // | |
231 | TStatToolkit toolkit; | |
232 | Double_t chi2=0; | |
233 | Int_t npoints=0; | |
234 | TVectorD fitParam; | |
235 | TMatrixD covMatrix; | |
236 | TVectorD chi2V(5); | |
237 | // | |
238 | TString fstring=""; | |
239 | fstring+="side++"; | |
240 | // | |
241 | fstring+="dR++"; | |
242 | fstring+="dR*dR++"; | |
243 | fstring+="dR*sa++"; | |
244 | fstring+="dR*ca++"; | |
245 | fstring+="ta0++"; | |
246 | fstring+="ta1++"; | |
247 | // | |
248 | fstring+="dR*side++"; | |
249 | fstring+="dR*dR*side++"; | |
250 | fstring+="dR*sa*side++"; | |
251 | fstring+="dR*ca*side++"; | |
252 | fstring+="ta0*side++"; | |
253 | fstring+="ta1*side++"; | |
254 | ||
255 | TString * strP0 = TStatToolkit::FitPlane(chainTr,"dP0:sP0", fstring.Data(),cutS, chi2,npoints,fitParam,covMatrix); | |
256 | chi2V[0]=TMath::Sqrt(chi2/npoints); | |
257 | chainTr->SetAlias("corrP0",strP0->Data()); | |
258 | ||
259 | TString * strP1 = TStatToolkit::FitPlane(chainTr,"dP1:sP1", fstring.Data(),cutS, chi2,npoints,fitParam,covMatrix); | |
260 | chi2V[1]=TMath::Sqrt(chi2/npoints); | |
261 | chainTr->SetAlias("corrP1",strP1->Data()); | |
262 | ||
263 | TString * strP2 = TStatToolkit::FitPlane(chainTr,"dP2:sP2", fstring.Data(),cutS, chi2,npoints,fitParam,covMatrix); | |
264 | chi2V[2]=TMath::Sqrt(chi2/npoints); | |
265 | chainTr->SetAlias("corrP2",strP2->Data()); | |
266 | ||
267 | TString * strP3 = TStatToolkit::FitPlane(chainTr,"dP3:sP3", fstring.Data(),cutS, chi2,npoints,fitParam,covMatrix); | |
268 | chi2V[3]=TMath::Sqrt(chi2/npoints); | |
269 | chainTr->SetAlias("corrP3",strP3->Data()); | |
270 | ||
271 | TString * strP4 = TStatToolkit::FitPlane(chainTr,"dP4:sP4", fstring.Data(),cutS, chi2,npoints,fitParam,covMatrix); | |
272 | chi2V[4]=TMath::Sqrt(chi2/npoints); | |
273 | chainTr->SetAlias("corrP4",strP4->Data()); | |
274 | } | |
275 | ||
276 | void P0resolZ(){ | |
277 | // | |
278 | // | |
279 | // | |
280 | TH2F * hdP0Z = new TH2F("hdP0Z","hdP0Z",10,-250,250,100,-0.5,0.5); | |
281 | TH2F * hdP0ZNoCor = new TH2F("hdP0ZNoCor","hdP0ZNoCor",10,-250,250,100,-0.5,0.5); | |
282 | chainTr->Draw("(dP0-corrP0)/sqrt(2.):meanZ>>hdP0Z",""+cutRun+cutS+cutN120,""); | |
283 | chainTr->Draw("(dP0-0)/sqrt(2.):meanZ>>hdP0ZNoCor",""+cutRun+cutS+cutN120,""); | |
284 | ||
285 | hdP0Z->FitSlicesY(); | |
286 | hdP0ZNoCor->FitSlicesY(); | |
287 | hdP0Z_2->SetMinimum(0); | |
288 | hdP0Z_2->SetXTitle("Z position (cm)"); | |
289 | hdP0Z_2->SetYTitle("#sigma_{y} (cm)"); | |
290 | hdP0Z_2->SetMarkerStyle(25); | |
291 | hdP0ZNoCor_2->SetMarkerStyle(26); | |
292 | hdP0Z_2->Draw(); | |
293 | hdP0ZNoCor_2->Draw("same"); | |
294 | gPad->SaveAs("picAlign/SigmaY_z.gif"); | |
295 | gPad->SaveAs("picAlign/SigmaY_z.eps"); | |
296 | // | |
297 | hdP0ZNoCor_1->SetXTitle("Z position (cm)"); | |
298 | hdP0ZNoCor_1->SetYTitle("#Delta{y} (cm)"); | |
299 | hdP0Z_1->SetMarkerStyle(25); | |
300 | hdP0ZNoCor_1->SetMarkerStyle(26); | |
301 | hdP0ZNoCor_1->Draw(""); | |
302 | hdP0Z_1->Draw("same"); | |
303 | gPad->SaveAs("picAlign/DeltaY_z.gif"); | |
304 | gPad->SaveAs("picAlign/DeltaY_z.eps"); | |
305 | // | |
306 | // | |
307 | TH2F * hdPP0Z = new TH2F("hdPP0Z","hdPP0Z",8,-200,200,50,-5.05,5.05); | |
308 | TH2F * hncdPP0Z = new TH2F("hncdPP0Z","hncdPP0Z",8,-200,200,50,-5.05,5.05); | |
309 | chainTr->Draw("(dP0-corrP0)/sP0:meanZ>>hdPP0Z",""+cutRun+cutS+cutN120,""); | |
310 | chainTr->Draw("(dP0-0)/sP0:meanZ>>hncdPP0Z",""+cutRun+cutS+cutN120,""); | |
311 | hdPP0Z->FitSlicesY(); | |
312 | hncdPP0Z->FitSlicesY(); | |
313 | hdPP0Z_2->SetMarkerStyle(25); | |
314 | hncdPP0Z_2->SetMarkerStyle(26); | |
315 | hdPP0Z_2->SetMinimum(0); | |
316 | hdPP0Z_2->SetXTitle("Z position (cm)"); | |
317 | hdPP0Z_2->SetYTitle("#sigma y (Unit) "); | |
318 | hdPP0Z_2->Draw(); | |
319 | hncdPP0Z_2->Draw("same"); | |
320 | gPad->SaveAs("picAlign/PullY_z.gif"); | |
321 | gPad->SaveAs("picAlign/PullY_z.eps"); | |
322 | } | |
323 | ||
324 | void P1resolZ(){ | |
325 | // | |
326 | // | |
327 | // | |
328 | TH2F * hdP1Z = new TH2F("hdP1Z","hdP1Z",10,-250,250,100,-0.2,0.2); | |
329 | TH2F * hdP1ZNoCor = new TH2F("hdP1ZNoCor","hdP1ZNoCor",10,-250,250,100,-0.2,0.2); | |
330 | chainTr->Draw("(dP1-corrP1)/sqrt(2.):meanZ>>hdP1Z",""+cutRun+cutS+cutN120,""); | |
331 | chainTr->Draw("(dP1-0)/sqrt(2.):meanZ>>hdP1ZNoCor",""+cutRun+cutS+cutN120,""); | |
332 | ||
333 | hdP1Z->FitSlicesY(); | |
334 | hdP1ZNoCor->FitSlicesY(); | |
335 | hdP1Z_2->SetMinimum(0); | |
336 | hdP1Z_2->SetXTitle("Z position (cm)"); | |
337 | hdP1Z_2->SetYTitle("#sigma_{z} (cm)"); | |
338 | hdP1Z_2->SetMarkerStyle(25); | |
339 | hdP1ZNoCor_2->SetMarkerStyle(26); | |
340 | hdP1Z_2->Draw(); | |
341 | hdP1ZNoCor_2->Draw("same"); | |
342 | gPad->SaveAs("picAlign/SigmaZ_z.gif"); | |
343 | gPad->SaveAs("picAlign/SigmaZ_z.eps"); | |
344 | // | |
345 | hdP1ZNoCor_1->SetXTitle("Z position (cm)"); | |
346 | hdP1ZNoCor_1->SetYTitle("#Delta{z} (cm)"); | |
347 | hdP1Z_1->SetMarkerStyle(25); | |
348 | hdP1ZNoCor_1->SetMarkerStyle(26); | |
349 | hdP1ZNoCor_1->Draw(""); | |
350 | hdP1Z_1->Draw("same"); | |
351 | gPad->SaveAs("picAlign/DeltaZ_z.gif"); | |
352 | gPad->SaveAs("picAlign/DeltaZ_z.eps"); | |
353 | // | |
354 | // | |
355 | TH2F * hdPP1Z = new TH2F("hdPP1Z","hdPP1Z",8,-200,200,50,-5.05,5.05); | |
356 | TH2F * hncdPP1Z = new TH2F("hncdPP1Z","hncdPP1Z",8,-200,200,50,-5.05,5.05); | |
357 | chainTr->Draw("(dP1-corrP1)/sP1:meanZ>>hdPP1Z",""+cutRun+cutS+cutN120,""); | |
358 | chainTr->Draw("(dP1-0)/sP1:meanZ>>hncdPP1Z",""+cutRun+cutS+cutN120,""); | |
359 | hdPP1Z->FitSlicesY(); | |
360 | hncdPP1Z->FitSlicesY(); | |
361 | hdPP1Z_2->SetMarkerStyle(25); | |
362 | hncdPP1Z_2->SetMarkerStyle(26); | |
363 | hdPP1Z_2->SetMinimum(0); | |
364 | hdPP1Z_2->SetXTitle("Z position (cm)"); | |
365 | hdPP1Z_2->SetYTitle("#sigma z (Unit) "); | |
366 | hdPP1Z_2->Draw(); | |
367 | hncdPP1Z_2->Draw("same"); | |
368 | gPad->SaveAs("picAlign/PullZ_z.gif"); | |
369 | gPad->SaveAs("picAlign/PullZ_z.eps"); | |
370 | } | |
371 | ||
372 | ||
373 | void P4resolZ(){ | |
374 | // | |
375 | // | |
376 | // | |
377 | TH2F * hdP4Z = new TH2F("hdP4Z","hdP4Z",10,-250,250,100,-0.4,0.4); | |
378 | TH2F * hdP4ZNoCor = new TH2F("hdP4ZNoCor","hdP4ZNoCor",10,-250,250,100,-0.4,0.4); | |
379 | chainTr->Draw("(dP4-corrP4)/sqrt(2.):meanZ>>hdP4Z",""+cutRun+cutS+cutN120,""); | |
380 | chainTr->Draw("(dP4-0)/sqrt(2.):meanZ>>hdP4ZNoCor",""+cutRun+cutS+cutN120,""); | |
381 | ||
382 | hdP4Z->FitSlicesY(); | |
383 | hdP4ZNoCor->FitSlicesY(); | |
384 | hdP4Z_2->SetMinimum(0); | |
385 | hdP4Z_2->SetXTitle("Z position (cm)"); | |
386 | hdP4Z_2->SetYTitle("#sigma_{1/pt} (1/GeV)"); | |
387 | hdP4Z_2->SetMarkerStyle(25); | |
388 | hdP4ZNoCor_2->SetMarkerStyle(26); | |
389 | hdP4Z_2->Draw(); | |
390 | hdP4ZNoCor_2->Draw("same"); | |
391 | gPad->SaveAs("picAlign/SigmaP4_z.gif"); | |
392 | gPad->SaveAs("picAlign/SigmaP4_z.eps"); | |
393 | // | |
394 | hdP4ZNoCor_1->SetXTitle("Z position (cm)"); | |
395 | hdP4ZNoCor_1->SetYTitle("#Delta_{1/p_{t}} (1/GeV)"); | |
396 | hdP4Z_1->SetMarkerStyle(25); | |
397 | hdP4ZNoCor_1->SetMarkerStyle(26); | |
398 | hdP4ZNoCor_1->Draw(""); | |
399 | hdP4Z_1->Draw("same"); | |
400 | gPad->SaveAs("picAlign/DeltaP4_z.gif"); | |
401 | gPad->SaveAs("picAlign/DeltaP4_z.eps"); | |
402 | // | |
403 | // | |
404 | TH2F * hdPP4Z = new TH2F("hdPP4Z","hdPP4Z",8,-200,200,50,-5.05,5.05); | |
405 | TH2F * hncdPP4Z = new TH2F("hncdPP4Z","hncdPP4Z",8,-200,200,50,-5.05,5.05); | |
406 | chainTr->Draw("(dP4-corrP4)/sP4:meanZ>>hdPP4Z",""+cutRun+cutS+cutN120,""); | |
407 | chainTr->Draw("(dP4-0)/sP4:meanZ>>hncdPP4Z",""+cutRun+cutS+cutN120,""); | |
408 | hdPP4Z->FitSlicesY(); | |
409 | hncdPP4Z->FitSlicesY(); | |
410 | hdPP4Z_2->SetMarkerStyle(25); | |
411 | hncdPP4Z_2->SetMarkerStyle(26); | |
412 | hdPP4Z_2->SetMinimum(0); | |
413 | hdPP4Z_2->SetXTitle("Z position (cm)"); | |
414 | hdPP4Z_2->SetYTitle("#sigma 1/p_{t} (Unit) "); | |
415 | hdPP4Z_2->Draw(); | |
416 | hncdPP4Z_2->Draw("same"); | |
417 | gPad->SaveAs("picAlign/PullP4_z.gif"); | |
418 | gPad->SaveAs("picAlign/PullP4_z.eps"); | |
419 | } | |
420 | ||
421 | ||
422 | ||
423 | ||
424 | ||
425 | void MakeFit(){ | |
426 | // | |
427 | // | |
428 | // | |
429 | TChain *chainTracklet=chainTr; | |
430 | AliTPCcalibAlign align; | |
431 | // | |
432 | TVectorD * vec1 = 0; | |
433 | TVectorD * vec2 = 0; | |
434 | AliExternalTrackParam * tp1 = 0; | |
435 | AliExternalTrackParam * tp2 = 0; | |
436 | Int_t s1 = 0; | |
437 | Int_t s2 = 0; | |
438 | { | |
439 | for (Int_t i=0; i< elist->GetN(); i++){ | |
440 | //for (Int_t i=0; i<100000; i++){ | |
441 | chainTracklet->GetBranch("tp1.")->SetAddress(&tp1); | |
442 | chainTracklet->GetBranch("tp2.")->SetAddress(&tp2); | |
443 | chainTracklet->GetBranch("v1.")->SetAddress(&vec1); | |
444 | chainTracklet->GetBranch("v2.")->SetAddress(&vec2); | |
445 | chainTracklet->GetBranch("s1")->SetAddress(&s1); | |
446 | chainTracklet->GetBranch("s2")->SetAddress(&s2); | |
447 | chainTracklet->GetEntry(i); | |
448 | if (i%100==0) printf("%d\t%d\t%d\t\n",i, s1,s2); | |
449 | //vec1.Print(); | |
450 | TLinearFitter * fitter = align.GetOrMakeFitter6(s1,s2); | |
451 | if (fitter) align.Process6(vec1->GetMatrixArray(),vec2->GetMatrixArray(),fitter); | |
452 | } | |
453 | } | |
454 | } | |
455 | ||
456 | ||
457 | // chainTr->Scan("vy1:AliTPCcalibAlign::SCorrect(0,1,s1,s2,vx1,vy1,vz1,vdydx1,vdzdx1)","","",100); | |
458 | ||
459 | void MakePlot(){ | |
460 | // | |
461 | chainTr->Draw("vy2-vy1:s1>>hisdYNoCor(36,0,36,100,-0.3,0.3)","abs(s2-s1-36)<1","",40000); | |
462 | chainTr->Draw("vy2-vy1-dy1:s1>>hisdYCor(36,0,36,100,-0.3,0.3)","abs(s2-s1-36)<1","",40000); | |
463 | hisdYCor->FitSlicesY(); | |
464 | hisdYNoCor->FitSlicesY(); | |
465 | hisdYCor_1->Draw(""); | |
466 | ||
467 | } | |
468 | ||
469 | ||
470 | void dPhi(){ | |
471 | // | |
472 | // | |
473 | // | |
474 | treeAlign->Draw("1000*m6.fElements[4]","s2==s1+36&&nphi>100"); | |
475 | htemp->SetXTitle("#Delta_{#phi} (mrad)"); | |
476 | gPad->SaveAs("picAlign/mag5dPhi.eps"); | |
477 | gPad->SaveAs("picAlign/mag5dPhi.gif"); | |
478 | // | |
479 | treeAlignNoMag->Draw("1000*m6.fElements[4]","s2==s1+36&&nphi>100"); | |
480 | htemp->SetXTitle("#Delta_{#phi} (mrad)"); | |
481 | gPad->SaveAs("picAlign/nomagdPhi.eps"); | |
482 | gPad->SaveAs("picAlign/nomagdPhi.gif"); | |
483 | // | |
484 | // | |
485 | // | |
486 | treeAlign->Draw("1000*(m6.fElements[4]-NoMag.m6.fElements[4])","s2==s1+36&&nphi>100"); | |
487 | htemp->SetXTitle("#Delta_{#phi} (mrad)"); | |
488 | gPad->SaveAs("picAlign/diffnomagmag5dPhi.eps"); | |
489 | gPad->SaveAs("picAlign/diffnomagmag5dPhi.gif"); | |
490 | // | |
491 | } | |
492 | ||
493 | ||
494 | void dTheta(){ | |
495 | // | |
496 | // | |
497 | // | |
498 | treeAlign->Draw("1000*m6.fElements[8]","s2==s1+36&&nphi>100"); | |
499 | htemp->SetXTitle("#Delta_{#theta} (mrad)"); | |
500 | gPad->SaveAs("picAlign/mag5dTheta.eps"); | |
501 | gPad->SaveAs("picAlign/mag5dTheta.gif"); | |
502 | // | |
503 | treeAlignNoMag->Draw("1000*m6.fElements[8]","s2==s1+36&&nphi>100"); | |
504 | htemp->SetXTitle("#Delta_{#theta} (mrad)"); | |
505 | gPad->SaveAs("picAlign/nomagdTheta.eps"); | |
506 | gPad->SaveAs("picAlign/nomagdTheta.gif"); | |
507 | // | |
508 | // | |
509 | // | |
510 | treeAlign->Draw("1000*(m6.fElements[8]-NoMag.m6.fElements[8])","s2==s1+36&&nphi>100"); | |
511 | htemp->SetXTitle("#Delta_{#theta} (mrad)"); | |
512 | gPad->SaveAs("picAlign/diffnomagmag5dTheta.eps"); | |
513 | gPad->SaveAs("picAlign/diffnomagmag5dTheta.gif"); | |
514 | // | |
515 | // | |
516 | treeAlign->Draw("1000*(m6.fElements[8]):s1","s2==s1+36&&nphi>100"); | |
517 | htemp->SetYTitle("#Delta_{#theta} (mrad)"); | |
518 | htemp->SetXTitle("Sector number"); | |
519 | treeAlignNoMag->Draw("1000*(m6.fElements[8]):s1","s2==s1+36&&nphi>100","same"); | |
520 | gPad->SaveAs("picAlign/diffnomagmag5dTheta_s1.eps"); | |
521 | gPad->SaveAs("picAlign/diffnomagmag5dTheta_s1.gif"); | |
522 | // | |
523 | } | |
524 | ||
525 | ||
526 | ||
527 | void dZ(){ | |
528 | // | |
529 | // | |
530 | // | |
531 | treeAlign->Draw("dz","s2==s1+36&&nphi>100"); | |
532 | htemp->SetXTitle("#Delta_{Z} (cm)"); | |
533 | gPad->SaveAs("picAlign/mag5dZ.eps"); | |
534 | gPad->SaveAs("picAlign/mag5dZ.gif"); | |
535 | // | |
536 | treeAlignNoMag->Draw("dz","s2==s1+36&&nphi>100"); | |
537 | htemp->SetXTitle("#Delta_{Z} (cm)"); | |
538 | gPad->SaveAs("picAlign/nomagdZ.eps"); | |
539 | gPad->SaveAs("picAlign/nomagdZ.gif"); | |
540 | // | |
541 | // | |
542 | // | |
543 | treeAlign->Draw("(dz-NoMag.dz)","s2==s1+36&&nphi>100"); | |
544 | htemp->SetXTitle("#Delta_{Z} (cm)"); | |
545 | gPad->SaveAs("picAlign/diffnomagmag5dZ.eps"); | |
546 | gPad->SaveAs("picAlign/diffnomagmag5dZ.gif"); | |
547 | // | |
548 | // | |
549 | treeAlign->Draw("dz:s1","s2==s1+36&&nphi>100"); | |
550 | htemp->SetYTitle("#Delta_{Z} (cm)"); | |
551 | htemp->SetXTitle("Sector number"); | |
552 | treeAlignNoMag->Draw("dz:s1","s2==s1+36&&nphi>100","same"); | |
553 | gPad->SaveAs("picAlign/diffnomagmag5dZ_s1.eps"); | |
554 | gPad->SaveAs("picAlign/diffnomagmag5dZ_s1.gif"); | |
555 | // | |
556 | } | |
557 | ||
558 | void dY(){ | |
559 | // | |
560 | // | |
561 | // | |
562 | treeAlign->Draw("dy","s2==s1+36&&nphi>100"); | |
563 | htemp->SetXTitle("#Delta_{Y} (cm)"); | |
564 | gPad->SaveAs("picAlign/mag5dY.eps"); | |
565 | gPad->SaveAs("picAlign/mag5dY.gif"); | |
566 | // | |
567 | treeAlignNoMag->Draw("dy","s2==s1+36&&nphi>100"); | |
568 | htemp->SetXTitle("#Delta_{Y} (cm)"); | |
569 | gPad->SaveAs("picAlign/nomagdY.eps"); | |
570 | gPad->SaveAs("picAlign/nomagdY.gif"); | |
571 | // | |
572 | // | |
573 | // | |
574 | treeAlign->Draw("(dy-NoMag.dy)","s2==s1+36&&nphi>100"); | |
575 | htemp->SetXTitle("#Delta_{Y} (cm)"); | |
576 | gPad->SaveAs("picAlign/diffnomagmag5dY.eps"); | |
577 | gPad->SaveAs("picAlign/diffnomagmag5dY.gif"); | |
578 | // | |
579 | // | |
580 | treeAlign->Draw("dy:s1","s2==s1+36&&nphi>100"); | |
581 | htemp->SetYTitle("#Delta_{Y} (cm)"); | |
582 | htemp->SetXTitle("Sector number"); | |
583 | treeAlignNoMag->Draw("dy:s1","s2==s1+36&&nphi>100","same"); | |
584 | gPad->SaveAs("picAlign/diffnomagmag5dY_s1.eps"); | |
585 | gPad->SaveAs("picAlign/diffnomagmag5dY_s1.gif"); | |
586 | // | |
587 | } | |
588 | ||
589 | ||
590 | ||
591 | ||
592 | ||
593 | ||
594 | ||
595 | ||
596 |