1 #if !defined(__CINT__) || defined(__MAKECINT__)
8 #include <TClonesArray.h>
13 #include "STEER/AliRun.h"
14 #include "ITS/AliITS.h"
15 #include "ITS/AliITSRawCluster.h"
19 void AliITSplotSPDClusters(const char* filename="galice_80.root"){
20 //------------------------------------------------------------------
21 // This macro will read the TreeC produced during reconstruction and
22 // plot the number and type of clusters found in the SPD.
23 // root [0] .L AliITSplotSPDClusters.C //this loads the macro in memory
24 // root [1] AliITSplotSPDClusters(); //by default process first event
26 // root [1] AliITSplotSPDClusters("galice2.root"); // process all events
30 // root [0] .x AliITSplotSPDClusters.C("galice2.root") // will all of the
33 //------------------------------------------------------------------
35 // delete the current gAlice object, the one from input file will be used
39 }else{ // Dynamically link some shared libs
40 if(gClassTable->GetID("AliRun") < 0) {
41 gROOT->LoadMacro("loadlibs.C");
46 // Connect the Root Galice file containing Geometry, Kine and Hits
47 TFile *file = (TFile*)gROOT->GetListOfFiles()->FindObject(filename);
48 if(!file) file = new TFile(filename);
49 // Get AliRun object from file or create it if not on file
51 gAlice = (AliRun*)file->Get("gAlice");
52 if(gAlice) cout << "AliRun object found on file" << endl;
53 if(!gAlice) gAlice = new AliRun("gAlice","SPD Clulster analysis");
55 Int_t nevents = gAlice->GetEventsPerRun();
57 // Get pointers to the ITS Alice detectors.
58 AliITS *ITS = (AliITS*) gAlice->GetDetector("ITS");
60 cout << "ITS not found. Exiting." << endl;
63 AliITSresponseSPDdubna *resp0 = ITS->DetType(0)->GetResponseModel();
64 Float_t diffCoeff= resp0->DistanceOverVoltage();//Get Value of Diffusion Coefficient parameter d/v.
65 diffCoeff *= resp0->Temperature();
66 diffCoeff = TMath::Sqrt(diffCoeff*8.6173376e-5);// K_Boltzman/e_Coulumb
67 char aDiffCoeff[100]; //Character array for sprintf
69 sprintf(aDiffCoeff,"Number of SPD Clusters in x, layer 1, DiffCoeff=%f #sqrt{cm}",
71 TH1D *hclx1 = new TH1D("hclx1",aDiffCoeff,15,0.5,15.5);
72 sprintf(aDiffCoeff,"Number of SPD Clusters in z, layer 1, DiffCoeff=%f #sqrt{cm}",
74 TH1D *hclz1 = new TH1D("hclz1",aDiffCoeff,5,0.5,5.5);
75 sprintf(aDiffCoeff,"Number of SPD Clusters in x, layer 2, DiffCoeff=%f #sqrt{cm}",
77 TH1D *hclx2 = new TH1D("hclx2",aDiffCoeff,15,0.5,15.5);
78 sprintf(aDiffCoeff,"Number of SPD Clusters in z, layer 2, DiffCoeff=%f #sqrt{cm}",
80 TH1D *hclz2 = new TH1D("hclz2",aDiffCoeff,5,0.5,5.5);
81 // Create Arrays with clusters from: Data, Ba/Sa Model, old version of
83 Float_t dataX1[9] = {0.493, 0.493, 0.0273, 0.00617, 0.00112, 0.000257,
84 0.000257, 0.000257, 0.000257};
85 //clusters from the data in the x-dimension with
87 Float_t baSaX1[11] = {0.942, 0.0180, 0.0112, 0.00389, 0.00203, 0.000257,
88 0.001, 0.000257, 0.000257, 0.000257, 0.001};
89 //same for Ba/Sa model
90 Float_t dubnaX1[7] = {0.889, 0.0789, 0.0151, 0.00389, 0.001, 0.001,
92 //same for old version of Dubna model
93 Float_t dataX2[9] = {0.482, 0.482, 0.0325, 0.00791, 0.00157, 0.000275,
94 0.000275, 0.000275, 0.000275};
95 //clusters from the data in the x-dimension with
96 //optimized paramaters
97 Float_t baSaX2[11] = {0.946, 0.0175, 0.0245, 0.00482, 0.001, 0.001,
98 0.000275, 0.001, 0.000275, 0.000275, 0.001};
99 //same for Ba/Sa model
100 Float_t dubnaX2[8] = {0.638, 0.325, 0.0275, 0.01, 0.00431, 0.000275,
102 //same for old version of Dubna model
103 Float_t dataZ1[4] = {0.889, 0.0624, 0.000257, 0.000257};
104 //clusters from the data in the z-dimension with
105 //standard paramaters
106 Float_t baSaZ1[3] = {1., 0.0160, 0.000257}; //same for Ba/Sa model
107 Float_t dubnaZ1[3] = {0.889, 0.0180, 0.000257};
108 //same for old version of Dubna model
109 Float_t dataZ2[4] = {0.889, 0.0624, 0.000257, 0.000257};
110 //clusters from the data in the z-dimension with
111 //optimized paramaters
112 Float_t baSaZ2[4] = {1., 0.0160, 0.00215, 0.000257}; //same for Ba/Sa model
113 Float_t dubnaZ2[3] = {0.889, 0.0412, 0.000257};
114 //same for old version of Dubna model
116 TH1F *hdataX1 = new TH1F("hdataX1","Number of SPD Clusters in x, layer 1",
118 hdataX1->SetMarkerColor(2);
119 hdataX1->SetMarkerStyle(20);
120 hdataX1->SetMarkerSize(0.7);
121 TH1F *hbaSaX1 = new TH1F("hbaSaX1", "Ba/Sa", 11, 0.5, 11.5);
122 TH1F *hdubnaX1 = new TH1F("hdubnaX1", "Old Dubna", 7, 0.5, 7.5);
123 TH1F *hdataX2 = new TH1F("hdataX2","Number of SPD Clusters in x, layer 2",
125 hdataX2->SetMarkerColor(2);
126 hdataX2->SetMarkerStyle(20);
127 hdataX2->SetMarkerSize(0.7);
128 TH1F *hbaSaX2 = new TH1F("hbaSaX2", "Ba/Sa", 11, 0.5, 11.5);
129 TH1F *hdubnaX2 = new TH1F("hdubnaX2", "Old Dubna", 8, 0.5, 8.5);
130 TH1F *hdataZ1 = new TH1F("hdataZ1","Number of SPD Clusters in z, layer 1",
132 hdataZ1->SetMarkerColor(2);
133 hdataZ1->SetMarkerStyle(20);
134 hdataZ1->SetMarkerSize(0.7);
135 TH1F *hbaSaZ1 = new TH1F("hbaSaZ1", "Ba/Sa", 3, 0.5, 3.5);
136 TH1F *hdubnaZ1 = new TH1F("hdubnaZ1", "Old Dubna", 3, 0.5, 3.5);
137 TH1F *hdataZ2 = new TH1F("hdataZ2","Number of SPD Clusters in z, layer 2",
139 hdataZ2->SetMarkerColor(2);
140 hdataZ2->SetMarkerStyle(20);
141 hdataZ2->SetMarkerSize(0.7);
142 TH1F *hbaSaZ2 = new TH1F("hbaSaZ2", "Ba/Sa", 4, 0.5, 4.5);
143 TH1F *hdubnaZ2 = new TH1F("hdubnaZ2", "Old Dubna", 3, 0.5, 3.5);
145 Int_t j = 0; //j will be a counter for the loops to fill the histograms
146 //with the values for clusters for the Data, the Ba/Sa model
147 //and the old Dubna model
149 hdataX1->SetBinContent((j+1), (Double_t)dataX1[j]);
150 hdataX1->SetBinError((j+1), 0.00001);
152 for(j=0; j<11; j++) hbaSaX1->Fill((Float_t)j +0.5, baSaX1[j]);
153 for(j=0; j<7; j++) hdubnaX1->Fill((Float_t)j +0.5, dubnaX1[j]);
155 hdataX2->SetBinContent((j+1), (Double_t)dataX2[j]);
156 hdataX2->SetBinError((j+1), 0.00001);
158 for(j=0; j<11; j++) hbaSaX2->Fill((Float_t)j +0.5, baSaX2[j]);
159 for(j=0; j<8; j++) hdubnaX2->Fill((Float_t)j +0.5, dubnaX2[j]);
161 hdataZ1->SetBinContent((j+1), (Double_t)dataZ1[j]);
162 hdataZ1->SetBinError((j+1), 0.00001);
164 for(j=0; j<3; j++) hbaSaZ1->Fill((Float_t)j +0.5, baSaZ1[j]);
165 for(j=0; j<3; j++) hdubnaZ1->Fill((Float_t)j +0.5, dubnaZ1[j]);
167 hdataZ2->SetBinContent((j+1), (Double_t)dataZ2[j]);
168 hdataZ2->SetBinError((j+1), 0.00001);
170 for(j=0; j<4; j++) hbaSaZ2->Fill((Float_t)j +0.5, baSaZ2[j]);
171 for(j=0; j<3; j++) hdubnaZ2->Fill((Float_t)j +0.5, dubnaZ2[j]);
174 TBranch *spdBranch = 0;
175 TClonesArray *spdClustcA = new TClonesArray("AliITSRawClusterSPD",1000);
176 AliITSRawClusterSPD *spdClust = 0;
179 Float_t nclx = 0,nclz = 0;
180 for(evnt=0;evnt<nevents;evnt++){
181 sprintf(tn,"TreeC%d",evnt);
182 tc = (TTree*) file->Get(tn);
183 spdBranch = tc->GetBranch("ITSClustersSPD");
184 spdBranch->SetAddress(&spdClustcA);
185 n = (Int_t) tc->GetEntries();
188 nc = spdClustcA->GetEntries();
191 spdClust = (AliITSRawClusterSPD*) spdClustcA->At(j);
192 nclx = spdClust->NclX();
193 nclz = spdClust->NclZ();
194 if(spdClust->Module()<80){
195 hclx1->Fill(nclx-0.5);
196 hclz1->Fill(nclz-0.5);
197 }else if(spdClust->Module()<240){
198 hclx2->Fill(nclx-0.5);
199 hclz2->Fill(nclz-0.5);
204 delete spdBranch; spdBranch = 0;
208 //Begin Process of normalizing histograms
209 Double_t integral = (Double_t) hclx1->Integral();
210 if(integral>0.0) hclx1->Scale(1./integral);
211 integral = hclz1->Integral();
212 if(integral>0.0) hclz1->Scale(1./integral);
213 integral = hclx2->Integral();
214 if(integral>0.0) hclx2->Scale(1./integral);
215 integral = hclz2->Integral();
216 if(integral>0.0) hclz2->Scale(1./integral);
218 hclx1->SetMinimum(0.000257);
219 hclx1->SetMaximum(1.01);
220 hclz1->SetMinimum(0.000274);
221 hclz1->SetMaximum(1.01);
222 hclx2->SetMinimum(0.000257);
223 hclx2->SetMaximum(1.01);
224 hclz2->SetMinimum(0.000257);
225 hclz2->SetMaximum(1.01);
227 sprintf(aDiffCoeff,"SPD Clusters with Diffusion Coefficent=%f",diffCoeff);
228 TCanvas *cSPDclusters = new TCanvas("cSPDclusters",aDiffCoeff,
230 cSPDclusters->Divide(2, 2);
233 cSPDclusters->SetLogy(1);
235 hdataX1->Draw("same e1p");
236 hbaSaX1->SetLineColor(4);
237 hbaSaX1->SetLineStyle(2);
238 hbaSaX1->Draw("same");
239 hdubnaX1->SetLineColor(3);
240 hdubnaX1->SetLineStyle(4);
241 hdubnaX1->Draw("same");
242 TLegend *l1 = new TLegend(0.55,0.65,0.76,0.82);
243 l1->AddEntry(hclx1,"New simulation","l");
244 l1->AddEntry(hdataX1,"Test Beam Results","p");
245 l1->AddEntry(hbaSaX1,"Bari/Selero simulation","l");
246 l1->AddEntry(hdubnaX1,"Dubna simulation","l");
250 cSPDclusters->SetLogy(1);
252 hdataZ1->Draw("same e1p");
253 hbaSaZ2->SetLineColor(4);
254 hbaSaZ1->SetLineStyle(2);
255 hbaSaZ1->Draw("same");
256 hdubnaZ1->SetLineColor(3);
257 hdubnaZ1->SetLineStyle(4);
258 hdubnaZ1->Draw("same");
259 TLegend *l2 = new TLegend(0.55,0.65,0.76,0.82);
260 l2->AddEntry(hclz1,"New simulation","l");
261 l2->AddEntry(hdataZ1,"Test Beam Results","p");
262 l2->AddEntry(hbaSaZ1,"Bari/Selero simulation","l");
263 l2->AddEntry(hdubnaZ1,"Dubna simulation","l");
267 cSPDclusters->SetLogy(1);
269 TLegend *l3 = new TLegend(0.55,0.65,0.76,0.82);
270 l3->AddEntry(hclx2,"New simulation","l");
273 hdataX2->Draw("e1p");
274 hbaSaX2->SetLineColor(4);
275 hbaSaX2->SetLineStyle(2);
276 hbaSaX2->Draw("same");
277 hdubnaX2->SetLineColor(3);
278 hdubnaX2->SetLineStyle(4);
279 hdubnaX2->Draw("same");
282 cSPDclusters->SetLogy(1);
284 TLegend *l4 = new TLegend(0.55,0.65,0.76,0.82);
285 l4->AddEntry(hclz2,"New simulation","l");
288 hdataZ2->Draw("e1p");
289 hbaSaZ2->SetLineColor(4);
290 hbaSaZ2->SetLineStyle(2);
291 hbaSaZ2->Draw("same");
292 hdubnaZ2->SetLineColor(3);
293 hdubnaZ2->SetLineStyle(4);
294 hdubnaZ2->Draw("same");
296 cSPDclusters->Update();
298 if(gROOT->IsBatch()){
299 cSPDclusters->Print("SPDClusters.eps");
300 } // end if gROOT->IsBatch()