1 void RICHtest (Int_t evNumber1=0,Int_t evNumber2=0)
3 /////////////////////////////////////////////////////////////////////////
4 // This macro is a small example of a ROOT macro
5 // illustrating how to read the output of GALICE
6 // and do some analysis.
8 /////////////////////////////////////////////////////////////////////////
10 // Dynamically link some shared libs
12 if (gClassTable->GetID("AliRun") < 0) {
13 gROOT->LoadMacro("loadlibs.C");
16 // Connect the Root Galice file containing Geometry, Kine and Hits
18 TFile *file = (TFile*)gROOT->GetListOfFiles()->FindObject("galice.root");
22 printf("\n Creating galice.root \n");
23 file = new TFile("galice.root");
25 printf("\n galice.root found in file list");
29 // Get AliRun object from file or create it if not on file
31 gAlice = (AliRun*)(file->Get("gAlice"));
32 if (gAlice) printf("AliRun object found on file\n");
34 printf("\n create new gAlice object");
35 gAlice = new AliRun("gAlice","Alice test program");
39 // Create some histograms
42 TH1F *ccharge1 = new TH1F("ccharge1","Cluster Charge distribution"
44 TH1F *pcharge1 = new TH1F("pcharge1","Pad Charge distribution"
46 TH1F *xresid1 = new TH1F("xresid1","x-Residuals"
48 TH1F *yresid1 = new TH1F("yresid1","y-Residuals"
50 TH1F *npads1 = new TH1F("npads1" ,"Pads per Hit"
52 TH2F *xresys1 = new TH2F("xresys1","x-Residuals systematics"
53 ,50,-2.0,2.0,100,-1.0,1.0);
54 TH2F *yresys1 = new TH2F("yresys1","y-Residuals systematics"
55 ,50,-0.4,0.4,100,-0.1,0.1);
57 TH1F *ccharge2 = new TH1F("ccharge2","Cluster Charge distribution"
59 TH1F *pcharge2 = new TH1F("pcharge2","Pad Charge distribution"
61 TH1F *xresid2 = new TH1F("xresid2","x-Residuals"
63 TH1F *yresid2 = new TH1F("yresid2","y-Residuals"
65 TH1F *npads2 = new TH1F("npads2" ,"Pads per Hit"
67 TH2F *xresys2 = new TH2F("xresys2","x-Residuals systematics"
68 ,50,-2.0,2.0,100,-1.0,1.0);
69 TH2F *yresys2 = new TH2F("yresys2","y-Residuals systematics"
70 ,50,-0.4,0.4,100,-0.1,0.1);
73 AliRICHchamber* iChamber;
79 for (Int_t nev=0; nev<= evNumber2; nev++) {
80 //cout << "nev " << nev <<endl;
81 printf ("Event Number : %d\n",nev);
82 Int_t nparticles = gAlice->GetEvent(nev);
83 //cout << "nparticles " << nparticles <<endl;
84 printf ("Number of particles: %d\n",nparticles);
85 if (nev < evNumber1) continue;
86 if (nparticles <= 0) return;
88 AliRICH *RICH = (AliRICH*) gAlice->GetDetector("RICH");
89 printf("\n track %d %d \n ", nev, RICH);
91 TTree *TH = gAlice->TreeH();
92 Int_t ntracks = TH->GetEntries();
95 Float_t Q[2], xmean[2],ymean[2],xres[2],yres[2], xonpad[2], yonpad[2];
97 printf ("Just got it");
101 for (Int_t track=0; track<ntracks;track++) {
104 Int_t nbytes += TH->GetEvent(track);
106 for(AliRICHhit* mHit=(AliRICHhit*)RICH->FirstHit(-1);
108 mHit=(AliRICHhit*)RICH->NextHit())
110 Int_t nch = mHit->fChamber; // chamber number
111 Float_t x = mHit->fX; // x-pos of hit
112 Float_t y = mHit->fY; // y-pos
115 iChamber = & RICH->Chamber(nch-1);
116 response=iChamber->GetResponseModel(mip);
120 for (Int_t i=0; i<2; i++) {
126 for (AliRICHcluster *mPad=(AliRICHcluster*)RICH
129 mPad=(AliRICHcluster*)RICH->NextPad()
132 Int_t nseg = mPad->fCathode; // segmentation
133 Int_t nhit = mPad->fHitNumber; // hit number
134 Int_t qtot = mPad->fQ; // charge
135 Int_t ipx = mPad->fPadX; // pad number on X
136 Int_t ipy = mPad->fPadY; // pad number on Y
137 Int_t iqpad = mPad->fQpad; // charge per pad
138 Int_t secpad = mPad->fRSec; // r-pos of pad
141 segmentation=iChamber->GetSegmentationModel(nseg);
143 // printf("Pad of hit, padx, pady, iqpad, ncha %d %d %d %d %d %d\n",
144 // nhit, ipx, ipy, iqpad, nseg, ind);
148 pcharge1->Fill(iqpad,(float) 1);
149 ccharge1->Fill(qtot ,(float) 1);
151 pcharge2->Fill(iqpad,(float) 1);
152 ccharge2->Fill(qtot ,(float) 1);
154 // Calculate centre of gravity
156 if (iqpad == 0 && ind==0) {
157 printf("\n attention iqpad 0");
160 if (iqpad > 0 && secpad==1) {
163 segmentation->GetPadCxy(ipx,ipy,xc,yc);
164 // printf("\n pad %d %d ", ipx, ipy);
165 // printf("\n pos %f %f ", xc, yc);
166 xmean[ind]+=Float_t(iqpad*xc);
167 ymean[ind]+=Float_t(iqpad*yc);
172 for (Int_t i=0; i<2; i++) {
173 segmentation = iChamber->GetSegmentationModel(i+1);
175 // if (npad[i] ==0) {
176 // printf("\n #pads=0 %f %f",x,y);
180 xmean[i] = xmean[i]/Q[i];
181 xres[i] = xmean[i]-x;
182 ymean[i] = ymean[i]/Q[i];
183 yres[i] = ymean[i]-y;
184 // printf("\n xmean, ymean %f %f",xmean[i],ymean[i]);
185 // printf("\n xhit, yhit %f %f",x,y);
191 GetPadIxy(x,y,icx,icy);
193 GetPadCxy(icx,icy,xonpad[i],yonpad[i]);
198 xresid1->Fill(xres[0],(float) 1);
199 yresid1->Fill(yres[0],(float) 1);
200 npads1->Fill(npad[0],(float) 1);
201 if (npad[0] >=2 && Q[0] > 6 ) {
202 xresys1->Fill(xonpad[0],xres[0],(float) 1);
203 yresys1->Fill(yonpad[0],yres[0],(float) 1);
206 xresid2->Fill(xres[1],(float) 1);
207 yresid2->Fill(yres[1],(float) 1);
208 npads2->Fill(npad[1],(float) 1);
209 if (npad[1] >=2 && Q[1] > 6) {
210 xresys2->Fill(xonpad[1],xres[1],(float) 1);
211 yresys2->Fill(yonpad[1],yres[1],(float) 1);
219 //Create a canvas, set the view range, show histograms
220 TCanvas *c1 = new TCanvas("c1","Charge and Residuals",400,10,600,700);
221 pad11 = new TPad("pad11"," ",0.01,0.51,0.49,0.99);
222 pad12 = new TPad("pad12"," ",0.51,0.51,0.99,0.99);
223 pad13 = new TPad("pad13"," ",0.01,0.01,0.49,0.49);
224 pad14 = new TPad("pad14"," ",0.51,0.01,0.99,0.49);
225 pad11->SetFillColor(11);
226 pad12->SetFillColor(11);
227 pad13->SetFillColor(11);
228 pad14->SetFillColor(11);
235 ccharge1->SetFillColor(42);
236 ccharge1->SetXTitle("ADC units");
240 pcharge1->SetFillColor(42);
241 pcharge1->SetXTitle("ADC units");
245 xresid1->SetFillColor(42);
249 yresid1->SetFillColor(42);
252 TCanvas *c2 = new TCanvas("c2","Cluster Size",400,10,600,700);
253 pad21 = new TPad("pad21"," ",0.01,0.51,0.49,0.99);
254 pad22 = new TPad("pad22"," ",0.51,0.51,0.99,0.99);
255 pad23 = new TPad("pad23"," ",0.01,0.01,0.49,0.49);
256 pad24 = new TPad("pad24"," ",0.51,0.01,0.99,0.49);
257 pad21->SetFillColor(11);
258 pad22->SetFillColor(11);
259 pad23->SetFillColor(11);
260 pad24->SetFillColor(11);
267 npads1->SetFillColor(42);
268 npads1->SetXTitle("Cluster Size");
272 xresys1->SetXTitle("x on pad");
273 xresys1->SetYTitle("x-xcog");
277 yresys1->SetXTitle("y on pad");
278 yresys1->SetYTitle("y-ycog");
281 TCanvas *c3 = new TCanvas("c3","Charge and Residuals",400,10,600,700);
282 pad31 = new TPad("pad31"," ",0.01,0.51,0.49,0.99);
283 pad32 = new TPad("pad32"," ",0.51,0.51,0.99,0.99);
284 pad33 = new TPad("pad33"," ",0.01,0.01,0.49,0.49);
285 pad34 = new TPad("pad34"," ",0.51,0.01,0.99,0.49);
286 pad31->SetFillColor(11);
287 pad32->SetFillColor(11);
288 pad33->SetFillColor(11);
289 pad34->SetFillColor(11);
296 ccharge2->SetFillColor(42);
297 ccharge2->SetXTitle("ADC units");
301 pcharge2->SetFillColor(42);
302 pcharge2->SetXTitle("ADC units");
306 xresid2->SetFillColor(42);
310 yresid2->SetFillColor(42);
313 TCanvas *c4 = new TCanvas("c4","Cluster Size",400,10,600,700);
314 pad41 = new TPad("pad41"," ",0.01,0.51,0.49,0.99);
315 pad42 = new TPad("pad42"," ",0.51,0.51,0.99,0.99);
316 pad43 = new TPad("pad43"," ",0.01,0.01,0.49,0.49);
317 pad44 = new TPad("pad44"," ",0.51,0.01,0.99,0.49);
318 pad41->SetFillColor(11);
319 pad42->SetFillColor(11);
320 pad43->SetFillColor(11);
321 pad44->SetFillColor(11);
328 npads2->SetFillColor(42);
329 npads2->SetXTitle("Cluster Size");
333 xresys2->SetXTitle("x on pad");
334 xresys2->SetYTitle("x-xcog");
338 yresys2->SetXTitle("y on pad");
339 yresys2->SetYTitle("y-ycog");