Record changes.
[u/mrichter/AliRoot.git] / T0 / AliT0CalibData.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /* $Id$ */
17
18 ///////////////////////////////////////////////////////////////////////////////
19 //                                                                           //
20 // class for T0 calibration                       TM-AC-AM_6-02-2006         //
21 //                                                                           //
22 ///////////////////////////////////////////////////////////////////////////////
23
24 #include "AliT0CalibData.h"
25 #include "AliT0LookUpValue.h"
26 #include "AliLog.h"
27
28 #include <TCanvas.h>
29 #include <TObjString.h>
30 #include <TObjArray.h>
31 #include <TGraph.h>
32 #include <TFile.h>
33 #include <TAxis.h>
34 #include <TH2F.h>
35 #include <TMath.h>
36 #include <TSystem.h>
37 #include <Riostream.h>
38
39 #include <string>
40
41 ClassImp(AliT0CalibData)
42
43 //________________________________________________________________
44   AliT0CalibData::AliT0CalibData():   TNamed(),
45                                       fTimeDelayTVD(0),
46                                       fMeanT0(0),
47                                       fWalk(0),
48                                       fAmpLEDRec(0),
49                                       fLookup(0),
50                                       fNumberOfTRMs(0)
51
52 {
53   //
54 }
55
56 //________________________________________________________________
57 AliT0CalibData::AliT0CalibData(const char* name):TNamed(),
58                                       fTimeDelayTVD(0),
59                                       fMeanT0(0),
60                                       fWalk(0),
61                                       fAmpLEDRec(0),
62                                       fLookup(0),
63                                       fNumberOfTRMs(0)
64 {
65   TString namst = "Calib_";
66   namst += name;
67   SetName(namst.Data());
68   SetTitle(namst.Data());
69
70 }
71
72 //________________________________________________________________
73 AliT0CalibData::AliT0CalibData(const AliT0CalibData& calibda) :
74   TNamed(calibda),              
75   fTimeDelayTVD(0),
76   fMeanT0(0),
77   fWalk(0),
78   //  fAmpLED(0),
79   fAmpLEDRec(0),
80   fLookup(0),
81   fNumberOfTRMs(0)
82
83 {
84 // copy constructor
85   SetName(calibda.GetName());
86   SetTitle(calibda.GetName());
87
88
89 }
90
91 //________________________________________________________________
92 AliT0CalibData &AliT0CalibData::operator =(const AliT0CalibData& calibda)
93 {
94 // assignment operator
95   SetName(calibda.GetName());
96   SetTitle(calibda.GetName());
97  
98   return *this;
99 }
100
101 //________________________________________________________________
102 AliT0CalibData::~AliT0CalibData()
103 {
104   //
105 }
106 //________________________________________________________________
107 void AliT0CalibData::Reset()
108 {
109     memset(fTimeDelayCFD,1,24*sizeof(Float_t));
110     memset(fTimeDelayDA,1,24*sizeof(Float_t));
111 }
112
113
114 //________________________________________________________________
115 void  AliT0CalibData::Print(Option_t*) const
116 {
117
118   printf("\n    ----    PM Arrays       ----\n\n");
119   printf(" Time delay CFD & DA\n");
120   for (Int_t i=0; i<24; i++) printf(" CFD  %f DA %f ",fTimeDelayCFD[i], fTimeDelayDA[i]);
121
122
123 //________________________________________________________________
124 void  AliT0CalibData::PrintLookup(Option_t*, Int_t iTRM, Int_t iTDC, Int_t iChannel) const
125 {
126   
127   AliT0LookUpKey* lookkey= new AliT0LookUpKey();
128   AliT0LookUpValue*  lookvalue= new AliT0LookUpValue();
129
130   cout<<" Number Of TRMs in setup "<<GetNumberOfTRMs()<<endl;
131   iTRM=0; iTDC=0; Int_t chain=0; iChannel=0;
132
133   for (Int_t ik=0; ik<105; ik++){
134     lookvalue->SetTRM(iTRM);
135     lookvalue->SetTDC(iTDC);
136     lookvalue->SetChain(chain);
137     lookvalue->SetChannel(iChannel);
138     
139     if (iChannel<6) iChannel +=2;
140     else {iChannel = 0; iTDC++;}
141     if(ik==57) { iTDC=0; iChannel=0; iTRM=1;}
142    
143   printf(" AliT0CalibData::PrintLookup ::start GetValue %i %i %i %i\n",iTRM, iTDC,chain, iChannel);
144     lookkey = (AliT0LookUpKey*) fLookup.GetValue((TObject*)lookvalue);
145     cout<<"  lookkey "<< lookkey<<endl;
146     //    TString name= lookkey->GetChannelName();
147     // cout<<name.Data()<<endl;
148     if (lookkey)
149       {
150         TString name= lookkey->GetChannelName();
151         cout<<" lookup KEY!!! "<<name.Data()<<" "<<lookkey->GetKey()<<" VALUE "<<lookvalue->GetTRM()<<" "
152             <<lookvalue->GetTDC()<<" "
153             << lookvalue->GetChain()<<" "
154           <<lookvalue->GetChannel()<<endl;
155       }
156   }
157   
158 }
159
160 //________________________________________________________________
161 void AliT0CalibData::SetTimeDelayCFD(Float_t* TimeDelay)
162 {
163   if(TimeDelay) for(int t=0; t<24; t++) fTimeDelayCFD[t] = TimeDelay[t];
164 }  
165   //________________________________________________________________
166   void AliT0CalibData::SetTimeDelayDA(Float_t* TimeDelay)
167 {
168   if(TimeDelay) for(int t=0; t<24; t++) fTimeDelayDA[t] = TimeDelay[t];
169 }
170
171
172 //________________________________________________________________
173 void AliT0CalibData::SetWalk(Int_t ipmt)
174 {
175
176   Int_t mv, ps; 
177   Int_t x[70000], y[70000], index[70000];
178   Float_t time[10000],amplitude[10000];
179   string buffer;
180   Bool_t down=false;
181   
182   const char * filename = gSystem->ExpandPathName("$ALICE_ROOT/T0/data/CFD-Amp.txt");
183   ifstream inFile(filename);
184   if(!inFile) AliError(Form("Cannot open file %s !",filename));
185   
186   Int_t i=0;
187   while(getline(inFile,buffer)){
188     inFile >> ps >> mv;
189
190     x[i]=ps; y[i]=mv;
191     i++;
192   }
193   inFile.close();
194   cout<<" number of data "<<i<<endl;
195  
196   TMath::Sort(i, y, index,down);
197   Int_t amp=0, iin=0, isum=0, sum=0;
198   Int_t ind=0;
199   for (Int_t ii=0; ii<i; ii++)
200     {
201       ind=index[ii];
202       if(y[ind] == amp)
203         {
204           sum +=x[ind];
205           iin++;
206         }
207       else
208         {
209           if(iin>0)
210             time[isum] = Float_t (sum/(iin));
211           else
212             time[isum] =Float_t (x[ind]);
213           amplitude[isum] = Float_t (amp);
214           amp=y[ind];
215           iin=0;
216           isum++;
217           sum=0;
218         }
219     }
220
221   inFile.close();
222
223   TGraph* gr = new TGraph(isum, amplitude, time);
224   fWalk.AddAtAndExpand(gr,ipmt);
225 }
226
227
228 //________________________________________________________________
229 /*
230 void AliT0CalibData::SetAmpLED(Int_t ipmt)
231 {
232   Float_t mv, ps; 
233   Float_t x[100], y[100];
234   string buffer;
235   
236   const char * filename = gSystem->ExpandPathName("$ALICE_ROOT/T0/data/CFD-LED.txt");
237   ifstream inFile(filename);
238   if(!inFile) {AliError(Form("Cannot open file %s !",filename));}
239   
240   inFile >> mv>>ps;
241   Int_t i=0;
242   
243   while(getline(inFile,buffer)){
244     x[i]=mv; y[i]=ps;   
245     inFile >> mv >> ps;
246     i++;
247   }
248   inFile.close();
249   TGraph* gr = new TGraph(i,x,y);
250   fAmpLED.AddAtAndExpand(gr,ipmt);
251    
252 }
253 */
254 //________________________________________________________________
255
256 void AliT0CalibData::SetAmpLEDRec(Int_t ipmt)
257 {
258   Float_t mv, ps; 
259   Float_t x[100], y[100];
260   string buffer;
261   
262  const char * filename = gSystem->ExpandPathName("$ALICE_ROOT/T0/data/CFD-LED.txt");
263    ifstream inFile(filename);
264   if(!inFile) {AliError(Form("Cannot open file %s !",filename));}
265   
266   inFile >> mv>>ps;
267   Int_t i=0;
268   
269   while(getline(inFile,buffer)){
270     x[i]=mv; y[i]=ps;   
271     inFile >> mv >> ps;
272     i++;
273   }
274   inFile.close();
275   Float_t y1[100], x1[100];
276   for (Int_t ir=0; ir<i; ir++){
277     y1[ir]=y[i-ir]; x1[ir]=x[i-ir];}
278   TGraph* gr = new TGraph(i,y1,x1);
279   fAmpLEDRec.AddAtAndExpand(gr,ipmt);
280   
281 }
282
283 //________________________________________________________________
284
285 void AliT0CalibData::ReadAsciiLookup(const Char_t *filename)
286 {
287   Int_t key, trm, tdc, chain, channel;
288
289   if(filename == 0){
290     AliError(Form("Please, specify file with database")) ;
291     return ;
292   }
293
294
295   ifstream lookup;
296   lookup.open(filename);
297   if(!lookup)
298     {
299      AliError(Form("!!!!!!!!!!!!!!No look up table in CDB!" ));
300  
301     }
302   Char_t varname[11];
303   Int_t ntrms;
304   if(lookup)
305     {
306       lookup>>ntrms;
307       cout<<" !!!!!!! ntrms "<<ntrms<<endl;
308       //      fNumberOfTRMs=ntrms;
309       SetNumberOfTRMs(ntrms);
310        while(!lookup.eof())
311         {
312           AliT0LookUpKey * lookkey= new AliT0LookUpKey();
313           AliT0LookUpValue * lookvalue= new AliT0LookUpValue();
314           
315           lookup>>varname>>key>>trm>>chain>>tdc>>channel;
316           lookvalue->SetTRM(trm);
317           lookvalue->SetTDC(tdc);
318           lookvalue->SetChain(chain);
319           lookvalue->SetChannel(channel);
320           lookkey->SetKey(key);
321           lookkey->SetChannelName(varname);
322           cout<<"lookup "<<varname<<" "<<key<<" "<<trm<<" "<<chain<<" "<<tdc<<" "<<channel<<endl;         
323           
324           fLookup.Add((TObject*)lookvalue,(TObject*)lookkey);
325           
326         }
327       
328       lookup.close();
329       
330     }
331 }
332 //________________________________________________________________
333
334 Int_t AliT0CalibData::GetChannel(Int_t trm,  Int_t tdc, Int_t chain, Int_t channel)
335 {
336
337   AliT0LookUpKey * lookkey;//= new AliT0LookUpKey();
338   AliT0LookUpValue * lookvalue= new AliT0LookUpValue(trm,tdc,chain,channel);
339
340   lookkey = (AliT0LookUpKey*) fLookup.GetValue((TObject*)lookvalue);
341
342   return lookkey->GetKey();
343
344 }
345