]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - T0/AliT0CalibLaserData.cxx
Remove the factor p/pt from the decaylengthXY calculation (Andrea)
[u/mrichter/AliRoot.git] / T0 / AliT0CalibLaserData.cxx
... / ...
CommitLineData
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// T0 - T0.
21//
22// This class privides GIU service for reading RAW data from Laser
23// during electronics test
24//
25#include "TH1F.h"
26#include "TH2F.h"
27#include "TMap.h"
28#include "TFile.h"
29#include "TTree.h"
30#include "TBranch.h"
31#include "AliT0RawReader.h"
32#include "TGLabel.h"
33#include "TGFileDialog.h"
34#include <iostream>
35
36#include "AliT0CalibLaserData.h"
37
38#include "AliCDBManager.h"
39#include "AliRawReader.h"
40#include "AliRawReaderRoot.h"
41#include "AliT0LookUpValue.h"
42#include "AliT0LookUpKey.h"
43#include "AliT0Parameters.h"
44#include "AliT0RawReader.h"
45
46ClassImp(AliT0CalibLaserData)
47 //const char *fFileName;
48AliT0CalibLaserData::AliT0CalibLaserData() : TObject(),
49 fTEntry(0),
50 fFileName(" ")
51
52{
53//
54for ( int i=0; i<30; i++ ) { fEntries[i] = NULL; fHistLimits[i] = 0.0;}
55}
56/*
57//________________________________________________________________
58
59AliT0CalibLaserData::AliT0CalibLaserData(const AliT0CalibLaserData& calibda) : TObject(),
60 fRunNumber(905)
61{
62//copy constructor
63
64}
65//________________________________________________________________
66
67AliT0CalibLaserData &AliT0CalibLaserData::operator =(const AliT0CalibLaserData& calibda)
68{
69// assignment operator
70
71 return *this;
72}
73//________________________________________________________________
74AliT0CalibLaserData::~AliT0CalibLaserData()
75{
76 //
77}
78*/
79//________________________________________________________________
80
81void AliT0CalibLaserData::ReadHistSize()
82{
83 //build GUI frame for reading:
84 // - run number
85 // - histograms rates
86
87
88 TGMainFrame* fMain = new TGMainFrame(0,1500,1500);
89 fMain->SetLayoutManager( new TGMatrixLayout(fMain,10,7) );
90
91 fMain->AddFrame( new TGLabel(fMain, " Histogram") );
92 fMain->AddFrame( new TGLabel(fMain, "X min") );
93 fMain->AddFrame( new TGLabel(fMain, "X max") );
94 fMain->AddFrame( new TGLabel(fMain, "X N# channels") );
95
96 fMain->AddFrame( new TGLabel(fMain, "Y min") );
97 fMain->AddFrame( new TGLabel(fMain, "Y max") );
98 fMain->AddFrame( new TGLabel(fMain, "Y N# channels") );
99
100 fMain->AddFrame( new TGLabel(fMain, "QTC" ) );
101 fEntries[0] = new TGNumberEntry(fMain, 0);
102 fMain->AddFrame(fEntries[0]);
103 fEntries[1] = new TGNumberEntry(fMain, 10000);
104 fMain->AddFrame(fEntries[1]);
105 fEntries[2] = new TGNumberEntry(fMain, 2500);
106 fMain->AddFrame(fEntries[2]);
107 fMain->AddFrame( new TGLabel(fMain, " ") );
108 fMain->AddFrame( new TGLabel(fMain, " ") );
109 fMain->AddFrame( new TGLabel(fMain, " ") );
110
111 fMain->AddFrame( new TGLabel(fMain, "LED - CFD" ) );
112 fEntries[3] = new TGNumberEntry(fMain, 0);
113 fMain->AddFrame(fEntries[3]);
114 fEntries[4] = new TGNumberEntry(fMain, 1000);
115 fMain->AddFrame(fEntries[4]);
116 fEntries[5] = new TGNumberEntry(fMain, 1000);
117 fMain->AddFrame(fEntries[5]);
118 fMain->AddFrame( new TGLabel(fMain, " ") );
119 fMain->AddFrame( new TGLabel(fMain, " ") );
120 fMain->AddFrame( new TGLabel(fMain, " ") );
121 fMain->AddFrame( new TGLabel(fMain, "CFD vs QTC " ) );
122 // QTC axis X
123 fEntries[6] = new TGNumberEntry(fMain, 0.);
124 fMain->AddFrame(fEntries[6]);
125 fEntries[7] = new TGNumberEntry(fMain, 8000);
126 fMain->AddFrame(fEntries[7]);
127 fEntries[8] = new TGNumberEntry(fMain, 800);
128 fMain->AddFrame(fEntries[8]);
129// CFD axis Y
130 fEntries[9] = new TGNumberEntry(fMain, 0);
131 fMain->AddFrame(fEntries[9]);
132 fEntries[10] = new TGNumberEntry(fMain, 5000);
133 fMain->AddFrame(fEntries[10]);
134 fEntries[11] = new TGNumberEntry(fMain, 5000);
135 fMain->AddFrame(fEntries[11]);
136//
137 fMain->AddFrame( new TGLabel(fMain, "CFD vs LED-CFD " ) );
138//LED-CFD axis X
139 fEntries[12] = new TGNumberEntry(fMain, 0);
140 fMain->AddFrame(fEntries[12]);
141 fEntries[13] = new TGNumberEntry(fMain, 1000);
142 fMain->AddFrame(fEntries[13]);
143 fEntries[14] = new TGNumberEntry(fMain, 1000);
144 fMain->AddFrame(fEntries[14]);
145// CFD axis Y
146 fEntries[15] = new TGNumberEntry(fMain, 1000);
147 fMain->AddFrame(fEntries[15]);
148 fEntries[16] = new TGNumberEntry(fMain, 5000);
149 fMain->AddFrame(fEntries[16]);
150 fEntries[17] = new TGNumberEntry(fMain, 4000);
151 fMain->AddFrame(fEntries[17]);
152
153 fMain->AddFrame( new TGLabel(fMain, "CFD C " ) );
154//CFD side C
155 fEntries[18] = new TGNumberEntry(fMain, 0);
156 fMain->AddFrame(fEntries[18]);
157 fEntries[19] = new TGNumberEntry(fMain, 5000);
158 fMain->AddFrame(fEntries[19]);
159 fEntries[20] = new TGNumberEntry(fMain, 5000);
160 fMain->AddFrame(fEntries[20]);
161
162 fMain->AddFrame( new TGLabel(fMain, "") );
163 fMain->AddFrame( new TGLabel(fMain, "") );
164 fMain->AddFrame( new TGLabel(fMain, "") );
165
166 fMain->AddFrame( new TGLabel(fMain, "CFD A " ) );
167//CFD side A
168 fEntries[21] = new TGNumberEntry(fMain,0);
169 fMain->AddFrame(fEntries[21]);
170 fEntries[22] = new TGNumberEntry(fMain, 5000);
171 fMain->AddFrame(fEntries[22]);
172 fEntries[23] = new TGNumberEntry(fMain, 5000);
173 fMain->AddFrame(fEntries[23]);
174
175 fMain->AddFrame( new TGLabel(fMain, "") );
176 fMain->AddFrame( new TGLabel(fMain, "") );
177 fMain->AddFrame( new TGLabel(fMain, "") );
178
179
180 fMain->AddFrame( new TGLabel(fMain, "LED C " ) );
181//LED axis X
182 fEntries[24] = new TGNumberEntry(fMain, 0);
183 fMain->AddFrame(fEntries[24]);
184 fEntries[25] = new TGNumberEntry(fMain, 5000);
185 fMain->AddFrame(fEntries[25]);
186 fEntries[26] = new TGNumberEntry(fMain, 5000);
187 fMain->AddFrame(fEntries[26]);
188
189
190 for ( int i=0; i<27; i++ ) fEntries[i]->SetWidth(70);
191 fMain->AddFrame( new TGLabel(fMain, " File name") );
192 fTEntry = new TGTextEntry(fMain,"");
193 fMain->AddFrame(fTEntry);
194 fTEntry->SetWidth(80);
195 // printf( "Max Length %d\n", fEntries[0]->GetMaxWidth() );
196
197 TGTextButton *fOk = new TGTextButton(fMain, "OK");
198 fOk->Connect("Clicked()","AliT0CalibLaserData",this,"DoOk()");
199 // fOk->SetCommand(".q");
200 fMain->AddFrame(fOk);
201
202 fMain->MapSubwindows();
203 fMain->Resize();
204 fMain->SetWindowName("Dialog");
205 fMain->MapWindow();
206}
207
208void AliT0CalibLaserData::DoOk()
209{
210
211 fFileName = (fTEntry->GetText());
212 //OpenFile();
213 printf(" DoOK >> File %s\n",fFileName);
214 for( int i=0; i<27; i++ )
215 fHistLimits[i] = fEntries[i]->GetNumber();
216
217 ReadData();
218}
219
220void AliT0CalibLaserData::ReadData()
221{
222 // reading RAW data from test LCS
223 // filling histograms
224 // fillinf tree
225
226
227 TH1I *hChannel[105]; TH1I *hQTC[24];
228 TH2F *hCFDvsQTC[24]; TH2F *hCFDvsLED[24]; TH1I *h1CFDminLED[24];
229
230 Int_t allData[110][50];
231 Int_t numberOfHits[105];
232
233 Int_t channels[106];
234
235 TString names[106], type;
236 AliT0LookUpKey* lookkey;//= new AliT0LookUpKey();
237 AliT0LookUpValue* lookvalue;//= new AliT0LookUpValue();
238 AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
239 AliCDBManager::Instance()->SetRun(0);
240 AliT0Parameters *fParam = AliT0Parameters::Instance();
241 fParam->Init();
242 TMap *lookup = fParam->GetMapLookup();
243 TMapIter *iter = new TMapIter(lookup);
244
245 for( Int_t iline=0; iline<106; iline++)
246 {
247 lookvalue = ( AliT0LookUpValue*) iter->Next();
248 lookkey = (AliT0LookUpKey*) lookup->GetValue((TObject*)lookvalue);
249 if(lookkey){
250 Int_t key=lookkey->GetKey();
251 names[key]=lookkey->GetChannelName();
252 // if(names[key].Contains("QT0"))
253 // hChannel[key] = new TH1F(names[key].Data(),names[key].Data(),1000,3000,5000);
254 // else
255 hChannel[key] = new TH1I(names[key].Data(),names[key].Data(),Int_t(fHistLimits[20]),fHistLimits[18],fHistLimits[19]);
256 if(key >0 && key<13)
257 hChannel[key] = new TH1I(names[key].Data(),names[key].Data(),Int_t(fHistLimits[20]),fHistLimits[18],fHistLimits[19]);
258 if(key >13 && key<25)
259 hChannel[key] = new TH1I(names[key].Data(),names[key].Data(),Int_t(fHistLimits[26]),fHistLimits[24],fHistLimits[25]);
260
261 if(key >57 && key<69)
262 hChannel[key] = new TH1I(names[key].Data(),names[key].Data(),Int_t (fHistLimits[23]),fHistLimits[21],fHistLimits[22]);
263 // hitsname="xHits" + names[key];
264 // hNumHits[key] = new TH1F(hitsname.Data(),hitsname.Data(),50,-0.25,24.25);
265 }
266 else
267 {printf(" no such value %i \n", iline);}
268
269 }
270 for(Int_t ic=0; ic<24; ic++) {
271 {
272
273 hQTC[ic] = new TH1I(Form("QTC%i",ic+1),"QTC",(Int_t)fHistLimits[2],fHistLimits[0],fHistLimits[1]);
274 h1CFDminLED[ic] = new TH1I(Form("LEDminCFD%i",ic+1),"LED - CFD",(Int_t)fHistLimits[5],fHistLimits[3],fHistLimits[4]);
275
276 hCFDvsQTC[ic] = new TH2F(Form("CFDvsQTC%i",ic+1),"CFD vs QTC",
277 (Int_t)fHistLimits[8],fHistLimits[6],fHistLimits[7],
278 (Int_t)fHistLimits[11],fHistLimits[9],fHistLimits[10]);
279 hCFDvsLED[ic] = new TH2F(Form("CFDvsLED%i",ic+1),"CFD vs LED-CFD",
280 (Int_t)fHistLimits[14],fHistLimits[12],fHistLimits[13],
281 (Int_t)fHistLimits[17],fHistLimits[15],fHistLimits[16]);
282
283
284 }
285
286
287 }
288
289 TH1F*hEffCFD= new TH1F("hEffCFD","Effeciency",50,-0.25,24.25);
290 TH1F*hEffLED= new TH1F("hEffLED","Effeciency",50,-0.25,24.25);
291 TH1F*hEffQT0= new TH1F("hEffQT0","Effeciency",50,-0.25,24.25);
292 TH1F*hEffQT1= new TH1F("hEffQT1","Effeciency",50,-0.25,24.25);
293
294
295 // Char_t filename[80];
296 // sprintf(filename,"t0%i.raw",fRunNumber);
297 AliRawReader *reader = new AliRawReaderRoot(fFileName);
298 reader->LoadEquipmentIdsMap("T0map.txt");
299 // reader->RequireHeader(kFALSE);
300 reader->RequireHeader(kTRUE);
301 AliT0RawReader *start = new AliT0RawReader(reader);
302 // start->SetNumberOfTRM(1);
303 for (Int_t i0=0; i0<105; i0++)
304 {
305 for (Int_t j0=0; j0<5; j0++) allData[i0][j0]=0;
306 numberOfHits[i0]=0;
307 }
308 Int_t event=0;
309
310 while (reader->NextEvent()) {
311 start->Next();
312 for (Int_t i=0; i<105; i++) {
313 for (Int_t iHit=0; iHit<5; iHit++)
314 {
315 allData[i][iHit]= start->GetData(i,iHit);
316 // if( allData[i][iHit]>0) cout<<i<<" "<<iHit<<" "<<allData[i][iHit]<<endl;
317 }
318 }
319
320 if(event%1000 == 0)
321 printf("Event:%d\n",event);
322
323 // if(event > 100000) break;
324
325 for (Int_t it = 0; it<24; it=it+2)
326 {
327 Int_t cc=it/2;
328 for (Int_t iHit=0; iHit<5; iHit++)
329 {
330 if(allData[it+25][iHit] != 0 && allData[it+26][iHit] !=0)
331 {
332 hQTC[cc]->Fill(allData[it+25][iHit]-allData[it+26][iHit]);
333 if(allData[cc+1][iHit] != 0 )
334 hCFDvsQTC[cc]->Fill(allData[it+25][iHit]-allData[it+26][iHit],
335 allData[cc+1][iHit]-allData[0][0]+5000.);
336 }
337 if(allData[cc+1][iHit] != 0 && allData[cc+13][iHit]!=0 )
338 {
339 hCFDvsLED[cc]->Fill(allData[cc+13][iHit]-allData[cc+1][iHit],
340 allData[cc+1][iHit]-allData[0][0]+5000.);
341 h1CFDminLED[cc]->Fill(allData[cc+13][iHit]-allData[cc+1][iHit]);
342 }
343
344 }
345 }
346 for (Int_t it = 24; it<48; it=it+2)
347 {
348 Int_t cc=(Int_t)(it/2);
349 for (Int_t iHit=0; iHit<5; iHit++)
350 {
351 if(allData[it+57][iHit] != 0 && allData[it+58][iHit] !=0)
352 {
353 hQTC[cc]->Fill(allData[it+57][iHit]-allData[it+58][iHit]);
354 // hmpd[cc]->Fill(allData[it+26][iHit]-allData[it+25][iHit]);
355 if(allData[cc+1][iHit] != 0 )
356 hCFDvsQTC[cc]->Fill(allData[it+57][iHit]-allData[it+58][iHit],
357 allData[cc+45][iHit]-allData[0][0]+5000);
358 }
359 if(allData[cc+57][iHit] != 0 && allData[cc+45][iHit]!=0 )
360 {
361 hCFDvsLED[cc]->Fill(allData[cc+57][iHit]-allData[cc+45][iHit],
362 allData[cc+1][iHit]-allData[0][0]+5000);
363 h1CFDminLED[cc]->Fill(allData[cc+57][iHit]-allData[cc+45][iHit]);
364 }
365
366 }
367 }
368
369
370 for (Int_t iHit=0; iHit<5; iHit++)
371 {
372
373 for(Int_t ik=1; ik<105; ik++)
374 {
375 channels[ik] = -100;
376 if((allData[ik][iHit] - allData[0][0] +5000) != 0 && //!!!!! Uncomment it !!!!! and comment next line
377 // if((allData[ik][iHit] - allData[1][0] ) != 0 &&
378 allData[ik][iHit] >0 )
379 {
380 numberOfHits[ik]++;
381 // hChannel[ik] -> Fill(allData[ik][iHit] - allData[1][0]); //Comment this line !!!
382 hChannel[ik] -> Fill(allData[ik][iHit] - allData[0][0]+5000);
383 // cout<<" zpis'>> "<<iHit<<" "<<ik<<" "<<allData[ik][iHit] - allData[0][0]<<endl;
384 // hChannel[ik] -> Fill(allData[0][0]-allData[ik][iHit] );
385 // channels[ik] = allData[ik][iHit] - allData[0][0];
386 }
387 }
388 // digitsTree->Fill();
389 }
390
391 event++;
392
393 } //event
394
395
396 if (event>1)
397 {
398 printf("efficiency for %i events \n",event);
399 for (Int_t i0=1; i0<13; i0++)
400 {
401 printf("%s %f %s %f %s %f %s %f \n ",
402 names[i0].Data(), Float_t(numberOfHits[i0])/Float_t(event),
403 names[i0+12].Data(),Float_t(numberOfHits[i0+12])/Float_t(event),
404 names[i0+56].Data(),Float_t(numberOfHits[i0+56])/Float_t(event),
405 names[i0+68].Data(),Float_t(numberOfHits[i0+68])/Float_t(event));
406
407 hEffCFD->Fill(i0,Float_t(numberOfHits[i0]) / Float_t(event));
408 hEffLED->Fill(i0,Float_t(numberOfHits[i0+12]) / Float_t(event));
409 hEffCFD->Fill(i0+12,Float_t(numberOfHits[i0+56]) /Float_t(event));
410 hEffLED->Fill(i0+12,Float_t(numberOfHits[i0+68]) /Float_t(event));
411 }
412 printf("\n");
413 for (Int_t i0=0; i0<24; i0=i0+2)
414 {
415 hEffQT1->Fill(i0, Float_t (numberOfHits[i0+25]) / Float_t(event));
416 hEffQT0->Fill(i0, Float_t (numberOfHits[i0]+26) / Float_t(event));
417 hEffQT1->Fill((i0+12), Float_t (numberOfHits[i0]+81) / Float_t(event));
418 hEffQT0->Fill((i0+12), Float_t (numberOfHits[i0]+82) / Float_t(event));
419
420 printf("%s %f %s %f %s %f %s %f \n",
421 names[i0+25].Data(), Float_t(numberOfHits[i0+25])/Float_t(event),
422 names[i0+26].Data(),Float_t(numberOfHits[i0+26])/Float_t(event),
423 names[i0+81].Data(),Float_t(numberOfHits[i0+81])/Float_t(event),
424 names[i0+82].Data(),Float_t(numberOfHits[i0+82])/Float_t(event));
425 }
426 }
427
428
429 TString filehist = Form("t0tree%s",fFileName);;
430 // sprintf(filehist,"t0treeDA%s",fFileName);
431 // sprintf(filehist,"t0tree%s",fFileName);
432 printf("\n Wrote data in %s !!\n",filehist.Data());
433 TFile *hist = new TFile(filehist.Data(),"RECREATE");
434 hist->cd();
435 // digitsTree->Write("",TObject::kOverwrite);
436
437 hEffCFD->Write();
438 hEffLED->Write();
439 hEffQT0->Write();
440 hEffQT1->Write();
441
442 for(Int_t ik=0; ik<105; ik++) hChannel[ik] ->Write();
443
444 for (Int_t i=0; i<24; i++)
445 {
446 hQTC[i]->Write();
447 hCFDvsQTC[i]->Write();
448 hCFDvsLED[i]->Write();
449 h1CFDminLED[i]->Write();
450 }
451
452}
453
454void AliT0CalibLaserData::OpenFile()
455{
456
457const char *ft[]={"T0 raw files","*.root","All files","*",0,0};
458 TString dir(".");
459 TGFileInfo fi; fi.fFileTypes=ft; fi.fIniDir=StrDup(dir);
460 new TGFileDialog(gClient->GetRoot(), 0x0, kFDOpen, &fi);
461 if(!fi.fFilename) return;
462 // fFileName =*( fi.fFilename);
463 fFileName = fi.fFilename;
464 printf(" AliT0CalibLaserData::OpenFile %s %s\n",fi.fFilename, fFileName );
465 // if(gFile){ gFile->Close(); gFile=0;}
466
467 // gFile=TFile::Open(fi.fFilename);
468
469}
470