]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PHOS/AliPHOSGetter.cxx
New class AliPHOSRawDecoder introduced.
[u/mrichter/AliRoot.git] / PHOS / AliPHOSGetter.cxx
CommitLineData
4ae78bb1 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
803d1ab0 16/* $Id$ */
4ae78bb1 17
18//_________________________________________________________________________
19// A singleton. This class should be used in the analysis stage to get
20// reconstructed objects: Digits, RecPoints, TrackSegments and RecParticles,
21// instead of directly reading them from galice.root file. This container
22// ensures, that one reads Digits, made of these particular digits, RecPoints,
23// made of these particular RecPoints, TrackSegments and RecParticles.
24// This becomes non trivial if there are several identical branches, produced with
25// different set of parameters.
26//
27// An example of how to use (see also class AliPHOSAnalyser):
28// AliPHOSGetter * gime = AliPHOSGetter::GetInstance("galice.root","test") ;
29// for(Int_t irecp = 0; irecp < gime->NRecParticles() ; irecp++)
30// AliPHOSRecParticle * part = gime->RecParticle(1) ;
31// ................
2a657981 32// gime->Event(event) ; // reads new event from galice.root
4ae78bb1 33//
2a657981 34//*-- Author: Yves Schutz (SUBATECH) & Dmitri Peressounko (RRC KI & SUBATECH)
35//*-- Completely redesigned by Dmitri Peressounko March 2001
4ae78bb1 36//
37//*-- YS June 2001 : renamed the original AliPHOSIndexToObject and make
38//*-- systematic usage of TFolders without changing the interface
39//////////////////////////////////////////////////////////////////////////////
40
4ae78bb1 41// --- ROOT system ---
88cb7938 42
d7b234dd 43#include <TFile.h>
44#include <TROOT.h>
45#include <TSystem.h>
46#include <TParticle.h>
a43c51c3 47#include <TF1.h>
e4d04cf1 48#include <TGraph.h>
2bb77d5e 49#include <TCanvas.h>
50#include <TStyle.h>
351dd634 51//#include <TFrame.h>
4ae78bb1 52
53// --- Standard library ---
4ae78bb1 54
55// --- AliRoot header files ---
024a7e64 56#include "AliESD.h"
57#include "AliHeader.h"
58#include "AliMC.h"
e957fea8 59#include "AliPHOS.h"
024a7e64 60#include "AliPHOSBeamTestEvent.h"
61#include "AliPHOSGetter.h"
62#include "AliPHOSLoader.h"
431a9211 63#include "AliPHOSPulseGenerator.h"
88cb7938 64#include "AliRunLoader.h"
65#include "AliStack.h"
a29c28b6 66#include "AliPHOSRawDecoder.h"
a43c51c3 67#include "AliRawReaderFile.h"
e4d04cf1 68#include "AliLog.h"
7ca0684e 69#include "AliCDBLocal.h"
70#include "AliCDBStorage.h"
9e1ceb13 71#include "AliCDBManager.h"
88cb7938 72
4ae78bb1 73ClassImp(AliPHOSGetter)
74
2bb77d5e 75AliPHOSGetter * AliPHOSGetter::fgObjGetter = 0 ;
76AliPHOSLoader * AliPHOSGetter::fgPhosLoader = 0;
77AliPHOSCalibData* AliPHOSGetter::fgCalibData = 0;
88cb7938 78Int_t AliPHOSGetter::fgDebug = 0;
79
80// TFile * AliPHOSGetter::fgFile = 0 ;
4ae78bb1 81
3663622c 82AliPHOSGetter::AliPHOSGetter() :
83 fBTE(0),
84 fLoadingStatus(),
85 fNPrimaries(0),
86 fPrimaries(0),
87 fESDFile(0),
88 fESDFileName(),
89 fESD(0),
90 fESDTree(0),
91 fRawDigits(kFALSE),
92 fcdb(0)
93{
94 // ctor: this is a singleton, the ctor should never be called but cint needs it as public
95 Fatal("ctor", "AliPHOSGetter is a singleton default ctor not callable") ;
96}
97
98
4ae78bb1 99//____________________________________________________________________________
3663622c 100AliPHOSGetter::AliPHOSGetter(const char* headerFile, const char* version, Option_t * openingOption) :
101 fBTE(0),
102 fLoadingStatus(),
103 fNPrimaries(0),
104 fPrimaries(0),
105 fESDFile(0),
106 fESDFileName(),
107 fESD(0),
108 fESDTree(0),
109 fRawDigits(kFALSE),
110 fcdb(0)
4ae78bb1 111{
88cb7938 112 // ctor only called by Instance()
4ae78bb1 113
88cb7938 114 AliRunLoader* rl = AliRunLoader::GetRunLoader(version) ;
115 if (!rl) {
116 rl = AliRunLoader::Open(headerFile, version, openingOption);
117 if (!rl) {
118 Fatal("AliPHOSGetter", "Could not find the Run Loader for %s - %s",headerFile, version) ;
119 return ;
120 }
121 if (rl->GetAliRun() == 0x0) {
122 rl->LoadgAlice();
123 gAlice = rl->GetAliRun(); // should be removed
12a7cec1 124 rl->LoadHeader();
88cb7938 125 }
fbf811ec 126 }
88cb7938 127 fgPhosLoader = dynamic_cast<AliPHOSLoader*>(rl->GetLoader("PHOSLoader"));
128 if ( !fgPhosLoader )
129 Error("AliPHOSGetter", "Could not find PHOSLoader") ;
130 else
131 fgPhosLoader->SetTitle(version);
132
88cb7938 133 // initialize data members
134 SetDebug(0) ;
135 fBTE = 0 ;
136 fPrimaries = 0 ;
137 fLoadingStatus = "" ;
d2713783 138
139 fESDFileName = rl->GetFileName() ; // this should be the galice.root file
140 fESDFileName.ReplaceAll("galice.root", "AliESDs.root") ;
95635748 141 fESDFile = 0 ;
677c8a30 142 fESD = 0 ;
143 fESDTree = 0 ;
66f895c8 144 fRawDigits = kFALSE ;
7ca0684e 145
88cb7938 146}
9bd3caba 147
3663622c 148AliPHOSGetter::AliPHOSGetter(const AliPHOSGetter & obj) :
149 TObject(obj),
150 fBTE(0),
151 fLoadingStatus(),
152 fNPrimaries(0),
153 fPrimaries(0),
154 fESDFile(0),
155 fESDFileName(),
156 fESD(0),
157 fESDTree(0),
158 fRawDigits(kFALSE),
159 fcdb(0)
160{
161 // cpy ctor requested by Coding Convention
162 Fatal("cpy ctor", "not implemented") ;
163}
164
165//____________________________________________________________________________
166AliPHOSGetter::AliPHOSGetter(Int_t /*i*/) :
167 fBTE(0),
168 fLoadingStatus(),
169 fNPrimaries(0),
170 fPrimaries(0),
171 fESDFile(0),
172 fESDFileName(),
173 fESD(0),
174 fESDTree(0),
175 fRawDigits(kFALSE),
176 fcdb(0)
177{
178 // special constructor for onflight
179}
180
181
88cb7938 182//____________________________________________________________________________
183AliPHOSGetter::~AliPHOSGetter()
184{
185 // dtor
66f895c8 186 if(fgPhosLoader){
187 delete fgPhosLoader ;
188 fgPhosLoader = 0 ;
189 }
190 if(fBTE){
191 delete fBTE ;
192 fBTE = 0 ;
193 }
194 if(fPrimaries){
195 fPrimaries->Delete() ;
196 delete fPrimaries ;
197 }
677c8a30 198 if (fESD)
199 delete fESD ;
200 if (fESDTree)
66f895c8 201 delete fESDTree ;
202
7c193632 203 fgObjGetter = 0;
0ef40383 204}
205
206//____________________________________________________________________________
207void AliPHOSGetter::Reset()
208{
209 // resets things in case the getter is called consecutively with different files
210 // the PHOS Loader is already deleted by the Run Loader
211
212 if (fPrimaries) {
213 fPrimaries->Delete() ;
214 delete fPrimaries ;
215 }
216 fgPhosLoader = 0;
217 fgObjGetter = 0;
88cb7938 218}
fbf811ec 219
88cb7938 220//____________________________________________________________________________
221AliPHOSClusterizer * AliPHOSGetter::Clusterizer()
222{
e957fea8 223 // Returns pointer to the Clusterizer task
88cb7938 224 AliPHOSClusterizer * rv ;
225 rv = dynamic_cast<AliPHOSClusterizer *>(PhosLoader()->Reconstructioner()) ;
226 if (!rv) {
227 Event(0, "R") ;
228 rv = dynamic_cast<AliPHOSClusterizer*>(PhosLoader()->Reconstructioner()) ;
229 }
230 return rv ;
231}
4ae78bb1 232
88cb7938 233//____________________________________________________________________________
2bb77d5e 234TObjArray * AliPHOSGetter::CpvRecPoints() const
88cb7938 235{
236 // asks the Loader to return the CPV RecPoints container
4ae78bb1 237
88cb7938 238 TObjArray * rv = 0 ;
239
240 rv = PhosLoader()->CpvRecPoints() ;
241 if (!rv) {
242 PhosLoader()->MakeRecPointsArray() ;
243 rv = PhosLoader()->CpvRecPoints() ;
244 }
245 return rv ;
246}
dca3a7c4 247
88cb7938 248//____________________________________________________________________________
2bb77d5e 249TClonesArray * AliPHOSGetter::Digits() const
88cb7938 250{
251 // asks the Loader to return the Digits container
7bb289a7 252
88cb7938 253 TClonesArray * rv = 0 ;
254 rv = PhosLoader()->Digits() ;
7bb289a7 255
88cb7938 256 if( !rv ) {
257 PhosLoader()->MakeDigitsArray() ;
258 rv = PhosLoader()->Digits() ;
4ae78bb1 259 }
88cb7938 260 return rv ;
261}
4b808d52 262
88cb7938 263//____________________________________________________________________________
264AliPHOSDigitizer * AliPHOSGetter::Digitizer()
265{
e957fea8 266 // Returns pointer to the Digitizer task
88cb7938 267 AliPHOSDigitizer * rv ;
268 rv = dynamic_cast<AliPHOSDigitizer *>(PhosLoader()->Digitizer()) ;
269 if (!rv) {
270 Event(0, "D") ;
271 rv = dynamic_cast<AliPHOSDigitizer *>(PhosLoader()->Digitizer()) ;
272 }
273 return rv ;
4ae78bb1 274}
fbf811ec 275
88cb7938 276
4ae78bb1 277//____________________________________________________________________________
2bb77d5e 278TObjArray * AliPHOSGetter::EmcRecPoints() const
0bc3b8ed 279{
88cb7938 280 // asks the Loader to return the EMC RecPoints container
d489fb96 281
88cb7938 282 TObjArray * rv = 0 ;
65549808 283
88cb7938 284 rv = PhosLoader()->EmcRecPoints() ;
285 if (!rv) {
286 PhosLoader()->MakeRecPointsArray() ;
287 rv = PhosLoader()->EmcRecPoints() ;
89165262 288 }
88cb7938 289 return rv ;
81bb1a45 290}
7a9d98f9 291
65549808 292//____________________________________________________________________________
2bb77d5e 293TClonesArray * AliPHOSGetter::TrackSegments() const
65549808 294{
88cb7938 295 // asks the Loader to return the TrackSegments container
296
297 TClonesArray * rv = 0 ;
298
299 rv = PhosLoader()->TrackSegments() ;
300 if (!rv) {
301 PhosLoader()->MakeTrackSegmentsArray() ;
302 rv = PhosLoader()->TrackSegments() ;
303 }
304 return rv ;
65549808 305}
4ae78bb1 306
0c87da39 307//____________________________________________________________________________
e957fea8 308AliPHOSTrackSegmentMaker * AliPHOSGetter::TrackSegmentMaker()
88cb7938 309{
e957fea8 310 // Returns pointer to the TrackSegmentMaker task
88cb7938 311 AliPHOSTrackSegmentMaker * rv ;
312 rv = dynamic_cast<AliPHOSTrackSegmentMaker *>(PhosLoader()->TrackSegmentMaker()) ;
313 if (!rv) {
314 Event(0, "T") ;
315 rv = dynamic_cast<AliPHOSTrackSegmentMaker *>(PhosLoader()->TrackSegmentMaker()) ;
0c87da39 316 }
88cb7938 317 return rv ;
0c87da39 318}
319
4ae78bb1 320//____________________________________________________________________________
2bb77d5e 321TClonesArray * AliPHOSGetter::RecParticles() const
4ae78bb1 322{
88cb7938 323 // asks the Loader to return the TrackSegments container
324
325 TClonesArray * rv = 0 ;
4ae78bb1 326
88cb7938 327 rv = PhosLoader()->RecParticles() ;
328 if (!rv) {
329 PhosLoader()->MakeRecParticlesArray() ;
330 rv = PhosLoader()->RecParticles() ;
b134c32f 331 }
88cb7938 332 return rv ;
4ae78bb1 333}
4ae78bb1 334//____________________________________________________________________________
fc7e2f43 335void AliPHOSGetter::Event(Int_t event, const char* opt)
4ae78bb1 336{
88cb7938 337 // Reads the content of all Tree's S, D and R
548f0134 338
66f895c8 339// if ( event >= MaxEvent() ) {
340// Error("Event", "%d not found in TreeE !", event) ;
341// return ;
342// }
4ae78bb1 343
88cb7938 344 AliRunLoader * rl = AliRunLoader::GetRunLoader(PhosLoader()->GetTitle());
df25f7dd 345
66f895c8 346// // checks if we are dealing with test-beam data
347// TBranch * btb = rl->TreeE()->GetBranch("AliPHOSBeamTestEvent") ;
348// if(btb){
349// if(!fBTE)
350// fBTE = new AliPHOSBeamTestEvent() ;
351// btb->SetAddress(&fBTE) ;
352// btb->GetEntry(event) ;
353// }
354// else{
355// if(fBTE){
356// delete fBTE ;
357// fBTE = 0 ;
358// }
359// }
88cb7938 360
361 // Loads the type of object(s) requested
b134c32f 362
88cb7938 363 rl->GetEvent(event) ;
364
66f895c8 365 if(strstr(opt,"X") || (strcmp(opt,"")==0)){
88cb7938 366 ReadPrimaries() ;
66f895c8 367 }
368
369 if(strstr(opt,"H") ){
88cb7938 370 ReadTreeH();
66f895c8 371 }
372
373 if(strstr(opt,"S") ){
88cb7938 374 ReadTreeS() ;
66f895c8 375 }
376
377 if(strstr(opt,"D") ){
88cb7938 378 ReadTreeD() ;
66f895c8 379 }
380
381 if(strstr(opt,"R") ){
88cb7938 382 ReadTreeR() ;
66f895c8 383 }
88cb7938 384
66f895c8 385 if( strstr(opt,"T") ){
88cb7938 386 ReadTreeT() ;
66f895c8 387 }
88cb7938 388
66f895c8 389 if( strstr(opt,"P") ){
88cb7938 390 ReadTreeP() ;
66f895c8 391 }
677c8a30 392
66f895c8 393 if( strstr(opt,"E") ){
677c8a30 394 ReadTreeE(event) ;
3cf4f75f 395 }
396
397}
398
399
400//____________________________________________________________________________
f5eaa851 401void AliPHOSGetter::Event(AliRawReader *rawReader, const char* opt, Bool_t isOldRCUFormat)
3cf4f75f 402{
403 // Reads the raw event from rawReader
f5eaa851 404 // isOldRCUFormat defines whenever to assume
405 // the old RCU format or not
f88e2313 406
3cf4f75f 407 if( strstr(opt,"W") ){
e1c29d81 408 rawReader->NextEvent();
f5eaa851 409 ReadRaw(rawReader,isOldRCUFormat) ;
66f895c8 410 }
95635748 411
88cb7938 412}
413
414
415//____________________________________________________________________________
416Int_t AliPHOSGetter::EventNumber() const
417 {
418 // return the current event number
419 AliRunLoader * rl = AliRunLoader::GetRunLoader(PhosLoader()->GetTitle());
420 return static_cast<Int_t>(rl->GetEventNumber()) ;
fbf811ec 421}
d489fb96 422
fbf811ec 423//____________________________________________________________________________
2bb77d5e 424 TClonesArray * AliPHOSGetter::Hits() const
fbf811ec 425{
88cb7938 426 // asks the loader to return the Hits container
427
428 TClonesArray * rv = 0 ;
429
430 rv = PhosLoader()->Hits() ;
431 if ( !rv ) {
432 PhosLoader()->LoadHits("read");
433 rv = PhosLoader()->Hits() ;
fbf811ec 434 }
88cb7938 435 return rv ;
436}
fbf811ec 437
88cb7938 438//____________________________________________________________________________
439AliPHOSGetter * AliPHOSGetter::Instance(const char* alirunFileName, const char* version, Option_t * openingOption)
440{
441 // Creates and returns the pointer of the unique instance
442 // Must be called only when the environment has changed
d489fb96 443
88cb7938 444 if(!fgObjGetter){ // first time the getter is called
445 fgObjGetter = new AliPHOSGetter(alirunFileName, version, openingOption) ;
fbf811ec 446 }
88cb7938 447 else { // the getter has been called previously
448 AliRunLoader * rl = AliRunLoader::GetRunLoader(fgPhosLoader->GetTitle());
449 if ( rl->GetFileName() == alirunFileName ) {// the alirunFile has the same name
450 // check if the file is already open
451 TFile * galiceFile = dynamic_cast<TFile *>(gROOT->FindObject(rl->GetFileName()) ) ;
452
453 if ( !galiceFile )
454 fgObjGetter = new AliPHOSGetter(alirunFileName, version, openingOption) ;
455
456 else { // the file is already open check the version name
457 TString currentVersionName = rl->GetEventFolder()->GetName() ;
458 TString newVersionName(version) ;
459 if (currentVersionName == newVersionName)
460 if(fgDebug)
461 ::Warning( "Instance", "Files with version %s already open", currentVersionName.Data() ) ;
462 else {
463 fgObjGetter = new AliPHOSGetter(alirunFileName, version, openingOption) ;
464 }
465 }
466 }
7fba1747 467 else {
468 AliRunLoader * rl = AliRunLoader::GetRunLoader(fgPhosLoader->GetTitle()) ;
e191bb57 469 if ( strstr(version, AliConfig::GetDefaultEventFolderName()) ) // false in case of merging
1c221c70 470 delete rl ;
88cb7938 471 fgObjGetter = new AliPHOSGetter(alirunFileName, version, openingOption) ;
7fba1747 472 }
48f12df6 473 }
88cb7938 474 if (!fgObjGetter)
95635748 475 ::Error("AliPHOSGetter::Instance", "Failed to create the PHOS Getter object") ;
88cb7938 476 else
477 if (fgDebug)
478 Print() ;
4ae78bb1 479
88cb7938 480 return fgObjGetter ;
4ae78bb1 481}
482
6ad0e528 483//____________________________________________________________________________
88cb7938 484AliPHOSGetter * AliPHOSGetter::Instance()
6ad0e528 485{
88cb7938 486 // Returns the pointer of the unique instance already defined
fbf811ec 487
95635748 488 if(!fgObjGetter && fgDebug)
489 ::Warning("AliPHOSGetter::Instance", "Getter not initialized") ;
6ad0e528 490
88cb7938 491 return fgObjGetter ;
492
6ad0e528 493}
494
495//____________________________________________________________________________
88cb7938 496Int_t AliPHOSGetter::MaxEvent() const
6ad0e528 497{
88cb7938 498 // returns the number of events in the run (from TE)
0bc3b8ed 499
88cb7938 500 AliRunLoader * rl = AliRunLoader::GetRunLoader(PhosLoader()->GetTitle());
501 return static_cast<Int_t>(rl->GetNumberOfEvents()) ;
6ad0e528 502}
503
504//____________________________________________________________________________
88cb7938 505TParticle * AliPHOSGetter::Primary(Int_t index) const
6ad0e528 506{
88cb7938 507 AliRunLoader * rl = AliRunLoader::GetRunLoader(PhosLoader()->GetTitle());
508 return rl->Stack()->Particle(index) ;
509}
6ad0e528 510
4ae78bb1 511//____________________________________________________________________________
88cb7938 512AliPHOS * AliPHOSGetter:: PHOS() const
4ae78bb1 513{
514 // returns the PHOS object
5c4bcd63 515 AliPHOSLoader * loader = 0;
516 static AliPHOSLoader * oldloader = 0;
517 static AliPHOS * phos = 0;
518
519 loader = PhosLoader();
520
521 if ( loader != oldloader) {
522 phos = dynamic_cast<AliPHOS*>(loader->GetModulesFolder()->FindObject("PHOS")) ;
523 oldloader = loader;
524 }
7a9d98f9 525 if (!phos)
88cb7938 526 if (fgDebug)
527 Warning("PHOS", "PHOS module not found in module folders: %s", PhosLoader()->GetModulesFolder()->GetName() ) ;
7a9d98f9 528 return phos ;
4ae78bb1 529}
530
88cb7938 531
532
533//____________________________________________________________________________
e957fea8 534AliPHOSPID * AliPHOSGetter::PID()
88cb7938 535{
e957fea8 536 // Returns pointer to the PID task
88cb7938 537 AliPHOSPID * rv ;
538 rv = dynamic_cast<AliPHOSPID *>(PhosLoader()->PIDTask()) ;
539 if (!rv) {
540 Event(0, "P") ;
541 rv = dynamic_cast<AliPHOSPID *>(PhosLoader()->PIDTask()) ;
542 }
543 return rv ;
544}
545
4ae78bb1 546//____________________________________________________________________________
88cb7938 547AliPHOSGeometry * AliPHOSGetter::PHOSGeometry() const
4ae78bb1 548{
0bc3b8ed 549 // Returns PHOS geometry
550
7a9d98f9 551 AliPHOSGeometry * rv = 0 ;
552 if (PHOS() )
553 rv = PHOS()->GetGeometry() ;
52c5f046 554 else {
555 rv = AliPHOSGeometry::GetInstance();
556 if (!rv) {
557 AliError("Could not find PHOS geometry! Loading the default one !");
558 rv = AliPHOSGeometry::GetInstance("IHEP","");
559 }
560 }
7a9d98f9 561 return rv ;
562}
4ae78bb1 563
cb34a1fa 564//____________________________________________________________________________
88cb7938 565TClonesArray * AliPHOSGetter::Primaries()
566{
567 // creates the Primaries container if needed
568 if ( !fPrimaries ) {
569 if (fgDebug)
570 Info("Primaries", "Creating a new TClonesArray for primaries") ;
571 fPrimaries = new TClonesArray("TParticle", 1000) ;
572 }
573 return fPrimaries ;
574}
575
576//____________________________________________________________________________
577void AliPHOSGetter::Print()
578{
579 // Print usefull information about the getter
580
581 AliRunLoader * rl = AliRunLoader::GetRunLoader(fgPhosLoader->GetTitle());
582 ::Info( "Print", "gAlice file is %s -- version name is %s", (rl->GetFileName()).Data(), rl->GetEventFolder()->GetName() ) ;
583}
cb34a1fa 584
88cb7938 585//____________________________________________________________________________
586void AliPHOSGetter::ReadPrimaries()
587{
588 // Read Primaries from Kinematics.root
cb34a1fa 589
88cb7938 590 AliRunLoader * rl = AliRunLoader::GetRunLoader(PhosLoader()->GetTitle());
cb34a1fa 591
88cb7938 592 // gets kine tree from the root file (Kinematics.root)
7fba1747 593 if ( ! rl->TreeK() ) { // load treeK the first time
88cb7938 594 rl->LoadKinematics() ;
7fba1747 595 }
88cb7938 596
7fba1747 597 fNPrimaries = (rl->GetHeader())->GetNtrack();
88cb7938 598 if (fgDebug)
599 Info( "ReadTreeK", "Found %d particles in event # %d", fNPrimaries, EventNumber() ) ;
cb34a1fa 600
cb34a1fa 601
88cb7938 602 // first time creates the container
603 if ( Primaries() )
604 fPrimaries->Clear() ;
cb34a1fa 605
88cb7938 606 Int_t index = 0 ;
607 for (index = 0 ; index < fNPrimaries; index++) {
608 new ((*fPrimaries)[index]) TParticle(*(Primary(index)));
cb34a1fa 609 }
cb34a1fa 610}
611
95635748 612//____________________________________________________________________________
d2713783 613Bool_t AliPHOSGetter::OpenESDFile()
95635748 614{
d2713783 615 //Open the ESD file
95635748 616 Bool_t rv = kTRUE ;
d2713783 617 if (!fESDFile) {
618 fESDFile = TFile::Open(fESDFileName) ;
619 if (!fESDFile )
620 return kFALSE ;
621 }
95635748 622 else if (fESDFile->IsOpen()) {
623 fESDFile->Close() ;
624 fESDFile = TFile::Open(fESDFileName) ;
625 }
626 if (!fESDFile->IsOpen())
627 rv = kFALSE ;
628 return rv ;
629}
630
45c1ce6f 631//____________________________________________________________________________
2bb77d5e 632void AliPHOSGetter::FitRaw(Bool_t lowGainFlag, TGraph * gLowGain, TGraph * gHighGain, TF1* signalF, Double_t & energy, Double_t & time) const
45c1ce6f 633{
634 // Fits the raw signal time distribution
635
636 const Int_t kNoiseThreshold = 0 ;
637 Double_t timezero1 = 0., timezero2 = 0., timemax = 0. ;
638 Double_t signal = 0., signalmax = 0. ;
44ae287e 639 time = 0. ;
640 energy = 0. ;
45c1ce6f 641
431a9211 642 // Create a shaper pulse object which contains all the shaper parameters
75d640cb 643 AliPHOSPulseGenerator pulse;
431a9211 644
45c1ce6f 645 if (lowGainFlag) {
646 timezero1 = timezero2 = signalmax = timemax = 0. ;
75d640cb 647 signalF->FixParameter(0, pulse.GetRawFormatLowCharge()) ;
648 signalF->FixParameter(1, pulse.GetRawFormatLowGain()) ;
45c1ce6f 649 Int_t index ;
75d640cb 650 for (index = 0; index < pulse.GetRawFormatTimeBins(); index++) {
45c1ce6f 651 gLowGain->GetPoint(index, time, signal) ;
652 if (signal > kNoiseThreshold && timezero1 == 0.)
653 timezero1 = time ;
654 if (signal <= kNoiseThreshold && timezero1 > 0. && timezero2 == 0.)
655 timezero2 = time ;
656 if (signal > signalmax) {
657 signalmax = signal ;
658 timemax = time ;
659 }
660 }
431a9211 661 signalmax /=
75d640cb 662 pulse.RawResponseFunctionMax(pulse.GetRawFormatLowCharge(),
663 pulse.GetRawFormatLowGain()) ;
664 if ( timezero1 + pulse.GetRawFormatTimePeak() < pulse.GetRawFormatTimeMax() * 0.4 ) { // else its noise
45c1ce6f 665 signalF->SetParameter(2, signalmax) ;
666 signalF->SetParameter(3, timezero1) ;
2bb77d5e 667 gLowGain->Fit(signalF, "QRO", "", 0., timezero2); //, "QRON") ;
45c1ce6f 668 energy = signalF->GetParameter(2) ;
75d640cb 669 time = signalF->GetMaximumX() - pulse.GetRawFormatTimePeak() - pulse.GetRawFormatTimeTrigger() ;
45c1ce6f 670 }
671 } else {
672 timezero1 = timezero2 = signalmax = timemax = 0. ;
75d640cb 673 signalF->FixParameter(0, pulse.GetRawFormatHighCharge()) ;
674 signalF->FixParameter(1, pulse.GetRawFormatHighGain()) ;
45c1ce6f 675 Int_t index ;
75d640cb 676 for (index = 0; index < pulse.GetRawFormatTimeBins(); index++) {
45c1ce6f 677 gHighGain->GetPoint(index, time, signal) ;
678 if (signal > kNoiseThreshold && timezero1 == 0.)
679 timezero1 = time ;
680 if (signal <= kNoiseThreshold && timezero1 > 0. && timezero2 == 0.)
681 timezero2 = time ;
682 if (signal > signalmax) {
683 signalmax = signal ;
684 timemax = time ;
685 }
686 }
75d640cb 687 signalmax /= pulse.RawResponseFunctionMax(pulse.GetRawFormatHighCharge(),
688 pulse.GetRawFormatHighGain()) ;;
689 if ( timezero1 + pulse.GetRawFormatTimePeak() < pulse.GetRawFormatTimeMax() * 0.4 ) { // else its noise
45c1ce6f 690 signalF->SetParameter(2, signalmax) ;
691 signalF->SetParameter(3, timezero1) ;
2bb77d5e 692 gHighGain->Fit(signalF, "QRO", "", 0., timezero2) ;
45c1ce6f 693 energy = signalF->GetParameter(2) ;
75d640cb 694 time = signalF->GetMaximumX() - pulse.GetRawFormatTimePeak() - pulse.GetRawFormatTimeTrigger() ;
45c1ce6f 695 }
696 }
44ae287e 697 if (time == 0) energy = 0 ;
45c1ce6f 698}
699
44ae287e 700//____________________________________________________________________________
701Int_t AliPHOSGetter::CalibrateRaw(Double_t energy, Int_t *relId)
702{
703 // Convert energy into digitized amplitude for a cell relId
704 // It is a user responsilibity to open CDB and set
705 // AliPHOSCalibData object by the following operators:
706 //
707 // AliCDBLocal *loc = new AliCDBLocal("deCalibDB");
708 // AliPHOSCalibData* clb = (AliPHOSCalibData*)AliCDBStorage::Instance()
709 // ->Get(path_to_calibdata,run_number);
710 // AliPHOSGetter* gime = AliPHOSGetter::Instance("galice.root");
711 // gime->SetCalibData(clb);
712
713 if (CalibData() == 0)
f88e2313 714 Warning("CalibrateRaw","Calibration DB is not initiated!");
44ae287e 715
716 Int_t module = relId[0];
f88e2313 717 Int_t column = relId[3];
718 Int_t row = relId[2];
719
720 Float_t gainFactor = 0.0015; // width of one Emc ADC channel in GeV
721 Float_t pedestal = 0.005; // Emc pedestals
722
723 if(CalibData()) {
724 gainFactor = CalibData()->GetADCchannelEmc (module,column,row);
725 pedestal = CalibData()->GetADCpedestalEmc(module,column,row);
726 }
727
44ae287e 728 Int_t amp = static_cast<Int_t>( (energy - pedestal) / gainFactor + 0.5 ) ;
729 return amp;
730}
a43c51c3 731//____________________________________________________________________________
f5eaa851 732Int_t AliPHOSGetter::ReadRaw(AliRawReader *rawReader,Bool_t isOldRCUFormat)
a43c51c3 733{
734 // reads the raw format data, converts it into digits format and store digits in Digits()
735 // container.
f5eaa851 736 // isOldRCUFormat = kTRUE in case of the old RCU
02e48b45 737 // format used in the raw data readout.
738 // Reimplemented by Boris Polichtchouk (Jul 2006)
739 // to make it working with the Jul-Aug 2006 beam test data.
740
a29c28b6 741 //Create raw decoder.
742
743 AliPHOSRawDecoder dc(rawReader);
744 dc.SetOldRCUFormat(isOldRCUFormat);
745 dc.SubtractPedestals(kTRUE);
45c1ce6f 746
6a0d2265 747 Int_t relId[4], absId =0;
45c1ce6f 748 Bool_t lowGainFlag = kFALSE ;
2bb77d5e 749
a43c51c3 750 TClonesArray * digits = Digits() ;
02e48b45 751 digits->Clear() ;
752
6a0d2265 753 Int_t iDigit = 0 ;
6a0d2265 754 Double_t time = 0. ;
755 Int_t iOldDigit;
756 Bool_t seen;
19309784 757
a29c28b6 758 while (dc.NextDigit()) {
02e48b45 759
a29c28b6 760 lowGainFlag = dc.IsLowGain();
761 time = dc.GetTime();
6a0d2265 762
a29c28b6 763 relId[0] = dc.GetModule();
764 relId[1] = 0;
765 relId[2] = dc.GetRow();
766 relId[3] = dc.GetColumn();
6a0d2265 767
a29c28b6 768 if(!PHOSGeometry()) AliFatal("Couldn't find PHOSGeometry!");
769 PHOSGeometry()->RelToAbsNumbering(relId, absId);
770 AliDebug(2,Form("relId=(mod,row,col)=(%d,%d,%d), absId=%d\n\n",
771 relId[0],relId[2],relId[3],absId));
6a0d2265 772
a29c28b6 773 // Add low gain digit only
774 //if the high gain digit does not exist in the digits array
19309784 775
a29c28b6 776 seen = kFALSE;
777
778 if(lowGainFlag) {
779 for (iOldDigit=iDigit-1; iOldDigit>=0; iOldDigit--) {
780 if ((dynamic_cast<AliPHOSDigit*>(digits->At(iOldDigit)))->GetId() == absId) {
781 seen = kTRUE;
782 break;
75d640cb 783 }
6a0d2265 784 }
a29c28b6 785 if (!seen) {
786 new((*digits)[iDigit]) AliPHOSDigit(-1,absId,(Float_t)dc.GetEnergy(),time);
787 iDigit++;
45c1ce6f 788 }
a29c28b6 789 }
69464fdb 790
a29c28b6 791 // Add high gain digit only if it is not saturated;
792 // replace low gain digit by a high gain one
793 else {
794 if (dc.GetEnergy() >= 1023) continue;
795 for (iOldDigit=iDigit-1; iOldDigit>=0; iOldDigit--) {
796 if ((dynamic_cast<AliPHOSDigit*>(digits->At(iOldDigit)))->GetId() == absId) {
797 digits->RemoveAt(iOldDigit);
798 new((*digits)[iOldDigit]) AliPHOSDigit(-1,absId,(Float_t)dc.GetEnergy(),time);
799 seen = kTRUE;
800 break;
8b7c6b6c 801 }
69464fdb 802 }
a29c28b6 803 if (!seen) {
804 new((*digits)[iDigit]) AliPHOSDigit(-1,absId,(Float_t)dc.GetEnergy(),time);
805 iDigit++;
02e48b45 806 }
66f895c8 807 }
a29c28b6 808
809
44ae287e 810 }
a29c28b6 811
8b7c6b6c 812 digits->Compress() ;
02e48b45 813 digits->Sort() ;
69464fdb 814
815 //!!!!for debug!!!
816 Int_t modMax=-111;
817 Int_t colMax=-111;
818 Int_t rowMax=-111;
819 Float_t eMax=-333;
820 //!!!for debug!!!
821
6a0d2265 822 for(iDigit=0; iDigit<digits->GetEntries(); iDigit++) {
69464fdb 823 AliPHOSDigit* digit = (AliPHOSDigit*)digits->At(iDigit);
824 if(digit->GetEnergy()>eMax) {
825 PHOSGeometry()->AbsToRelNumbering(digit->GetId(),relId);
826 eMax=digit->GetEnergy();
827 modMax=relId[0];
828 rowMax=relId[2];
829 colMax=relId[3];
830 }
831 }
19309784 832
6a0d2265 833 AliDebug(1,Form("Digit with max. energy: modMax %d colMax %d rowMax %d eMax %f\n\n",
834 modMax,colMax,rowMax,eMax));
69464fdb 835
e4d04cf1 836 return digits->GetEntriesFast() ;
a43c51c3 837}
45c1ce6f 838
b0bba0af 839//____________________________________________________________________________
fd31ff92 840Int_t AliPHOSGetter::ReadTreeD() const
88cb7938 841{
842 // Read the Digits
b0bba0af 843
41c29fde 844 PhosLoader()->CleanDigits() ;
ff808dc7 845 PhosLoader()->LoadDigits("UPDATE") ;
846 PhosLoader()->LoadDigitizer("UPDATE") ;
88cb7938 847 return Digits()->GetEntries() ;
848}
7a9d98f9 849
b0bba0af 850//____________________________________________________________________________
fd31ff92 851Int_t AliPHOSGetter::ReadTreeH() const
88cb7938 852{
853 // Read the Hits
41c29fde 854 PhosLoader()->CleanHits() ;
88cb7938 855 // gets TreeH from the root file (PHOS.Hit.root)
41c29fde 856 //if ( !IsLoaded("H") ) {
88cb7938 857 PhosLoader()->LoadHits("UPDATE") ;
41c29fde 858 // SetLoaded("H") ;
859 //}
88cb7938 860 return Hits()->GetEntries() ;
861}
4ae78bb1 862
88cb7938 863//____________________________________________________________________________
fd31ff92 864Int_t AliPHOSGetter::ReadTreeR() const
88cb7938 865{
866 // Read the RecPoints
b0bba0af 867
41c29fde 868 PhosLoader()->CleanRecPoints() ;
88cb7938 869 // gets TreeR from the root file (PHOS.RecPoints.root)
41c29fde 870 //if ( !IsLoaded("R") ) {
88cb7938 871 PhosLoader()->LoadRecPoints("UPDATE") ;
872 PhosLoader()->LoadClusterizer("UPDATE") ;
41c29fde 873 // SetLoaded("R") ;
874 //}
f1611b7c 875
88cb7938 876 return EmcRecPoints()->GetEntries() ;
b0bba0af 877}
7a9d98f9 878
b0bba0af 879//____________________________________________________________________________
fd31ff92 880Int_t AliPHOSGetter::ReadTreeT() const
88cb7938 881{
882 // Read the TrackSegments
7a9d98f9 883
41c29fde 884 PhosLoader()->CleanTracks() ;
88cb7938 885 // gets TreeT from the root file (PHOS.TrackSegments.root)
41c29fde 886 //if ( !IsLoaded("T") ) {
88cb7938 887 PhosLoader()->LoadTracks("UPDATE") ;
888 PhosLoader()->LoadTrackSegmentMaker("UPDATE") ;
41c29fde 889 // SetLoaded("T") ;
890 //}
fbf811ec 891
88cb7938 892 return TrackSegments()->GetEntries() ;
893}
b0bba0af 894//____________________________________________________________________________
fd31ff92 895Int_t AliPHOSGetter::ReadTreeP() const
88cb7938 896{
41c29fde 897 // Read the RecParticles
88cb7938 898
41c29fde 899 PhosLoader()->CleanRecParticles() ;
900
88cb7938 901 // gets TreeT from the root file (PHOS.TrackSegments.root)
41c29fde 902 // if ( !IsLoaded("P") ) {
88cb7938 903 PhosLoader()->LoadRecParticles("UPDATE") ;
904 PhosLoader()->LoadPID("UPDATE") ;
41c29fde 905 // SetLoaded("P") ;
906 //}
7a9d98f9 907
88cb7938 908 return RecParticles()->GetEntries() ;
909}
910//____________________________________________________________________________
fd31ff92 911Int_t AliPHOSGetter::ReadTreeS() const
88cb7938 912{
913 // Read the SDigits
914
41c29fde 915 PhosLoader()->CleanSDigits() ;
88cb7938 916 // gets TreeS from the root file (PHOS.SDigits.root)
41c29fde 917 //if ( !IsLoaded("S") ) {
7b4c1168 918 PhosLoader()->LoadSDigits("READ") ;
919 PhosLoader()->LoadSDigitizer("READ") ;
41c29fde 920 // SetLoaded("S") ;
921 //}
b0bba0af 922
88cb7938 923 return SDigits()->GetEntries() ;
924}
f1611b7c 925
677c8a30 926//____________________________________________________________________________
927Int_t AliPHOSGetter::ReadTreeE(Int_t event)
928{
929 // Read the ESD
930
931 // gets esdTree from the root file (AliESDs.root)
932 if (!fESDFile)
933 if ( !OpenESDFile() )
934 return -1 ;
935
936 fESDTree = static_cast<TTree*>(fESDFile->Get("esdTree")) ;
937 fESD = new AliESD;
938 if (!fESDTree) {
939
940 Error("ReadTreeE", "no ESD tree found");
941 return -1;
942 }
943 fESDTree->SetBranchAddress("ESD", &fESD);
944 fESDTree->GetEvent(event);
945
946 return event ;
947}
948
88cb7938 949//____________________________________________________________________________
2bb77d5e 950TClonesArray * AliPHOSGetter::SDigits() const
88cb7938 951{
952 // asks the Loader to return the Digits container
b0bba0af 953
88cb7938 954 TClonesArray * rv = 0 ;
955
956 rv = PhosLoader()->SDigits() ;
957 if (!rv) {
958 PhosLoader()->MakeSDigitsArray() ;
959 rv = PhosLoader()->SDigits() ;
960 }
961 return rv ;
b0bba0af 962}
963
964//____________________________________________________________________________
e957fea8 965AliPHOSSDigitizer * AliPHOSGetter::SDigitizer()
88cb7938 966{
e957fea8 967 // Returns pointer to the SDigitizer task
88cb7938 968 AliPHOSSDigitizer * rv ;
969 rv = dynamic_cast<AliPHOSSDigitizer *>(PhosLoader()->SDigitizer()) ;
970 if (!rv) {
971 Event(0, "S") ;
972 rv = dynamic_cast<AliPHOSSDigitizer *>(PhosLoader()->SDigitizer()) ;
b0bba0af 973 }
88cb7938 974 return rv ;
b0bba0af 975}
7a9d98f9 976
b0bba0af 977//____________________________________________________________________________
fc7e2f43 978TParticle * AliPHOSGetter::Secondary(const TParticle* p, Int_t index) const
88cb7938 979{
980 // Return first (index=1) or second (index=2) secondary particle of primary particle p
981
982 if(index <= 0)
983 return 0 ;
984 if(index > 2)
985 return 0 ;
b0bba0af 986
88cb7938 987 if(p) {
988 Int_t daughterIndex = p->GetDaughter(index-1) ;
989 AliRunLoader * rl = AliRunLoader::GetRunLoader(PhosLoader()->GetTitle());
5d12ce38 990 return rl->GetAliRun()->GetMCApp()->Particle(daughterIndex) ;
88cb7938 991 }
992 else
993 return 0 ;
994}
4ae78bb1 995
88cb7938 996//____________________________________________________________________________
fc7e2f43 997void AliPHOSGetter::Track(Int_t itrack)
88cb7938 998{
999 // Read the first entry of PHOS branch in hit tree gAlice->TreeH()
1000
1001 AliRunLoader * rl = AliRunLoader::GetRunLoader(PhosLoader()->GetTitle());
b0bba0af 1002
88cb7938 1003 if( !TreeH() ) // load treeH the first time
1004 rl->LoadHits() ;
b0bba0af 1005
88cb7938 1006 // first time create the container
1007 TClonesArray * hits = Hits() ;
1008 if ( hits )
1009 hits->Clear() ;
b0bba0af 1010
88cb7938 1011 TBranch * phosbranch = dynamic_cast<TBranch*>(TreeH()->GetBranch("PHOS")) ;
1012 phosbranch->SetAddress(&hits) ;
1013 phosbranch->GetEntry(itrack) ;
b0bba0af 1014}
1015
b0bba0af 1016//____________________________________________________________________________
88cb7938 1017TTree * AliPHOSGetter::TreeD() const
1018{
e957fea8 1019 // Returns pointer to the Digits Tree
88cb7938 1020 TTree * rv = 0 ;
1021 rv = PhosLoader()->TreeD() ;
1022 if ( !rv ) {
1023 PhosLoader()->MakeTree("D");
1024 rv = PhosLoader()->TreeD() ;
b0bba0af 1025 }
b0bba0af 1026
88cb7938 1027 return rv ;
b0bba0af 1028}
548f0134 1029
b0bba0af 1030//____________________________________________________________________________
88cb7938 1031TTree * AliPHOSGetter::TreeH() const
1032{
e957fea8 1033 // Returns pointer to the Hits Tree
88cb7938 1034 TTree * rv = 0 ;
1035 rv = PhosLoader()->TreeH() ;
1036 if ( !rv ) {
1037 PhosLoader()->MakeTree("H");
1038 rv = PhosLoader()->TreeH() ;
1039 }
1040
1041 return rv ;
b0bba0af 1042}
7a9d98f9 1043
b0bba0af 1044//____________________________________________________________________________
88cb7938 1045TTree * AliPHOSGetter::TreeR() const
0bc3b8ed 1046{
e957fea8 1047 // Returns pointer to the RecPoints Tree
88cb7938 1048 TTree * rv = 0 ;
1049 rv = PhosLoader()->TreeR() ;
1050 if ( !rv ) {
1051 PhosLoader()->MakeTree("R");
1052 rv = PhosLoader()->TreeR() ;
1053 }
b0bba0af 1054
88cb7938 1055 return rv ;
b0bba0af 1056}
1057
b0bba0af 1058//____________________________________________________________________________
88cb7938 1059TTree * AliPHOSGetter::TreeT() const
0bc3b8ed 1060{
e957fea8 1061 // Returns pointer to the TrackSegments Tree
88cb7938 1062 TTree * rv = 0 ;
1063 rv = PhosLoader()->TreeT() ;
1064 if ( !rv ) {
1065 PhosLoader()->MakeTree("T");
1066 rv = PhosLoader()->TreeT() ;
1067 }
b0bba0af 1068
88cb7938 1069 return rv ;
b0bba0af 1070}
b0bba0af 1071//____________________________________________________________________________
88cb7938 1072TTree * AliPHOSGetter::TreeP() const
0bc3b8ed 1073{
e957fea8 1074 // Returns pointer to the RecParticles Tree
88cb7938 1075 TTree * rv = 0 ;
1076 rv = PhosLoader()->TreeP() ;
1077 if ( !rv ) {
1078 PhosLoader()->MakeTree("P");
1079 rv = PhosLoader()->TreeP() ;
1080 }
4ae78bb1 1081
88cb7938 1082 return rv ;
b0bba0af 1083}
1084
1085//____________________________________________________________________________
88cb7938 1086TTree * AliPHOSGetter::TreeS() const
e957fea8 1087{
1088 // Returns pointer to the SDigits Tree
88cb7938 1089 TTree * rv = 0 ;
1090 rv = PhosLoader()->TreeS() ;
1091 if ( !rv ) {
1092 PhosLoader()->MakeTree("S");
1093 rv = PhosLoader()->TreeS() ;
b0bba0af 1094 }
b0bba0af 1095
88cb7938 1096 return rv ;
b0bba0af 1097}
7a9d98f9 1098
b0bba0af 1099//____________________________________________________________________________
88cb7938 1100Bool_t AliPHOSGetter::VersionExists(TString & opt) const
1101{
1102 // checks if the version with the present name already exists in the same directory
7a9d98f9 1103
88cb7938 1104 Bool_t rv = kFALSE ;
1105
1106 AliRunLoader * rl = AliRunLoader::GetRunLoader(PhosLoader()->GetTitle());
1107 TString version( rl->GetEventFolder()->GetName() ) ;
7a9d98f9 1108
88cb7938 1109 opt.ToLower() ;
b0bba0af 1110
88cb7938 1111 if ( opt == "sdigits") {
1112 // add the version name to the root file name
1113 TString fileName( PhosLoader()->GetSDigitsFileName() ) ;
e191bb57 1114 if (version != AliConfig::GetDefaultEventFolderName()) // only if not the default folder name
88cb7938 1115 fileName = fileName.ReplaceAll(".root", "") + "_" + version + ".root" ;
1116 if ( !(gSystem->AccessPathName(fileName)) ) {
1117 Warning("VersionExists", "The file %s already exists", fileName.Data()) ;
1118 rv = kTRUE ;
4ae78bb1 1119 }
88cb7938 1120 PhosLoader()->SetSDigitsFileName(fileName) ;
b0bba0af 1121 }
7a9d98f9 1122
88cb7938 1123 if ( opt == "digits") {
1124 // add the version name to the root file name
1125 TString fileName( PhosLoader()->GetDigitsFileName() ) ;
e191bb57 1126 if (version != AliConfig::GetDefaultEventFolderName()) // only if not the default folder name
88cb7938 1127 fileName = fileName.ReplaceAll(".root", "") + "_" + version + ".root" ;
1128 if ( !(gSystem->AccessPathName(fileName)) ) {
1129 Warning("VersionExists", "The file %s already exists", fileName.Data()) ;
1130 rv = kTRUE ;
7a9d98f9 1131 }
b0bba0af 1132 }
7a9d98f9 1133
88cb7938 1134 return rv ;
7a9d98f9 1135
b0bba0af 1136}
88cb7938 1137
7bb289a7 1138//____________________________________________________________________________
88cb7938 1139UShort_t AliPHOSGetter::EventPattern(void) const
0bc3b8ed 1140{
1141 // Return the pattern (trigger bit register) of the beam-test event
7bb289a7 1142 if(fBTE)
1143 return fBTE->GetPattern() ;
1144 else
1145 return 0 ;
1146}
1147//____________________________________________________________________________
88cb7938 1148Float_t AliPHOSGetter::BeamEnergy(void) const
0bc3b8ed 1149{
1150 // Return the beam energy of the beam-test event
7bb289a7 1151 if(fBTE)
1152 return fBTE->GetBeamEnergy() ;
1153 else
1154 return 0 ;
1155}
7ca0684e 1156//____________________________________________________________________________
1157
1158AliPHOSCalibData* AliPHOSGetter::CalibData()
1159{
ef868168 1160 // Check if the instance of AliPHOSCalibData exists, and return it
7ca0684e 1161
2bb77d5e 1162 return fgCalibData;
7ca0684e 1163}