]> git.uio.no Git - u/mrichter/AliRoot.git/blob - T0/AliT0CalibData.cxx
fe72750cdd476b4acb0e54bce7b1f7a393e55cfb
[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   lookvalue->SetTRM(iTRM);
132   lookvalue->SetTDC(iTDC);
133   lookvalue->SetChain(0);
134   lookvalue->SetChannel(iChannel);
135
136   
137   printf(" AliT0CalibData::PrintLookup ::start GetValue %i %i %i \n",iTRM, iTDC, iChannel);
138   lookkey = (AliT0LookUpKey*) fLookup.GetValue((TObject*)lookvalue);
139   
140
141   if (lookkey)
142     {
143       cout<<" lookup KEY!!! "<<lookkey->GetKey()<<" VALUE "<<lookvalue->GetTRM()<<" "
144           <<lookvalue->GetTDC()<<" "
145           << lookvalue->GetChain()<<" "
146           <<lookvalue->GetChannel()<<endl;
147     }
148   
149   
150 }
151
152 //________________________________________________________________
153 void AliT0CalibData::SetTimeDelayCFD(Float_t* TimeDelay)
154 {
155   if(TimeDelay) for(int t=0; t<24; t++) fTimeDelayCFD[t] = TimeDelay[t];
156 }  
157   //________________________________________________________________
158   void AliT0CalibData::SetTimeDelayDA(Float_t* TimeDelay)
159 {
160   if(TimeDelay) for(int t=0; t<24; t++) fTimeDelayDA[t] = TimeDelay[t];
161 }
162
163
164 //________________________________________________________________
165 void AliT0CalibData::SetWalk(Int_t ipmt)
166 {
167
168   Int_t mv, ps; 
169   Int_t x[70000], y[70000], index[70000];
170   Float_t time[10000],amplitude[10000];
171   string buffer;
172   Bool_t down=false;
173   
174   const char * filename = gSystem->ExpandPathName("$ALICE_ROOT/T0/data/CFD-Amp.txt");
175   ifstream inFile(filename);
176   if(!inFile) AliError(Form("Cannot open file %s !",filename));
177   
178   Int_t i=0;
179   while(getline(inFile,buffer)){
180     inFile >> ps >> mv;
181
182     x[i]=ps; y[i]=mv;
183     i++;
184   }
185   inFile.close();
186   cout<<" number of data "<<i<<endl;
187  
188   TMath::Sort(i, y, index,down);
189   Int_t amp=0, iin=0, isum=0, sum=0;
190   Int_t ind=0;
191   for (Int_t ii=0; ii<i; ii++)
192     {
193       ind=index[ii];
194       if(y[ind] == amp)
195         {
196           sum +=x[ind];
197           iin++;
198         }
199       else
200         {
201           if(iin>0)
202             time[isum] = Float_t (sum/(iin));
203           else
204             time[isum] =Float_t (x[ind]);
205           amplitude[isum] = Float_t (amp);
206           amp=y[ind];
207           iin=0;
208           isum++;
209           sum=0;
210         }
211     }
212
213   inFile.close();
214
215   TGraph* gr = new TGraph(isum, amplitude, time);
216   fWalk.AddAtAndExpand(gr,ipmt);
217 }
218
219
220 //________________________________________________________________
221 /*
222 void AliT0CalibData::SetAmpLED(Int_t ipmt)
223 {
224   Float_t mv, ps; 
225   Float_t x[100], y[100];
226   string buffer;
227   
228   const char * filename = gSystem->ExpandPathName("$ALICE_ROOT/T0/data/CFD-LED.txt");
229   ifstream inFile(filename);
230   if(!inFile) {AliError(Form("Cannot open file %s !",filename));}
231   
232   inFile >> mv>>ps;
233   Int_t i=0;
234   
235   while(getline(inFile,buffer)){
236     x[i]=mv; y[i]=ps;   
237     inFile >> mv >> ps;
238     i++;
239   }
240   inFile.close();
241   TGraph* gr = new TGraph(i,x,y);
242   fAmpLED.AddAtAndExpand(gr,ipmt);
243    
244 }
245 */
246 //________________________________________________________________
247
248 void AliT0CalibData::SetAmpLEDRec(Int_t ipmt)
249 {
250   Float_t mv, ps; 
251   Float_t x[100], y[100];
252   string buffer;
253   
254  const char * filename = gSystem->ExpandPathName("$ALICE_ROOT/T0/data/CFD-LED.txt");
255    ifstream inFile(filename);
256   if(!inFile) {AliError(Form("Cannot open file %s !",filename));}
257   
258   inFile >> mv>>ps;
259   Int_t i=0;
260   
261   while(getline(inFile,buffer)){
262     x[i]=mv; y[i]=ps;   
263     inFile >> mv >> ps;
264     i++;
265   }
266   inFile.close();
267   Float_t y1[100], x1[100];
268   for (Int_t ir=0; ir<i; ir++){
269     y1[ir]=y[i-ir]; x1[ir]=x[i-ir];}
270   TGraph* gr = new TGraph(i,y1,x1);
271   fAmpLEDRec.AddAtAndExpand(gr,ipmt);
272   
273 }
274
275 //________________________________________________________________
276
277 void AliT0CalibData::ReadAsciiLookup(const Char_t *filename)
278 {
279   Int_t key, trm, tdc, chain, channel;
280
281   if(filename == 0){
282     AliError(Form("Please, specify file with database")) ;
283     return ;
284   }
285
286
287   ifstream lookup;
288   lookup.open(filename);
289   if(!lookup)
290     {
291      AliError(Form("!!!!!!!!!!!!!!No look up table in CDB!" ));
292  
293     }
294   Char_t varname[11];
295   Int_t ntrms;
296   if(lookup)
297     {
298       lookup>>ntrms;
299       cout<<" !!!!!!! ntrms "<<ntrms<<endl;
300       //      fNumberOfTRMs=ntrms;
301       SetNumberOfTRMs(ntrms);
302        while(!lookup.eof())
303         {
304           AliT0LookUpKey * lookkey= new AliT0LookUpKey();
305           AliT0LookUpValue * lookvalue= new AliT0LookUpValue();
306           
307           lookup>>varname>>key>>trm>>chain>>tdc>>channel;
308           lookvalue->SetTRM(trm);
309           lookvalue->SetTDC(tdc);
310           lookvalue->SetChain(chain);
311           lookvalue->SetChannel(channel);
312           lookkey->SetKey(key);
313           cout<<"lookup "<<varname<<" "<<key<<" "<<trm<<" "<<chain<<" "<<tdc<<" "<<channel<<endl;         
314           
315           fLookup.Add((TObject*)lookvalue,(TObject*)lookkey);
316           
317         }
318       
319       lookup.close();
320       
321     }
322 }
323 //________________________________________________________________
324
325 Int_t AliT0CalibData::GetChannel(Int_t trm,  Int_t tdc, Int_t chain, Int_t channel)
326 {
327
328   AliT0LookUpKey * lookkey;//= new AliT0LookUpKey();
329   AliT0LookUpValue * lookvalue= new AliT0LookUpValue(trm,tdc,chain,channel);
330
331   lookkey = (AliT0LookUpKey*) fLookup.GetValue((TObject*)lookvalue);
332
333   return lookkey->GetKey();
334
335 }
336