Transition to NewIO
[u/mrichter/AliRoot.git] / PHOS / AliPHOSGetter.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 /* $Log:
19    29.05.2001 Yuri Kharlov:
20               Everywhere reading the treese TTree->GetEvent(i)
21               is replaced by reading the branches TBranch->GetEntry(0)
22 */
23 /* $Log:
24    08.2002 Dmitri Peressounko:
25
26 */
27
28 //_________________________________________________________________________
29 //  A singleton. This class should be used in the analysis stage to get 
30 //  reconstructed objects: Digits, RecPoints, TrackSegments and RecParticles,
31 //  instead of directly reading them from galice.root file. This container 
32 //  ensures, that one reads Digits, made of these particular digits, RecPoints, 
33 //  made of these particular RecPoints, TrackSegments and RecParticles. 
34 //  This becomes non trivial if there are several identical branches, produced with
35 //  different set of parameters. 
36 //
37 //  An example of how to use (see also class AliPHOSAnalyser):
38 //  AliPHOSGetter * gime = AliPHOSGetter::GetInstance("galice.root","test") ;
39 //  for(Int_t irecp = 0; irecp < gime->NRecParticles() ; irecp++)
40 //     AliPHOSRecParticle * part = gime->RecParticle(1) ;
41 //     ................
42 //  gime->Event(event) ;    // reads new event from galice.root
43 //                  
44 //*-- Author: Yves Schutz (SUBATECH) & Dmitri Peressounko (RRC KI & SUBATECH)
45 //*--         Completely redesigned by Dmitri Peressounko March 2001  
46 //
47 //*-- YS June 2001 : renamed the original AliPHOSIndexToObject and make
48 //*--         systematic usage of TFolders without changing the interface        
49 //////////////////////////////////////////////////////////////////////////////
50
51 // --- ROOT system ---
52
53 #include "TSystem.h"
54 #include "TFile.h"
55 #include "TROOT.h"
56
57
58 // --- Standard library ---
59
60 // --- AliRoot header files ---
61
62 #include "AliPHOSGetter.h"
63 #include "AliRunLoader.h"
64 #include "AliStack.h"  
65 #include "AliPHOSLoader.h"
66 // #include "AliPHOSRaw2Digits.h"
67 //#include "AliPHOSCalibrationDB.h"
68 #include "AliPHOSBeamTestEvent.h"
69
70 ClassImp(AliPHOSGetter)
71   
72 AliPHOSGetter * AliPHOSGetter::fgObjGetter = 0 ; 
73 AliPHOSLoader * AliPHOSGetter::fgPhosLoader = 0;
74 Int_t AliPHOSGetter::fgDebug = 0;
75
76 //  TFile * AliPHOSGetter::fgFile = 0 ; 
77
78 //____________________________________________________________________________ 
79 AliPHOSGetter::AliPHOSGetter(const char* headerFile, const char* version, Option_t * openingOption)
80 {
81   // ctor only called by Instance()
82
83   AliRunLoader* rl = AliRunLoader::GetRunLoader(version) ; 
84   if (!rl) {
85     rl = AliRunLoader::Open(headerFile, version, openingOption);
86     if (!rl) {
87       Fatal("AliPHOSGetter", "Could not find the Run Loader for %s - %s",headerFile, version) ; 
88       return ;
89     } 
90     if (rl->GetAliRun() == 0x0) {
91       rl->LoadgAlice();
92       gAlice = rl->GetAliRun(); // should be removed
93     }
94   }
95   fgPhosLoader = dynamic_cast<AliPHOSLoader*>(rl->GetLoader("PHOSLoader"));
96   if ( !fgPhosLoader ) 
97     Error("AliPHOSGetter", "Could not find PHOSLoader") ; 
98   else 
99     fgPhosLoader->SetTitle(version);
100   
101   
102   // initialize data members
103   SetDebug(0) ; 
104   fBTE = 0 ; 
105   fPrimaries = 0 ; 
106   fLoadingStatus = "" ; 
107 }
108
109 //____________________________________________________________________________ 
110 AliPHOSGetter::~AliPHOSGetter()
111 {
112   // dtor
113   delete fgPhosLoader ;
114   fgPhosLoader = 0 ;
115   delete fBTE ; 
116   fBTE = 0 ; 
117   fPrimaries->Delete() ; 
118   delete fPrimaries ; 
119 }
120
121 //____________________________________________________________________________ 
122 AliPHOSClusterizer * AliPHOSGetter::Clusterizer()
123
124   AliPHOSClusterizer * rv ; 
125   rv =  dynamic_cast<AliPHOSClusterizer *>(PhosLoader()->Reconstructioner()) ;
126   if (!rv) {
127     Event(0, "R") ; 
128     rv =  dynamic_cast<AliPHOSClusterizer*>(PhosLoader()->Reconstructioner()) ;
129   }
130   return rv ; 
131 }
132
133 //____________________________________________________________________________ 
134 TObjArray * AliPHOSGetter::CpvRecPoints() 
135 {
136   // asks the Loader to return the CPV RecPoints container 
137
138   TObjArray * rv = 0 ; 
139   
140   rv = PhosLoader()->CpvRecPoints() ; 
141   if (!rv) {
142     PhosLoader()->MakeRecPointsArray() ;
143     rv = PhosLoader()->CpvRecPoints() ; 
144   }
145   return rv ; 
146 }
147
148 //____________________________________________________________________________ 
149 TClonesArray * AliPHOSGetter::Digits() 
150 {
151   // asks the Loader to return the Digits container 
152
153   TClonesArray * rv = 0 ; 
154   rv = PhosLoader()->Digits() ; 
155
156   if( !rv ) {
157     PhosLoader()->MakeDigitsArray() ; 
158     rv = PhosLoader()->Digits() ;
159   }
160   return rv ; 
161 }
162
163 //____________________________________________________________________________ 
164 AliPHOSDigitizer * AliPHOSGetter::Digitizer() 
165
166   AliPHOSDigitizer * rv ; 
167   rv =  dynamic_cast<AliPHOSDigitizer *>(PhosLoader()->Digitizer()) ;
168   if (!rv) {
169     Event(0, "D") ; 
170     rv =  dynamic_cast<AliPHOSDigitizer *>(PhosLoader()->Digitizer()) ;
171   }
172   return rv ; 
173 }
174
175
176 //____________________________________________________________________________ 
177 TObjArray * AliPHOSGetter::EmcRecPoints() 
178 {
179   // asks the Loader to return the EMC RecPoints container 
180
181   TObjArray * rv = 0 ; 
182   
183   rv = PhosLoader()->EmcRecPoints() ; 
184   if (!rv) {
185     PhosLoader()->MakeRecPointsArray() ;
186     rv = PhosLoader()->EmcRecPoints() ; 
187   }
188   return rv ; 
189 }
190
191 //____________________________________________________________________________ 
192 TClonesArray * AliPHOSGetter::TrackSegments() 
193 {
194   // asks the Loader to return the TrackSegments container 
195
196   TClonesArray * rv = 0 ; 
197   
198   rv = PhosLoader()->TrackSegments() ; 
199   if (!rv) {
200     PhosLoader()->MakeTrackSegmentsArray() ;
201     rv = PhosLoader()->TrackSegments() ; 
202   }
203   return rv ; 
204 }
205
206 //____________________________________________________________________________ 
207 AliPHOSTrackSegmentMaker * AliPHOSGetter::TrackSegmentMaker() 
208
209   AliPHOSTrackSegmentMaker * rv ; 
210   rv =  dynamic_cast<AliPHOSTrackSegmentMaker *>(PhosLoader()->TrackSegmentMaker()) ;
211   if (!rv) {
212     Event(0, "T") ; 
213     rv =  dynamic_cast<AliPHOSTrackSegmentMaker *>(PhosLoader()->TrackSegmentMaker()) ;
214   }
215   return rv ; 
216 }
217
218 //____________________________________________________________________________ 
219 TClonesArray * AliPHOSGetter::RecParticles() 
220 {
221   // asks the Loader to return the TrackSegments container 
222
223   TClonesArray * rv = 0 ; 
224   
225   rv = PhosLoader()->RecParticles() ; 
226   if (!rv) {
227     PhosLoader()->MakeRecParticlesArray() ;
228     rv = PhosLoader()->RecParticles() ; 
229   }
230   return rv ; 
231 }
232 //____________________________________________________________________________ 
233 void AliPHOSGetter::Event(const Int_t event, const char* opt) 
234 {
235   // Reads the content of all Tree's S, D and R
236
237   if ( event >= MaxEvent() ) {
238     Error("Event", "%d not found in TreeE !", event) ; 
239     return ; 
240   }
241
242   AliRunLoader * rl = AliRunLoader::GetRunLoader(PhosLoader()->GetTitle());
243
244   // checks if we are dealing with test-beam data
245   TBranch * btb = rl->TreeE()->GetBranch("AliPHOSBeamTestEvent") ;
246   if(btb){
247     if(!fBTE)
248       fBTE = new AliPHOSBeamTestEvent() ;
249     btb->SetAddress(&fBTE) ;
250     btb->GetEntry(event) ;
251   }
252   else{
253     if(fBTE){
254       delete fBTE ;
255       fBTE = 0 ;
256     }
257   }
258
259   // Loads the type of object(s) requested
260   
261   rl->GetEvent(event) ;
262
263   if( strstr(opt,"X") || (strcmp(opt,"")==0) )
264     ReadPrimaries() ;
265
266   if(strstr(opt,"H") )
267     ReadTreeH();
268
269   if(strstr(opt,"S") )
270     ReadTreeS() ;
271
272   if( strstr(opt,"D") )
273     ReadTreeD() ;
274
275   if( strstr(opt,"R") )
276     ReadTreeR() ;
277
278   if( strstr(opt,"T") )
279     ReadTreeT() ;
280
281   if( strstr(opt,"P") )
282     ReadTreeP() ;
283
284 //   if( strstr(opt,"Q") )
285 //     ReadTreeQA() ;
286  
287 }
288
289
290 //____________________________________________________________________________ 
291 Int_t AliPHOSGetter::EventNumber() const
292   {
293   // return the current event number
294   AliRunLoader * rl = AliRunLoader::GetRunLoader(PhosLoader()->GetTitle());
295   return static_cast<Int_t>(rl->GetEventNumber()) ;   
296 }
297
298 //____________________________________________________________________________ 
299   TClonesArray * AliPHOSGetter::Hits()  
300 {
301   // asks the loader to return  the Hits container 
302   
303   TClonesArray * rv = 0 ; 
304   
305   rv = PhosLoader()->Hits() ; 
306   if ( !rv ) {
307     PhosLoader()->LoadHits("read"); 
308     rv = PhosLoader()->Hits() ; 
309   }
310   return rv ; 
311 }
312
313 //____________________________________________________________________________ 
314 AliPHOSGetter * AliPHOSGetter::Instance(const char* alirunFileName, const char* version, Option_t * openingOption) 
315 {
316   // Creates and returns the pointer of the unique instance
317   // Must be called only when the environment has changed
318   
319   //::Info("Instance","alirunFileName=%s version=%s openingOption=%s",alirunFileName,version,openingOption);
320   
321   if(!fgObjGetter){ // first time the getter is called 
322     fgObjGetter = new AliPHOSGetter(alirunFileName, version, openingOption) ;
323   }
324   else { // the getter has been called previously
325     AliRunLoader * rl = AliRunLoader::GetRunLoader(fgPhosLoader->GetTitle());
326     if ( rl->GetFileName() == alirunFileName ) {// the alirunFile has the same name
327       // check if the file is already open
328       TFile * galiceFile = dynamic_cast<TFile *>(gROOT->FindObject(rl->GetFileName()) ) ; 
329       
330       if ( !galiceFile ) 
331         fgObjGetter = new AliPHOSGetter(alirunFileName, version, openingOption) ;
332       
333       else {  // the file is already open check the version name
334         TString currentVersionName = rl->GetEventFolder()->GetName() ; 
335         TString newVersionName(version) ; 
336         if (currentVersionName == newVersionName) 
337           if(fgDebug)
338             ::Warning( "Instance", "Files with version %s already open", currentVersionName.Data() ) ;  
339         else {
340           fgObjGetter = new AliPHOSGetter(alirunFileName, version, openingOption) ;      
341         }
342       }
343     }
344     else 
345       fgObjGetter = new AliPHOSGetter(alirunFileName, version, openingOption) ;      
346   }
347   if (!fgObjGetter) 
348     ::Error("Instance", "Failed to create the PHOS Getter object") ;
349   else 
350     if (fgDebug)
351       Print() ;
352   
353   return fgObjGetter ;
354 }
355
356 //____________________________________________________________________________ 
357 AliPHOSGetter *  AliPHOSGetter::Instance()
358 {
359   // Returns the pointer of the unique instance already defined
360   
361   if(!fgObjGetter)
362      ::Error("Instance", "Getter not initialized") ;
363
364    return fgObjGetter ;
365            
366 }
367
368 //____________________________________________________________________________ 
369 Int_t AliPHOSGetter::MaxEvent() const 
370 {
371   // returns the number of events in the run (from TE)
372
373   AliRunLoader * rl = AliRunLoader::GetRunLoader(PhosLoader()->GetTitle());
374   return static_cast<Int_t>(rl->GetNumberOfEvents()) ; 
375 }
376
377 //____________________________________________________________________________ 
378 TParticle * AliPHOSGetter::Primary(Int_t index) const
379 {
380   AliRunLoader * rl = AliRunLoader::GetRunLoader(PhosLoader()->GetTitle());
381   return rl->Stack()->Particle(index) ; 
382
383
384 //____________________________________________________________________________ 
385 AliPHOS * AliPHOSGetter:: PHOS() const  
386 {
387   // returns the PHOS object 
388   AliPHOS * phos = dynamic_cast<AliPHOS*>(PhosLoader()->GetModulesFolder()->FindObject("PHOS")) ;  
389   if (!phos) 
390     if (fgDebug)
391       Warning("PHOS", "PHOS module not found in module folders: %s", PhosLoader()->GetModulesFolder()->GetName() ) ; 
392   return phos ; 
393 }  
394
395
396
397 //____________________________________________________________________________ 
398 AliPHOSPID * AliPHOSGetter::PID() 
399
400   AliPHOSPID * rv ; 
401   rv =  dynamic_cast<AliPHOSPID *>(PhosLoader()->PIDTask()) ;
402   if (!rv) {
403     Event(0, "P") ; 
404     rv =  dynamic_cast<AliPHOSPID *>(PhosLoader()->PIDTask()) ;
405   }
406   return rv ; 
407 }
408
409 //____________________________________________________________________________ 
410 AliPHOSGeometry * AliPHOSGetter::PHOSGeometry() const 
411 {
412   // Returns PHOS geometry
413
414   AliPHOSGeometry * rv = 0 ; 
415   if (PHOS() )
416     rv =  PHOS()->GetGeometry() ;
417   return rv ; 
418
419
420 //____________________________________________________________________________ 
421 TClonesArray * AliPHOSGetter::Primaries()  
422 {
423   // creates the Primaries container if needed
424   if ( !fPrimaries ) {
425     if (fgDebug) 
426       Info("Primaries", "Creating a new TClonesArray for primaries") ; 
427     fPrimaries = new TClonesArray("TParticle", 1000) ;
428   } 
429   return fPrimaries ; 
430 }
431
432 //____________________________________________________________________________ 
433 void  AliPHOSGetter::Print() 
434 {
435   // Print usefull information about the getter
436     
437   AliRunLoader * rl = AliRunLoader::GetRunLoader(fgPhosLoader->GetTitle());
438   ::Info( "Print", "gAlice file is %s -- version name is %s", (rl->GetFileName()).Data(), rl->GetEventFolder()->GetName() ) ; 
439 }
440
441 //____________________________________________________________________________ 
442 void AliPHOSGetter::ReadPrimaries()  
443 {
444   // Read Primaries from Kinematics.root
445   
446   AliRunLoader * rl = AliRunLoader::GetRunLoader(PhosLoader()->GetTitle());
447   
448   // gets kine tree from the root file (Kinematics.root)
449   if ( ! rl->TreeK() )  // load treeK the first time
450     rl->LoadKinematics() ;
451   
452   fNPrimaries = rl->Stack()->GetNtrack() ; 
453
454   if (fgDebug) 
455     Info( "ReadTreeK", "Found %d particles in event # %d", fNPrimaries, EventNumber() ) ; 
456
457
458   // first time creates the container
459   if ( Primaries() ) 
460     fPrimaries->Clear() ; 
461   
462   Int_t index = 0 ; 
463   for (index = 0 ; index < fNPrimaries; index++) { 
464     new ((*fPrimaries)[index]) TParticle(*(Primary(index)));
465   }
466 }
467
468 //____________________________________________________________________________ 
469 Int_t AliPHOSGetter::ReadTreeD()
470 {
471   // Read the Digits
472   
473   
474   // gets TreeD from the root file (PHOS.SDigits.root)
475   if ( !IsLoaded("D") ) {
476     PhosLoader()->LoadDigits("UPDATE") ;
477     PhosLoader()->LoadDigitizer("UPDATE") ;
478     SetLoaded("D") ; 
479   } 
480   return Digits()->GetEntries() ; 
481 }
482
483 //____________________________________________________________________________ 
484 Int_t AliPHOSGetter::ReadTreeH()
485 {
486   // Read the Hits
487     
488   // gets TreeH from the root file (PHOS.Hit.root)
489   if ( !IsLoaded("H") ) {
490     PhosLoader()->LoadHits("UPDATE") ;
491     SetLoaded("H") ; 
492   }  
493   return Hits()->GetEntries() ; 
494 }
495
496 //____________________________________________________________________________ 
497 Int_t AliPHOSGetter::ReadTreeR()
498 {
499   // Read the RecPoints
500   
501   
502   // gets TreeR from the root file (PHOS.RecPoints.root)
503   if ( !IsLoaded("R") ) {
504     PhosLoader()->LoadRecPoints("UPDATE") ;
505     PhosLoader()->LoadClusterizer("UPDATE") ;
506     SetLoaded("R") ; 
507   }
508
509   return EmcRecPoints()->GetEntries() ; 
510 }
511
512 //____________________________________________________________________________ 
513 Int_t AliPHOSGetter::ReadTreeT()
514 {
515   // Read the TrackSegments
516   
517   
518   // gets TreeT from the root file (PHOS.TrackSegments.root)
519   if ( !IsLoaded("T") ) {
520     PhosLoader()->LoadTracks("UPDATE") ;
521     PhosLoader()->LoadTrackSegmentMaker("UPDATE") ;
522     SetLoaded("T") ; 
523   }
524
525   return TrackSegments()->GetEntries() ; 
526 }
527 //____________________________________________________________________________ 
528 Int_t AliPHOSGetter::ReadTreeP()
529 {
530   // Read the TrackSegments
531   
532   
533   // gets TreeT from the root file (PHOS.TrackSegments.root)
534   if ( !IsLoaded("P") ) {
535     PhosLoader()->LoadRecParticles("UPDATE") ;
536     PhosLoader()->LoadPID("UPDATE") ;
537     SetLoaded("P") ; 
538   }
539
540   return RecParticles()->GetEntries() ; 
541 }
542 //____________________________________________________________________________ 
543 Int_t AliPHOSGetter::ReadTreeS()
544 {
545   // Read the SDigits
546   
547   
548   // gets TreeS from the root file (PHOS.SDigits.root)
549   if ( !IsLoaded("S") ) {
550     PhosLoader()->LoadSDigits("UPDATE") ;
551     PhosLoader()->LoadSDigitizer("UPDATE") ;
552     SetLoaded("S") ; 
553   }
554
555   return SDigits()->GetEntries() ; 
556 }
557
558 //____________________________________________________________________________ 
559 TClonesArray * AliPHOSGetter::SDigits() 
560 {
561   // asks the Loader to return the Digits container 
562
563   TClonesArray * rv = 0 ; 
564   
565   rv = PhosLoader()->SDigits() ; 
566   if (!rv) {
567     PhosLoader()->MakeSDigitsArray() ;
568     rv = PhosLoader()->SDigits() ; 
569   }
570   return rv ; 
571 }
572
573 //____________________________________________________________________________ 
574 AliPHOSSDigitizer * AliPHOSGetter::SDigitizer() 
575
576   AliPHOSSDigitizer * rv ; 
577   rv =  dynamic_cast<AliPHOSSDigitizer *>(PhosLoader()->SDigitizer()) ;
578   if (!rv) {
579     Event(0, "S") ; 
580     rv =  dynamic_cast<AliPHOSSDigitizer *>(PhosLoader()->SDigitizer()) ;
581   }
582   return rv ; 
583 }
584
585 //____________________________________________________________________________ 
586 TParticle * AliPHOSGetter::Secondary(const TParticle* p, const Int_t index) const
587 {
588   // Return first (index=1) or second (index=2) secondary particle of primary particle p 
589
590   if(index <= 0) 
591     return 0 ;
592   if(index > 2)
593     return 0 ;
594
595   if(p) {
596   Int_t daughterIndex = p->GetDaughter(index-1) ; 
597   AliRunLoader * rl = AliRunLoader::GetRunLoader(PhosLoader()->GetTitle());
598   return  rl->GetAliRun()->Particle(daughterIndex) ; 
599   }
600   else
601     return 0 ;
602 }
603
604 //____________________________________________________________________________ 
605 void AliPHOSGetter::Track(const Int_t itrack) 
606 {
607   // Read the first entry of PHOS branch in hit tree gAlice->TreeH()
608  
609  AliRunLoader * rl = AliRunLoader::GetRunLoader(PhosLoader()->GetTitle());
610
611   if( !TreeH() ) // load treeH the first time
612     rl->LoadHits() ;
613
614   // first time create the container
615   TClonesArray * hits = Hits() ; 
616   if ( hits ) 
617     hits->Clear() ; 
618
619   TBranch * phosbranch = dynamic_cast<TBranch*>(TreeH()->GetBranch("PHOS")) ; 
620   phosbranch->SetAddress(&hits) ;
621   phosbranch->GetEntry(itrack) ;
622 }
623
624 //____________________________________________________________________________ 
625 TTree * AliPHOSGetter::TreeD() const 
626 {
627   TTree * rv = 0 ; 
628   rv = PhosLoader()->TreeD() ; 
629   if ( !rv ) {
630     PhosLoader()->MakeTree("D");
631     rv = PhosLoader()->TreeD() ;
632   } 
633   
634   return rv ; 
635 }
636
637 //____________________________________________________________________________ 
638 TTree * AliPHOSGetter::TreeH() const 
639 {
640   TTree * rv = 0 ; 
641   rv = PhosLoader()->TreeH() ; 
642   if ( !rv ) {
643     PhosLoader()->MakeTree("H");
644     rv = PhosLoader()->TreeH() ;
645   } 
646   
647   return rv ; 
648 }
649
650 //____________________________________________________________________________ 
651 TTree * AliPHOSGetter::TreeR() const 
652 {
653   TTree * rv = 0 ; 
654   rv = PhosLoader()->TreeR() ; 
655   if ( !rv ) {
656     PhosLoader()->MakeTree("R");
657     rv = PhosLoader()->TreeR() ;
658   } 
659   
660   return rv ; 
661 }
662
663 //____________________________________________________________________________ 
664 TTree * AliPHOSGetter::TreeT() const 
665 {
666   TTree * rv = 0 ; 
667   rv = PhosLoader()->TreeT() ; 
668   if ( !rv ) {
669     PhosLoader()->MakeTree("T");
670     rv = PhosLoader()->TreeT() ;
671   } 
672   
673   return rv ; 
674 }
675 //____________________________________________________________________________ 
676 TTree * AliPHOSGetter::TreeP() const 
677 {
678   TTree * rv = 0 ; 
679   rv = PhosLoader()->TreeP() ; 
680   if ( !rv ) {
681     PhosLoader()->MakeTree("P");
682     rv = PhosLoader()->TreeP() ;
683   } 
684   
685   return rv ; 
686 }
687
688 //____________________________________________________________________________ 
689 TTree * AliPHOSGetter::TreeS() const 
690 {
691   TTree * rv = 0 ; 
692   rv = PhosLoader()->TreeS() ; 
693   if ( !rv ) {
694     PhosLoader()->MakeTree("S");
695     rv = PhosLoader()->TreeS() ;
696   } 
697   
698   return rv ; 
699 }
700
701 //____________________________________________________________________________ 
702 Bool_t AliPHOSGetter::VersionExists(TString & opt) const
703 {
704   // checks if the version with the present name already exists in the same directory
705
706   Bool_t rv = kFALSE ;
707  
708   AliRunLoader * rl = AliRunLoader::GetRunLoader(PhosLoader()->GetTitle());
709   TString version( rl->GetEventFolder()->GetName() ) ; 
710
711   opt.ToLower() ; 
712   
713   if ( opt == "sdigits") {
714     // add the version name to the root file name
715     TString fileName( PhosLoader()->GetSDigitsFileName() ) ; 
716     if (version != AliConfig::fgkDefaultEventFolderName) // only if not the default folder name 
717       fileName = fileName.ReplaceAll(".root", "") + "_" + version + ".root" ;
718     if ( !(gSystem->AccessPathName(fileName)) ) { 
719       Warning("VersionExists", "The file %s already exists", fileName.Data()) ;
720       rv = kTRUE ; 
721     }
722     PhosLoader()->SetSDigitsFileName(fileName) ;
723   }
724
725   if ( opt == "digits") {
726     // add the version name to the root file name
727     TString fileName( PhosLoader()->GetDigitsFileName() ) ; 
728     if (version != AliConfig::fgkDefaultEventFolderName) // only if not the default folder name 
729       fileName = fileName.ReplaceAll(".root", "") + "_" + version + ".root" ;
730     if ( !(gSystem->AccessPathName(fileName)) ) {
731       Warning("VersionExists", "The file %s already exists", fileName.Data()) ;  
732       rv = kTRUE ; 
733     }
734     PhosLoader()->SetDigitsFileName(fileName) ;
735   }
736
737   return rv ;
738
739 }
740
741 //____________________________________________________________________________ 
742 UShort_t AliPHOSGetter::EventPattern(void) const
743 {
744   // Return the pattern (trigger bit register) of the beam-test event
745   if(fBTE)
746     return fBTE->GetPattern() ;
747   else
748     return 0 ;
749 }
750 //____________________________________________________________________________ 
751 Float_t AliPHOSGetter::BeamEnergy(void) const
752 {
753   // Return the beam energy of the beam-test event
754   if(fBTE)
755     return fBTE->GetBeamEnergy() ;
756   else
757     return 0 ;
758 }