1 /**************************************************************************
2 * Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
18 //-----------------------------------------------------------------------------
19 // Analysis task to compute muon/dimuon kinematic distributions
20 // The output is a list of histograms.
21 // The macro class can run on AOD or in the train with the ESD filter.
24 //-----------------------------------------------------------------------------
26 //#ifndef ALIANALYSISTASKMUONDISTRIBUTIONS_CXX
27 //#define ALIANALYSISTASKMUONDISTRIBUTIONS_CXX
36 #include "AliAnalysisTaskMuonDistributions.h"
37 #include "AliAnalysisTaskSE.h"
38 #include "AliAnalysisManager.h"
39 #include "AliESDEvent.h"
41 #include "AliVEvent.h"
42 #include "AliMCEventHandler.h"
43 #include "AliInputEventHandler.h"
44 #include "AliMCEvent.h"
47 #include "AliHeader.h"
48 #include "AliESDHeader.h"
50 #include "TParticle.h"
51 #include "TLorentzVector.h"
52 #include "AliESDMuonTrack.h"
53 #include "AliESDInputHandler.h"
54 #include "AliAODEvent.h"
55 #include "AliAODHeader.h"
56 #include "AliAODHandler.h"
57 #include "AliAODInputHandler.h"
59 ClassImp(AliAnalysisTaskMuonDistributions)
61 //__________________________________________________________________________
62 AliAnalysisTaskMuonDistributions::AliAnalysisTaskMuonDistributions() :
64 fInvMassFitLimitMin(2.),
65 fInvMassFitLimitMax(5.),
68 fPsiPFitLimitMin(3.3),
71 fBckFitLimitMax(2.85),
72 fInvariantMassFit(kFALSE),
77 //___________________________________________________________________________
78 AliAnalysisTaskMuonDistributions::AliAnalysisTaskMuonDistributions(const Char_t* name) :
79 AliAnalysisTaskSE(name),
81 fInvMassFitLimitMin(2.),
82 fInvMassFitLimitMax(5.),
85 fPsiPFitLimitMin(3.3),
88 fBckFitLimitMax(2.85),
89 fInvariantMassFit(kFALSE),
94 // Constructor. Initialization of Inputs and Outputs
96 Info("AliAnalysisTaskMuonDistributions","Calling Constructor");
98 DefineOutput(1,TList::Class());
102 //___________________________________________________________________________
103 AliAnalysisTaskMuonDistributions& AliAnalysisTaskMuonDistributions::operator=(const AliAnalysisTaskMuonDistributions& c)
106 // Assignment operator
109 AliAnalysisTaskSE::operator=(c) ;
114 //___________________________________________________________________________
115 AliAnalysisTaskMuonDistributions::AliAnalysisTaskMuonDistributions(const AliAnalysisTaskMuonDistributions& c) :
116 AliAnalysisTaskSE(c),
117 fBeamEnergy(c.fBeamEnergy),
118 fInvMassFitLimitMin(c.fInvMassFitLimitMin),
119 fInvMassFitLimitMax(c.fInvMassFitLimitMax),
120 fPsiFitLimitMin(c.fPsiFitLimitMin),
121 fPsiFitLimitMax(c.fPsiFitLimitMax),
122 fPsiPFitLimitMin(c.fPsiPFitLimitMin),
123 fPsiPFitLimitMax(c.fPsiPFitLimitMax),
124 fBckFitLimitMin(c.fBckFitLimitMin),
125 fBckFitLimitMax(c.fBckFitLimitMax),
126 fInvariantMassFit(c.fInvariantMassFit),
127 fkAnalysisType(c.fkAnalysisType),
135 //___________________________________________________________________________
136 AliAnalysisTaskMuonDistributions::~AliAnalysisTaskMuonDistributions() {
140 Info("~AliAnalysisTaskMuonDistributions","Calling Destructor");
148 //___________________________________________________________________________
149 void AliAnalysisTaskMuonDistributions::UserCreateOutputObjects(){
151 // output objects creation
153 fOutput = new TList();
158 TH1D *hNumberMuonTracks = new TH1D("hNumberMuonTracks","hNumberMuonTracks;N_{#mu tracks}",10,0.,10.);
162 TH1D *hMassDimu = new TH1D("hMassDimu","hMassDimu;M_{#mu#mu} (GeV/c^{2})",180,0,9.);
163 TH1D *hPtDimu = new TH1D("hPtDimu","hPtDimu;p_{T} (GeV/c)",100,0,20);
164 TH1D *hRapidityDimu = new TH1D("hRapidityDimu","hRapidityDimu;y",100,-5,-2);
165 TH1D *hCosThetaCSDimu = new TH1D("hCosThetaCSDimu","hCosThetaCSDimu;cos#theta_{CS}",100,-1.,1.);
166 TH1D *hCosThetaHEDimu = new TH1D("hCosThetaHEDimu","hCosThetaHEDimu;cos#theta_{HE}",100,-1.,1.);
170 TH1D *hP = new TH1D("hP","hP;p (GeV/c)",100,0,500);
171 TH1D *hPt = new TH1D("hPt","hPt;p_{T} (GeV/c)",100,0,20);
172 TH1D *hRapidity = new TH1D("hRapidity","hRapidity;y",100,-5,-2);
174 fOutput->Add(hNumberMuonTracks);
175 fOutput->Add(hMassDimu);
176 fOutput->Add(hPtDimu);
177 fOutput->Add(hRapidityDimu);
178 fOutput->Add(hCosThetaCSDimu);
179 fOutput->Add(hCosThetaHEDimu);
182 fOutput->Add(hRapidity);
186 //_________________________________________________
187 void AliAnalysisTaskMuonDistributions::UserExec(Option_t *)
190 // Execute analysis for current event
192 AliESDEvent *esd=0x0;
193 AliAODEvent *aod=0x0;
195 if(strcmp(fkAnalysisType,"ESD")==0){
196 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*>
197 (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
199 AliError("Cannot get input event handler");
202 esd = esdH->GetEvent();
203 } else if(strcmp(fkAnalysisType,"AOD")==0){
204 aod = dynamic_cast<AliAODEvent*> (InputEvent());
206 AliError("Cannot get AOD event");
212 if(strcmp(fkAnalysisType,"ESD")==0) ntracks=esd->GetNumberOfMuonTracks();
213 else if(strcmp(fkAnalysisType,"AOD")==0) ntracks=aod->GetNumberOfTracks();
216 for (Int_t j = 0; j<ntracks; j++) {
217 Float_t pxmu1=-999; Float_t pymu1=-999; Float_t pzmu1=-999; Float_t ptmu1=-999; Float_t pmu1=-999;
218 Float_t emu1=-999; Float_t rapiditymu1=-999; Float_t chargemu1=-999;
219 if(strcmp(fkAnalysisType,"ESD")==0){
220 AliESDMuonTrack* mu1 = new AliESDMuonTrack(*(esd->GetMuonTrack(j)));
221 if (!mu1->ContainTrackerData()) continue;
222 chargemu1 = mu1->Charge();
229 rapiditymu1 = Rapidity(emu1,pzmu1);
230 } else if(strcmp(fkAnalysisType,"AOD")==0){
231 AliAODTrack *mu1 = dynamic_cast<AliAODTrack*>(aod->GetTrack(j));
232 if(!mu1) AliFatal("Not a standard AOD");
233 if(!mu1->IsMuonTrack()) continue;
234 chargemu1 = mu1->Charge();
241 rapiditymu1 = Rapidity(emu1,pzmu1);
243 ((TH1D*)(fOutput->FindObject("hP")))->Fill(pmu1);
244 ((TH1D*)(fOutput->FindObject("hPt")))->Fill(ptmu1);
245 ((TH1D*)(fOutput->FindObject("hRapidity")))->Fill(rapiditymu1);
248 for (Int_t jj = 0; jj<ntracks; jj++) {
249 Float_t pxmu2=-999; Float_t pymu2=-999; Float_t pzmu2=-999;
250 Float_t emu2=-999;Float_t chargemu2=-999;
251 if(strcmp(fkAnalysisType,"ESD")==0){
252 AliESDMuonTrack* mu2 = new AliESDMuonTrack(*(esd->GetMuonTrack(jj)));
253 if (!mu2->ContainTrackerData()) continue;
254 chargemu2 = mu2->Charge();
259 } else if(strcmp(fkAnalysisType,"AOD")==0){
260 AliAODTrack *mu2 = dynamic_cast<AliAODTrack*>(aod->GetTrack(jj));
261 if(!mu2) AliFatal("Not a standard AOD");
262 if(!mu2->IsMuonTrack()) continue;
263 chargemu2 = mu2->Charge();
270 Float_t ptdimu = TMath::Sqrt((pxmu1+pxmu2)*(pxmu1+pxmu2)+(pymu1+pymu2)*(pymu1+pymu2));
271 Float_t massdimu = InvMass(emu1,pxmu1,pymu1,pzmu1,emu2,pxmu2,pymu2,pzmu2);
272 Float_t rapiditydimu = Rapidity((emu1+emu2),(pzmu1+pzmu2));
273 Double_t costhetaCSdimu = CostCS((Double_t) pxmu1,(Double_t) pymu1,(Double_t)pzmu1,(Double_t) emu1,(Double_t)chargemu1,(Double_t) pxmu2,(Double_t) pymu2,(Double_t)pzmu2,(Double_t) emu2);
274 Double_t costhetaHEdimu = CostHE((Double_t) pxmu1,(Double_t) pymu1,(Double_t)pzmu1,(Double_t) emu1,(Double_t)chargemu1,(Double_t) pxmu2,(Double_t) pymu2,(Double_t)pzmu2,(Double_t) emu2);
275 ((TH1D*)(fOutput->FindObject("hMassDimu")))->Fill(massdimu);
276 ((TH1D*)(fOutput->FindObject("hPtDimu")))->Fill(ptdimu);
277 ((TH1D*)(fOutput->FindObject("hRapidityDimu")))->Fill(rapiditydimu);
278 ((TH1D*)(fOutput->FindObject("hCosThetaCSDimu")))->Fill(costhetaCSdimu);
279 ((TH1D*)(fOutput->FindObject("hCosThetaHEDimu")))->Fill(costhetaHEdimu);
286 ((TH1D*)(fOutput->FindObject("hNumberMuonTracks")))->Fill(nmuontracks);
292 //________________________________________________________________________
293 void AliAnalysisTaskMuonDistributions::Terminate(Option_t *)
298 gStyle->SetCanvasColor(10);
299 gStyle->SetFrameFillColor(10);
303 printf("Using beam Energy=%f \n",fBeamEnergy);
305 fOutput = static_cast<TList*> (GetOutputData(1));
306 TH1D *hNumberMuonTracks = static_cast<TH1D*> (fOutput->FindObject("hNumberMuonTracks"));
307 TH1D *hMassDimu = static_cast<TH1D*> (fOutput->FindObject("hMassDimu"));
308 TH1D *hPtDimu = static_cast<TH1D*> (fOutput->FindObject("hPtDimu"));
309 TH1D *hRapidityDimu = static_cast<TH1D*> (fOutput->FindObject("hRapidityDimu"));
310 TH1D *hCosThetaCSDimu = static_cast<TH1D*> (fOutput->FindObject("hCosThetaCSDimu"));
311 TH1D *hCosThetaHEDimu = static_cast<TH1D*> (fOutput->FindObject("hCosThetaHEDimu"));
312 TH1D *hP = static_cast<TH1D*> (fOutput->FindObject("hP"));
313 TH1D *hPt = static_cast<TH1D*> (fOutput->FindObject("hPt"));
314 TH1D *hRapidity = static_cast<TH1D*> (fOutput->FindObject("hRapidity"));
317 TCanvas *c0_MuonDistributions = new TCanvas("c0_MuonDistributions","Plots",xmin,ymin,600,600);
318 c0_MuonDistributions->Divide(2,2);
319 c0_MuonDistributions->cd(1);
320 hNumberMuonTracks->SetFillColor(2);
321 hNumberMuonTracks->Draw();
324 TCanvas *c1_MuonDistributions = new TCanvas("c1_MuonDistributions","Muon kinematic distributions Plots",xmin,ymin,600,600);
325 c1_MuonDistributions->Divide(2,2);
326 c1_MuonDistributions->cd(1);
330 c1_MuonDistributions->cd(2);
332 hPt->SetLineColor(4);
334 c1_MuonDistributions->cd(3);
335 hRapidity->SetLineColor(4);
339 TCanvas *c2_MuonDistributions = new TCanvas("c2_MuonDistributions","Dimuon kinematic distributions Plots",xmin,ymin,600,600);
340 c2_MuonDistributions->Divide(2,2);
341 c2_MuonDistributions->cd(1);
343 hPtDimu->SetLineColor(2);
345 c2_MuonDistributions->cd(2);
346 hRapidityDimu->SetLineColor(2);
347 hRapidityDimu->Draw();
348 c2_MuonDistributions->cd(3);
349 hCosThetaCSDimu->SetLineColor(2);
350 hCosThetaCSDimu->Draw();
351 c2_MuonDistributions->cd(4);
352 hCosThetaHEDimu->SetLineColor(2);
353 hCosThetaHEDimu->Draw();
356 TCanvas *c3_MuonDistributions = new TCanvas("c3_MuonDistributions","Invariant Mass Plots",xmin,ymin,600,600);
359 if(fInvariantMassFit && hMassDimu->GetEntries()>100) FitInvMass(hMassDimu);
360 c3_MuonDistributions->Update();
363 //________________________________________________________________________
364 Float_t AliAnalysisTaskMuonDistributions::InvMass(Float_t e1, Float_t px1, Float_t py1, Float_t pz1,
365 Float_t e2, Float_t px2, Float_t py2, Float_t pz2) const
368 // invariant mass calculation
370 Float_t imassrec = TMath::Sqrt((e1+e2)*(e1+e2)-((px1+px2)*(px1+px2)+
371 (py1+py2)*(py1+py2)+(pz1+pz2)*(pz1+pz2)));
374 //________________________________________________________________________
375 Float_t AliAnalysisTaskMuonDistributions::Rapidity(Float_t e, Float_t pz) const
378 // calculate rapidity
381 if(TMath::Abs(e-pz)>1e-7){
382 rap = 0.5*TMath::Log((e+pz)/(e-pz));
389 //________________________________________________________________________
390 Double_t AliAnalysisTaskMuonDistributions::CostCS(Double_t px1, Double_t py1, Double_t pz1, Double_t e1,
391 Double_t charge1, Double_t px2, Double_t py2, Double_t pz2, Double_t e2)
394 // costCS calculation
396 TLorentzVector pMu1CM, pMu2CM, pProjCM, pTargCM, pDimuCM; // In the CM. frame
397 TLorentzVector pMu1Dimu, pMu2Dimu, pProjDimu, pTargDimu; // In the dimuon rest frame
398 TVector3 beta,zaxisCS;
399 Double_t mp=0.93827231;
401 // --- Fill the Lorentz vector for projectile and target in the CM frame
403 pProjCM.SetPxPyPzE(0.,0.,-fBeamEnergy,TMath::Sqrt(fBeamEnergy*fBeamEnergy+mp*mp));
404 pTargCM.SetPxPyPzE(0.,0.,fBeamEnergy,TMath::Sqrt(fBeamEnergy*fBeamEnergy+mp*mp));
406 // --- Get the muons parameters in the CM frame
408 pMu1CM.SetPxPyPzE(px1,py1,pz1,e1);
409 pMu2CM.SetPxPyPzE(px2,py2,pz2,e2);
411 // --- Obtain the dimuon parameters in the CM frame
413 pDimuCM=pMu1CM+pMu2CM;
415 // --- Translate the dimuon parameters in the dimuon rest frame
417 beta=(-1./pDimuCM.E())*pDimuCM.Vect();
422 pMu1Dimu.Boost(beta);
423 pMu2Dimu.Boost(beta);
424 pProjDimu.Boost(beta);
425 pTargDimu.Boost(beta);
427 // --- Determine the z axis for the CS angle
429 zaxisCS=(((pProjDimu.Vect()).Unit())-((pTargDimu.Vect()).Unit())).Unit();
431 // --- Determine the CS angle (angle between mu+ and the z axis defined above)
434 if(charge1>0) {cost = zaxisCS.Dot((pMu1Dimu.Vect()).Unit());}
435 else {cost = zaxisCS.Dot((pMu2Dimu.Vect()).Unit());}
439 //________________________________________________________________________
440 Double_t AliAnalysisTaskMuonDistributions::CostHE(Double_t px1, Double_t py1, Double_t pz1, Double_t e1,
441 Double_t charge1, Double_t px2, Double_t py2, Double_t pz2, Double_t e2)
444 // costHE calculation
446 TLorentzVector pMu1CM, pMu2CM, pDimuCM; // In the CM frame
447 TLorentzVector pMu1Dimu, pMu2Dimu; // In the dimuon rest frame
448 TVector3 beta,zaxisCS;
450 // --- Get the muons parameters in the CM frame
452 pMu1CM.SetPxPyPzE(px1,py1,pz1,e1);
453 pMu2CM.SetPxPyPzE(px2,py2,pz2,e2);
455 // --- Obtain the dimuon parameters in the CM frame
457 pDimuCM=pMu1CM+pMu2CM;
459 // --- Translate the muon parameters in the dimuon rest frame
461 beta=(-1./pDimuCM.E())*pDimuCM.Vect();
464 pMu1Dimu.Boost(beta);
465 pMu2Dimu.Boost(beta);
467 // --- Determine the z axis for the calculation of the polarization angle (i.e. the direction of the dimuon in the CM system)
470 zaxis=(pDimuCM.Vect()).Unit();
472 // --- Calculation of the polarization angle (angle between mu+ and the z axis defined above)
474 if(charge1>0) {cost = zaxis.Dot((pMu1Dimu.Vect()).Unit());}
475 else {cost = zaxis.Dot((pMu2Dimu.Vect()).Unit());}
479 //________________________________________________________________________
480 void AliAnalysisTaskMuonDistributions::FitInvMass(TH1D *histo)
483 // Fit to the Invariant Mass Spectrum
485 TF1 *gaupsi = new TF1("gaupsi","gaus",fPsiFitLimitMin,fPsiFitLimitMax);
486 TF1 *gaupsip = new TF1("gaupsip","gaus",fPsiPFitLimitMin,fPsiPFitLimitMax);
487 TF1 *ex = new TF1("ex","expo",fBckFitLimitMin,fBckFitLimitMax);
488 TF1 *tot = new TF1("mtot","gaus(0)+expo(3)+gaus(5)",fInvMassFitLimitMin,fInvMassFitLimitMax);
490 Double_t binWidth= histo->GetBinWidth(1);
491 gaupsi->SetLineColor(kGreen);
492 gaupsi->SetLineWidth(2);
493 histo->Fit(gaupsi,"Rl0");
494 ex->SetLineColor(kBlue);
496 histo->Fit(ex,"Rl+");
497 gaupsip->SetLineColor(kAzure-9);
498 gaupsip->SetLineWidth(2);
499 gaupsip->SetParLimits(1,3.6,3.75);
500 gaupsip->SetParLimits(2,0.8*gaupsi->GetParameter(2),1.2*gaupsi->GetParameter(2));
501 histo->Fit(gaupsip,"Rl0+");
502 gaupsi->GetParameters(&par[0]);
503 ex->GetParameters(&par[3]);
504 gaupsip->GetParameters(&par[5]);
505 tot->SetParameters(par);
506 tot->SetLineColor(2);
507 tot->SetLineWidth(2);
508 tot->SetParLimits(6,3.6,3.75); //limit for the psi(2S) parameters
509 tot->SetParLimits(7,0.8*gaupsi->GetParameter(2),1.2*gaupsi->GetParameter(2)); //limit for the psi(2S) parameters
510 histo->Fit(tot,"Rl+");
512 Double_t chi2 = tot->GetChisquare();
513 Double_t ndf = tot->GetNDF();
515 Float_t meanPsi= tot->GetParameter(1);
516 Float_t sigPsi= tot->GetParameter(2)*1000.;
517 Double_t nPsiFit = TMath::Sqrt(2*3.1415)*tot->GetParameter(0)*tot->GetParameter(2)/binWidth;
518 TF1 *psifix = new TF1("psifix","gaus",2.,5.);
519 psifix->SetParameter(0,tot->GetParameter(0));
520 psifix->SetParameter(1,tot->GetParameter(1));
521 psifix->SetParameter(2,tot->GetParameter(2));
522 psifix->SetLineColor(kGreen);
523 psifix->Draw("same");
524 Double_t nPsi2933 = psifix->Integral(2.9,3.3)/binWidth;
526 TF1 *exfix = new TF1("exfix","expo",2.,5.);
527 exfix->SetParameter(0,tot->GetParameter(3));
528 exfix->SetParameter(1,tot->GetParameter(4));
529 Double_t nBck = exfix->Integral(2.9,3.3)/binWidth;
531 Float_t meanPsiP= tot->GetParameter(6);
532 Float_t sigPsiP= tot->GetParameter(7)*1000.;
533 Double_t nPsiPFit = TMath::Sqrt(2*3.1415)*tot->GetParameter(5)*tot->GetParameter(7)/binWidth;
534 TF1 *psipfix = new TF1("psipfix","gaus",3.,5.);
535 psipfix->SetParameter(0,tot->GetParameter(5));
536 psipfix->SetParameter(1,tot->GetParameter(6));
537 psipfix->SetParameter(2,tot->GetParameter(7));
538 psipfix->SetLineColor(kAzure-9);
539 psipfix->Draw("same");
541 printf("\n\n****************************************************************************\n");
543 if(nPsiFit<0) nPsiFit = 0;
544 snprintf(psitext,100,"N. J/#psi = %10.0f",nPsiFit);
545 printf("\nN. J/psi = %10.0f\n",nPsiFit);
546 TLatex *psilatex = new TLatex(4.,0.85*histo->GetMaximum(),psitext);
547 psilatex->SetTextColor(2);
548 psilatex->SetTextSize(0.03);
549 psilatex->SetTextAlign(2);
553 snprintf(psi2text,100,"J/#psi m=%4.3f GeV #sigma= %4.2f MeV",meanPsi,sigPsi);
554 printf("J/psi m= %4.3f GeV sigma= %4.2f MeV\n",meanPsi,sigPsi);
555 TLatex *psi2latex = new TLatex(4.,0.425*histo->GetMaximum(),psi2text);
556 psi2latex->SetTextColor(2);
557 psi2latex->SetTextSize(0.03);
558 psi2latex->SetTextAlign(2);
562 snprintf(sbtext,100,"S/B (2.9-3.3)= %4.2f ",nPsi2933/nBck);
563 printf("S/B (2.9-3.3)= %4.2f\n",nPsi2933/nBck);
564 TLatex *sblatex = new TLatex(4.,0.212*histo->GetMaximum(),sbtext);
565 sblatex->SetTextColor(2);
566 sblatex->SetTextSize(0.03);
567 sblatex->SetTextAlign(2);
571 if(nPsiPFit<0) nPsiPFit = 0;
572 snprintf(psiptext,100,"N. #psi(2S) = %10.0f",nPsiPFit);
573 printf("\npsi(2S) = %10.0f\n",nPsiPFit);
574 TLatex *psiplatex = new TLatex(4.,0.106*histo->GetMaximum(),psiptext);
575 psiplatex->SetTextColor(2);
576 psiplatex->SetTextSize(0.03);
577 psiplatex->SetTextAlign(2);
581 snprintf(psip2text,100,"#psi(2S) m=%4.3f GeV #sigma= %4.2f MeV",meanPsiP,sigPsiP);
582 printf("psi(2S) m= %4.3f GeV sigma= %4.2f MeV\n",meanPsiP,sigPsiP);
583 TLatex *psip2latex = new TLatex(4.,0.053*histo->GetMaximum(),psip2text);
584 psip2latex->SetTextColor(2);
585 psip2latex->SetTextSize(0.03);
586 psip2latex->SetTextAlign(2);
590 snprintf(chi2text,100,"#chi^2/ndf = %4.2f ",chi2/ndf);
591 printf("chi^2/ndf = %4.2f\n",chi2/ndf);
592 TLatex *chi2latex = new TLatex(4.,0.026*histo->GetMaximum(),chi2text);
593 chi2latex->SetTextColor(2);
594 chi2latex->SetTextSize(0.03);
595 chi2latex->SetTextAlign(2);
597 printf("\n****************************************************************************\n");