2 // Process ESD tracks -
3 // Extract TPC tracks - write them to tree
8 AnalyzeESDtracks(567); // process tracks
9 // Tracks are written to the file "TPCtracks.root"
10 // Now yo can analyze it
11 TFile fesd("AliESDs.root");
12 TTree * treeE = (TTree*)fesd.Get("esdTree");
13 TFile f("TPCtracks.root")
14 TTree * tree =(TTree*)f.Get("Tracks");
15 AliComparisonDraw comp;
23 .L AnalyzeESDtracks.C+
26 //AnalyzeESDtracks(567);
29 TFile fesd("AliESDs.root");
30 TTree * treeE = (TTree*)fesd.Get("esdTree");
31 TFile f("TPCtracks.root")
32 TTree * tree =(TTree*)f.Get("Tracks");
33 AliComparisonDraw comp;
36 TFile fs("TPCsignal.root");
37 TTree *treeB =(TTree*)fs.Get("SignalB");
38 TTree *treeN =(TTree*)fs.Get("SignalN");
39 TTree *treeS =(TTree*)fs.Get("Signal");
40 TTree *treef =(TTree*)fs.Get("Fit");
43 FitSignals(treeB,"Max-Median>100&&RMS06<2.5")
44 TFile ffit("FitSignal.root");
45 TTree * treeF = (TTree*)ffit->Get("Fit");
48 TChain chaincl("TreeR","TreeR")
49 chaincl.Add("TPC.RecPoints.root/Event0/TreeR")
50 chaincl.Add("TPC.RecPoints1.root/Event1/TreeR")
51 chaincl.Add("TPC.RecPoints2.root/Event2/TreeR")
52 chaincl.Add("TPC.RecPoints3.root/Event3/TreeR")
63 #include "TTreeStream.h"
64 #include "TEventList.h"
73 #include "AliESDfriend.h"
74 #include "AliESDtrack.h"
75 #include "AliTracker.h"
76 #include "AliTPCseed.h"
77 #include "AliTPCclusterMI.h"
78 #include "TTreeStream.h"
81 #include "AliSignalProcesor.h"
85 void FitSignals(TTree * treeB, TCut cut="Max-Median>150&&RMS06<2&&abs(Median-Mean09)<0.5");
88 void AnalyzeESDtracks(Int_t run){
91 TTreeSRedirector * pcstream = new TTreeSRedirector("TPCtracks.root");
92 TTreeSRedirector &cstream = *pcstream;
94 // dummy magnetic field
95 AliMagF mag("aaa","aaa",1,1,10);
96 AliTracker::SetFieldMap(&mag,kTRUE);
97 TFile f("AliESDs.root");
98 TTree * tree =(TTree*)f.Get("esdTree");
100 tree->SetBranchAddress("ESD",&esd);
102 tree->AddFriend("esdFriendTree","AliESDfriends.root");
103 tree->SetBranchAddress("ESDfriend",&evf);
105 Int_t nevents = tree->GetEntries();
106 TClonesArray *clusters = new TClonesArray("AliTPCclusterMI",160);
107 for (Int_t irow=0; irow<160; irow++){
108 new ((*clusters)[irow]) AliTPCclusterMI; // iitial dummy clusters
111 for (Int_t ievent=0; ievent<nevents; ievent++){
112 tree->GetEntry(ievent);
115 esd->SetESDfriend(evf); //Attach the friend to the ESD
116 for (Int_t itrack =0; itrack<esd->GetNumberOfTracks(); itrack++){
118 if (esd->GetTrack(itrack)->GetFriendTrack()==0) continue;
119 AliESDtrack * etrack = esd->GetTrack(itrack);
120 AliESDfriendTrack * ftrack = (AliESDfriendTrack *)esd->GetTrack(itrack)->GetFriendTrack();
121 AliTPCseed * seed = (AliTPCseed*)(ftrack->GetCalibObject(0));
123 for (Int_t irow=0; irow<160; irow++){
124 if (seed->GetClusterFast(irow)){
125 AliTPCclusterMI * cl = new ((*clusters)[irow]) AliTPCclusterMI(*(seed->GetClusterFast(irow)));
126 cl->SetLabel(itrack,0);
129 AliTPCclusterMI * cl = (AliTPCclusterMI*)clusters->At(irow);
130 cl->SetX(0); cl->SetY(0); cl->SetZ(0); cl->SetQ(0); cl->SetLabel(-1,0);
133 Float_t dEdx = seed->GetdEdx();
134 Float_t dEdxI = seed->CookdEdx(0.05,0.6,0,77);
135 Float_t dEdxO = seed->CookdEdx(0.05,0.6,78,155);
136 Int_t ncl = seed->GetNumberOfClusters();
154 TFile fs("TPCsignal.root");
155 TTree *treeB =(TTree*)fs.Get("SignalB");
156 // FitSignals(treeB,"Max-Median>150&&RMS06<2.5");
160 void FitSignals(TTree * treeB, TCut cut){
161 AliSignalProcesor proc;
162 TF1 * f1 = proc.GetAsymGauss();
163 TTreeSRedirector cstream("FitSignal.root");
164 TFile *f = cstream.GetFile();
167 sprintf(lname,"Fit%s", cut.GetTitle());
168 TEventList *list = new TEventList(lname,lname);
169 sprintf(lname,">>Fit%s", cut.GetTitle());
170 treeB->Draw(lname,cut);
171 treeB->SetEventList(list);
172 for (Int_t ievent=0; ievent<list->GetN(); ievent++){
174 sprintf(ename,"Fit%d", ievent);
175 Double_t nsample = treeB->Draw("Graph.fY-Mean09:Graph.fX","","",1,ievent);
176 Double_t * signal = treeB->GetV1();
177 Double_t * time = treeB->GetV2();
180 for (Int_t ipos = 0; ipos<nsample; ipos++){
181 if (signal[ipos]>max){
187 Int_t first = TMath::Max(maxpos-10,0.);
188 Int_t last = TMath::Min(maxpos+60, nsample);
191 TH1F his(ename,ename,last-first,first,last);
192 for (Int_t ipos=0; ipos<last-first; ipos++){
193 his.SetBinContent(ipos+1,signal[ipos+first]);
195 treeB->Draw("Sector:Row:Pad","","",1,ievent);
196 Double_t sector = treeB->GetV1()[0];
197 Double_t row = treeB->GetV2()[0];
198 Double_t pad = treeB->GetV3()[0];
199 // TGraph graph(last-first,&time[first],&signal[first]);
200 f1->SetParameters(0.75*max,maxpos,1.1,0.8,0.25,0.2);
201 // TH1F * his = (TH1F*)graph.GetHistogram();
208 for (Int_t ipar=0; ipar<6; ipar++) params[ipar] = f1->GetParameters()[ipar];
209 Double_t chi2 = TFitter::GetFitter()->Chisquare(6,params);
211 cov.SetMatrixArray(TFitter::GetFitter()->GetCovarianceMatrix());
218 for (Int_t ipos=0; ipos<last-first; ipos++){
219 x0[ipos] = signal[ipos+first];
221 proc.TailCancelationALTRO1(x0,x1,0.85*0.339,0.09,last-first);
222 proc.TailCancelationALTRO1(x1,x2,0.85,0.789,last-first);
224 sprintf(ename,"Cancel1_%d", ievent);
225 TH1F his1(ename,ename,last-first,first,last);
226 for (Int_t ipos=0; ipos<last-first; ipos++){
227 his1.SetBinContent(ipos+1,x1[ipos]);
230 sprintf(ename,"Cancel2_%d", ievent);
231 TH1F his2(ename,ename,last-first,first,last);
232 for (Int_t ipos=0; ipos<last-first; ipos++){
233 his2.SetBinContent(ipos+1,x1[ipos]);
235 f1->SetParameters(0.75*max,maxpos,1.1,0.8,0.25,0.2);
239 for (Int_t ipar=0; ipar<6; ipar++) params2[ipar] = f1->GetParameters()[ipar];
240 Double_t chi22 = TFitter::GetFitter()->Chisquare(6,params2);
242 cov2.SetMatrixArray(TFitter::GetFitter()->GetCovarianceMatrix());
244 TGraph gr0(last-first, &time[first],x0);
245 TGraph gr1(last-first, &time[first],x1);
246 TGraph gr2(last-first, &time[first],x2);
282 TChain *MakeChainCL(Int_t first, Int_t last){
283 TChain *chaincl = new TChain("TreeR","TreeR");
286 for (Int_t i=first;i<last; i++){
287 if (i>0) sprintf(fname,"TPC.RecPoints%d.root/Event%d/TreeR",i,i);
288 if (i==0) sprintf(fname,"TPC.RecPoints.root/Event%d/TreeR",i);
294 TTree* GetTree(Int_t ievent){
297 if (ievent>0) sprintf(fname,"TPC.RecPoints%d.root",ievent);
298 if (ievent==0) sprintf(fname,"TPC.RecPoints.root");
299 sprintf(tname,"Event%d/TreeR",ievent);
300 TFile * f = new TFile(fname);
301 TTree * tree = (TTree*)f->Get(tname);