+void AliTPCtrackerParam::AnalyzeResolutions(Int_t pdg) {
+//-----------------------------------------------------------------------------
+// This function computes the resolutions:
+// - dy
+// - dC
+// - dPt/Pt
+// as a function of Pt
+// Input file is CovMatrix_AllEvts.root.
+//-----------------------------------------------------------------------------
+
+ /*
+ // create a chain with compared tracks
+ TChain *cmptrkchain = new ("cmptrktree");
+ cmptrkchain.Add("CovMatrix_AllEvts.root");
+ //cmptrkchain.Add("CovMatrix_AllEvts_1.root");
+ //cmptrkchain.Add("CovMatrix_AllEvts_2.root");
+ //cmptrkchain.Add("CovMatrix_AllEvts_3.root");
+ */
+
+
+ TFile *infile = TFile::Open("CovMatrix_AllEvts.root");
+ TTree *cmptrktree = (TTree*)infile->Get("cmptrktree");
+
+ COMPTRACK cmptrk;
+ cmptrktree->SetBranchAddress("comptracks",&cmptrk);
+ Int_t entries = (Int_t)cmptrktree->GetEntries();
+ cerr<<" Number of entries: "<<entries<<endl;
+
+
+ Int_t bin = 0;
+
+ InitializeKineGrid("DB");
+ InitializeKineGrid("eff");
+
+ SetParticle(pdg);
+
+ const Int_t knPtBins = fEff->GetPointsPt();
+ cerr<<"knPtBins = "<<knPtBins<<endl;
+ Double_t *dP0 = new Double_t[knPtBins];
+ Double_t *dP4 = new Double_t[knPtBins];
+ Double_t *dPtToPt = new Double_t[knPtBins];
+ Double_t *pt = new Double_t[knPtBins];
+ fEff->GetArrayPt(pt);
+
+
+ TH1F *hDumP0 = new TH1F("nameP0","dy",100,-0.3,0.3);
+ TH1F *hDumP4 = new TH1F("nameP4","dC",100,-0.0005,0.0005);
+ TH1F *hDumPt = new TH1F("namePt","dp_{T}/p_{T}",100,-0.5,0.5);
+
+ TF1 *g = new TF1("g","gaus");
+
+ // create histograms for the all the bins
+ TH1F *hP0=NULL;
+ TH1F *hP4=NULL;
+ TH1F *hPt=NULL;
+
+ hP0 = new TH1F[knPtBins];
+ hP4 = new TH1F[knPtBins];
+ hPt = new TH1F[knPtBins];
+
+ for(Int_t i=0; i<knPtBins; i++) {
+ hP0[i] = *hDumP0;
+ hP4[i] = *hDumP4;
+ hPt[i] = *hDumPt;
+ }
+
+ // loop on chain entries
+ for(Int_t i=0; i<entries; i++) {
+ cmptrktree->GetEvent(i);
+ if(TMath::Abs(cmptrk.pdg)!=pdg) continue;
+ // fill histograms with the residuals
+ bin = (Int_t)fDBgrid->GetBin(cmptrk.pt,cmptrk.eta)/fDBgrid->GetBinsEta();
+ //cerr<<" pt "<<cmptrk.pt<<" eta "<<cmptrk.eta<<" bin "<<bin<<endl;
+ hP0[bin].Fill(cmptrk.dP0);
+ hP4[bin].Fill(cmptrk.dP4);
+ hPt[bin].Fill(cmptrk.dpt/cmptrk.pt);
+ } // loop on chain entries
+
+
+ TCanvas *cP0res = new TCanvas("cP0res","cP0res",0,0,1200,700);
+ cP0res->Divide(5,2);
+ TCanvas *cP4res = new TCanvas("cP4res","cP4res",0,0,1200,700);
+ cP4res->Divide(5,2);
+ TCanvas *cPtres = new TCanvas("cPtres","cPtres",0,0,1200,700);
+ cPtres->Divide(5,2);
+
+ // Draw histograms
+ for(Int_t i=0; i<knPtBins; i++) {
+ cP0res->cd(i+1); hP0[i].Draw();
+ cP4res->cd(i+1); hP4[i].Draw();
+ cPtres->cd(i+1); hPt[i].Draw();
+ }
+
+
+ // compute the sigma of the distributions
+ for(Int_t i=0; i<knPtBins; i++) {
+ if(hP0[i].GetEntries()>10) {
+ g->SetRange(-3.*hP0[i].GetRMS(),3.*hP0[i].GetRMS());
+ hP0[i].Fit("g","R,Q,N");
+ dP0[i] = g->GetParameter(2);
+ } else dP0[i] = 0.;
+ if(hP4[i].GetEntries()>10) {
+ g->SetRange(-3.*hP4[i].GetRMS(),3.*hP4[i].GetRMS());
+ hP4[i].Fit("g","R,Q,N");
+ dP4[i] = g->GetParameter(2);
+ } else dP4[i] = 0.;
+ if(hPt[i].GetEntries()>10) {
+ g->SetRange(-3.*hPt[i].GetRMS(),3.*hPt[i].GetRMS());
+ hPt[i].Fit("g","R,Q,N");
+ dPtToPt[i] = 100.*g->GetParameter(2);
+ } else dPtToPt[i] = 0.;
+ } // loop on bins
+
+
+ TGraph *grdP0 = new TGraph(knPtBins,pt,dP0);
+ TGraph *grdP4 = new TGraph(knPtBins,pt,dP4);
+ TGraph *grdPtToPt = new TGraph(knPtBins,pt,dPtToPt);
+
+ grdP0->SetMarkerStyle(20); grdP0->SetMarkerColor(2); grdP0->SetMarkerSize(1.5);
+ grdP4->SetMarkerStyle(21); grdP4->SetMarkerColor(3); grdP4->SetMarkerSize(1.5);
+ grdPtToPt->SetMarkerStyle(22); grdPtToPt->SetMarkerColor(4); grdPtToPt->SetMarkerSize(1.5);
+
+ // Plot Results
+ gStyle->SetOptStat(0);
+ TCanvas *c1 = new TCanvas("c1","dP0",0,0,900,700);
+ c1->SetLogx();
+ c1->SetGridx();
+ c1->SetGridy();
+
+ TH2F *frame1 = new TH2F("frame1","y resolution VS p_{T} in TPC",2,0.1,30,2,0,0.1);
+ frame1->SetXTitle("p_{T} [GeV/c]");
+ frame1->SetYTitle("#sigma(y) [cm]");
+ frame1->Draw();
+ grdP0->Draw("P");
+
+
+ TCanvas *c2 = new TCanvas("c2","dP4",0,0,900,700);
+ c2->SetLogx();
+ c2->SetGridx();
+ c2->SetGridy();
+
+ TH2F *frame2 = new TH2F("frame2","C resolution VS p_{T} in TPC",2,0.1,30,2,0,0.0001);
+ frame2->SetXTitle("p_{T} [GeV/c]");
+ frame2->SetYTitle("#sigma(C) [1/cm]");
+ frame2->Draw();
+ grdP4->Draw("P");
+
+ TCanvas *c3 = new TCanvas("c3","dPtToPt",0,0,900,700);
+ c3->SetLogx();
+ c3->SetLogy();
+ c3->SetGridx();
+ c3->SetGridy();
+
+ TH2F *frame3 = new TH2F("frame3","Relative p_{T} resolution VS p_{T} in TPC",2,0.1,30,2,0.1,30.);
+ frame3->SetXTitle("p_{T} [GeV/c]");
+ frame3->SetYTitle("dp_{T}/p_{T} (%)");
+ frame3->Draw();
+ grdPtToPt->Draw("P");
+
+
+ delete [] dP0;
+ delete [] dP4;
+ delete [] dPtToPt;
+ delete [] pt;
+
+
+ delete [] hP0;
+ delete [] hP4;
+ delete [] hPt;
+
+ return;
+}
+//-----------------------------------------------------------------------------
+void AliTPCtrackerParam::BuildTrack(AliTPCseedGeant *s,Int_t ch) {