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;
62 // Get pointers to ALL Alice detectors and Hits containers
63 AliFMD *FMD = (AliFMD*) gAlice->GetDetector("FMD");
64 AliITS *ITS = (AliITS*) gAlice->GetDetector("ITS");
65 AliMUON *MUON = (AliMUON*) gAlice->GetDetector("MUON");
66 AliPHOS *PHOS = (AliPHOS*) gAlice->GetDetector("PHOS");
67 AliPMD *PMD = (AliPMD*) gAlice->GetDetector("PMD");
68 AliRICH *RICH = (AliRICH*) gAlice->GetDetector("RICH");
69 AliSTART *START = (AliSTART*) gAlice->GetDetector("START");
70 AliTOF *TOF = (AliTOF*) gAlice->GetDetector("TOF");
71 AliTPC *TPC = (AliTPC*) gAlice->GetDetector("TPC");
72 AliTPC *TPC = (AliTPC*) gAlice->GetDetector("TPC");
73 AliTRD *TRD = (AliTRD*) gAlice->GetDetector("TRD");
74 AliCASTOR *CASTOR = (AliCASTOR*) gAlice->GetDetector("CASTOR");
75 AliZDC *ZDC = (AliZDC*) gAlice->GetDetector("ZDC");
77 // Get pointer to the particles
78 // TClonesArray *Particles = gAlice->Particles();
82 if(FMD) TH1F *hFMD = new TH1F("hFMD" ,"Hit Radius",100,0.,100.);
83 if(ITS) TH1F *hITS = new TH1F("hITS" ,"Ionization",100,0.,3.e-3);
84 if(MUON) TH1F *hMUON = new TH1F("hMUON" ,"Hit Radius",100,0.,500.);
85 if(PHOS) TH1F *hPHOS = new TH1F("hPHOS" ,"Energy Dep.",100,0.,0.5);
86 if(PMD) TH1F *hPMD = new TH1F("hPMD" ,"Energy Dep.",100,0.,1.e+5);
87 if(RICH) TH1F *hRICH = new TH1F("hRICH" ,"Energy loss",100,0.,1.e-5);
88 if(START) TH1F *hSTART = new TH1F("hSTART" ,"Time of Flight",100,0.,10.);
89 if(TOF) TH1F *hTOF = new TH1F("hTOF" ,"Time of Flight",100,0.,1.e-5);
90 if(TPC) TH1F *hTPC = new TH1F("hTPC" ,"Charge",100,0.,70.2);
91 if(TRD) TH1F *hTRD = new TH1F("hTRD" ,"Charge",100,0.,10.);
92 if(CASTOR)TH1F *hCASTOR= new TH1F("hCASTOR","Hit Radius",100,0.,10.);
93 if(ZDC) TH1F *hZDC = new TH1F("hZDC" ,"Energy",100,0.,5.);
94 // TH1F *hTPAR = new TH1F("hTPAR" ,"?",6,1,7);
95 Int_t track,ntracks = gAlice->TreeH()->GetEntries();
96 // Start loop on tracks in the hits containers
97 for(track=0; track<ntracks;track++){
100 gAlice->TreeH()->GetEvent(track);
102 for(fmdHit=(AliFMDhit*)FMD->FirstHit(-1);fmdHit;
103 fmdHit=(AliFMDhit*)FMD->NextHit()){
104 hFMD->Fill(TMath::Hypot(fmdHit->X(),fmdHit->Y()));
108 for(itsHit=(AliITShit*)ITS->FirstHit(-1);itsHit;
109 itsHit=(AliITShit*)ITS->NextHit()){
110 if(itsHit->GetIonization()>0.0){//only after a step in the ITS
111 hITS->Fill(itsHit->GetIonization());
116 for(muonHit=(AliMUONHit*)MUON->FirstHit(-1);muonHit;
117 muonHit=(AliMUONHit*)MUON->NextHit()){
118 hMUON->Fill(TMath::Hypot(muonHit->X(),muonHit->Y()));
122 for(phosHit=(AliPHOSHit*)PHOS->FirstHit(-1);phosHit;
123 phosHit=(AliPHOSHit*)PHOS->NextHit()){
124 hPHOS->Fill(phosHit->GetEnergy());
128 for(pmdHit=(AliPMDhit*)PMD->FirstHit(-1);pmdHit;
129 pmdHit=(AliPMDhit*)PMD->NextHit()){
130 hPMD->Fill(pmdHit->GetEnergy());
134 for(richHit=(AliRICHHit*)RICH->FirstHit(-1);richHit;
135 richHit=(AliRICHHit*)RICH->NextHit()){
136 hRICH->Fill(richHit->fEloss);
140 for(startHit=(AliSTARThit*)START->FirstHit(-1);startHit;
141 startHit=(AliSTARThit*)START->NextHit()){
142 hSTART->Fill(startHit->fTime);
143 } // end for startHit
146 for(tofHit=(AliTOFhit*)TOF->FirstHit(-1);tofHit;
147 tofHit=(AliTOFhit*)TOF->NextHit()){
148 hTOF->Fill(tofHit->GetTof());
153 for(trdHit=(AliTRDhit*)TRD->FirstHit(-1);trdHit;
154 trdHit=(AliTRDhit*)TRD->NextHit()) {
155 hTRD->Fill((Float_t)(trdHit->GetCharge()));
159 for(castorHit=(AliCASTORhit*)CASTOR->FirstHit(-1);castorHit;
160 castorHit=(AliCASTORhit*)CASTOR->NextHit()) {
161 hCASTOR->Fill(TMath::Hypot(castorHit->X(),castorHit->Y()));
165 for(zdcHit=(AliZDCHit*)ZDC->FirstHit(-1);zdcHit;
166 zdcHit=(AliZDCHit*)ZDC->NextHit()){
167 hZDC->Fill(zdcHit->GetEnergy());
171 for(tpcHit=(AliTPChit*)TPC->FirstHit(-1);tpcHit;
172 tpcHit=(AliTPChit*)TPC->NextHit()) {
173 hTPC->Fill((Float_t)(tpcHit->fQ));
179 //Create a canvas, set the view range, show histograms
180 TCanvas *c0 = new TCanvas("c0","Alice Detectors",400,10,600,700);
181 if(opt=="Logy")c0->SetLogy();
183 hFMD->SetFillColor(42);
185 c0->Print("analHitsFMD.ps");
188 hITS->SetFillColor(42);
190 c0->SaveAs("analHitsITS.ps");
193 hMUON->SetFillColor(42);
195 c0->SaveAs("analHitsMUON.ps");
198 hPHOS->SetFillColor(42);
200 c0->SaveAs("analHitsPHOS.ps");
203 hPMD->SetFillColor(42);
205 c0->SaveAs("analHitsPMD.ps");
208 hRICH->SetFillColor(42);
210 c0->SaveAs("analHitsRICH.ps");
213 hSTART->SetFillColor(42);
215 c0->SaveAs("analHitsSTART.ps");
218 hTOF->SetFillColor(42);
220 c0->SaveAs("analHitsTOF.ps");
223 hTPC->SetFillColor(42);
225 c0->SaveAs("analHitsTPC.ps");
228 hTRD->SetFillColor(42);
230 c0->SaveAs("analHitsTRD.ps");
233 hCASTOR->SetFillColor(42);
235 c0->SaveAs("analHitsCASTOR.ps");
238 hZDC->SetFillColor(42);
240 c0->SaveAs("analHitsZDC.ps");
247 if(MUON) delete hMUON;
248 if(PHOS) delete hPHOS;
250 if(RICH) delete hRICH;
251 if(START) delete hSTART;
255 if(CASTOR) delete hCASTOR;