Coding violations corrected by Mark Heinz
[u/mrichter/AliRoot.git] / EMCAL / SMcalib / result / AliEMCALSMCalibCosmicResult.cxx
1 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
2  * See cxx source for full Copyright notice                               */
3
4 /* $Id: $ */
5 ///////////////////////////////////////////////////////////////////////////////
6 //                                                                           //
7 // class for EMCAL cosmic calibration results                                //
8 //                                                                           //
9 ///////////////////////////////////////////////////////////////////////////////
10
11 #include <TMath.h>
12 #include <TFile.h>
13 #include "TH1.h"
14 #include "TH2.h"
15 #include "TProfile.h"
16 #include "TF1.h"
17 #include "TTree.h"
18 #include <Riostream.h>
19
20 #include "AliEMCALSMCalibCosmicResult.h"
21
22 ClassImp(AliEMCALSMCalibCosmicResult)
23
24
25 AliEMCALSMCalibCosmicResult::AliEMCALSMCalibCosmicResult()
26 {
27   // Default Constructor  
28 }
29
30
31 AliEMCALSMCalibCosmicResult::AliEMCALSMCalibCosmicResult(const TString &name)
32 {
33   // Constructor
34   TString namst = "Calib_";
35   namst += name;
36   cout << " object name: "<< name << endl;
37   
38 }
39
40 AliEMCALSMCalibCosmicResult::~AliEMCALSMCalibCosmicResult()
41 {
42   // Destructor
43 }
44
45
46 void AliEMCALSMCalibCosmicResult::InitArrays()
47 {
48   //initialize arrays
49   
50   cout << "======== arrays are initialized ========"<< endl;
51
52   for (int j=0;j<48;j++) {
53       fLEDRefADC[j]=-1; 
54       for (int i=0;i<24;i++) {
55           fMIPPeakADC[j][i] = -1;
56           fLEDPeakADC[j][i] = -1;
57           fAPDVoltage[j][i] = -1;
58         }
59   }
60   for (int j=0;j<3;j++) {
61       fMinTemp[j] =-1; 
62       fMaxTemp[j] =-1; 
63       fMeanTemp[j]=-1; 
64   }
65
66 }
67
68 void AliEMCALSMCalibCosmicResult::ReadSMPart(int ipart)
69 {
70   // open file and get tree and histograms
71
72   TString fin="./plots/results_part_";
73   fin += ipart;
74   fin  +=".root";
75   
76   cout << "ReadSMPart:: input file: "<< fin << endl;
77   TFile *f1 = new TFile(fin,"READ");
78
79   TH1D* hev = (TH1D*)f1->Get("ev");
80   cout<<"Total number of events: "<< hev->GetEntries() << endl;
81
82   fhref =(TH2D*) f1->Get("hLedRefStrip");
83   fTree =(TTree*) f1->Get("calib_tree");
84  
85   fTree->SetBranchAddress("col",&fCol);
86   fTree->SetBranchAddress("row",&fRow);
87   fTree->SetBranchAddress("mip",&fMip);
88   fTree->SetBranchAddress("led",&fLed);
89
90 }
91
92
93
94 void  AliEMCALSMCalibCosmicResult::PrintAPD() 
95 {
96   // print out APD bias values
97   
98   for (Int_t col=0; col< fgkEmCalCols; col++){
99     for (Int_t row=0; row< fgkEmCalRows; row++){
100       printf(" %3.0f",fAPDVoltage[col][row]);
101     }
102     printf("\n");
103   }
104 }
105
106 void  AliEMCALSMCalibCosmicResult::PrintMIP() 
107 {
108   // print out mean MIP values
109
110   for (Int_t col=0; col< fgkEmCalCols; col++){
111     for (Int_t row=0; row< fgkEmCalRows; row++){
112       printf(" %2.1f",fMIPPeakADC[col][row]);
113     }
114     printf("\n");
115   }
116 }
117
118 void  AliEMCALSMCalibCosmicResult::PrintLED() 
119 {
120   //print out mean  LED values
121   
122   for (Int_t col=0; col< fgkEmCalCols; col++){
123     for (Int_t row=0; row< fgkEmCalRows; row++){
124       printf(" %3.0f",fLEDPeakADC[col][row]);
125     }
126     printf("\n");
127   }
128 }
129
130 void  AliEMCALSMCalibCosmicResult::PrintLEDref() 
131 {
132   //print out LED reference
133
134   for (Int_t col=0; col< fgkEmCalCols; col++){
135       printf(" %3.0f",fLEDRefADC[col]);
136     }
137   printf("\n");
138     
139 }
140
141 void  AliEMCALSMCalibCosmicResult::PrintTemps() 
142 {
143   //print out temperature
144   
145   for (Int_t part=0; part< 3; part++){
146       printf("min: %2.1f ,",fMinTemp[part]);
147       printf("max: %2.1f ,",fMaxTemp[part]);
148       printf("ave: %2.1f \n",fMeanTemp[part]);
149     }
150
151     
152 }
153
154
155
156 void  AliEMCALSMCalibCosmicResult::ReadLEDRefADCValues(int ipart)
157 {
158   //read LED reference from histogram
159
160   cout << "-------- read LED ref values SM part #: "<< ipart << " ---------"<< endl;
161   
162   int firstStrip = 0;
163   int lastStrip  = 0;
164   if (ipart==0) {
165         firstStrip = 0;
166         lastStrip  = 8;
167   }  
168   if (ipart==1) {
169         firstStrip = 8;
170         lastStrip  = 16;
171   }  
172   if (ipart==2) {
173         firstStrip = 16;
174         lastStrip  = 24;
175   }  
176   
177   char title[30];
178   float stripmean[8];
179   
180   for (int j=firstStrip;j< lastStrip;j++) {
181         sprintf(title,"strip%d",j);
182         TH1D* hLedAmp = (TH1D*)fhref->ProjectionY(title,j+1,j+1);
183         stripmean[j-firstStrip] = hLedAmp->GetMean();
184         cout << title << ", mean-Ref="<< hLedAmp->GetMean() << endl;
185         //2 cols per strip
186         fLEDRefADC[2*j]   = hLedAmp->GetMean();
187         fLEDRefADC[2*j+1] = hLedAmp->GetMean(); 
188   }
189
190  
191   return;
192  
193 }
194
195
196 int  AliEMCALSMCalibCosmicResult::ReadMIPPeakADCValues(int th)
197 {
198   // read MIP values from Tree
199
200   cout << "--------- read MIP peak , threshold "<< th << " ---------"<< endl;
201   
202   int badMip=0;
203
204   for (int j=0;j<fTree->GetEntries();j++)
205     {
206         fTree->GetEntry(j);
207         if (fMip> th)   fMIPPeakADC[fCol][fRow] = fMip;
208         else  {         fMIPPeakADC[fCol][fRow] = -1;
209                         cout << "col:"<< fCol<< ", row:"<< fRow << ", mean =" << fMip << endl;  
210                         badMip++; 
211         }
212     }
213
214   return badMip;
215
216 }
217
218
219 int  AliEMCALSMCalibCosmicResult::ReadLEDPeakADCValues(int th)
220 {
221   // read LED values from Tree
222   cout << "--------- read LED peaks, threshold "<< th << " ---------"<< endl;
223   
224   int bad=0;
225
226   for (int j=0;j<fTree->GetEntries();j++)
227     {
228         fTree->GetEntry(j);
229         if (fLed > th)  fLEDPeakADC[fCol][fRow] = fLed;
230         else  {         fLEDPeakADC[fCol][fRow] = -1;
231                         cout << "col:"<< fCol<< ", row:"<< fRow << ", mean =" << fLed << endl; 
232                         bad++;  
233         }
234     }
235
236   return bad;
237
238
239 }
240
241 int  AliEMCALSMCalibCosmicResult::ReadAPDVoltageValues(int ipart, const TString &fname)
242 {
243   // read APD voltages from text file
244   cout << "--------- read APD Bias for sm-part "<< ipart << " ---------"<< endl;
245   cout << "--------- filename: "<< fname << " ---------"<< endl;
246
247   FILE *f=fopen(fname.Data(),"r");
248   
249   int offset=0;
250   if (ipart==1) offset=16;
251   if (ipart==2) offset=32;
252
253   int dat, row,col;
254   float voltage; 
255   int bad=0;
256
257   while ( !feof(f) ) 
258      { 
259        dat = fscanf(f,"%i %i %f",&col,&row,&voltage);
260
261        if (col< offset || col>(offset+15) ) continue;    
262
263        // cout<<col<<" "<<row<<" v="<<voltage<<endl;
264        
265        fAPDVoltage[col][row] = voltage;
266        if (voltage>395) bad++;
267        
268      }
269      
270   return bad;
271      
272 }
273
274 void AliEMCALSMCalibCosmicResult::ReadTempSensors(int ipart, int run)
275 {
276   // read temperature sensor data 
277   cout << "--------- read Temp Sensors for sm-part "<< ipart << " ---------"<< endl;
278   cout << "--------- and run number "<< run << " ---------"<< endl;
279   
280   // take average of left and right sensors.
281   
282   //correction= measured - reference thermometer
283   float tcorr[8] = {-0.4,0.7,0,0.9,-0.2,0,0.1,0.5};
284
285   TString fin="./Temperature/temp_sensors_run_";
286   fin += run;
287   fin +=".root";
288   
289   TFile *f = new TFile(fin,"READ");
290   
291   float max1=0,min1=0,mean1=0;
292   float max2=0,min2=0,mean2=0;
293   
294   if (ipart==0) {
295         TProfile* h1 = (TProfile*)f->Get("sensor1");
296         TProfile* h2 = (TProfile*)f->Get("sensor2");
297         TF1* fit1    = (TF1*)f->Get("fitsensor1");
298         TF1* fit2    = (TF1*)f->Get("fitsensor2");
299
300         max1  = h1->GetMaximum()      - tcorr[0];
301         min1  = h1->GetMinimum()      - tcorr[0];
302         mean1 = fit1->GetParameter(0) - tcorr[0];
303         max2  = h2->GetMaximum()      - tcorr[1];
304         min2  = h2->GetMinimum()      - tcorr[1];
305         mean2 = fit2->GetParameter(0) - tcorr[1];
306   }
307   
308    if (ipart==1) {
309         TProfile* h1 = (TProfile*)f->Get("sensor3");
310         TProfile* h2 = (TProfile*)f->Get("sensor4");
311         TF1* fit1    = (TF1*)f->Get("fitsensor3");
312         TF1* fit2    = (TF1*)f->Get("fitsensor4");
313
314         max1  = h1->GetMaximum()      - tcorr[2];
315         min1  = h1->GetMinimum()      - tcorr[2];
316         mean1 = fit1->GetParameter(0) - tcorr[2];
317         max2  = h2->GetMaximum()      - tcorr[3];
318         min2  = h2->GetMinimum()      - tcorr[3];
319         mean2 = fit2->GetParameter(0) - tcorr[3];
320   }
321    
322   if (ipart==2) {
323         TProfile* h1 = (TProfile*)f->Get("sensor7");
324         TProfile* h2 = (TProfile*)f->Get("sensor8");
325         TF1* fit1    = (TF1*)f->Get("fitsensor7");
326         TF1* fit2    = (TF1*)f->Get("fitsensor8");
327
328         max1  = h1->GetMaximum()      - tcorr[6];
329         min1  = h1->GetMinimum()      - tcorr[6];
330         mean1 = fit1->GetParameter(0) - tcorr[6];
331         max2  = h2->GetMaximum()      - tcorr[7];
332         min2  = h2->GetMinimum()      - tcorr[7];
333         mean2 = fit2->GetParameter(0) - tcorr[7];
334   }
335       
336   fMinTemp[ipart]  = (min1+min2)/2.0;
337   fMaxTemp[ipart]  = (max1+max2)/2.0;
338   fMeanTemp[ipart] = (mean1+mean2)/2.0;
339     
340   return;
341  
342  
343 }
344