1 //------------------------------------------------------------------------------
\r
2 // Implementation of AliComparisonRes class. It keeps information from
\r
3 // comparison of reconstructed and MC particle tracks. In addtion,
\r
4 // it keeps selection cuts used during comparison. The comparison
\r
5 // information is stored in the ROOT histograms. Analysis of these
\r
6 // histograms can be done by using Analyse() class function. The result of
\r
7 // the analysis (histograms) are stored in the output picture_res.root file.
\r
9 // Author: J.Otwinowski 04/02/2008
\r
10 //------------------------------------------------------------------------------
\r
13 //after running analysis, read the file, and get component
\r
14 gSystem->Load("libPWG1.so");
\r
15 TFile f("Output.root");
\r
16 AliComparisonRes * comp = (AliComparisonRes*)f.Get("AliComparisonRes");
\r
18 // analyse comparison data (output stored in pictures_res.root)
\r
21 // paramtetrisation of the TPC track length (for information only)
\r
22 TF1 fl("fl","((min(250./(abs(x+0.000001)),250)-90))",0,2); // TPC track length function
\r
23 TF1 fl2("fl2","[0]/((min(250./(abs(x+0.000001)),250)-90))^[1]",0,2);
\r
24 fl2.SetParameter(1,1);
\r
25 fl2.SetParameter(0,1);
\r
35 #include "TProfile.h"
\r
36 #include "TProfile2D.h"
\r
37 #include "TGraph2D.h"
\r
38 #include "TCanvas.h"
\r
41 #include "AliESDEvent.h"
\r
43 #include "AliESDfriend.h"
\r
44 #include "AliESDfriendTrack.h"
\r
45 #include "AliESDVertex.h"
\r
46 #include "AliRecInfoCuts.h"
\r
47 #include "AliMCInfoCuts.h"
\r
48 #include "AliLog.h"
\r
49 #include "AliTracker.h"
\r
51 #include "AliMathBase.h"
\r
52 #include "AliTreeDraw.h"
\r
54 #include "AliMCInfo.h"
\r
55 #include "AliESDRecInfo.h"
\r
56 #include "AliComparisonRes.h"
\r
58 using namespace std;
\r
60 ClassImp(AliComparisonRes)
\r
62 //_____________________________________________________________________________
\r
63 AliComparisonRes::AliComparisonRes():
\r
64 TNamed("AliComparisonRes","AliComparisonRes"),
\r
67 fPtResolLPT(0), // pt resolution - low pt
\r
68 fPtResolHPT(0), // pt resolution - high pt
\r
69 fPtPullLPT(0), // pt resolution - low pt
\r
70 fPtPullHPT(0), // pt resolution - high pt
\r
72 // Resolution constrained param
\r
74 fCPhiResolTan(0), // angular resolution - constrained
\r
75 fCTanResolTan(0), // angular resolution - constrained
\r
76 fCPtResolTan(0), // pt resolution - constrained
\r
77 fCPhiPullTan(0), // angular resolution - constrained
\r
78 fCTanPullTan(0), // angular resolution - constrained
\r
79 fCPtPullTan(0), // pt resolution - constrained
\r
82 // Parametrisation histograms
\r
84 fC1Pt2Resol1PtTPC(0),
\r
85 fC1Pt2Resol1PtTPCITS(0),
\r
87 fCYResol1PtTPCITS(0),
\r
89 fCZResol1PtTPCITS(0),
\r
90 fCPhiResol1PtTPC(0),
\r
91 fCPhiResol1PtTPCITS(0),
\r
92 fCThetaResol1PtTPC(0),
\r
93 fCThetaResol1PtTPCITS(0),
\r
106 fVertex = new AliESDVertex();
\r
107 fVertex->SetXv(0.0);
\r
108 fVertex->SetYv(0.0);
\r
109 fVertex->SetZv(0.0);
\r
112 //_____________________________________________________________________________
\r
113 AliComparisonRes::~AliComparisonRes(){
\r
115 // Resolution histograms
\r
116 if(fPtResolLPT) delete fPtResolLPT; fPtResolLPT=0;
\r
117 if(fPtResolHPT) delete fPtResolHPT; fPtResolHPT=0;
\r
118 if(fPtPullLPT) delete fPtPullLPT; fPtPullLPT=0;
\r
119 if(fPtPullHPT) delete fPtPullHPT; fPtPullHPT=0;
\r
121 // Resolution histograms (constrained param)
\r
122 if(fCPhiResolTan) delete fCPhiResolTan; fCPhiResolTan=0;
\r
123 if(fCTanResolTan) delete fCTanResolTan; fCTanResolTan=0;
\r
124 if(fCPtResolTan) delete fCPtResolTan; fCPtResolTan=0;
\r
125 if(fCPhiPullTan) delete fCPhiPullTan; fCPhiPullTan=0;
\r
126 if(fCTanPullTan) delete fCTanPullTan; fCTanPullTan=0;
\r
127 if(fCPtPullTan) delete fCPtPullTan; fCPtPullTan=0;
\r
129 // Parametrisation histograms
\r
130 if(fC1Pt2Resol1PtTPC) delete fC1Pt2Resol1PtTPC; fC1Pt2Resol1PtTPC=0;
\r
131 if(fC1Pt2Resol1PtTPCITS) delete fC1Pt2Resol1PtTPCITS; fC1Pt2Resol1PtTPCITS=0;
\r
132 if(fCYResol1PtTPC) delete fCYResol1PtTPC; fCYResol1PtTPC=0;
\r
133 if(fCYResol1PtTPCITS) delete fCYResol1PtTPCITS; fCYResol1PtTPCITS=0;
\r
134 if(fCZResol1PtTPC) delete fCZResol1PtTPC; fCZResol1PtTPC=0;
\r
135 if(fCZResol1PtTPCITS) delete fCZResol1PtTPCITS; fCZResol1PtTPCITS=0;
\r
136 if(fCPhiResol1PtTPC) delete fCPhiResol1PtTPC; fCPhiResol1PtTPC=0;
\r
137 if(fCPhiResol1PtTPCITS) delete fCPhiResol1PtTPCITS; fCPhiResol1PtTPCITS=0;
\r
138 if(fCThetaResol1PtTPC) delete fCThetaResol1PtTPC; fCThetaResol1PtTPC=0;
\r
139 if(fCThetaResol1PtTPCITS) delete fCThetaResol1PtTPCITS; fCThetaResol1PtTPCITS=0;
\r
141 if(fVertex) delete fVertex; fVertex=0;
\r
145 //_____________________________________________________________________________
\r
146 void AliComparisonRes::InitHisto(){
\r
149 fCPhiResolTan = new TH2F("CPhiResolTan","CPhiResolTan",50, -2,2,200,-0.025,0.025);
\r
150 fCPhiResolTan->SetXTitle("tan(#theta)");
\r
151 fCPhiResolTan->SetYTitle("#Delta#phi");
\r
153 fCTanResolTan = new TH2F("CTanResolTan","CTanResolTan",50, -2,2,200,-0.025,0.025);
\r
154 fCTanResolTan->SetXTitle("tan(#theta)");
\r
155 fCTanResolTan->SetYTitle("#Delta#theta");
\r
157 fCPtResolTan=new TH2F("CPtResol","CPtResol",50, -2,2,200,-0.2,0.2);
\r
158 fCPtResolTan->SetXTitle("Tan(#theta)");
\r
159 fCPtResolTan->SetYTitle("#Deltap_{t}/p_{t}");
\r
161 fCPhiPullTan = new TH2F("CPhiPullTan","CPhiPullTan",50, -2,2,200,-5,5);
\r
162 fCPhiPullTan->SetXTitle("Tan(#theta)");
\r
163 fCPhiPullTan->SetYTitle("#Delta#phi/#Sigma");
\r
165 fCTanPullTan = new TH2F("CTanPullTan","CTanPullTan",50, -2,2,200,-5,5);
\r
166 fCTanPullTan->SetXTitle("Tan(#theta)");
\r
167 fCTanPullTan->SetYTitle("#Delta#theta/#Sigma");
\r
169 fCPtPullTan=new TH2F("CPtPull","CPtPull",50, -2,2,200,-5,5);
\r
170 fCPtPullTan->SetXTitle("Tan(#theta)");
\r
171 fCPtPullTan->SetYTitle("(1/mcp_{t}-1/p_{t})/#Sigma");
\r
173 fPtResolLPT = new TH2F("Pt_resol_lpt","pt resol",10, 0.1,3,200,-0.2,0.2);
\r
174 fPtResolLPT->SetXTitle("p_{t}");
\r
175 fPtResolLPT->SetYTitle("#Deltap_{t}/p_{t}");
\r
177 fPtResolHPT = new TH2F("Pt_resol_hpt","pt resol",10, 2,100,200,-0.3,0.3);
\r
178 fPtResolHPT->SetXTitle("p_{t}");
\r
179 fPtResolHPT->SetYTitle("#Deltap_{t}/p_{t}");
\r
181 fPtPullLPT = new TH2F("Pt_pull_lpt","pt pull",10, 0.1,3,200,-6,6);
\r
182 fPtPullLPT->SetXTitle("p_{t}");
\r
183 fPtPullLPT->SetYTitle("#Deltap_{t}/#Sigma");
\r
185 fPtPullHPT = new TH2F("Pt_pull_hpt","pt pull",10,2,100,200,-6,6);
\r
186 fPtPullHPT->SetXTitle("p_{t}");
\r
187 fPtPullHPT->SetYTitle("#Deltap_{t}/#Sigma");
\r
189 // Parametrisation histograms
\r
190 fC1Pt2Resol1PtTPC = new TH2F("fC1Pt2Resol1PtTPC","(1/mcpt-1/pt)/(1+1/mcpt)^2 vs 1/pt)",100,0,10,200,-0.020,0.020);
\r
191 fC1Pt2Resol1PtTPC->SetXTitle("1/mcp_{t}");
\r
192 fC1Pt2Resol1PtTPC->SetYTitle("(1/mcp_{t}-1/p_{t})/(1+1/mcp_{t})^2)");
\r
194 fC1Pt2Resol1PtTPCITS = new TH2F("fC1Pt2Resol1PtTPCITS","(1/mcpt-1/pt)/(1+1/mcpt)^2 vs 1/pt)",100,0,10,200,-0.020,0.020);
\r
195 fC1Pt2Resol1PtTPCITS->SetXTitle("1/mcp_{t}");
\r
196 fC1Pt2Resol1PtTPCITS->SetYTitle("(1/mcp_{t}-1/p_{t})/(1+1/mcp_{t})^2)");
\r
198 fCYResol1PtTPC = new TH2F("fCYResol1PtTPC","fCYResol1PtTPC",100, 0,10,200,-0.010,0.010);
\r
199 fCYResol1PtTPC->SetXTitle("1/mcpt");
\r
200 fCYResol1PtTPC->SetYTitle("#DeltaY");
\r
202 fCYResol1PtTPCITS = new TH2F("fCYResol1PtTPCITS","fCYResol1PtTPCITS",100, 0,10,200,-0.010,0.010);
\r
203 fCYResol1PtTPCITS->SetXTitle("1/mcpt");
\r
204 fCYResol1PtTPCITS->SetYTitle("#DeltaY");
\r
206 fCZResol1PtTPC = new TH2F("fCZResol1PtTPC","fCZResol1PtTPC",50, 0,10,200,-0.020,0.020);
\r
207 fCZResol1PtTPC->SetXTitle("1/mcpt");
\r
208 fCZResol1PtTPC->SetYTitle("#DeltaZ");
\r
210 fCZResol1PtTPCITS = new TH2F("fCZResol1PtTPCITS","fCZResol1PtTPCITS",50, 0,10,200,-0.020,0.020);
\r
211 fCZResol1PtTPCITS->SetXTitle("1/mcpt");
\r
212 fCZResol1PtTPCITS->SetYTitle("#DeltaZ");
\r
214 fCPhiResol1PtTPC = new TH2F("fCPhiResol1PtTPC","fCPhiResol1PtTPC",50, 0,10,200,-0.005,0.005);
\r
215 fCPhiResol1PtTPC->SetXTitle("1/mcpt");
\r
216 fCPhiResol1PtTPC->SetYTitle("#Delta#phi");
\r
218 fCPhiResol1PtTPCITS = new TH2F("fCPhiResol1PtTPCITS","fCPhiResol1PtTPCITS",50, 0,10,200,-0.005,0.005);
\r
219 fCPhiResol1PtTPCITS->SetXTitle("1/mcpt");
\r
220 fCPhiResol1PtTPCITS->SetYTitle("#Delta#phi");
\r
222 fCThetaResol1PtTPC = new TH2F("fCThetaResol1PtTPC","fCThetaResol1PtTPC",50, 0,10,200,-0.005,0.005);
\r
223 fCThetaResol1PtTPC->SetXTitle("1/mcpt");
\r
224 fCThetaResol1PtTPC->SetYTitle("#Delta#theta");
\r
226 fCThetaResol1PtTPCITS = new TH2F("fCThetaResol1PtTPCITS","fCThetaResol1PtTPCITS",50, 0,10,200,-0.005,0.005);
\r
227 fCThetaResol1PtTPCITS->SetXTitle("1/mcpt");
\r
228 fCThetaResol1PtTPCITS->SetYTitle("#Delta#theta");
\r
231 //_____________________________________________________________________________
\r
232 void AliComparisonRes::InitCuts()
\r
236 AliDebug(AliLog::kError, "ERROR: Cannot find AliMCInfoCuts object");
\r
238 AliDebug(AliLog::kError, "ERROR: Cannot find AliRecInfoCuts object");
\r
241 //_____________________________________________________________________________
\r
242 void AliComparisonRes::Process(AliMCInfo* infoMC, AliESDRecInfo *infoRC)
\r
244 // Fill resolution comparison information
\r
245 Float_t mcpt = infoMC->GetParticle().Pt();
\r
247 // distance to Prim. vertex
\r
248 const Double_t* dv = infoMC->GetVDist();
\r
250 Bool_t isPrim = TMath::Sqrt(dv[0]*dv[0] + dv[1]*dv[1])<fCutsMC->GetMaxR() && TMath::Abs(dv[2])<fCutsMC->GetMaxVz();
\r
252 // Check selection cuts
\r
253 if (fCutsMC->IsPdgParticle(TMath::Abs(infoMC->GetParticle().GetPdgCode())) == kFALSE) return;
\r
254 if (!isPrim) return;
\r
255 if (infoRC->GetStatus(1)==0) return;
\r
256 if (!infoRC->GetESDtrack()) return;
\r
257 if (infoRC->GetESDtrack()->GetTPCNcls()<fCutsRC->GetMinNClustersTPC()) return;
\r
259 // calculate and set prim. vertex
\r
260 fVertex->SetXv( infoMC->GetParticle().Vx() - dv[0] );
\r
261 fVertex->SetYv( infoMC->GetParticle().Vy() - dv[1] );
\r
262 fVertex->SetZv( infoMC->GetParticle().Vz() - dv[2] );
\r
264 Float_t deltaPt= (mcpt-infoRC->GetESDtrack()->Pt())/mcpt;
\r
265 Float_t pullPt= (1/mcpt-infoRC->GetESDtrack()->OneOverPt())/TMath::Sqrt(infoRC->GetESDtrack()->GetSigma1Pt2());
\r
268 fPtResolLPT->Fill(mcpt,deltaPt);
\r
269 fPtResolHPT->Fill(mcpt,deltaPt);
\r
270 fPtPullLPT->Fill(mcpt,pullPt);
\r
271 fPtPullHPT->Fill(mcpt,pullPt);
\r
274 //_____________________________________________________________________________
\r
275 void AliComparisonRes::ProcessConstrained(AliMCInfo* infoMC, AliESDRecInfo *infoRC)
\r
277 // Fill resolution comparison information (constarained parameters)
\r
279 AliExternalTrackParam *track = 0;
\r
280 Double_t kRadius = 3.0; // beam pipe radius
\r
281 Double_t kMaxStep = 5.0; // max step
\r
282 Double_t field = AliTracker::GetBz(); // nominal Bz field [kG]
\r
283 Double_t kMaxD = 123456.0; // max distance
\r
285 Int_t clusterITS[200];
\r
286 Double_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
\r
288 Float_t mcpt = infoMC->GetParticle().Pt();
\r
289 Float_t tantheta = TMath::Tan(infoMC->GetParticle().Theta()-TMath::Pi()*0.5);
\r
291 // distance to Prim. vertex
\r
292 const Double_t* dv = infoMC->GetVDist();
\r
293 Bool_t isPrim = TMath::Sqrt(dv[0]*dv[0] + dv[1]*dv[1])<fCutsMC->GetMaxR() && TMath::Abs(dv[2])<fCutsMC->GetMaxVz();
\r
295 // Check selection cuts
\r
296 if (fCutsMC->IsPdgParticle(TMath::Abs(infoMC->GetParticle().GetPdgCode())) == kFALSE) return;
\r
297 if (!isPrim) return;
\r
298 if (infoRC->GetStatus(1)!=3) return;
\r
299 if (!infoRC->GetESDtrack()) return;
\r
300 if (infoRC->GetESDtrack()->GetTPCNcls()<fCutsRC->GetMinNClustersTPC()) return;
\r
301 if (!infoRC->GetESDtrack()->GetConstrainedParam()) return;
\r
303 // calculate and set prim. vertex
\r
304 fVertex->SetXv( infoMC->GetParticle().Vx() - dv[0] );
\r
305 fVertex->SetYv( infoMC->GetParticle().Vy() - dv[1] );
\r
306 fVertex->SetZv( infoMC->GetParticle().Vz() - dv[2] );
\r
308 // constrained parameters resolution
\r
309 const AliExternalTrackParam * cparam = infoRC->GetESDtrack()->GetConstrainedParam();
\r
310 Float_t deltaCPt= (mcpt-cparam->Pt())/mcpt;
\r
311 Float_t pullCPt= (1/mcpt-cparam->OneOverPt())/
\r
312 TMath::Sqrt(cparam->GetSigma1Pt2());
\r
313 Float_t deltaPhi = TMath::ATan2(cparam->Py(),cparam->Px())-
\r
314 TMath::ATan2(infoMC->GetParticle().Py(),infoMC->GetParticle().Px());
\r
315 Float_t pullPhi = deltaPhi/TMath::Sqrt(cparam->GetSigmaSnp2());
\r
317 Float_t deltaTan = TMath::ATan2(cparam->Pz(),cparam->Pt())-TMath::ATan2(infoMC->GetParticle().Pz(),infoMC->GetParticle().Pt());
\r
318 Float_t pullTan = deltaPhi/TMath::Sqrt(cparam->GetSigmaSnp2());
\r
321 //Float_t delta1Pt2 = (1/mcpt-infoRC->GetESDtrack()->OneOverPt())/TMath::Power(1+1/mcpt,2));
\r
322 Float_t delta1Pt2 = (1/mcpt-cparam->OneOverPt())/TMath::Power(1+1/mcpt,2);
\r
324 Float_t deltaY1Pt = (infoMC->GetParticle().Vy()-cparam->GetY()) / (0.2+1/mcpt);
\r
325 Float_t deltaZ1Pt = (infoMC->GetParticle().Vz()-cparam->GetZ()) / (0.2+1/mcpt);
\r
326 Float_t deltaPhi1Pt = deltaPhi / (0.1+1/mcpt);
\r
327 Float_t deltaTheta1Pt = deltaTan / (0.1+1/mcpt);
\r
329 // calculate track parameters at vertex
\r
330 if (infoRC->GetESDtrack()->GetTPCInnerParam())
\r
332 if ((track = new AliExternalTrackParam(*infoRC->GetESDtrack()->GetTPCInnerParam())) != 0 )
\r
334 Bool_t bStatus = AliTracker::PropagateTrackTo(track,kRadius,infoMC->GetMass(),kMaxStep,kTRUE);
\r
335 Bool_t bDCAStatus = track->PropagateToDCA(fVertex,field,kMaxD,dca,cov);
\r
337 // Fill parametrisation histograms (only TPC track)
\r
338 if(bStatus && bDCAStatus)
\r
340 fC1Pt2Resol1PtTPC->Fill(1/mcpt,delta1Pt2);
\r
341 fCYResol1PtTPC->Fill(1/mcpt,deltaY1Pt);
\r
342 fCZResol1PtTPC->Fill(1/mcpt,deltaZ1Pt);
\r
343 fCPhiResol1PtTPC->Fill(1/mcpt,deltaPhi1Pt);
\r
344 fCThetaResol1PtTPC->Fill(1/mcpt,deltaTheta1Pt);
\r
350 // TPC and ITS (nb. of clusters >2) in the system
\r
351 if(infoRC->GetStatus(1)==3 && infoRC->GetESDtrack()->GetITSclusters(clusterITS)>2)
\r
353 fC1Pt2Resol1PtTPCITS->Fill(1/mcpt,delta1Pt2);
\r
354 fCYResol1PtTPCITS->Fill(1/mcpt,deltaY1Pt);
\r
355 fCZResol1PtTPCITS->Fill(1/mcpt,deltaZ1Pt);
\r
356 fCPhiResol1PtTPCITS->Fill(1/mcpt,deltaPhi1Pt);
\r
357 fCThetaResol1PtTPCITS->Fill(1/mcpt,deltaTheta1Pt);
\r
361 fCPtResolTan->Fill(tantheta,deltaCPt);
\r
362 fCPtPullTan->Fill(tantheta,pullCPt);
\r
363 fCPhiResolTan->Fill(tantheta,deltaPhi);
\r
364 fCPhiPullTan->Fill(tantheta,pullPhi);
\r
365 fCTanResolTan->Fill(tantheta,deltaTan);
\r
366 fCTanPullTan->Fill(tantheta,pullTan);
\r
369 //_____________________________________________________________________________
\r
370 void AliComparisonRes::Exec(AliMCInfo* infoMC, AliESDRecInfo *infoRC){
\r
372 // Process comparison information
\r
373 Process(infoMC,infoRC);
\r
374 ProcessConstrained(infoMC,infoRC);
\r
377 //_____________________________________________________________________________
\r
378 TH1F* AliComparisonRes::MakeResol(TH2F * his, Int_t integ, Bool_t type){
\r
379 // Create resolution histograms
\r
382 if (!gPad) new TCanvas;
\r
383 hisr = AliTreeDraw::CreateResHistoI(his,&hism,integ);
\r
384 if (type) return hism;
\r
389 //_____________________________________________________________________________
\r
390 void AliComparisonRes::Analyse(){
\r
391 // Analyse comparison information and store output histograms
\r
392 // in the "pictures_res.root" file
\r
394 AliComparisonRes * comp=this;
\r
397 TFile *fp = new TFile("pictures_res.root","recreate");
\r
400 TCanvas * c = new TCanvas("Phi resol Tan","Phi resol Tan");
\r
403 hiss = comp->MakeResol(comp->fCPtResolTan,1,0);
\r
404 hiss->SetXTitle("Tan(#theta)");
\r
405 hiss->SetYTitle("#sigmap_{t}/p_{t}");
\r
407 hiss->Write("CptResolTan");
\r
409 hiss = comp->MakeResol(comp->fCPhiResolTan,1,0);
\r
410 hiss->SetXTitle("Tan(#theta)");
\r
411 hiss->SetYTitle("#sigma#phi (rad)");
\r
413 hiss->Write("PhiResolTan");
\r
415 hiss = comp->MakeResol(comp->fCTanResolTan,1,0);
\r
416 hiss->SetXTitle("Tan(#theta)");
\r
417 hiss->SetYTitle("#sigma#theta (rad)");
\r
419 hiss->Write("ThetaResolTan");
\r
421 hiss = comp->MakeResol(comp->fCPtPullTan,1,0);
\r
422 hiss->SetXTitle("Tan(#theta)");
\r
423 hiss->SetYTitle("1/mcp_{t}-1/p_{t}/#Sigma(1/p_{t})");
\r
425 hiss->Write("CptPullTan");
\r
427 hiss = comp->MakeResol(comp->fC1Pt2Resol1PtTPC,1,0);
\r
428 hiss->SetXTitle("1/mcp_{t}");
\r
429 hiss->SetYTitle("1/mcp_{t}-1/p_{t}/(1+1/p_{t})^2");
\r
431 hiss->Write("Pt2Resol1PtTPC");
\r
432 fC1Pt2Resol1PtTPC->Write();
\r
434 hiss = comp->MakeResol(comp->fC1Pt2Resol1PtTPCITS,1,0);
\r
435 hiss->SetXTitle("1/mcp_{t}");
\r
436 hiss->SetYTitle("1/mcp_{t}-1/p_{t}/(1+1/p_{t})^2");
\r
438 hiss->Write("Pt2Resol1PtTPCITS");
\r
439 fC1Pt2Resol1PtTPCITS->Write();
\r
441 hiss = comp->MakeResol(comp->fCYResol1PtTPC,1,0);
\r
442 hiss->SetXTitle("1/mcp_{t}");
\r
443 hiss->SetYTitle("(mcy-y)/(0.2+1/mcp_{t})");
\r
445 hiss->Write("CYResol1PtTPC");
\r
446 fCYResol1PtTPC->Write();
\r
448 hiss = comp->MakeResol(comp->fCYResol1PtTPCITS,1,0);
\r
449 hiss->SetXTitle("1/mcp_{t}");
\r
450 hiss->SetYTitle("(mcy-y)/(0.2+1/mcp_{t})");
\r
452 hiss->Write("CYResol1PtTPCITS");
\r
453 fCYResol1PtTPCITS->Write();
\r
455 hiss = comp->MakeResol(comp->fCZResol1PtTPC,1,0);
\r
456 hiss->SetXTitle("1/mcp_{t}");
\r
457 hiss->SetYTitle("(mcz-z)/(0.2+1/mcp_{t})");
\r
459 hiss->Write("CZResol1PtTPC");
\r
460 fCZResol1PtTPC->Write();
\r
462 hiss = comp->MakeResol(comp->fCZResol1PtTPCITS,1,0);
\r
463 hiss->SetXTitle("1/mcp_{t}");
\r
464 hiss->SetYTitle("(mcz-z)/(0.2+1/mcp_{t})");
\r
466 hiss->Write("CZResol1PtTPCITS");
\r
467 fCZResol1PtTPCITS->Write();
\r
469 hiss = comp->MakeResol(comp->fCPhiResol1PtTPC,1,0);
\r
470 hiss->SetXTitle("1/mcp_{t}");
\r
471 hiss->SetYTitle("(mc#phi-#phi)/(0.1+1/mcp_{t})");
\r
473 hiss->Write("CPhiResol1PtTPC");
\r
474 fCPhiResol1PtTPC->Write();
\r
476 hiss = comp->MakeResol(comp->fCPhiResol1PtTPCITS,1,0);
\r
477 hiss->SetXTitle("1/mcp_{t}");
\r
478 hiss->SetYTitle("(mc#phi-#phi)/(0.1+1/mcp_{t})");
\r
480 hiss->Write("CPhiResol1PtTPCITS");
\r
481 fCPhiResol1PtTPCITS->Write();
\r
483 hiss = comp->MakeResol(comp->fCThetaResol1PtTPC,1,0);
\r
484 hiss->SetXTitle("1/mcp_{t}");
\r
485 hiss->SetYTitle("(mc#theta-#theta)/(0.1+1/mcp_{t})");
\r
487 hiss->Write("CThetaResol1PtTPC");
\r
488 fCThetaResol1PtTPC->Write();
\r
490 hiss = comp->MakeResol(comp->fCThetaResol1PtTPCITS,1,0);
\r
491 hiss->SetXTitle("1/mcp_{t}");
\r
492 hiss->SetYTitle("(mc#theta-#theta)/(0.1+1/mcp_{t})");
\r
494 hiss->Write("CThetaResol1PtTPCITS");
\r
495 fCThetaResol1PtTPCITS->Write();
\r
500 //_____________________________________________________________________________
\r
501 Long64_t AliComparisonRes::Merge(TCollection* list)
\r
503 // Merge list of objects (needed by PROOF)
\r
508 if (list->IsEmpty())
\r
511 TIterator* iter = list->MakeIterator();
\r
514 // collection of generated histograms
\r
516 while((obj = iter->Next()) != 0)
\r
518 AliComparisonRes* entry = dynamic_cast<AliComparisonRes*>(obj);
\r
519 if (entry == 0) continue;
\r
521 fPtResolLPT->Add(entry->fPtResolLPT);
\r
522 fPtResolHPT->Add(entry->fPtResolHPT);
\r
523 fPtPullLPT->Add(entry->fPtPullLPT);
\r
524 fPtPullHPT->Add(entry->fPtPullHPT);
\r
526 // Resolution histograms (constrained param)
\r
527 fCPhiResolTan->Add(entry->fCPhiResolTan);
\r
528 fCTanResolTan->Add(entry->fCTanResolTan);
\r
529 fCPtResolTan->Add(entry->fCPtResolTan);
\r
530 fCPhiPullTan->Add(entry->fCPhiPullTan);
\r
531 fCTanPullTan->Add(entry->fCTanPullTan);
\r
532 fCPtPullTan->Add(entry->fCPtPullTan);
\r
534 // Histograms for 1/pt parameterisation
\r
535 fC1Pt2Resol1PtTPC->Add(entry->fC1Pt2Resol1PtTPC);
\r
536 fCYResol1PtTPC->Add(entry->fCYResol1PtTPC);
\r
537 fCZResol1PtTPC->Add(entry->fCZResol1PtTPC);
\r
538 fCPhiResol1PtTPC->Add(entry->fCPhiResol1PtTPC);
\r
539 fCThetaResol1PtTPC->Add(entry->fCThetaResol1PtTPC);
\r
541 fC1Pt2Resol1PtTPCITS->Add(entry->fC1Pt2Resol1PtTPCITS);
\r
542 fCYResol1PtTPCITS->Add(entry->fCYResol1PtTPCITS);
\r
543 fCZResol1PtTPCITS->Add(entry->fCZResol1PtTPCITS);
\r
544 fCPhiResol1PtTPCITS->Add(entry->fCPhiResol1PtTPCITS);
\r
545 fCThetaResol1PtTPCITS->Add(entry->fCThetaResol1PtTPCITS);
\r