1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
19 29.05.2001 Yuri Kharlov:
20 Everywhere reading the treese TTree->GetEvent(i)
21 is replaced by reading the branches TBranch->GetEntry(0)
24 08.2002 Dmitri Peressounko:
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.
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) ;
42 // gime->Event(event) ; // reads new event from galice.root
44 //*-- Author: Yves Schutz (SUBATECH) & Dmitri Peressounko (RRC KI & SUBATECH)
45 //*-- Completely redesigned by Dmitri Peressounko March 2001
47 //*-- YS June 2001 : renamed the original AliPHOSIndexToObject and make
48 //*-- systematic usage of TFolders without changing the interface
49 //////////////////////////////////////////////////////////////////////////////
52 // --- ROOT system ---
56 #include "TObjString.h"
58 #include "TParticle.h"
60 // --- Standard library ---
63 // --- AliRoot header files ---
66 #include "AliConfig.h"
67 #include "AliPHOSGetter.h"
69 #include "AliPHOSDigitizer.h"
70 #include "AliPHOSSDigitizer.h"
71 #include "AliPHOSClusterizerv1.h"
72 #include "AliPHOSTrackSegmentMakerv1.h"
73 #include "AliPHOSTrackSegment.h"
74 #include "AliPHOSPIDv1.h"
75 #include "AliPHOSGeometry.h"
77 ClassImp(AliPHOSGetter)
79 AliPHOSGetter * AliPHOSGetter::fgObjGetter = 0 ;
80 TFile * AliPHOSGetter::fFile = 0 ;
82 //____________________________________________________________________________
83 AliPHOSGetter::AliPHOSGetter(const char* headerFile, const char* branchTitle, const Bool_t toSplit )
85 // This is the ctor called by GetInstance and the only one that can be used
87 if( fHeaderFile.Contains("_") ) {
88 cerr << "AliPHOSGetter::AliPHOSGetter -> Invalid file name (_ not allowed) " << fHeaderFile.Data() << endl ;
99 fHeaderFile = headerFile ;
101 fPrimaries = new TObjArray(1) ;
103 fModuleFolder = dynamic_cast<TFolder*>(gROOT->FindObjectAny("Folders/Run/Configuration/Modules"));
104 fPrimariesFolder = dynamic_cast<TFolder*>(gROOT->FindObjectAny("Folders/RunMC/Event/Data"));
105 fHitsFolder = dynamic_cast<TFolder*>(gROOT->FindObjectAny("Folders/RunMC/Event/Data/Hits"));
106 fSDigitsFolder = dynamic_cast<TFolder*>(gROOT->FindObjectAny("Folders/RunMC/Event/Data/SDigits"));
107 fDigitsFolder = dynamic_cast<TFolder*>(gROOT->FindObjectAny("Folders/Run/Event/Data"));
108 fRecoFolder = dynamic_cast<TFolder*>(gROOT->FindObjectAny("Folders/Run/Event/RecData"));
109 fQAFolder = dynamic_cast<TFolder*>(gROOT->FindObjectAny("Folders/Run/Conditions/QA"));
110 fTasksFolder = dynamic_cast<TFolder*>(gROOT->FindObjectAny("Folders/Tasks")) ;
112 //Set titles to branches and create PHOS specific folders
113 SetTitle(branchTitle) ;
115 if ( fHeaderFile != "aliroot" ) { // to call the getter without a file
117 fFile = static_cast<TFile*>(gROOT->GetFile(fHeaderFile.Data() ) ) ;
119 if(!fFile) { //if file was not opened yet, read gAlice
120 fFile = TFile::Open(fHeaderFile.Data(),"update") ;
121 if (!fFile->IsOpen()) {
122 cerr << "ERROR : AliPHOSGetter::AliPHOSGetter -> Cannot open " << fHeaderFile.Data() << endl ;
126 gAlice = static_cast<AliRun *>(fFile->Get("gAlice")) ;
131 cerr << "ERROR : AliPHOSGetter::AliPHOSGetter -> Cannot find gAlice in " << fHeaderFile.Data() << endl ;
137 cout << "INFO: AliPHOSGetter:AliPHOSGetter -> Posting PHOS to Folders" << endl ;
138 if (gAlice->GetDetector("PHOS")) {
139 AliConfig * conf = AliConfig::Instance() ;
140 conf->Add(static_cast<AliDetector*>(gAlice->GetDetector("PHOS"))) ;
141 conf->Add(static_cast<AliModule*>(gAlice->GetDetector("PHOS"))) ;
144 cerr << "ERROR: AliPHOSGetter:AliPHOSGetter -> detector PHOS not found" << endl ;
150 //____________________________________________________________________________
151 AliPHOSGetter::~AliPHOSGetter(){
154 fPrimaries->Delete() ;
158 TFolder * phosF = dynamic_cast<TFolder *>(fSDigitsFolder->FindObject("PHOS")) ;
159 TCollection * folderslist = phosF->GetListOfFolders() ;
160 TIter next(folderslist) ;
161 TFolder * folder = 0 ;
162 while ( (folder = static_cast<TFolder*>(next())) )
163 phosF->Remove(folder) ;
174 //____________________________________________________________________________
175 void AliPHOSGetter::CloseFile()
183 //____________________________________________________________________________
184 const TFolder * AliPHOSGetter::Folder(const TString what) const {
186 // returns the PHOS folder required by what
187 // what = hits, sdigits, digits
189 if ( what == "hits" )
190 return dynamic_cast<const TFolder *>(fHitsFolder->FindObject("PHOS")) ;
191 else if ( what == "sdigits" )
192 return dynamic_cast<const TFolder *>(fSDigitsFolder->FindObject("PHOS")) ;
193 else if ( what == "digits" )
194 return dynamic_cast<const TFolder *>(fDigitsFolder->FindObject("PHOS")) ;
196 cerr << "ERROR: AliPHOSGetter::GetFolder -> " << what.Data() << " illegal option (hits, sdigits, digits) " << endl ;
201 //____________________________________________________________________________
202 AliPHOSGetter * AliPHOSGetter::GetInstance()
204 // Returns the pointer of the unique instance already defined
207 // if (fFile) // not the case if fManager
212 //cout << "WARNING: AliPHOSGetter::GetInstance ERROR: not yet initialized" << endl ;
217 //____________________________________________________________________________
218 AliPHOSGetter * AliPHOSGetter::GetInstance(const char* headerFile,
219 const char* branchTitle,
220 const Bool_t toSplit)
222 // Creates and returns the pointer of the unique instance
223 // Must be called only when the environment has changed
225 fgObjGetter = new AliPHOSGetter(headerFile,branchTitle,toSplit) ;
226 if(fgObjGetter->fFailed)
232 //First checks, if header file already opened
233 if(!fgObjGetter->fFile){
234 fgObjGetter = new AliPHOSGetter(headerFile,branchTitle,toSplit) ;
235 if(fgObjGetter->fFailed)
241 if(fgObjGetter->fHeaderFile.CompareTo(headerFile)==0){ //Opened the same header file
242 if((fgObjGetter->fBranchTitle.CompareTo(branchTitle) == 0)&& //Open the same branch title
243 (toSplit==fgObjGetter->fToSplit)){ //Nothing should be cleaned
246 else{ //Clean all data and AliPHOS...zers
247 if(fgObjGetter->fToSplit)
248 fgObjGetter->CloseSplitFiles() ;
249 fgObjGetter->CleanWhiteBoard() ;
250 fgObjGetter->fToSplit = toSplit ;
251 fgObjGetter->SetTitle(branchTitle) ;
255 else{ //Close already opened files, clean memory and open new header file
259 if(fgObjGetter->fFile){
260 fgObjGetter->fFile->Close() ;
261 fgObjGetter->fFile=0;
263 if(fgObjGetter->fToSplit)
264 fgObjGetter->CloseSplitFiles() ;
265 fgObjGetter->CleanWhiteBoard() ;
266 fgObjGetter = new AliPHOSGetter(headerFile,branchTitle,toSplit) ;
273 //____________________________________________________________________________
274 const Bool_t AliPHOSGetter::BranchExists(const TString recName) const
276 //Looks in the tree Tree"name" if branch with current name olready exists
278 TString filename("") ;
279 TString name, dataname, zername ;
280 if(recName == "SDigits"){
281 filename=fSDigitsFileName ;
284 zername = "AliPHOSSDigitizer" ;
287 if(recName == "Digits"){
288 filename=fDigitsFileName ;
291 zername = "AliPHOSDigitizer" ;
294 if(recName == "RecPoints"){
295 filename=fRecPointsFileName ;
297 dataname = "PHOSEmcRP" ;
298 zername = "AliPHOSClusterizer" ;
301 if(recName == "TrackSegments"){
302 filename=fTrackSegmentsFileName ;
304 dataname = "PHOSTS" ;
305 zername = "AliPHOSTrackSegmentMaker" ;
308 if(recName == "RecParticles"){
309 filename= fRecParticlesFileName ;
311 dataname = "PHOSRP" ;
312 zername = "AliPHOSPID" ;
320 file = static_cast<TFile*>(gROOT->GetFile(filename.Data() ) ) ;
322 file = TFile::Open(fSDigitsFileName.Data(),"update");
327 tree = (TTree *)file->Get(name.Data()) ;
332 TObjArray * lob = static_cast<TObjArray*>(tree->GetListOfBranches()) ;
334 TBranch * branch = 0 ;
335 TString titleName(fBranchTitle);
337 while ((branch = (static_cast<TBranch*>(next())))) {
338 TString branchName(branch->GetName() ) ;
339 TString branchTitle(branch->GetTitle() ) ;
340 if ( branchName.BeginsWith(dataname) && branchTitle.BeginsWith(fBranchTitle) ){
341 cerr << "WARNING: AliPHOSGetter::BranchExists -> branch " << dataname.Data() << " with title " << fBranchTitle << " already exits in "
342 << name.Data() << endl;
345 if ( branchName.BeginsWith(zername) && branchTitle.BeginsWith(titleName) ){
346 cerr << "WARNING: AliPHOSGetter::BranchExists -> branch AliPHOS... with title " << branch->GetTitle() << " already exits in "
347 << name.Data() << endl;
357 //____________________________________________________________________________
358 void AliPHOSGetter::ListBranches(Int_t event) const
361 TBranch * branch = 0 ;
362 if (gAlice->GetEvent(event) == -1)
365 TTree * t = gAlice->TreeH() ;
367 cout << "INFO: AliPHOSGetter::ListBranches -> ****** Hits : " << endl ;
368 TObjArray * lob = t->GetListOfBranches() ;
370 while ( (branch = static_cast<TBranch*>(next())) )
371 cout << " " << branch->GetName() << endl ;
373 cerr << "WARNING::AliPHOSGetter::ListBranches -> TreeH not found for event " << event << endl ;
375 t = gAlice->TreeS() ;
377 cout << "INFO: AliPHOSGetter::ListBranches -> ****** SDigits : " << endl ;
378 TObjArray * lob = t->GetListOfBranches() ;
380 while ( (branch = static_cast<TBranch*>(next())) )
381 cout << " " << branch->GetName() << " " << branch->GetTitle() << endl ;
383 cerr << "WARNING::AliPHOSGetter::ListBranches -> TreeS not found for event " << event << endl ;
386 t = gAlice->TreeD() ;
388 cout << "INFO: AliPHOSGetter::ListBranches -> ****** Digits : " << endl ;
389 TObjArray * lob = t->GetListOfBranches() ;
391 while ( (branch = static_cast<TBranch*>(next())) )
392 cout << " " << branch->GetName() << " " << branch->GetTitle() << endl ;
394 cerr << "WARNING::AliPHOSGetter::ListBranches -> TreeD not found for event " << event << endl ;
397 t = gAlice->TreeR() ;
399 cout << "INFO: AliPHOSGetter::ListBranches -> ****** Recon : " << endl ;
400 TObjArray * lob = t->GetListOfBranches() ;
402 while ( (branch = static_cast<TBranch*>(next())) )
403 cout << " " << branch->GetName() << " " << branch->GetTitle() << endl ;
405 cerr << "WARNING::AliPHOSGetter::ListBranches -> TreeR not found for event " << event << endl ;
409 //____________________________________________________________________________
410 void AliPHOSGetter::NewBranch(TString name, Int_t event)
412 fBranchTitle = fSDigitsTitle = fDigitsTitle = fRecPointsTitle = fTrackSegmentsTitle = fRecParticlesTitle = name ;
416 //____________________________________________________________________________
417 Bool_t AliPHOSGetter::NewFile(TString name)
423 fFile = static_cast<TFile*>(gROOT->GetFile(fHeaderFile.Data() ) ) ;
424 if(!fFile) { //if file was not opened yet, read gAlice
425 fFile = TFile::Open(fHeaderFile.Data(),"update") ;
426 if (!fFile->IsOpen()) {
427 cerr << "ERROR : AliPHOSGetter::NewFile -> Cannot open " << fHeaderFile.Data() << endl ;
431 gAlice = static_cast<AliRun *>(fFile->Get("gAlice")) ;
435 cerr << "ERROR : AliPHOSGetter::AliPHOSGetter -> Cannot find gAlice in " << fHeaderFile.Data() << endl ;
442 //____________________________________________________________________________
443 const AliPHOS * AliPHOSGetter::PHOS()
445 // returns the PHOS object
446 AliPHOS * phos = dynamic_cast<AliPHOS*>(fModuleFolder->FindObject("PHOS")) ;
449 cout << "WARNING: AliPHOSGetter::PHOS -> PHOS module not found in Folders" << endl ;
453 //____________________________________________________________________________
454 const AliPHOSGeometry * AliPHOSGetter::PHOSGeometry()
456 AliPHOSGeometry * rv = 0 ;
458 rv = PHOS()->GetGeometry() ;
462 //____________________________________________________________________________
463 const Bool_t AliPHOSGetter::PostPrimaries(void) const
464 { //------- Primaries ----------------------
466 // the hierarchy is //Folders/RunMC/Event/Data/Primaries
468 TFolder * primariesFolder = dynamic_cast<TFolder*>(fPrimariesFolder->FindObject("Primaries")) ;
469 if ( !primariesFolder ) {
471 cout << "WARNING: AliPHOSGetter::Post Primaries -> Folder //" << fPrimariesFolder->GetName() << "/Primaries/ not found!" << endl;
472 cout << "INFO: AliPHOSGetter::Post Primaries -> Adding Folder //" << fPrimariesFolder->GetName() << "/Primaries/" << endl;
474 primariesFolder = fPrimariesFolder->AddFolder("Primaries", "Primaries particles from TreeK") ;
476 TClonesArray *primaries= new TClonesArray("TParticle",1000) ;
477 primaries->SetName("Primaries") ;
478 primariesFolder->Add(primaries) ;
483 //____________________________________________________________________________
484 TObject** AliPHOSGetter::PrimariesRef(void) const
485 { //------- Primaries ----------------------
488 // the hierarchy is //Folders/RunMC/Event/Data/Primaries
489 if ( !fPrimariesFolder ) {
490 cerr << "ERROR: AliPHOSGetter::PrimariesRef -> Folder //" << fPrimariesFolder << " not found!" << endl;
494 TFolder * primariesFolder = dynamic_cast<TFolder *>(fPrimariesFolder->FindObject("Primaries")) ;
495 if ( !primariesFolder ) {
496 cerr << "ERROR: AliPHOSGetter::PrimariesRef -> Folder //" << fPrimariesFolder << "/Primaries/ not found!" << endl;
500 TObject * p = primariesFolder->FindObject("Primaries") ;
502 cerr << "ERROR: AliPHOSGetter::PrimariesRef -> " << primariesFolder->GetName() << "/Primaries not found !" << endl ;
506 return primariesFolder->GetListOfFolders()->GetObjectRef(p) ;
509 //____________________________________________________________________________
510 const Bool_t AliPHOSGetter::PostHits(void) const
511 { //------- Hits ----------------------
513 // the hierarchy is //Folders/RunMC/Event/Data/PHOS/Hits
515 TFolder * phosFolder = dynamic_cast<TFolder*>(fHitsFolder->FindObject("PHOS")) ;
518 cout << "WARNING: AliPHOSGetter::Post H -> Folder //" << fHitsFolder << "/PHOS/ not found!" << endl;
519 cout << "INFO: AliPHOSGetter::Post H -> Adding Folder //" << fHitsFolder << "/PHOS/" << endl;
521 phosFolder = fHitsFolder->AddFolder("PHOS", "Hits from PHOS") ;
523 TClonesArray *hits= new TClonesArray("AliPHOSHit",1000) ;
524 hits->SetName("Hits") ;
525 phosFolder->Add(hits) ;
530 //____________________________________________________________________________
531 TObject** AliPHOSGetter::HitsRef(void) const
532 { //------- Hits ----------------------
535 // the hierarchy is //Folders/RunMC/Event/Data/PHOS/Hits
536 if ( !fHitsFolder ) {
537 cerr << "ERROR: AliPHOSGetter::HitsRef -> Folder //" << fHitsFolder << " not found!" << endl;
541 TFolder * phosFolder = dynamic_cast<TFolder *>(fHitsFolder->FindObject("PHOS")) ;
543 cerr << "ERROR: AliPHOSGetter::HitsRef -> Folder //" << fHitsFolder << "/PHOS/ not found!" << endl;
547 TObject * h = phosFolder->FindObject("Hits") ;
549 cerr << "ERROR: AliPHOSGetter::HitsRef -> " << phosFolder->GetName() << "/Hits not found !" << endl ;
553 return phosFolder->GetListOfFolders()->GetObjectRef(h) ;
556 //____________________________________________________________________________
557 const Bool_t AliPHOSGetter::PostSDigits(const char * name, const char * headerFile) const
558 { //---------- SDigits -------------------------
561 // the hierarchy is //Folders/RunMC/Event/Data/PHOS/SDigits/headerFile/sdigitsname
562 // because you can have sdigits from several hit files for mixing
564 TFolder * phosFolder = dynamic_cast<TFolder*>(fSDigitsFolder->FindObject("PHOS")) ;
567 cout << "WARNING: AliPHOSGetter::Post S -> Folder //" << fSDigitsFolder << "/PHOS/ not found!" << endl;
568 cout << "INFO: AliPHOSGetter::Post S -> Adding Folder //" << fHitsFolder << "/PHOS/" << endl;
570 phosFolder = fSDigitsFolder->AddFolder("PHOS", "SDigits from PHOS") ;
573 TString subdir(headerFile) ;
574 subdir.ReplaceAll("/","_") ;
575 TFolder * phosSubFolder = dynamic_cast<TFolder*>(phosFolder->FindObject(subdir)) ;
576 if ( !phosSubFolder )
577 phosSubFolder = phosFolder->AddFolder(subdir, "");
580 TObject * sd = phosSubFolder->FindObject(name);
582 TClonesArray * sdigits = new TClonesArray("AliPHOSDigit",1) ;
583 sdigits->SetName(name) ;
584 phosSubFolder->Add(sdigits) ;
589 //____________________________________________________________________________
590 TObject** AliPHOSGetter::SDigitsRef(const char * name, const char * file) const
591 { //------- SDigits ----------------------
593 // the hierarchy is //Folders/RunMC/Event/Data/PHOS/SDigits/filename/SDigits
595 if ( !fSDigitsFolder ) {
596 cerr << "ERROR: AliPHOSGetter::SDigitsRef -> Folder //" << fSDigitsFolder << " not found!" << endl;
600 TFolder * phosFolder = dynamic_cast<TFolder *>(fSDigitsFolder->FindObject("PHOS")) ;
602 cerr << "ERROR: AliPHOSGetter::SDigitsRef -> Folder //" << fSDigitsFolder << "/PHOS/ not found!" << endl;
606 TFolder * phosSubFolder = 0 ;
608 phosSubFolder = dynamic_cast<TFolder *>(phosFolder->FindObject(file)) ;
610 phosSubFolder = dynamic_cast<TFolder *>(phosFolder->FindObject(fHeaderFile)) ;
613 cerr << "ERROR: AliPHOSGetter::DigitesSRef -> Folder //Folders/RunMC/Event/Data/PHOS/" << file << "not found!" << endl;
617 TObject * dis = phosSubFolder->FindObject(name) ;
619 cerr << "ERROR: AliPHOSGetter::DigitesSRef -> object " << name << " not found! " << endl ;
623 return phosSubFolder->GetListOfFolders()->GetObjectRef(dis) ;
627 //____________________________________________________________________________
628 const Bool_t AliPHOSGetter::PostSDigitizer(AliPHOSSDigitizer * sdigitizer) const
629 { //---------- SDigitizer -------------------------
631 // the hierarchy is //Folders/Tasks/SDigitizer/PHOS/sdigitsname
634 TTask * sd = dynamic_cast<TTask*>(fTasksFolder->FindObject("SDigitizer")) ;
637 cerr << "ERROR: AliPHOSGetter::Post Ser -> Task //" << fTasksFolder << "/SDigitizer not found!" << endl;
640 TTask * phos = dynamic_cast<TTask*>(sd->GetListOfTasks()->FindObject("PHOS")) ;
643 cout <<"WARNING: AliPHOSGetter::Post Ser ->//" << fTasksFolder << "/SDigitizer/PHOS/ not found!" << endl;
644 cout <<"INFO: AliPHOSGetter::Post Ser -> Adding //" << fTasksFolder << "/SDigitizer/PHOS/" << endl;
646 phos = new TTask("PHOS", "") ;
649 AliPHOSSDigitizer * phossd = dynamic_cast<AliPHOSSDigitizer *>(phos->GetListOfTasks()->FindObject( sdigitizer->GetName() ));
652 cout << "INFO: AliPHOSGetter::Post Ser -> Task " << sdigitizer->GetName() << " already exists" << endl ;
653 phos->GetListOfTasks()->Remove(phossd) ;
655 phos->Add(sdigitizer) ;
660 //____________________________________________________________________________
661 TObject** AliPHOSGetter::SDigitizerRef(const char * name) const
664 TTask * sd = dynamic_cast<TTask*>(fTasksFolder->FindObject("SDigitizer")) ;
666 cerr << "ERROR: AliPHOSGetter::Post SerRef -> Task //" << fTasksFolder << "/SDigitizer not found!" << endl;
670 TTask * phos = dynamic_cast<TTask*>(sd->GetListOfTasks()->FindObject("PHOS")) ;
672 cerr <<"ERROR: AliPHOSGetter::Post SerRef -> //" << fTasksFolder << "/SDigitizer/PHOS not found!" << endl;
676 TTask * task = dynamic_cast<TTask*>(phos->GetListOfTasks()->FindObject(name)) ;
678 return phos->GetListOfTasks()->GetObjectRef(task) ;
682 //____________________________________________________________________________
683 const Bool_t AliPHOSGetter::PostSDigitizer(const char * name, const char * file) const
684 { //---------- SDigitizer -------------------------
686 // the hierarchy is //Folders/Tasks/SDigitizer/PHOS/sdigitsname
688 TTask * sd = dynamic_cast<TTask*>(fTasksFolder->FindObject("SDigitizer")) ;
690 cerr << "ERROR: AliPHOSGetter::Post Ser -> Task //" << fTasksFolder << "/SDigitizer not found!" << endl;
694 TTask * phos = dynamic_cast<TTask*>(sd->GetListOfTasks()->FindObject("PHOS")) ;
697 cout <<"WARNING: AliPHOSGetter::Post Ser -> //" << fTasksFolder << "/SDigitizer/PHOS/ not found!" << endl;
698 cout <<"INFO: AliPHOSGetter::Post Ser -> Adding //" << fTasksFolder << "/SDigitizer/PHOS" << endl;
700 phos = new TTask("PHOS", "") ;
704 TString sdname(name) ;
707 sdname.ReplaceAll("/","_") ;
708 AliPHOSSDigitizer * phossd = dynamic_cast<AliPHOSSDigitizer *>(phos->GetListOfTasks()->FindObject( sdname ));
710 phossd = new AliPHOSSDigitizer() ;
711 //Note, we can not call constructor with parameters: it will call Getter and scew up everething
712 phossd->SetName(sdname) ;
713 phossd->SetTitle(file) ;
719 //____________________________________________________________________________
720 const Bool_t AliPHOSGetter::PostDigits(const char * name) const
721 { //---------- Digits -------------------------
723 // the hierarchy is //Folders/Run/Event/Data/PHOS/SDigits/name
725 TFolder * phosFolder = dynamic_cast<TFolder*>(fDigitsFolder->FindObject("PHOS")) ;
729 cout << "WARNING: AliPHOSGetter::Post D -> Folder //" << fDigitsFolder << "/PHOS/ not found!" << endl;
730 cout << "INFO: AliPHOSGetter::Post D -> Adding Folder //" << fDigitsFolder << "/PHOS/" << endl;
732 phosFolder = fDigitsFolder->AddFolder("PHOS", "Digits from PHOS") ;
735 TObject* dig = phosFolder->FindObject( name ) ;
737 TClonesArray * digits = new TClonesArray("AliPHOSDigit",1000) ;
738 digits->SetName(name) ;
739 phosFolder->Add(digits) ;
744 //____________________________________________________________________________
745 TObject** AliPHOSGetter::DigitsRef(const char * name) const
746 { //------- Digits ----------------------
748 // the hierarchy is //Folders/Run/Event/Data/PHOS/Digits/name
750 if ( !fDigitsFolder ) {
751 cerr << "ERROR: AliPHOSGetter::DigitsRef -> Folder //" << fDigitsFolder << " not found!" << endl;
755 TFolder * phosFolder = dynamic_cast<TFolder*>(fDigitsFolder->FindObject("PHOS")) ;
757 cerr << "ERROR: AliPHOSGetter::DigitsRef -> Folder //" << fDigitsFolder << "/PHOS/ not found!" << endl;
761 TObject * d = phosFolder->FindObject(name) ;
763 cerr << "ERROR: AliPHOSGetter::DigitsRef -> object " << name << " not found! " << endl ;
767 return phosFolder->GetListOfFolders()->GetObjectRef(d) ;
771 //____________________________________________________________________________
772 const Bool_t AliPHOSGetter::PostDigitizer(AliPHOSDigitizer * digitizer) const
773 { //---------- Digitizer -------------------------
775 TTask * sd = dynamic_cast<TTask*>(fTasksFolder->FindObject("Digitizer")) ;
778 cerr << "ERROR: AliPHOSGetter::Post Der -> Task //" << fTasksFolder << "/Digitizer not found!" << endl;
781 TTask * phos = dynamic_cast<TTask*>(sd->GetListOfTasks()->FindObject("PHOS")) ;
784 cout <<"WARNING: AliPHOSGetter::Post Der -> //" << fTasksFolder << "/Digitizer/PHOS not found!" << endl;
785 cout <<"INFO: AliPHOSGetter::Post Der -> Adding //" << fTasksFolder << "/Digitizer/PHOS" << endl;
787 phos = new TTask("PHOS", "") ;
791 AliPHOSDigitizer * phosd = dynamic_cast<AliPHOSDigitizer*>(phos->GetListOfTasks()->FindObject(digitizer->GetName())) ;
794 phos->GetListOfTasks()->Remove(phosd) ;
796 phos->Add(digitizer) ;
800 //____________________________________________________________________________
801 const Bool_t AliPHOSGetter::PostDigitizer(const char * name) const
802 { //---------- Digitizer -------------------------
804 // the hierarchy is //Folders/Tasks/SDigitizer/PHOS/sdigitsname
806 TTask * d = dynamic_cast<TTask*>(fTasksFolder->FindObject("Digitizer")) ;
808 cerr << "ERROR: AliPHOSGetter::Post Der -> Task //" << fTasksFolder << "/Digitizer not found!" << endl;
812 TTask * phos = dynamic_cast<TTask*>(d->GetListOfTasks()->FindObject("PHOS")) ;
815 cout <<"WARNING: AliPHOSGetter::Post Der -> //" << fTasksFolder << "/Digitizer/PHOS not found!" << endl;
816 cout <<"INFO: AliPHOSGetter::Post Der -> Adding //" << fTasksFolder << "/Digitizer/PHOS" << endl;
818 phos = new TTask("PHOS", "") ;
822 AliPHOSDigitizer * phosd = dynamic_cast<AliPHOSDigitizer*>(phos->GetListOfTasks()->FindObject(name)) ;
824 phosd = new AliPHOSDigitizer() ;
825 phosd->SetName(fDigitsTitle) ;
826 phosd->SetTitle(fHeaderFile) ;
832 //____________________________________________________________________________
833 TObject** AliPHOSGetter::DigitizerRef(const char * name) const
835 TTask * sd = dynamic_cast<TTask*>(fTasksFolder->FindObject("Digitizer")) ;
837 cerr << "ERROR: AliPHOSGetter::Post DerRef -> Task //" << fTasksFolder << "/Digitizer not found!" << endl;
841 TTask * phos = dynamic_cast<TTask*>(sd->GetListOfTasks()->FindObject("PHOS")) ;
843 cerr <<"ERROR: AliPHOSGetter::Post DerRef -> //" << fTasksFolder << "/Digitizer/PHOS" << endl;
847 TTask * task = dynamic_cast<TTask*>(phos->GetListOfTasks()->FindObject(name)) ;
849 return phos->GetListOfTasks()->GetObjectRef(task) ;
853 //____________________________________________________________________________
854 const Bool_t AliPHOSGetter::PostRecPoints(const char * name) const
855 { // -------------- RecPoints -------------------------------------------
857 // the hierarchy is //Folders/Run/Event/RecData/PHOS/EMCARecPoints/name
858 // the hierarchy is //Folders/Run/Event/RecData/PHOS/CPVRecPoints/name
860 TFolder * phosFolder = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS")) ;
864 cout << "WARNING: AliPHOSGetter::Post RPo -> Folder //" << fRecoFolder->GetName() << "/PHOS/ not found!" << endl;
865 cout << "INFO: AliPHOSGetter::Post Rpo -> Adding Folder //" << fRecoFolder->GetName() << "/PHOS/" << endl;
867 phosFolder = fRecoFolder->AddFolder("PHOS", "Reconstructed data from PHOS") ;
871 TFolder * phosRPoEMCAFolder = dynamic_cast<TFolder*>(phosFolder->FindObject("EMCARecPoints")) ;
872 if ( !phosRPoEMCAFolder ) {
874 cout << "WARNING: AliPHOSGetter::Post RPo -> Folder //" << fRecoFolder->GetName() << "/PHOS/EMCARecPoints/ not found!" << endl;
875 cout << "INFO: AliPHOSGetter::Post Rpo -> Adding Folder //" << fRecoFolder->GetName() << "/PHOS/EMCARecPoints" << endl;
877 phosRPoEMCAFolder = phosFolder->AddFolder("EMCARecPoints", "EMCA RecPoints from PHOS") ;
880 TObject * erp = phosFolder->FindObject( name ) ;
882 TObjArray * emcrp = new TObjArray(100) ;
883 emcrp->SetName(name) ;
884 phosRPoEMCAFolder->Add(emcrp) ;
888 TFolder * phosRPoCPVFolder = dynamic_cast<TFolder*>(phosFolder->FindObject("CPVRecPoints")) ;
889 if ( !phosRPoCPVFolder ) {
891 cout << "WARNING: AliPHOSGetter::Post RPo -> Folder //" << fRecoFolder->GetName() << "/PHOS/CPVRecPoints/ not found!" << endl;
892 cout << "INFO: AliPHOSGetter::Post Rpo -> Adding Folder //" << fRecoFolder->GetName() << "/PHOS/CPVRecPoints/" << endl;
894 phosRPoCPVFolder = phosFolder->AddFolder("CPVRecPoints", "CPV RecPoints from PHOS") ;
897 TObject * crp = phosRPoCPVFolder->FindObject( name ) ;
899 TObjArray * cpvrp = new TObjArray(100) ;
900 cpvrp->SetName(name) ;
901 phosRPoCPVFolder->Add(cpvrp) ;
906 //____________________________________________________________________________
907 TObject** AliPHOSGetter::EmcRecPointsRef(const char * name) const
908 { // -------------- RecPoints -------------------------------------------
910 // the hierarchy is //Folders/Run/Event/RecData/PHOS/EMCARecPoints/name
912 if ( !fRecoFolder ) {
913 cerr << "ERROR: AliPHOSGetter::EmcRecPointsRef -> Folder //" << fRecoFolder->GetName() << " not found!" << endl;
917 TFolder * phosFolder = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/EMCARecPoints")) ;
919 cerr << "ERROR: AliPHOSGetter::EmcRecPointsRef -> Folder //" << fRecoFolder->GetName() << "/PHOS/EMCARecPoints/ not found!" << endl;
924 TObject * erp = phosFolder->FindObject(name ) ;
926 cerr << "ERROR: AliPHOSGetter::EmcRecPointsRef -> object " << name << " not found! " << endl ;
929 return phosFolder->GetListOfFolders()->GetObjectRef(erp) ;
933 //____________________________________________________________________________
934 TObject** AliPHOSGetter::CpvRecPointsRef(const char * name) const
935 { // -------------- RecPoints -------------------------------------------
937 // the hierarchy is //Folders/Run/Event/RecData/PHOS/CPVRecPoints/name
939 if ( !fRecoFolder ) {
940 cerr << "ERROR: AliPHOSGetter::CpvRecPointsRef -> Folder //" << fRecoFolder->GetName() << " not found!" << endl;
944 TFolder * phosFolder = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/CPVRecPoints")) ;
946 cerr << "ERROR: AliPHOSGetter::CpvRecPointsRef -> Folder //" << fRecoFolder->GetName() << "/PHOS/CPVRecPoints/" << endl;
950 TObject * crp = phosFolder->FindObject(name ) ;
952 cerr << "ERROR: AliPHOSGetter::CpvRecPointsRef -> object " << name << " not found " << endl ;
955 return phosFolder->GetListOfFolders()->GetObjectRef(crp) ;
959 //____________________________________________________________________________
960 const Bool_t AliPHOSGetter::PostClusterizer(AliPHOSClusterizer * clu) const
961 { // ------------------ AliPHOSClusterizer ------------------------
963 // the hierarchy is //Folders/Tasks/Reconstructioner/PHOS/sdigitsname
965 TTask * tasks = dynamic_cast<TTask*>(fTasksFolder->FindObject("Reconstructioner")) ;
968 cerr << "ERROR: AliPHOSGetter::Post Rer -> Task //" << fTasksFolder << "/Reconstructioner not found!" << endl;
972 TTask * phos = dynamic_cast<TTask*>(tasks->GetListOfTasks()->FindObject("PHOS")) ;
975 cout <<"WARNING: AliPHOSGetter::Post Rer -> //" << fTasksFolder << "/Reconstructioner/PHOS not found!" << endl;
976 cout <<"INFO: AliPHOSGetter::Post Rer -> Adding //" << fTasksFolder << "/Reconstructioner/PHOS" << endl;
978 phos = new TTask("PHOS", "") ;
982 AliPHOSClusterizer * phoscl = dynamic_cast<AliPHOSClusterizer*>(phos->GetListOfTasks()->FindObject(clu->GetName())) ;
985 cout << "INFO: AliPHOSGetter::Post Rer -> Task " << clu->GetName() << " already exists" << endl ;
987 phos->GetListOfTasks()->Remove(phoscl) ;
993 //____________________________________________________________________________
994 TObject** AliPHOSGetter::ClusterizerRef(const char * name) const
995 { // ------------------ AliPHOSClusterizer ------------------------
997 TTask * tasks = dynamic_cast<TTask*>(fTasksFolder->FindObject("Reconstructioner")) ;
1000 cerr << "ERROR: AliPHOSGetter::ClusterizerRef -> Task //" << fTasksFolder->GetName() << "/Reconstructioner not found!" << endl;
1004 TTask * phos = dynamic_cast<TTask*>(tasks->GetListOfTasks()->FindObject("PHOS")) ;
1006 cerr <<"WARNING: AliPHOSGetter::ClusterizerRef -> //" << fTasksFolder->GetName() << "/Reconstructioner/PHOS" << endl;
1010 TList * l = phos->GetListOfTasks() ;
1014 TString cluname(name) ;
1016 while((task = static_cast<TTask *>(it.Next()) )){
1017 TString taskname(task->GetName()) ;
1018 if(taskname.BeginsWith(cluname)){
1025 return l->GetObjectRef(clu) ;
1027 cerr << "ERROR: AliPHOSGetter::ClusterizerRef -> Task //" << fTasksFolder->GetName() << "/Reconstructioner/clusterizer " << name << " not found!" << endl;
1032 //____________________________________________________________________________
1033 const Bool_t AliPHOSGetter::PostClusterizer(const char * name) const
1034 { // ------------------ AliPHOSClusterizer ------------------------
1036 // the hierarchy is //Folders/Tasks/Reconstructioner/PHOS/sdigitsname
1038 TTask * tasks = dynamic_cast<TTask*>(fTasksFolder->FindObject("Reconstructioner")) ;
1041 cerr << "ERROR: AliPHOSGetter::Post Rer -> Task//" << fTasksFolder << "/Reconstructioner not found!" << endl;
1045 TTask * phos = dynamic_cast<TTask*>(tasks->GetListOfTasks()->FindObject("PHOS")) ;
1048 cout <<"WARNING: AliPHOSGetter::Post Rer -> //" << fTasksFolder << "/Reconstructioner/PHOS not found!" << endl;
1049 cout <<"INFO: AliPHOSGetter::Post Rer -> Adding //" << fTasksFolder << "/Reconstructioner/PHOS" << endl;
1051 phos = new TTask("PHOS", "") ;
1055 TList * l = phos->GetListOfTasks() ;
1057 TString clun(name) ;
1060 while((task = static_cast<TTask *>(it.Next()) )){
1061 TString taskname(task->GetName()) ;
1062 if(taskname.BeginsWith(clun))
1066 AliPHOSClusterizerv1 * phoscl = new AliPHOSClusterizerv1() ;
1068 phoscl->SetName(clun) ;
1069 phoscl->SetTitle(fHeaderFile) ;
1075 //____________________________________________________________________________
1076 const Bool_t AliPHOSGetter::PostTrackSegments(const char * name) const
1077 { // ---------------TrackSegments -----------------------------------
1079 // the hierarchy is //Folders/Run/Event/RecData/PHOS/TrackSegments/name
1081 TFolder * phosFolder = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS")) ;
1083 if ( !phosFolder ) {
1085 cout << "WARNING: AliPHOSGetter::Post TS -> Folder //" << fRecoFolder->GetName() << "/PHOS/ not found!" << endl;
1086 cout << "INFO: AliPHOSGetter::Post TS -> Adding Folder //" << fRecoFolder->GetName() << "/PHOS" << endl;
1088 phosFolder = fRecoFolder->AddFolder("PHOS", "Reconstructed data from PHOS") ;
1091 TFolder * phosTSFolder = dynamic_cast<TFolder*>(phosFolder->FindObject("TrackSegments")) ;
1092 if ( !phosTSFolder ) {
1094 cout << "WARNING: AliPHOSGetter::Post TS -> Folder //" << fRecoFolder->GetName() << "/PHOS/TrackSegments/ not found!" << endl;
1095 cout << "INFO: AliPHOSGetter::Post TS -> Adding Folder //" << fRecoFolder->GetName() << "/PHOS/TrackSegments/" << endl;
1097 phosTSFolder = phosFolder->AddFolder("TrackSegments", "TrackSegments from PHOS") ;
1100 TObject * tss = phosTSFolder->FindObject( name ) ;
1102 TClonesArray * ts = new TClonesArray("AliPHOSTrackSegment",100) ;
1104 phosTSFolder->Add(ts) ;
1109 //____________________________________________________________________________
1110 TObject** AliPHOSGetter::TrackSegmentsRef(const char * name) const
1111 { // ---------------TrackSegments -----------------------------------
1113 // the hierarchy is //Folders/Run/Event/RecData/PHOS/TrackSegments/name
1115 if ( !fRecoFolder ) {
1116 cerr << "ERROR: AliPHOSGetter::TrackSegmentsRef -> Folder //" << fRecoFolder->GetName() << "not found!" << endl;
1120 TFolder * phosFolder = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/TrackSegments")) ;
1121 if ( !phosFolder ) {
1122 cerr << "ERROR: AliPHOSGetter::TrackSegmentsRef -> Folder //" << fRecoFolder->GetName() << "/PHOS/TrackSegments/ not found!" << endl;
1126 TObject * tss = phosFolder->FindObject(name) ;
1128 cerr << "ERROR: AliPHOSGetter::TrackSegmentsRef -> object " << name << " not found! " << endl ;
1131 return phosFolder->GetListOfFolders()->GetObjectRef(tss) ;
1134 //____________________________________________________________________________
1135 const Bool_t AliPHOSGetter::PostTrackSegmentMaker(AliPHOSTrackSegmentMaker * tsmaker) const
1136 { //------------Track Segment Maker ------------------------------
1138 // the hierarchy is //Folders/Tasks/Reconstructioner/PHOS/sdigitsname
1140 TTask * tasks = dynamic_cast<TTask*>(fTasksFolder->FindObject("Reconstructioner")) ;
1143 cerr << "ERROR: AliPHOSGetter::Post Ter -> Task //" << fTasksFolder << "/Reconstructioner not found!" << endl;
1147 TTask * phos = dynamic_cast<TTask*>(tasks->GetListOfTasks()->FindObject("PHOS")) ;
1150 cout <<"WARNING: AliPHOSGetter::Post Rer -> //" << fTasksFolder << "/Reconstructioner/PHOS not found!" << endl;
1151 cout <<"INFO: AliPHOSGetter::Post Rer -> Adding //" << fTasksFolder << "/Reconstructioner/PHOS" << endl;
1153 phos = new TTask("PHOS", "") ;
1157 AliPHOSTrackSegmentMaker * phosts =
1158 dynamic_cast<AliPHOSTrackSegmentMaker*>(phos->GetListOfTasks()->FindObject(tsmaker->GetName())) ;
1161 phos->GetListOfTasks()->Remove(phosts) ;
1163 phos->Add(tsmaker) ;
1167 //____________________________________________________________________________
1168 const Bool_t AliPHOSGetter::PostTrackSegmentMaker(const char * name) const
1169 { //------------Track Segment Maker ------------------------------
1171 // the hierarchy is //Folders/Tasks/Reconstructioner/PHOS/sdigitsname
1174 TTask * tasks = dynamic_cast<TTask*>(fTasksFolder->FindObject("Reconstructioner")) ;
1177 cerr << "ERROR: AliPHOSGetter::Post Ter -> Task //" << fTasksFolder->GetName() << "/Reconstructioner not found!" << endl;
1181 TTask * phos = dynamic_cast<TTask*>(tasks->GetListOfTasks()->FindObject("PHOS")) ;
1184 cout <<"WARNING: AliPHOSGetter::Post Ter -> //" << fTasksFolder->GetName() << "/Reconstructioner/PHOS not found!" << endl;
1185 cout <<"INFO: AliPHOSGetter::Post Ter -> Adding //" << fTasksFolder->GetName() << "/Reconstructioner/PHOS" << endl;
1187 phos = new TTask("PHOS", "") ;
1191 TList * l = phos->GetListOfTasks() ;
1196 while((task = static_cast<TTask *>(it.Next()) )){
1197 TString taskname(task->GetName()) ;
1198 if(taskname.BeginsWith(tsn))
1202 AliPHOSTrackSegmentMakerv1 * phosts = new AliPHOSTrackSegmentMakerv1() ;
1204 phosts->SetName(tsn) ;
1205 phosts->SetTitle(fHeaderFile) ;
1211 //____________________________________________________________________________
1212 TObject** AliPHOSGetter::TSMakerRef(const char * name) const
1213 { //------------Track Segment Maker ------------------------------
1215 TTask * tasks = dynamic_cast<TTask*>(fTasksFolder->FindObject("Reconstructioner")) ;
1218 cerr << "ERROR: AliPHOSGetter::TSMakerRef -> Task //" << fTasksFolder->GetName() << "/Reconstructioner not found!" << endl;
1222 TTask * phos = dynamic_cast<TTask*>(tasks->GetListOfTasks()->FindObject("PHOS")) ;
1224 cerr <<"WARNING: AliPHOSGetter::TSMakerRef -> //" << fTasksFolder->GetName() << "/Reconstructioner/PHOS not found!" << endl;
1228 TList * l = phos->GetListOfTasks() ;
1232 TString tsmname(name) ;
1234 while((task = static_cast<TTask *>(it.Next()) )){
1235 TString taskname(task->GetName()) ;
1236 if(taskname.BeginsWith(tsmname)){
1243 return l->GetObjectRef(tsm) ;
1245 cerr << "ERROR: AliPHOSGetter::TSMakerRef -> Task //" << fTasksFolder->GetName() << "/Reconstructioner/PHOS/TrackSegmentMarker/" << name << " not found!" << endl;
1250 //____________________________________________________________________________
1251 const Bool_t AliPHOSGetter::PostRecParticles(const char * name) const
1252 { // -------------------- RecParticles ------------------------
1254 // the hierarchy is //Folders/Run/Event/RecData/PHOS/RecParticles/name
1256 TFolder * phosFolder = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS")) ;
1258 if ( !phosFolder ) {
1260 cout << "WARNING: AliPHOSGetter::Post RPa -> Folder //" << fRecoFolder->GetName() << "/PHOS/ not found!" << endl;
1261 cout << "INFO: AliPHOSGetter::Post Rpa -> Adding Folder //" << fRecoFolder->GetName() << "/PHOS/" << endl;
1263 phosFolder = fRecoFolder->AddFolder("PHOS", "Reconstructed data from PHOS") ;
1266 TFolder * phosRPaFolder = dynamic_cast<TFolder*>(phosFolder->FindObject("RecParticles")) ;
1267 if ( !phosRPaFolder ) {
1269 cout << "WARNING: AliPHOSGetter::Post RPa -> Folder //" << fRecoFolder->GetName() << "/PHOS/RecParticles/ not found!" << endl;
1270 cout << "INFO: AliPHOSGetter::Post RPa -> Adding Folder //" << fRecoFolder->GetName() << "/PHOS/RecParticles/" << endl;
1272 phosRPaFolder = phosFolder->AddFolder("RecParticles", "RecParticles from PHOS") ;
1275 TObject * rps = phosRPaFolder->FindObject( name ) ;
1277 TClonesArray * rp = new TClonesArray("AliPHOSRecParticle",100) ;
1279 phosRPaFolder->Add(rp) ;
1284 //____________________________________________________________________________
1285 TObject** AliPHOSGetter::RecParticlesRef(const char * name) const
1286 { // ---------------TrackSegments -----------------------------------
1288 // the hierarchy is //Folders/Run/Event/RecData/PHOS/TrackSegments/name
1290 if ( !fRecoFolder ) {
1291 cerr << "ERROR: AliPHOSGetter::RecParticlesRef -> Folder//" << fRecoFolder->GetName() << " not found!" << endl;
1295 TFolder * phosFolder = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/RecParticles")) ;
1296 if ( !phosFolder ) {
1297 cerr << "ERROR: AliPHOSGetter::RecParticlesRef -> Folder //" << fRecoFolder->GetName() << "/PHOS/RecParticles/ not found!" << endl;
1301 TObject * tss = phosFolder->FindObject(name ) ;
1303 cerr << "ERROR: AliPHOSGetter::RecParticlesRef -> object " << name << " not found! " << endl ;
1306 return phosFolder->GetListOfFolders()->GetObjectRef(tss) ;
1309 //____________________________________________________________________________
1310 const Bool_t AliPHOSGetter::PostPID(AliPHOSPID * pid) const
1311 { // ------------AliPHOS PID -----------------------------
1313 TTask * tasks = dynamic_cast<TTask*>(fTasksFolder->FindObject("Reconstructioner")) ;
1316 cerr << "ERROR: AliPHOSGetter::Post Per -> Task //" << fTasksFolder << "/Reconstructioner not found!" << endl;
1320 TTask * phos = dynamic_cast<TTask*>(tasks->GetListOfTasks()->FindObject("PHOS")) ;
1323 cout <<"WARNING: AliPHOSGetter::Post Per -> //" << fTasksFolder << "/Reconstructioner/PHOS not found!" << endl;
1324 cout <<"INFO: AliPHOSGetter::Post Per -> Adding //" << fTasksFolder << "/Reconstructioner/PHOS" << endl;
1326 phos = new TTask("PHOS", "") ;
1330 AliPHOSPID * phospid = dynamic_cast<AliPHOSPID*>(phos->GetListOfTasks()->FindObject(pid->GetName())) ;
1333 cout << "INFO: AliPHOSGetter::Post Per -> Task " << pid->GetName()
1334 << " already exists" << endl ;
1335 phos->GetListOfTasks()->Remove(phospid) ;
1342 //____________________________________________________________________________
1343 const Bool_t AliPHOSGetter::PostPID(const char * name) const
1345 // the hierarchy is //Folders/Tasks/Reconstructioner/PHOS/sdigitsname
1347 TTask * tasks = dynamic_cast<TTask*>(fTasksFolder->FindObject("Reconstructioner")) ;
1350 cerr << "ERROR: AliPHOSGetter::Post Per -> Task //" << fTasksFolder->GetName() << "/Reconstructioner not found!" << endl;
1354 TTask * phos = dynamic_cast<TTask*>(tasks->GetListOfTasks()->FindObject("PHOS")) ;
1357 cout <<"WARNING: AliPHOSGetter::Post Per -> //" << fTasksFolder->GetName() << "/Reconstructioner/PHOS not found!" << endl;
1358 cout <<"INFO: AliPHOSGetter::Post Per -> Adding //" << fTasksFolder->GetName() << "/Reconstructioner/PHOS" << endl;
1360 phos = new TTask("PHOS", "") ;
1364 TList * l = phos->GetListOfTasks() ;
1366 TString pidname(name) ;
1369 while((task = static_cast<TTask *>(it.Next()) )){
1370 TString taskname(task->GetName()) ;
1371 if(taskname.BeginsWith(pidname))
1375 AliPHOSPIDv1 * phospid = new AliPHOSPIDv1() ;
1377 phospid->SetName(pidname) ;
1378 phospid->SetTitle(fHeaderFile) ;
1379 phos->Add(phospid) ;
1384 //____________________________________________________________________________
1385 TObject** AliPHOSGetter::PIDRef(const char * name) const
1386 { //------------PID ------------------------------
1388 TTask * tasks = dynamic_cast<TTask*>(fTasksFolder->FindObject("Reconstructioner")) ;
1391 cerr << "ERROR: AliPHOSGetter::PIDRef -> Task //" << fTasksFolder->GetName() << "/Reconstructioner not found!" << endl;
1395 TTask * phos = dynamic_cast<TTask*>(tasks->GetListOfTasks()->FindObject("PHOS")) ;
1397 cerr << "ERROR: AliPHOSGetter::PIDRef -> //" << fTasksFolder->GetName() << "/Reconstructioner/PHOS not found!" << endl;
1401 TList * l = phos->GetListOfTasks() ;
1405 TString pidname(name) ;
1407 while((task = static_cast<TTask *>(it.Next()) )){
1408 TString taskname(task->GetName()) ;
1409 if(taskname.BeginsWith(pidname)){
1416 return l->GetObjectRef(pid) ;
1418 cerr << "ERROR: AliPHOSGetter::PIDRef -> Task //" << fTasksFolder->GetName() << "/Reconstructioner/PHOS/PID/" << name << " not found!" << endl;
1424 //____________________________________________________________________________
1425 const Bool_t AliPHOSGetter::PostQA(void) const
1426 { // ------------------ QA ---------------------------------
1428 // the hierarchy is //Folders/Run/Conditions/QA/PHOS/alarmsName
1430 TFolder * phosFolder = dynamic_cast<TFolder*>(fQAFolder->FindObject("PHOS")) ;
1431 if ( !phosFolder ) {
1433 cout << "WARNING: AliPHOSGetter::Post Q -> Folder //" << fQAFolder << "/PHOS/ not found!" << endl;
1434 cout << "INFO: AliPHOSGetter::Post Q -> Adding Folder //" << fQAFolder << "/PHOS/" << endl;
1436 phosFolder = fQAFolder->AddFolder("PHOS", "QA from PHOS") ;
1442 //____________________________________________________________________________
1443 TObject** AliPHOSGetter::AlarmsRef(void) const
1444 { //------- Alarms ----------------------
1447 // the hierarchy is //Folders/Run/Conditions/QA/PHOS
1449 cerr << "ERROR: AliPHOSGetter::AlarmsRef -> Folder //" << fQAFolder << " not found!" << endl;
1453 TFolder * phosFolder = dynamic_cast<TFolder *>(fQAFolder->FindObject("PHOS")) ;
1454 if ( !phosFolder ) {
1455 cerr << "ERROR: AliPHOSGetter::AlarmsRef -> Folder //" << fQAFolder << "/PHOS/ not found!" << endl;
1459 return fQAFolder->GetListOfFolders()->GetObjectRef(phosFolder) ;
1463 //____________________________________________________________________________
1464 TTree * AliPHOSGetter::TreeK(TString filename)
1467 // returns TreeK from file filename
1468 // usefull in case of split file
1470 if ( filename.IsNull() )
1471 filename = fHeaderFile ;
1474 file = static_cast<TFile*>(gROOT->GetFile(filename.Data() ) ) ;
1475 if (file && (filename != fHeaderFile) ) { // file already open
1479 file = TFile::Open(filename.Data(), "read") ;
1480 fAlice = static_cast<AliRun *>(file->Get("gAlice")) ;
1481 TString treeName("TreeK") ;
1482 treeName += EventNumber() ;
1483 TTree * tree = static_cast<TTree *>(file->Get(treeName.Data())) ;
1484 if (!tree && fDebug)
1485 cout << "WARNING: AliPHOSGetter::TreeK -> " << treeName.Data() << " not found in " << filename.Data() << endl ;
1490 //____________________________________________________________________________
1491 TTree * AliPHOSGetter::TreeH(TString filename)
1494 // returns TreeH from file filename
1495 // usefull in case of split file
1497 if ( filename.IsNull() )
1498 filename = fHeaderFile ;
1501 file = static_cast<TFile*>(gROOT->GetFile(filename.Data() ) ) ;
1502 if (!file) { // file not open yet
1503 file = TFile::Open(filename.Data(), "read") ;
1505 TString treeName("TreeH") ;
1506 treeName += EventNumber() ;
1507 TTree * tree = static_cast<TTree *>(file->Get(treeName.Data())) ;
1508 if (!tree && fDebug)
1509 cout << "WARNING: AliPHOSGetter::TreeH -> " << treeName.Data() << " not found in " << filename.Data() << endl ;
1514 //____________________________________________________________________________
1515 TTree * AliPHOSGetter::TreeS(TString filename)
1518 // returns TreeS from file filename
1519 // usefull in case of split file
1521 if ( filename.IsNull() )
1522 filename = fHeaderFile ;
1525 file = static_cast<TFile*>(gROOT->GetFile(filename.Data() ) ) ;
1526 if (!file) { // file not open yet
1527 file = TFile::Open(filename.Data(), "read") ;
1529 TString treeName("TreeS") ;
1530 treeName += EventNumber() ;
1531 TTree * tree = static_cast<TTree *>(file->Get(treeName.Data())) ;
1532 if (!tree && fDebug)
1533 cout << "WARNING: AliPHOSGetter::TreeS -> " << treeName.Data() << " not found in " << filename.Data() << endl ;
1538 //____________________________________________________________________________
1539 TTree * AliPHOSGetter::TreeD(TString filename)
1542 // returns TreeD from file filename
1543 // usefull in case of split file
1545 if ( filename.IsNull() )
1546 filename = fHeaderFile ;
1549 file = static_cast<TFile*>(gROOT->GetFile(filename.Data() ) ) ;
1550 if (!file) { // file not open yet
1551 file = TFile::Open(filename.Data(), "read") ;
1553 TString treeName("TreeD") ;
1554 treeName += EventNumber() ;
1555 TTree * tree = static_cast<TTree *>(file->Get(treeName.Data())) ;
1556 if (!tree && fDebug)
1557 cout << "WARNING: AliPHOSGetter::TreeD -> " << treeName.Data() << " not found in " << filename.Data() << endl ;
1562 //____________________________________________________________________________
1563 const TParticle * AliPHOSGetter::Primary(Int_t index) const
1565 // Return primary particle numbered by <index>
1571 p = fAlice->Particle(index) ;
1573 p = gAlice->Particle(index) ;
1574 // if (p->GetFirstMother() != -1 ) {
1575 // cout << "AliPHOSGetter::Primary : Not a primary " << endl ;
1582 // Int_t primaryIndex = index % 10000000 ;
1583 // Int_t primaryList = (Int_t ) ((index-primaryIndex)/10000000.) ;
1585 // if ( primaryList > 0 ) {
1587 // cout << " Getter does not support currently Mixing of primary " << endl ;
1588 // cout << " can not return primary: " << index<< " (list "<< primaryList<< " primary # " << primaryIndex << " )"<<endl ;
1593 // return gAlice->Particle(primaryIndex) ;
1597 //____________________________________________________________________________
1598 const TParticle * AliPHOSGetter::Secondary(TParticle* p, Int_t index) const
1600 // Return first (index=1) or second (index=2) secondary particle of primary particle p
1608 Int_t daughterIndex = p->GetDaughter(index-1) ;
1609 return gAlice->Particle(daughterIndex) ;
1615 //____________________________________________________________________________
1616 Int_t AliPHOSGetter::ReadTreeD(const Int_t event)
1618 // Read the digit tree gAlice->TreeD()
1622 TFile * file = static_cast<TFile*>(gROOT->GetFile(fDigitsFileName));
1624 file = TFile::Open(fDigitsFileName) ;
1625 // Get Digits Tree header from file
1626 TString treeName("TreeD") ;
1628 treeD = dynamic_cast<TTree*>(file->Get(treeName.Data()));
1629 if(!treeD){ // TreeD not found in header file
1631 cout << "WARNING: AliPHOSGetter::ReadTreeD -> Cannot find TreeD in " << fDigitsFileName.Data() << endl;
1636 treeD = gAlice->TreeD() ;
1638 // if(!treeD) { // TreeD not found in header file
1641 // cout << "WARNING: AliPHOSGetter::ReadTreeD -> Cannot find TreeD in " << fHeaderFile << endl ;
1643 // TString searchFileName("") ;
1645 // if (Digitizer()) // Digitizer found in header file
1646 // searchFileName = Digitizer()->GetTitle() ;
1648 // else if (Clusterizer()) // Clusterizer found in header file
1649 // searchFileName = Clusterizer()->GetDigitsFileName() ;
1651 // if ( (treeD = TreeD(searchFileName)) ) { //found TreeD in the file which contains the hits
1653 // cout << "INFO: AliPHOSGetter::ReadTreeD -> TreeD found in " << searchFileName.Data() << endl ;
1656 // cerr << "ERROR: AliPHOSGetter::ReadTreeD -> TreeD not found " << endl ;
1662 TObjArray * lob = static_cast<TObjArray*>(treeD->GetListOfBranches()) ;
1664 TBranch * branch = 0 ;
1665 TBranch * digitsbranch = 0 ;
1666 TBranch * digitizerbranch = 0 ;
1667 Bool_t phosfound = kFALSE, digitizerfound = kFALSE ;
1669 while ( (branch = static_cast<TBranch*>(next())) && (!phosfound || !digitizerfound) ) {
1670 if ( (strcmp(branch->GetName(), "PHOS")==0) && (strcmp(branch->GetTitle(), fDigitsTitle)==0) ) {
1671 digitsbranch = branch ;
1674 else if ( (strcmp(branch->GetName(), "AliPHOSDigitizer")==0) && (strcmp(branch->GetTitle(), fDigitsTitle)==0) ) {
1675 digitizerbranch = branch ;
1676 digitizerfound = kTRUE ;
1680 if ( !phosfound || !digitizerfound ) {
1682 cout << "WARNING: AliPHOSGetter::ReadTreeD -> Cannot find Digits and/or Digitizer with name "
1683 << fDigitsTitle << endl ;
1688 if(!Digits(fDigitsTitle) )
1689 PostDigits(fDigitsTitle);
1690 digitsbranch->SetAddress(DigitsRef(fDigitsTitle)) ;
1691 digitsbranch->GetEntry(0) ;
1694 // read the Digitizer
1695 RemoveTask("D", fDigitsTitle) ; // I do not understand why I need that
1696 if(!Digitizer(fDigitsTitle))
1697 PostDigitizer(fDigitsTitle) ;
1698 digitizerbranch->SetAddress(DigitizerRef(fDigitsTitle)) ;
1699 digitizerbranch->GetEntry(0) ;
1702 if(gAlice->TreeD()!=treeD)
1707 //____________________________________________________________________________
1708 Int_t AliPHOSGetter::ReadTreeH()
1710 // Read the first entry of PHOS branch in hit tree gAlice->TreeH()
1712 TTree * treeH = gAlice->TreeH() ;
1714 if(!treeH) {// TreeH not found in header file
1717 cout << "WARNING: AliPHOSGetter::ReadTreeH -> Cannot find TreeH in " << fHeaderFile << endl ;
1719 TString searchFileName("PHOS.Hits") ;
1720 if((strcmp(fBranchTitle.Data(),"Default")!=0)&&(strcmp(fBranchTitle.Data(),"")!=0)){
1721 searchFileName+="." ;
1722 searchFileName += fBranchTitle ;
1724 searchFileName+=".root" ;
1726 if ( (treeH = TreeH(searchFileName)) ) { //found TreeH in the file which contains the hits
1728 cout << "INFO: AliPHOSGetter::ReadTreeH -> TreeH found in " << searchFileName.Data() << endl ;
1731 cerr << "ERROR: AliPHOSGetter::ReadTreeH -> TreeH not found " << endl ;
1736 TBranch * hitsbranch = static_cast<TBranch*>(treeH->GetBranch("PHOS")) ;
1737 if ( !hitsbranch ) {
1739 cout << "WARNING: AliPHOSGetter::ReadTreeH -> Cannot find branch PHOS" << endl ;
1745 if (hitsbranch->GetEntries() > 1 ) {
1746 (dynamic_cast<TClonesArray*> (*HitsRef()))->Clear() ;
1747 TClonesArray * tempo = new TClonesArray("AliPHOSHit",1000) ;
1748 TClonesArray * hits = dynamic_cast<TClonesArray*>(*HitsRef()) ;
1749 hitsbranch->SetAddress(&tempo) ;
1752 for (i = 0 ; i < hitsbranch->GetEntries() ; i++) {
1753 hitsbranch->GetEntry(i) ;
1755 for ( j = 0 ; j < tempo->GetEntries() ; j++) {
1756 const AliPHOSHit * hit = static_cast<const AliPHOSHit *>(tempo->At(j)) ;
1757 new((*hits)[index]) AliPHOSHit( *hit ) ;
1764 (dynamic_cast<TClonesArray*> (*HitsRef()))->Clear() ;
1765 hitsbranch->SetAddress(HitsRef()) ;
1766 hitsbranch->GetEntry(0) ;
1771 //____________________________________________________________________________
1772 void AliPHOSGetter::Track(Int_t itrack)
1774 // Read the first entry of PHOS branch in hit tree gAlice->TreeH()
1776 if(gAlice->TreeH()== 0){
1777 cerr << "ERROR: AliPHOSGetter::ReadTreeH: -> Cannot read TreeH " << endl ;
1781 TBranch * hitsbranch = dynamic_cast<TBranch*>(gAlice->TreeH()->GetListOfBranches()->FindObject("PHOS")) ;
1782 if ( !hitsbranch ) {
1784 cout << "WARNING: AliPHOSGetter::ReadTreeH -> Cannot find branch PHOS" << endl ;
1790 (dynamic_cast<TClonesArray*> (*HitsRef()))->Clear() ;
1791 hitsbranch->SetAddress(HitsRef()) ;
1792 hitsbranch->GetEntry(itrack) ;
1796 //____________________________________________________________________________
1797 void AliPHOSGetter::ReadTreeQA()
1799 // Read the digit tree gAlice->TreeQA()
1800 // so far only PHOS knows about this Tree
1802 if(PHOS()->TreeQA()== 0){
1803 cerr << "ERROR: AliPHOSGetter::ReadTreeQA: can not read TreeQA " << endl ;
1807 TBranch * qabranch = PHOS()->TreeQA()->GetBranch("PHOS") ;
1810 cout << "WARNING: AliPHOSGetter::ReadTreeQA -> Cannot find QA Alarms for PHOS" << endl ;
1817 qabranch->SetAddress(AlarmsRef()) ;
1819 qabranch->GetEntry(0) ;
1822 // TFolder * alarmsF = Alarms() ;
1823 // alarmsF->Clear() ;
1824 // qabranch->SetAddress(&alarmsF) ;
1825 // qabranch->GetEntry(0) ;
1829 //____________________________________________________________________________
1830 Int_t AliPHOSGetter::ReadTreeR(const Int_t event)
1832 // Read the reconstrunction tree gAlice->TreeR()
1833 // A particularity has been introduced here :
1834 // if gime->Event(ievent,"R") is called branches with the current title are read, the current title
1835 // being for example give in AliPHOSPID(fileName, title)
1836 // if gime(Event(ievent, "RA") is called the title of the branches is not checked anymore, "A" stands for any
1837 // This is a feature needed by PID to be able to reconstruct several times particles (each time a ther title is given)
1838 // from a given set of TrackSegments (with a given name)
1839 // This is why any is NOT used to read the branch of RecParticles
1840 // any migh have become obsolete : to be checked
1845 TFile * file = static_cast<TFile*>(gROOT->GetFile(fRecPointsFileName));
1847 file = TFile::Open(fRecPointsFileName) ;
1848 // Get Digits Tree header from file
1849 TString treeName("TreeR") ;
1851 treeR = dynamic_cast<TTree*>(file->Get(treeName.Data()));
1852 if(!treeR){ // TreeR not found in header file
1854 cout << "WARNING: AliPHOSGetter::ReadTreeD -> Cannot find TreeR in " << fRecPointsFileName.Data() << endl;
1859 treeR = gAlice->TreeR() ;
1862 TObjArray * lob = static_cast<TObjArray*>(treeR->GetListOfBranches()) ;
1864 TBranch * branch = 0 ;
1865 TBranch * emcbranch = 0 ;
1866 TBranch * cpvbranch = 0 ;
1867 TBranch * clusterizerbranch = 0 ;
1868 Bool_t phosemcrpfound = kFALSE, phoscpvrpfound = kFALSE, clusterizerfound = kFALSE ;
1871 while ( (branch = static_cast<TBranch*>(next())) && (!phosemcrpfound || !phoscpvrpfound || !clusterizerfound) ) {
1872 if(strcmp(branch->GetTitle(), fRecPointsTitle)==0 ) {
1873 if ( strcmp(branch->GetName(), "PHOSEmcRP")==0) {
1874 emcbranch = branch ;
1875 phosemcrpfound = kTRUE ;
1877 else if ( strcmp(branch->GetName(), "PHOSCpvRP")==0) {
1878 cpvbranch = branch ;
1879 phoscpvrpfound = kTRUE ;
1881 else if(strcmp(branch->GetName(), "AliPHOSClusterizer")==0){
1882 clusterizerbranch = branch ;
1883 clusterizerfound = kTRUE ;
1888 if ( !phosemcrpfound || !phoscpvrpfound || !clusterizerfound) {
1890 cout << "WARNING: AliPHOSGetter::ReadTreeR -> Cannot find RecPoints and/or Clusterizer with name "
1891 << fRecPointsTitle << endl ;
1894 if(!EmcRecPoints(fRecPointsTitle) )
1895 PostRecPoints(fRecPointsTitle) ;
1897 emcbranch->SetAddress(EmcRecPointsRef(fRecPointsTitle)) ;
1898 emcbranch->GetEntry(0) ;
1900 cpvbranch->SetAddress(CpvRecPointsRef(fRecPointsTitle)) ;
1901 cpvbranch->GetEntry(0) ;
1903 if(!Clusterizer(fRecPointsTitle) )
1904 PostClusterizer(fRecPointsTitle) ;
1906 clusterizerbranch->SetAddress(ClusterizerRef(fRecPointsTitle)) ;
1907 clusterizerbranch->GetEntry(0) ;
1910 //------------------- TrackSegments ---------------------
1912 TBranch * tsbranch = 0 ;
1913 TBranch * tsmakerbranch = 0 ;
1914 Bool_t phostsfound = kFALSE, tsmakerfound = kFALSE ;
1915 while ( (branch = static_cast<TBranch*>(next())) && (!phostsfound || !tsmakerfound) ) {
1916 if(strcmp(branch->GetTitle(), fTrackSegmentsTitle)==0 ) {
1917 if ( strcmp(branch->GetName(), "PHOSTS")==0){
1919 phostsfound = kTRUE ;
1921 else if(strcmp(branch->GetName(), "AliPHOSTrackSegmentMaker")==0) {
1922 tsmakerbranch = branch ;
1923 tsmakerfound = kTRUE ;
1928 if ( !phostsfound || !tsmakerfound ) {
1930 cout << "WARNING: AliPHOSGetter::ReadTreeR -> Cannot find TrackSegments and/or TrackSegmentMaker with name "
1931 << fTrackSegmentsTitle << endl ;
1933 // Read and Post the TrackSegments
1934 if(!TrackSegments(fTrackSegmentsTitle))
1935 PostTrackSegments(fTrackSegmentsTitle) ;
1936 tsbranch->SetAddress(TrackSegmentsRef(fTrackSegmentsTitle)) ;
1937 tsbranch->GetEntry(0) ;
1939 // Read and Post the TrackSegment Maker
1940 if(!TrackSegmentMaker(fTrackSegmentsTitle))
1941 PostTrackSegmentMaker(fTrackSegmentsTitle) ;
1942 tsmakerbranch->SetAddress(TSMakerRef(fTrackSegmentsTitle)) ;
1943 tsmakerbranch->GetEntry(0) ;
1947 //------------ RecParticles ----------------------------
1949 TBranch * rpabranch = 0 ;
1950 TBranch * pidbranch = 0 ;
1951 Bool_t phosrpafound = kFALSE, pidfound = kFALSE ;
1953 while ( (branch = static_cast<TBranch*>(next())) && (!phosrpafound || !pidfound) )
1954 if(strcmp(branch->GetTitle(), fRecParticlesTitle)==0) {
1955 if ( strcmp(branch->GetName(), "PHOSRP")==0) {
1956 rpabranch = branch ;
1957 phosrpafound = kTRUE ;
1959 else if (strcmp(branch->GetName(), "AliPHOSPID")==0) {
1960 pidbranch = branch ;
1965 if ( !phosrpafound || !pidfound ) {
1967 cout << "WARNING: AliPHOSGetter::ReadTreeR -> Cannot find RecParticles and/or PID with name "
1968 << fRecParticlesTitle << endl ;
1970 // Read and Post the RecParticles
1971 if(!RecParticles(fRecParticlesTitle))
1972 PostRecParticles(fRecParticlesTitle) ;
1973 rpabranch->SetAddress(RecParticlesRef(fRecParticlesTitle)) ;
1974 rpabranch->GetEntry(0) ;
1975 // Read and Post the PID
1976 if(!PID(fRecParticlesTitle))
1977 PostPID(fRecParticlesTitle) ;
1978 pidbranch->SetAddress(PIDRef(fRecParticlesTitle)) ;
1979 pidbranch->GetEntry(0) ;
1982 if(gAlice->TreeR()!=treeR){
1988 //____________________________________________________________________________
1989 Int_t AliPHOSGetter::ReadTreeS(const Int_t event)
1991 // Reads the SDigits treeS from all files
1992 // Files, which should be opened are listed in phosF
1993 // So, first get list of files
1994 TFolder * phosF = dynamic_cast<TFolder *>(fSDigitsFolder->FindObject("PHOS")) ;
1996 phosF = fSDigitsFolder->AddFolder("PHOS", "SDigits from PHOS") ;
1997 TCollection * folderslist = phosF->GetListOfFolders() ;
1999 // Now iterate over the list of files and read TreeS into Whiteboard
2000 TIter next(folderslist) ;
2001 TFolder * folder = 0 ;
2004 while ( (folder = static_cast<TFolder*>(next())) ) {
2005 TString fileName("") ;
2007 fileName = folder->GetTitle() ;
2009 fileName = folder->GetName() ;
2010 fileName.ReplaceAll("_","/") ;
2011 file = static_cast<TFile*>(gROOT->GetFile(fileName));
2013 file = TFile::Open(fileName) ;
2014 // Get SDigits Tree header from file
2015 TString treeName("TreeS") ;
2017 treeS = dynamic_cast<TTree*>(file->Get(treeName.Data()));
2019 if(!treeS){ // TreeS not found in header file
2021 cout << "WARNING: AliPHOSGetter::ReadTreeS -> Cannot find TreeS in " << fileName.Data() << endl;
2025 //set address of the SDigits and SDigitizer
2026 TBranch * sdigitsBranch = 0;
2027 TBranch * sdigitizerBranch = 0;
2028 TBranch * branch = 0 ;
2029 TObjArray * lob = static_cast<TObjArray*>(treeS->GetListOfBranches()) ;
2031 Bool_t phosfound = kFALSE, sdigitizerfound = kFALSE ;
2033 while ( (branch = static_cast<TBranch*>(next())) && (!phosfound || !sdigitizerfound) ) {
2034 if ( (strcmp(branch->GetName(), "PHOS")==0) && (strcmp(branch->GetTitle(), fSDigitsTitle)==0) ) {
2036 sdigitsBranch = branch ;
2039 else if ( (strcmp(branch->GetName(), "AliPHOSSDigitizer")==0) &&
2040 (strcmp(branch->GetTitle(), fSDigitsTitle)==0) ) {
2041 sdigitizerfound = kTRUE ;
2042 sdigitizerBranch = branch ;
2045 if ( !phosfound || !sdigitizerfound ) {
2047 cout << "WARNING: AliPHOSDigitizer::ReadSDigits -> Digits and/or Digitizer branch with name " << GetName()
2048 << " not found" << endl ;
2052 if ( !folder->FindObject(fSDigitsTitle) )
2053 PostSDigits(fSDigitsTitle,folder->GetName()) ;
2055 ((TClonesArray*) (*SDigitsRef(fSDigitsTitle,folder->GetName())))->Clear() ;
2056 sdigitsBranch->SetAddress(SDigitsRef(fSDigitsTitle,folder->GetName())) ;
2057 sdigitsBranch->GetEntry(0) ;
2059 TString sdname(fSDigitsTitle) ;
2061 sdname+=folder->GetName() ;
2062 if(!SDigitizer(sdname) )
2063 PostSDigitizer(fSDigitsTitle,folder->GetName()) ;
2064 sdigitizerBranch->SetAddress(SDigitizerRef(sdname)) ;
2065 sdigitizerBranch->GetEntry(0) ;
2067 if(gAlice->TreeS()!=treeS)
2071 // After SDigits have been read from all files, return to the first one
2074 // folder = static_cast<TFolder*>(next());
2076 // TString fileName(folder->GetName()) ;
2077 // fileName.ReplaceAll("_","/") ;
2078 // file = static_cast<TFile*>(gROOT->GetFile(fileName));
2083 //____________________________________________________________________________
2084 void AliPHOSGetter::ReadTreeS(TTree * treeS, Int_t input)
2086 { // Read the summable digits fron treeS()
2089 TString filename("mergefile") ;
2092 TFolder * phosFolder = dynamic_cast<TFolder*>(fSDigitsFolder->FindObject("PHOS")) ;
2093 if ( !phosFolder ) {
2094 phosFolder = fSDigitsFolder->AddFolder("PHOS", "SDigits from PHOS") ;
2096 TFolder * folder=(TFolder*)phosFolder->FindObject(filename) ;
2097 //set address of the SDigits and SDigitizer
2098 TBranch * sdigitsBranch = 0;
2099 TBranch * sdigitizerBranch = 0;
2100 TBranch * branch = 0 ;
2101 TObjArray * lob = (TObjArray*)treeS->GetListOfBranches() ;
2103 Bool_t phosfound = kFALSE, sdigitizerfound = kFALSE ;
2105 while ( (branch = (TBranch*)next()) && (!phosfound || !sdigitizerfound) ) {
2106 if ( strcmp(branch->GetName(), "PHOS")==0) {
2108 sdigitsBranch = branch ;
2111 else if ( strcmp(branch->GetName(), "AliPHOSSDigitizer")==0) {
2112 sdigitizerfound = kTRUE ;
2113 sdigitizerBranch = branch ;
2116 if ( !phosfound || !sdigitizerfound ) {
2118 cout << "WARNING: AliPHOSGetter::ReadTreeS -> Digits and/or Digitizer branch not found" << endl ;
2122 if (!folder || !(folder->FindObject(sdigitsBranch->GetTitle()) ) )
2123 PostSDigits(sdigitsBranch->GetTitle(),filename) ;
2125 sdigitsBranch->SetAddress(SDigitsRef(sdigitsBranch->GetTitle(),filename)) ;
2126 sdigitsBranch->GetEntry(0) ;
2128 TString sdname(sdigitsBranch->GetTitle()) ;
2132 if(!SDigitizer(sdigitsBranch->GetTitle()) )
2133 PostSDigitizer(sdigitsBranch->GetTitle(),filename) ;
2134 sdigitizerBranch->SetAddress(SDigitizerRef(sdname)) ;
2135 sdigitizerBranch->GetEntry(0) ;
2137 if(gAlice->TreeS()!=treeS)
2142 //____________________________________________________________________________
2143 void AliPHOSGetter::ReadPrimaries()
2145 // a lot simplified.... if 2 files are opened then we have a problem
2147 TClonesArray * ar = 0 ;
2148 if(! (ar = Primaries()) ) {
2154 if (TreeK(fHeaderFile)) { // treeK found in header file
2156 cout << "INFO: AliPHOSGetter::ReadPrimaries -> TreeK found in " << fHeaderFile.Data() << endl ;
2157 fNPrimaries = gAlice->GetNtrack() ;
2160 } else { // treeK not found in header file
2162 cerr << "ERROR: AliPHOSGetter::ReadPrimaries -> TreeK not found " << endl ;
2167 for (index = 0 ; index < fNPrimaries; index++) {
2168 new ((*ar)[index]) TParticle(*(Primary(index)));
2172 //____________________________________________________________________________
2173 void AliPHOSGetter::Event(const Int_t event, const char* opt)
2175 // Reads the content of all Tree's S, D and R
2176 if (event >= gAlice->TreeE()->GetEntries() ) {
2177 cerr << "ERROR: AliPHOSGetter::Event -> " << event << " not found in TreeE!" << endl ;
2181 Bool_t any = kFALSE ;
2182 if (strstr(opt,"A") ) // do not check the title of the branches
2185 gAlice->GetEvent(event) ;
2187 if( strstr(opt,"R") )
2190 if( strstr(opt,"D") )
2193 if(strstr(opt,"S") )
2196 if(strstr(opt,"H") )
2199 if( strstr(opt,"Q") )
2202 if( strstr(opt,"P") || (strcmp(opt,"")==0) )
2207 //____________________________________________________________________________
2208 TObject * AliPHOSGetter::ReturnO(TString what, TString name, TString file) const
2210 // get the object named "what" from the folder
2211 // folders are named like //Folders
2213 if ( file.IsNull() )
2214 file = fHeaderFile ;
2216 TFolder * folder = 0 ;
2217 TObject * phosO = 0 ;
2219 // if ( name.IsNull() ) {
2220 if ( what.CompareTo("Primaries") == 0 ) {
2221 folder = dynamic_cast<TFolder *>(fPrimariesFolder->FindObject("Primaries")) ;
2223 phosO = dynamic_cast<TObject *>(folder->FindObject("Primaries")) ;
2227 else if ( what.CompareTo("Hits") == 0 ) {
2228 folder = dynamic_cast<TFolder *>(fHitsFolder->FindObject("PHOS")) ;
2230 phosO = dynamic_cast<TObject *>(folder->FindObject("Hits")) ;
2232 else if ( what.CompareTo("SDigits") == 0 ) {
2233 file.ReplaceAll("/","_") ;
2234 TString path = "PHOS/" + file ;
2235 folder = dynamic_cast<TFolder *>(fSDigitsFolder->FindObject(path.Data())) ;
2238 name = fSDigitsTitle ;
2239 phosO = dynamic_cast<TObject *>(folder->FindObject(name)) ;
2242 else if ( what.CompareTo("Digits") == 0 ){
2243 folder = dynamic_cast<TFolder *>(fDigitsFolder->FindObject("PHOS")) ;
2246 name = fDigitsTitle ;
2247 phosO = dynamic_cast<TObject *>(folder->FindObject(name)) ;
2250 else if ( what.CompareTo("EmcRecPoints") == 0 ) {
2251 folder = dynamic_cast<TFolder *>(fRecoFolder->FindObject("PHOS/EMCARecPoints")) ;
2254 name = fRecPointsTitle ;
2255 phosO = dynamic_cast<TObject *>(folder->FindObject(name)) ;
2258 else if ( what.CompareTo("CpvRecPoints") == 0 ) {
2259 folder = dynamic_cast<TFolder *>(fRecoFolder->FindObject("PHOS/CPVRecPoints")) ;
2262 name = fRecPointsTitle ;
2263 phosO = dynamic_cast<TObject *>(folder->FindObject(name)) ;
2266 else if ( what.CompareTo("TrackSegments") == 0 ) {
2267 folder = dynamic_cast<TFolder *>(fRecoFolder->FindObject("PHOS/TrackSegments")) ;
2270 name = fTrackSegmentsTitle ;
2271 phosO = dynamic_cast<TObject *>(folder->FindObject(name)) ;
2274 else if ( what.CompareTo("RecParticles") == 0 ) {
2275 folder = dynamic_cast<TFolder *>(fRecoFolder->FindObject("PHOS/RecParticles")) ;
2278 name = fRecParticlesTitle ;
2279 phosO = dynamic_cast<TObject *>(folder->FindObject(name)) ;
2282 else if ( what.CompareTo("Alarms") == 0 ){
2284 phosO = dynamic_cast<TObject *>(fQAFolder->FindObject("PHOS")) ;
2286 folder = dynamic_cast<TFolder *>(fQAFolder->FindObject("PHOS")) ;
2290 phosO = dynamic_cast<TObject *>(folder->FindObject(name)) ;
2295 cerr << "WARNING : AliPHOSGetter::ReturnO -> Object " << what << " not found in PHOS" << endl ;
2302 //____________________________________________________________________________
2303 const TTask * AliPHOSGetter::ReturnT(TString what, TString name) const
2305 // get the TTask named "what" from the folder
2306 // folders are named like //Folders/Tasks/what/PHOS/name
2308 TString search(what) ;
2309 if ( what.CompareTo("Clusterizer") == 0 )
2310 search = "Reconstructioner" ;
2311 else if ( what.CompareTo("TrackSegmentMaker") == 0 )
2312 search = "Reconstructioner" ;
2313 else if ( what.CompareTo("PID") == 0 )
2314 search = "Reconstructioner" ;
2315 else if ( what.CompareTo("QATasks") == 0 )
2318 TTask * tasks = dynamic_cast<TTask*>(fTasksFolder->FindObject(search)) ;
2321 cerr << "ERROR: AliPHOSGetter::ReturnT -> Task " << what << " not found!" << endl ;
2325 TTask * phosT = dynamic_cast<TTask*>(tasks->GetListOfTasks()->FindObject("PHOS")) ;
2327 cerr << "ERROR: AliPHOSGetter::ReturnT -> Task " << what << "/PHOS not found!" << endl ;
2331 TList * list = phosT->GetListOfTasks() ;
2333 if (what.CompareTo("SDigitizer") == 0) {
2334 if ( name.IsNull() )
2335 name = fSDigitsTitle ;
2336 } else if (what.CompareTo("Digitizer") == 0){
2337 if ( name.IsNull() )
2338 name = fDigitsTitle ;
2339 } else if (what.CompareTo("Clusterizer") == 0){
2340 if ( name.IsNull() )
2341 name = fRecPointsTitle ;
2342 name.Append(":clu") ;
2344 else if (what.CompareTo("TrackSegmentMaker") == 0){
2345 if ( name.IsNull() )
2346 name = fTrackSegmentsTitle ;
2347 name.Append(":tsm") ;
2349 else if (what.CompareTo("PID") == 0){
2350 if ( name.IsNull() )
2351 name = fRecParticlesTitle ;
2352 name.Append(":pid") ;
2354 else if (what.CompareTo("QATasks") == 0){
2355 if ( name.IsNull() )
2361 while((task = static_cast<TTask *>(it.Next()) )){
2362 TString taskname(task->GetName()) ;
2363 if(taskname.BeginsWith(name))
2368 cout << "WARNING: AliPHOSGetter::ReturnT -> Task " << search << "/PHOS/" << name << " not found!" << endl ;
2372 //____________________________________________________________________________
2373 void AliPHOSGetter::RemoveTask(TString opt, TString name) const
2375 // remove a task from the folder
2376 // path is fTasksFolder/SDigitizer/PHOS/name
2380 TList * lofTasks = 0 ;
2382 if (opt == "S") { // SDigitizer
2383 task = dynamic_cast<TTask*>(fTasksFolder->FindObject("SDigitizer")) ;
2387 else if (opt == "D") { // Digitizer
2388 task = dynamic_cast<TTask*>(fTasksFolder->FindObject("Digitizer")) ;
2392 else if (opt == "C" || opt == "T" || opt == "P" ) { // Clusterizer, TrackSegmentMaker, PID
2393 task = dynamic_cast<TTask*>(fTasksFolder->FindObject("Reconstructioner")) ;
2398 cerr << "WARNING: AliPHOSGetter::RemoveTask -> Unknown option " << opt.Data() << endl ;
2401 phos = dynamic_cast<TTask*>(task->GetListOfTasks()->FindObject("PHOS")) ;
2404 lofTasks = phos->GetListOfTasks() ;
2407 TObject * obj = lofTasks->FindObject(name) ;
2409 lofTasks->Remove(obj) ;
2413 //____________________________________________________________________________
2414 void AliPHOSGetter::RemoveObjects(TString opt, TString name) const
2416 // remove SDigits from the folder
2417 // path is fSDigitsFolder/fHeaderFileName/name
2419 TFolder * phos = 0 ;
2420 TFolder * phosmain = 0 ;
2422 if (opt == "H") { // Hits
2423 phos = dynamic_cast<TFolder*>(fHitsFolder->FindObject("PHOS")) ;
2429 else if ( opt == "S") { // SDigits
2430 phosmain = dynamic_cast<TFolder*>(fSDigitsFolder->FindObject("PHOS")) ;
2433 phos = dynamic_cast<TFolder*>(phosmain->FindObject(fHeaderFile)) ;
2438 else if (opt == "D") { // Digits
2439 phos = dynamic_cast<TFolder*>(fDigitsFolder->FindObject("PHOS")) ;
2444 else if (opt == "RE") { // EMCARecPoints
2445 phos = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/EMCARecPoints")) ;
2450 else if (opt == "RC") { // CPVRecPoints
2451 phos = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/CPVRecPoints")) ;
2456 else if (opt == "T") { // TrackSegments
2457 phos = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/TrackSegments")) ;
2462 else if (opt == "P") { // RecParticles
2463 phos = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/RecParticles")) ;
2469 cerr << "WARNING: AliPHOSGetter::RemoveObjects -> Unknown option " << opt.Data() << endl ;
2473 TObjArray * ar = dynamic_cast<TObjArray*>(phos->FindObject(name)) ;
2481 phosmain->Remove(phos) ;
2485 //____________________________________________________________________________
2486 void AliPHOSGetter::RemoveSDigits() const
2488 TFolder * phos= dynamic_cast<TFolder*>(fSDigitsFolder->FindObject("PHOS")) ;
2496 //____________________________________________________________________________
2497 void AliPHOSGetter::CleanWhiteBoard(void){
2499 TFolder * phosmain = 0 ;
2502 TList * lofTasks = 0 ;
2507 phos = dynamic_cast<TFolder*>(fHitsFolder->FindObject("PHOS")) ;
2509 TObjArray * ar = dynamic_cast<TObjArray*>(phos->FindObject("Hits")) ;
2518 phosmain = dynamic_cast<TFolder*>(fSDigitsFolder->FindObject("PHOS")) ;
2520 phos = dynamic_cast<TFolder*>(phosmain->FindObject(fHeaderFile)) ;
2522 ar = dynamic_cast<TObjArray*>(phos->FindObject(fSDigitsTitle)) ;
2529 phosmain->Remove(phos) ;
2534 phos = dynamic_cast<TFolder*>(fDigitsFolder->FindObject("PHOS")) ;
2536 ar = dynamic_cast<TObjArray*>(phos->FindObject(fDigitsTitle)) ;
2546 phos = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/EMCARecPoints")) ;
2548 ar = dynamic_cast<TObjArray*>(phos->FindObject(fRecPointsTitle)) ;
2558 phos = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/CPVRecPoints")) ;
2560 ar = dynamic_cast<TObjArray*>(phos->FindObject(fRecPointsTitle)) ;
2570 phos = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/TrackSegments")) ;
2572 ar = dynamic_cast<TObjArray*>(phos->FindObject(fTrackSegmentsTitle)) ;
2583 phos = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/RecParticles")) ;
2585 ar = dynamic_cast<TObjArray*>(phos->FindObject(fRecParticlesTitle)) ;
2594 //---- Now Tascks -----------
2597 TString sdname(fSDigitsTitle);
2600 task = dynamic_cast<TTask*>(fTasksFolder->FindObject("Digitizer")) ;
2602 phost = dynamic_cast<TTask*>(task->GetListOfTasks()->FindObject("PHOS")) ;
2604 lofTasks = phost->GetListOfTasks() ;
2606 obj = lofTasks->FindObject(sdname.Data()) ;
2608 lofTasks->Remove(obj) ;
2614 sdname.Append(":") ;
2615 // Clusterizer, TrackSegmentMaker, PID
2616 task = dynamic_cast<TTask*>(fTasksFolder->FindObject("Reconstructioner")) ;
2618 phost = dynamic_cast<TTask*>(task->GetListOfTasks()->FindObject("PHOS")) ;
2620 lofTasks = phost->GetListOfTasks() ;
2621 TIter next(lofTasks);
2622 while((obj=next())){
2623 TString oname(obj->GetName()) ;
2624 if (oname.BeginsWith(sdname)){
2625 lofTasks->Remove(obj) ;
2633 sdname.Append(fHeaderFile) ;
2634 task = dynamic_cast<TTask*>(fTasksFolder->FindObject("SDigitizer")) ;
2636 phost = dynamic_cast<TTask*>(task->GetListOfTasks()->FindObject("PHOS")) ;
2638 lofTasks = phost->GetListOfTasks() ;
2640 obj = lofTasks->FindObject(sdname.Data()) ;
2642 lofTasks->Remove(obj) ;
2648 //____________________________________________________________________________
2649 void AliPHOSGetter::SetTitle(const char * branchTitle )
2651 fBranchTitle = branchTitle ;
2652 fSDigitsTitle = branchTitle ;
2653 fDigitsTitle = branchTitle ;
2654 fRecPointsTitle = branchTitle ;
2655 fRecParticlesTitle = branchTitle ;
2656 fTrackSegmentsTitle = branchTitle ;
2658 //First - extract full path if necessary
2659 TString sFileName(fHeaderFile) ;
2660 Ssiz_t islash = sFileName.Last('/') ;
2661 if(islash<sFileName.Length())
2662 sFileName.Remove(islash+1,sFileName.Length()) ;
2665 //Now construct file names
2666 fSDigitsFileName = sFileName ;
2667 fDigitsFileName = sFileName ;
2668 fRecPointsFileName = sFileName ;
2669 fRecParticlesFileName = sFileName ;
2670 fTrackSegmentsFileName = sFileName ;
2671 fSDigitsFileName += "PHOS.SDigits." ;
2672 fDigitsFileName += "PHOS.Digits." ;
2673 fRecPointsFileName += "PHOS.RecData." ;
2674 fTrackSegmentsFileName+= "PHOS.RecData." ;
2675 fRecParticlesFileName += "PHOS.RecData." ;
2676 if((strcmp(fBranchTitle.Data(),"Default")!=0)&&(strcmp(fBranchTitle.Data(),"")!=0)){
2677 fSDigitsFileName += fBranchTitle ;
2678 fSDigitsFileName += "." ;
2679 fDigitsFileName += fBranchTitle ;
2680 fDigitsFileName += "." ;
2681 fRecPointsFileName += fBranchTitle ;
2682 fRecPointsFileName += "." ;
2683 fRecParticlesFileName += fBranchTitle ;
2684 fRecParticlesFileName += "." ;
2685 fTrackSegmentsFileName+= fBranchTitle ;
2686 fTrackSegmentsFileName+= "." ;
2688 fSDigitsFileName += "root" ;
2689 fDigitsFileName += "root" ;
2690 fRecPointsFileName += "root" ;
2691 fRecParticlesFileName += "root" ;
2692 fTrackSegmentsFileName+= "root" ;
2694 fSDigitsFileName = "" ;
2695 fDigitsFileName = "" ;
2696 fRecPointsFileName = "" ;
2697 fRecParticlesFileName = "" ;
2698 fTrackSegmentsFileName = "" ;
2700 TFolder * phosFolder ;
2701 phosFolder = dynamic_cast<TFolder*>(fHitsFolder->FindObject("PHOS")) ;
2703 phosFolder = fHitsFolder->AddFolder("PHOS", "Hits from PHOS") ;
2705 phosFolder = dynamic_cast<TFolder*>(fSDigitsFolder->FindObject("PHOS")) ;
2707 phosFolder = fSDigitsFolder->AddFolder("PHOS", "SDigits from PHOS") ;
2709 //Make folder for SDigits
2710 TString subdir(fHeaderFile) ;
2711 subdir.ReplaceAll("/","_") ;
2712 phosFolder->AddFolder(subdir, fSDigitsFileName.Data());
2715 phosFolder = dynamic_cast<TFolder*>(fDigitsFolder->FindObject("PHOS")) ;
2717 phosFolder = fDigitsFolder->AddFolder("PHOS", "Digits from PHOS") ;
2719 phosFolder = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS")) ;
2721 phosFolder = fRecoFolder->AddFolder("PHOS", "Reconstructed data from PHOS") ;
2725 //____________________________________________________________________________
2726 void AliPHOSGetter::CloseSplitFiles(void){
2728 file = static_cast<TFile*>(gROOT->GetFile(fSDigitsFileName.Data() ) ) ;
2731 file = static_cast<TFile*>(gROOT->GetFile(fDigitsFileName.Data() ) ) ;
2734 file = static_cast<TFile*>(gROOT->GetFile(fRecPointsFileName.Data() ) ) ;
2737 file = static_cast<TFile*>(gROOT->GetFile(fTrackSegmentsFileName.Data() ) ) ;
2740 file = static_cast<TFile*>(gROOT->GetFile(fRecParticlesFileName.Data() ) ) ;