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