3 void trigger_pp(char *outfile="results.root")
6 TNtuple *ntuppel = new TNtuple("ntuppel","","pt:eta:xvert:yvert:zvert:nhits:px:py:pz:event");
9 for(int event=0; event<1; event++)
12 sprintf(fname,"/prog/alice/data/Rawdata/1_patch/pp/pileups/recon_%d/tracks.raw",event);
13 //sprintf(fname,"/prog/alice/data/Rawdata/1_patch/pp/recon_%d/tracks.raw",event);
16 AliL3TrackArray *tracks = new AliL3TrackArray();
17 AliL3FileHandler *file = new AliL3FileHandler();
18 file->SetBinaryInput(fname);
19 file->Binary2TrackArray(tracks);
20 file->CloseBinaryInput();
23 sprintf(fname,"/prog/alice/data/Rawdata/1_patch/pp/pileups/recon_%d/",event);
24 //sprintf(fname,"/prog/alice/data/Rawdata/1_patch/pp/recon_%d/",event);
30 AliL3Fitter *fitter = new AliL3Fitter(&vertex);
31 fitter->LoadClusters(fname);
34 AliL3TrackArray *ftracks = new AliL3TrackArray();
36 for(int i=0; i<tracks->GetNTracks(); i++)
38 track = (AliL3Track*)tracks->GetCheckedTrack(i);
40 track->CalculateHelix();
41 //cout<<"Pt "<<track->GetPt()<<" eta "<<track->GetPseudoRapidity()<<" Nhits "<<track->GetNHits()<<endl;
42 //cout<<"Before second fit; pt "<<track->GetPt()<<" firstpoint "<<track->GetFirstPointX()<<" "<<track->GetFirstPointY()<<" "<<track->GetFirstPointZ()<<endl;
43 fitter->FitHelix(track);//refit the tracks
44 track->CalculateHelix();
45 track->GetClosestPoint(&vertex,xc,yc,zc);
46 meas[0]=track->GetPt();
47 meas[1]=track->GetPseudoRapidity();
51 meas[5]=track->GetNHits();
52 meas[6]=track->GetPx();
53 meas[7]=track->GetPy();
54 meas[8]=track->GetPz();
58 if(fabs(track->GetPseudoRapidity())>0.9) continue;
59 if(track->GetNHits() < 100) continue;
60 if(track->GetPt()<0.2) continue;
61 impact = sqrt(xc*xc+yc*yc+zc*zc);
62 if(fabs(zc)>3) continue;
63 ftracks->AddLast(track);
64 cout<<"-------------------------------------"<<endl;
65 cout<<"Number of hits "<<track->GetNHits()<<endl;
66 cout<<"Transversal impact "<<sqrt(xc*xc+yc*yc)<<endl;
67 cout<<"Longitudinal impact "<<zc<<endl;
68 cout<<"Total impact "<<sqrt(xc*xc+yc*yc+zc*zc)<<endl;
69 cout<<"xc "<<xc<<" yc "<<yc<<" zc "<<zc<<endl;
71 //cout<<"After second fit; pt "<<track->GetPt()<<" firstpoint "<<track->GetFirstPointX()<<" "<<track->GetFirstPointY()<<" "<<track->GetFirstPointZ()<<endl;
72 cout<<"pt "<<track->GetPt()<<" eta "<<track->GetPseudoRapidity()<<endl;
76 cout<<endl<<"There was "<<ntracks<<" accepted tracks, out of total "<<tracks->GetNTracks()<<" found tracks"<<endl;
78 display(ftracks,fname);
84 TFile *rfile = TFile::Open(outfile,"RECREATE");
91 void display(AliL3TrackArray *tracks,char *path)
94 d = new AliL3Display(slice);
95 d->Setup("tracks.raw",path);
97 //d->DisplayClusters();
105 gROOT->LoadMacro("XFunct.C");
106 //double x[6]={1,2,4,6,8,10};
107 //double y[6]={0.873684,1.01379,1.17751,1.28614,1.31638,1.32022};
109 double x[6]={0.8,1.6,3.2,4.8,6.4,8};
110 double y[6]={0.497006,0.88024,1.19162,1.23952,1.39521,1.40719};//->sigmas
113 TGraph *gr = new TGraph(6,x,y);
114 c1 = new TCanvas("c1","",2);
115 SetCanvasOptions(c1);
116 gr->SetMarkerStyle(20);
119 gr->GetHistogram()->SetXTitle("Z_{CUT} [x #sigma_{Z}]");
120 gr->GetHistogram()->SetYTitle("Efficiency");
121 SetTGraphOptions(gr);
124 double geteff(char *infile,char *singlefile,double cut)
126 gROOT->LoadMacro("XFunct.C");
127 gStyle->SetStatColor(10);
128 gStyle->SetOptFit(1);
129 Int_t pileups[25],single[25];
130 file = TFile::Open(infile,"READ");
133 for(int i=0; i<25; i++)
135 sprintf(name,"zvert < %f && zvert > %f && pt>0.2 && nhits>100 && eta>-0.9 && eta<0.9 && event==%d",cut,-1.*cut,i);
136 ntuppel->Draw(">>eventlist",name);
137 int entries = eventlist->GetN();
140 //eventlist->Print("all");
143 file = TFile::Open(singlefile,"read");
144 for(int i=0; i<25; i++)
146 sprintf(name,"zvert < %f && zvert > %f && pt>0.2 && nhits>100 && eta>-0.9 && eta<0.9 && event==%d",3,-3,i);
147 ntuppel->Draw(">>eventlist",name);
148 int entries = eventlist->GetN();
152 double totsingle=0,totpileup=0;
153 for(int i=0; i<25; i++)
155 totsingle += single[i];
156 totpileup += pileups[i];
158 double toteff = totpileup/totsingle;
159 cout<<"Total eff "<<toteff<<endl;
165 void plot(char *infile)
167 gROOT->LoadMacro("XFunct.C");
168 gStyle->SetStatColor(10);
169 gStyle->SetOptFit(1);
170 file = TFile::Open(infile,"READ");
172 histo = new TH1F("histo","histo",20,-3,3);
174 vhist = new TH1F("vhist","",20,-3,3);
175 SetTH1Options(vhist);
179 for(int ev=0; ev<25; ev++)
181 sprintf(fname,"pt>0.2 && nhits>100 && eta>-0.9 && eta<0.9 && event==%d",ev);
182 ntuppel->Draw("zvert>>histo",fname,"goff");
183 float mean = histo->GetMean();
186 sprintf(fname2,"(zvert-(%f))>>+vhist",mean);
188 ntuppel->Draw(fname2,fname,"goff");
191 c1 = new TCanvas("c1","",2);
192 SetCanvasOptions(c1);
193 vhist->SetXTitle("Z* [cm]");
196 //ntuppel->Draw("zvert>>histo","pt>0.2");
197 TF1 *f1 = new TF1("f1","gaus",-3,3);
198 histo->Fit("f1","R");
204 enum tagprimary {kPrimaryCharged=0x4000};
205 void LoadEvent(Int_t event=0)
207 //Load the generated particles
209 gROOT->LoadMacro("$(ALICE_ROOT)/macros/loadlibs.C");
211 TFile *rootfile = TFile::Open("/prog/alice/data/pro/25event_pp.root","READ");
212 gAlice = (AliRun*)rootfile->Get("gAlice");
214 // TNtuple *ntup = new TNtuple(
216 Int_t nparticles = gAlice->GetEvent(event);
217 Int_t nprim = FindPrimaries(nparticles,0.,0.,0.);
218 cout<<"Number of primaries "<<nprim<<endl;
220 for(Int_t i=0; i<nparticles; i++)
222 TParticle *part = gAlice->Particle(i);
223 if(!part->TestBit(kPrimaryCharged)) continue;
224 if(fabs(part->Eta())>0.9) continue;
225 cout<<part->GetName()<<" pt "<<part->Pt()<<" eta "<<part->Eta()<<" xvert "<<part->Vx()<<" yvert "<<part->Vy()<<" zvert "<<part->Vz()<<endl;
228 cout<<endl<<"Number of primary tracks in the detector: "<<co<<endl;
234 Int_t FindPrimaries(Int_t nparticles, Double_t xori, Double_t yori, Double_t zori)
236 //Define primary particles in a pp-event. Code taken from offline.
240 Double_t vertcut = 0.001; // cut on the vertex position
241 Double_t decacut = 3.; // cut if the part. decays close to the vert.
242 Double_t timecut = 0.;
244 TList *listprim = new TList();
245 listprim->SetOwner(kFALSE);
249 for(Int_t iprim = 0; iprim<nparticles; iprim++){ //loop on tracks
251 TParticle * part = gAlice->Particle(iprim);
252 char *xxx=strstr(part->GetName(),"XXX");
255 TParticlePDG *ppdg = part->GetPDG();
256 if(TMath::Abs(ppdg->Charge())!=3)continue; // only charged (no quarks)
258 Double_t dist=TMath::Sqrt((part->Vx()-xori)*(part->Vx()-xori)+(part->Vy()-yori)*(part->Vy()-yori)+(part->Vz()-zori)*(part->Vz()-zori));
259 if(dist>vertcut)continue; // cut on the vertex
261 if(part->T()>timecut)continue;
263 Double_t ptot=TMath::Sqrt(part->Px()*part->Px()+part->Py()*part->Py()+part->Pz()*part->Pz());
264 if(ptot==(TMath::Abs(part->Pz())))continue; // no beam particles
266 Bool_t prmch = kTRUE; // candidate primary track
267 Int_t fidau=part->GetFirstDaughter(); // cut on daughters
271 lasdau=part->GetLastDaughter();
275 for(Int_t j=fidau;j<=lasdau;j++){
276 TParticle *dau=gAlice->Particle(j);
277 Double_t distd=TMath::Sqrt((dau->Vx()-xori)*(dau->Vx()-xori)+(dau->Vy()-yori)*(dau->Vy()-yori)+(dau->Vz()-zori)*(dau->Vz()-zori));
278 Double_t rad = TMath::Sqrt((dau->Vx()-xori)*(dau->Vx()-xori)+(dau->Vy()-yori)*(dau->Vy()-yori));
279 if(distd<decacut)prmch=kFALSE; // eliminate if the decay is near the vertex
280 //if(rad < 20)prmch=kFALSE;
286 part->SetBit(kPrimaryCharged);
287 listprim->Add(part); // list of primary particles (before cleanup)
293 for(Int_t iprim = 0; iprim<nparticles; iprim++){ // cleanup loop
294 TParticle * part = gAlice->Particle(iprim);
295 if(part->TestBit(kPrimaryCharged)){
296 Int_t mothind=part->GetFirstMother();
297 if(mothind<0)continue;
298 TParticle *moth=gAlice->Particle(mothind);
299 TParticle *mothb=(TParticle*)listprim->FindObject(moth);
301 listprim->Remove(moth);
302 moth->ResetBit(kPrimaryCharged);
308 listprim->Clear("nodelete");
310 return nprch1-nprch2;