1 void analHits (const char *filename="galice.root",Int_t evNumber=0, char *opt="Liny"){
2 /////////////////////////////////////////////////////////////////////////
3 // This macro is a small example of a ROOT macro
4 // illustrating how to read the output of GALICE
5 // and fill some histograms.
7 // Root > .L analHits.C //this loads the macro in memory
8 // Root > analHits(); //by default process first event
9 // Root > analHits("galice2.root",2); //process third event from
13 <img src="picts/analHits.gif">
16 /////////////////////////////////////////////////////////////////////////
22 // Dynamically link some shared libs
23 if(gClassTable->GetID("AliRun") < 0) {
24 gROOT->LoadMacro("loadlibs.C");
28 // Connect the Root Galice file containing Geometry, Kine and Hits
29 TFile *file = (TFile*)gROOT->GetListOfFiles()->FindObject(filename);
30 if(!file) file = new TFile(filename);
32 // Get AliRun object from file or create it if not on file
34 gAlice = (AliRun*)file->Get("gAlice");
35 if(gAlice) printf("AliRun object found on file\n");
36 if(!gAlice) gAlice = new AliRun("gAlice","Alice test program");
39 // Set event pointer to this event
40 Int_t nparticles = gAlice->GetEvent(evNumber);
42 cout << "No particles found for event " << evNumber;
43 cout << " in file " << filename << endl;
45 } // end if nparticles <=0
47 // Pointer to specific detector hits.
54 AliSTARThit *startHit;
57 AliTPCTrackHits *tpc2Hit;
59 AliCASTORhit *castorHit;
61 AliEMCALHit *emcalHit;
63 // Get pointers to ALL Alice detectors and Hits containers
64 AliFMD *FMD = (AliFMD*) gAlice->GetDetector("FMD");
65 AliITS *ITS = (AliITS*) gAlice->GetDetector("ITS");
66 AliMUON *MUON = (AliMUON*) gAlice->GetDetector("MUON");
67 AliPHOS *PHOS = (AliPHOS*) gAlice->GetDetector("PHOS");
68 AliPMD *PMD = (AliPMD*) gAlice->GetDetector("PMD");
69 AliRICH *RICH = (AliRICH*) gAlice->GetDetector("RICH");
70 AliSTART *START = (AliSTART*) gAlice->GetDetector("START");
71 AliTOF *TOF = (AliTOF*) gAlice->GetDetector("TOF");
72 AliTPC *TPC = (AliTPC*) gAlice->GetDetector("TPC");
73 AliTPC *TPC = (AliTPC*) gAlice->GetDetector("TPC");
74 AliTRD *TRD = (AliTRD*) gAlice->GetDetector("TRD");
75 AliCASTOR *CASTOR = (AliCASTOR*) gAlice->GetDetector("CASTOR");
76 AliZDC *ZDC = (AliZDC*) gAlice->GetDetector("ZDC");
77 AliEMCAL *EMCAL = (AliEMCAL*) gAlice->GetDetector("EMCAL");
79 // Get pointer to the particles
80 // TClonesArray *Particles = gAlice->Particles();
84 if(FMD) TH1F *hFMD = new TH1F("hFMD" ,"Hit Radius",100,0.,100.);
85 if(ITS) TH1F *hITS = new TH1F("hITS" ,"Ionization",100,0.,3.e-3);
86 if(MUON) TH1F *hMUON = new TH1F("hMUON" ,"Hit Radius",100,0.,500.);
87 if(PHOS) TH1F *hPHOS = new TH1F("hPHOS" ,"Energy Dep.",100,0.,0.5);
88 if(PMD) TH1F *hPMD = new TH1F("hPMD" ,"Energy Dep.",100,0.,1.e+5);
89 if(RICH) TH1F *hRICH = new TH1F("hRICH" ,"Energy loss",100,0.,1.e-5);
90 if(START) TH1F *hSTART = new TH1F("hSTART" ,"Time of Flight",100,0.,10.);
91 if(TOF) TH1F *hTOF = new TH1F("hTOF" ,"Time of Flight",100,0.,1.e-5);
92 if(TPC) TH1F *hTPC = new TH1F("hTPC" ,"Charge",100,0.,70.2);
93 if(TRD) TH1F *hTRD = new TH1F("hTRD" ,"Charge",100,0.,10.);
94 if(CASTOR)TH1F *hCASTOR= new TH1F("hCASTOR","Hit Radius",100,0.,10.);
95 if(ZDC) TH1F *hZDC = new TH1F("hZDC" ,"Energy",100,0.,5.);
96 if(EMCAL) TH1F *hEMCAL = new TH1F("hEMCAL" ,"Energy",100,0.,2.);
97 // TH1F *hTPAR = new TH1F("hTPAR" ,"?",6,1,7);
98 Int_t track,ntracks = gAlice->TreeH()->GetEntries();
99 // Start loop on tracks in the hits containers
100 for(track=0; track<ntracks;track++){
103 gAlice->TreeH()->GetEvent(track);
105 for(fmdHit=(AliFMDhit*)FMD->FirstHit(-1);fmdHit;
106 fmdHit=(AliFMDhit*)FMD->NextHit()){
107 hFMD->Fill(TMath::Hypot(fmdHit->X(),fmdHit->Y()));
111 for(itsHit=(AliITShit*)ITS->FirstHit(-1);itsHit;
112 itsHit=(AliITShit*)ITS->NextHit()){
113 if(itsHit->GetIonization()>0.0){//only after a step in the ITS
114 hITS->Fill(itsHit->GetIonization());
119 for(muonHit=(AliMUONHit*)MUON->FirstHit(-1);muonHit;
120 muonHit=(AliMUONHit*)MUON->NextHit()){
121 hMUON->Fill(TMath::Hypot(muonHit->X(),muonHit->Y()));
125 for(phosHit=(AliPHOSHit*)PHOS->FirstHit(-1);phosHit;
126 phosHit=(AliPHOSHit*)PHOS->NextHit()){
127 hPHOS->Fill(phosHit->GetEnergy());
131 for(pmdHit=(AliPMDhit*)PMD->FirstHit(-1);pmdHit;
132 pmdHit=(AliPMDhit*)PMD->NextHit()){
133 hPMD->Fill(pmdHit->GetEnergy());
137 for(richHit=(AliRICHHit*)RICH->FirstHit(-1);richHit;
138 richHit=(AliRICHHit*)RICH->NextHit()){
139 hRICH->Fill(richHit->fEloss);
143 for(startHit=(AliSTARThit*)START->FirstHit(-1);startHit;
144 startHit=(AliSTARThit*)START->NextHit()){
145 hSTART->Fill(startHit->fTime);
146 } // end for startHit
149 for(tofHit=(AliTOFhit*)TOF->FirstHit(-1);tofHit;
150 tofHit=(AliTOFhit*)TOF->NextHit()){
151 hTOF->Fill(tofHit->GetTof());
156 for(trdHit=(AliTRDhit*)TRD->FirstHit(-1);trdHit;
157 trdHit=(AliTRDhit*)TRD->NextHit()) {
158 hTRD->Fill((Float_t)(trdHit->GetCharge()));
162 for(castorHit=(AliCASTORhit*)CASTOR->FirstHit(-1);castorHit;
163 castorHit=(AliCASTORhit*)CASTOR->NextHit()) {
164 hCASTOR->Fill(TMath::Hypot(castorHit->X(),castorHit->Y()));
168 for(zdcHit=(AliZDCHit*)ZDC->FirstHit(-1);zdcHit;
169 zdcHit=(AliZDCHit*)ZDC->NextHit()){
170 hZDC->Fill(zdcHit->GetEnergy());
174 for(tpcHit=(AliTPChit*)TPC->FirstHit(-1);tpcHit;
175 tpcHit=(AliTPChit*)TPC->NextHit()) {
176 hTPC->Fill((Float_t)(tpcHit->fQ));
180 for(emcalHit=(AliEMCALHit*)EMCAL->FirstHit(-1);emcalHit;
181 emcalHit=(AliEMCALHit*)EMCAL->NextHit()) {
182 hEMCAL->Fill((Float_t)(emcalHit->GetEnergy()));
188 //Create a canvas, set the view range, show histograms
189 TCanvas *c0 = new TCanvas("c0","Alice Detectors",400,10,600,700);
190 if(opt=="Logy")c0->SetLogy();
192 hFMD->SetFillColor(42);
194 c0->Print("analHitsFMD.ps");
197 hITS->SetFillColor(42);
199 c0->SaveAs("analHitsITS.ps");
202 hMUON->SetFillColor(42);
204 c0->SaveAs("analHitsMUON.ps");
207 hPHOS->SetFillColor(42);
209 c0->SaveAs("analHitsPHOS.ps");
212 hPMD->SetFillColor(42);
214 c0->SaveAs("analHitsPMD.ps");
217 hRICH->SetFillColor(42);
219 c0->SaveAs("analHitsRICH.ps");
222 hSTART->SetFillColor(42);
224 c0->SaveAs("analHitsSTART.ps");
227 hTOF->SetFillColor(42);
229 c0->SaveAs("analHitsTOF.ps");
232 hTPC->SetFillColor(42);
234 c0->SaveAs("analHitsTPC.ps");
237 hTRD->SetFillColor(42);
239 c0->SaveAs("analHitsTRD.ps");
242 hCASTOR->SetFillColor(42);
244 c0->SaveAs("analHitsCASTOR.ps");
247 hZDC->SetFillColor(42);
249 c0->SaveAs("analHitsZDC.ps");
252 hEMCAL->SetFillColor(42);
254 c0->SaveAs("analHitsEMCAL.ps");
261 if(MUON) delete hMUON;
262 if(PHOS) delete hPHOS;
264 if(RICH) delete hRICH;
265 if(START) delete hSTART;
269 if(CASTOR) delete hCASTOR;