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 //////////////////////////////////////////////////////////////////////////////
51 // --- ROOT system ---
55 #include "TObjString.h"
57 #include "TParticle.h"
59 // --- Standard library ---
62 // --- AliRoot header files ---
64 #include "AliConfig.h"
65 #include "AliPHOSGetter.h"
67 #include "AliPHOSDigitizer.h"
68 #include "AliPHOSSDigitizer.h"
69 #include "AliPHOSClusterizerv1.h"
70 #include "AliPHOSTrackSegmentMakerv1.h"
71 #include "AliPHOSTrackSegment.h"
72 #include "AliPHOSPIDv1.h"
73 #include "AliPHOSGeometry.h"
75 ClassImp(AliPHOSGetter)
77 AliPHOSGetter * AliPHOSGetter::fgObjGetter = 0 ;
78 TFile * AliPHOSGetter::fFile = 0 ;
80 //____________________________________________________________________________
81 AliPHOSGetter::AliPHOSGetter(const char* headerFile, const char* branchTitle, const Bool_t toSplit )
83 // This is the ctor called by GetInstance and the only one that can be used
85 if( fHeaderFile.Contains("_") ) {
86 cerr << "AliPHOSGetter::AliPHOSGetter -> Invalid file name (_ not allowed) " << fHeaderFile.Data() << endl ;
97 fHeaderFile = headerFile ;
99 fPrimaries = new TObjArray(1) ;
101 fModuleFolder = dynamic_cast<TFolder*>(gROOT->FindObjectAny("Folders/Run/Configuration/Modules"));
102 fPrimariesFolder = dynamic_cast<TFolder*>(gROOT->FindObjectAny("Folders/RunMC/Event/Data"));
103 fHitsFolder = dynamic_cast<TFolder*>(gROOT->FindObjectAny("Folders/RunMC/Event/Data/Hits"));
104 fSDigitsFolder = dynamic_cast<TFolder*>(gROOT->FindObjectAny("Folders/RunMC/Event/Data/SDigits"));
105 fDigitsFolder = dynamic_cast<TFolder*>(gROOT->FindObjectAny("Folders/Run/Event/Data"));
106 fRecoFolder = dynamic_cast<TFolder*>(gROOT->FindObjectAny("Folders/Run/Event/RecData"));
107 fQAFolder = dynamic_cast<TFolder*>(gROOT->FindObjectAny("Folders/Run/Conditions/QA"));
108 fTasksFolder = dynamic_cast<TFolder*>(gROOT->FindObjectAny("Folders/Tasks")) ;
110 //Set titles to branches and create PHOS specific folders
111 SetTitle(branchTitle) ;
113 if ( fHeaderFile != "aliroot" ) { // to call the getter without a file
115 fFile = static_cast<TFile*>(gROOT->GetFile(fHeaderFile.Data() ) ) ;
117 if(!fFile) { //if file was not opened yet, read gAlice
118 fFile = TFile::Open(fHeaderFile.Data(),"update") ;
119 if (!fFile->IsOpen()) {
120 cerr << "ERROR : AliPHOSGetter::AliPHOSGetter -> Cannot open " << fHeaderFile.Data() << endl ;
124 gAlice = static_cast<AliRun *>(fFile->Get("gAlice")) ;
129 cerr << "ERROR : AliPHOSGetter::AliPHOSGetter -> Cannot find gAlice in " << fHeaderFile.Data() << endl ;
135 cout << "INFO: AliPHOSGetter:AliPHOSGetter -> Posting PHOS to Folders" << endl ;
136 if (gAlice->GetDetector("PHOS")) {
137 AliConfig * conf = AliConfig::Instance() ;
138 conf->Add(static_cast<AliDetector*>(gAlice->GetDetector("PHOS"))) ;
139 conf->Add(static_cast<AliModule*>(gAlice->GetDetector("PHOS"))) ;
142 cerr << "ERROR: AliPHOSGetter:AliPHOSGetter -> detector PHOS not found" << endl ;
148 //____________________________________________________________________________
149 AliPHOSGetter::~AliPHOSGetter(){
152 fPrimaries->Delete() ;
156 TFolder * phosF = dynamic_cast<TFolder *>(fSDigitsFolder->FindObject("PHOS")) ;
157 TCollection * folderslist = phosF->GetListOfFolders() ;
158 TIter next(folderslist) ;
159 TFolder * folder = 0 ;
160 while ( (folder = static_cast<TFolder*>(next())) )
161 phosF->Remove(folder) ;
172 //____________________________________________________________________________
173 void AliPHOSGetter::CloseFile()
181 //____________________________________________________________________________
182 const TFolder * AliPHOSGetter::Folder(const TString what) const {
184 // returns the PHOS folder required by what
185 // what = hits, sdigits, digits
187 if ( what == "hits" )
188 return dynamic_cast<const TFolder *>(fHitsFolder->FindObject("PHOS")) ;
189 else if ( what == "sdigits" )
190 return dynamic_cast<const TFolder *>(fSDigitsFolder->FindObject("PHOS")) ;
191 else if ( what == "digits" )
192 return dynamic_cast<const TFolder *>(fDigitsFolder->FindObject("PHOS")) ;
194 cerr << "ERROR: AliPHOSGetter::GetFolder -> " << what.Data() << " illegal option (hits, sdigits, digits) " << endl ;
199 //____________________________________________________________________________
200 AliPHOSGetter * AliPHOSGetter::GetInstance()
202 // Returns the pointer of the unique instance already defined
208 //cout << "WARNING: AliPHOSGetter::GetInstance ERROR: not yet initialized" << endl ;
213 //____________________________________________________________________________
214 AliPHOSGetter * AliPHOSGetter::GetInstance(const char* headerFile,
215 const char* branchTitle,
216 const Bool_t toSplit)
218 // Creates and returns the pointer of the unique instance
219 // Must be called only when the environment has changed
222 fgObjGetter = new AliPHOSGetter(headerFile,branchTitle,toSplit) ;
223 if(fgObjGetter->fFailed)
229 //First checks, if header file already opened
230 if(!fgObjGetter->fFile){
231 fgObjGetter = new AliPHOSGetter(headerFile,branchTitle,toSplit) ;
232 if(fgObjGetter->fFailed)
238 if(fgObjGetter->fHeaderFile.CompareTo(headerFile)==0){ //Opened the same header file
239 if((fgObjGetter->fBranchTitle.CompareTo(branchTitle) == 0)&& //Open the same branch title
240 (toSplit==fgObjGetter->fToSplit)){ //Nothing should be cleaned
243 else{ //Clean all data and AliPHOS...zers
244 if(fgObjGetter->fToSplit)
245 fgObjGetter->CloseSplitFiles() ;
246 fgObjGetter->CleanWhiteBoard() ;
247 fgObjGetter->fToSplit = toSplit ;
248 fgObjGetter->SetTitle(branchTitle) ;
252 else{ //Close already opened files, clean memory and open new header file
256 if(fgObjGetter->fFile){
257 fgObjGetter->fFile->Close() ;
258 fgObjGetter->fFile=0;
260 if(fgObjGetter->fToSplit)
261 fgObjGetter->CloseSplitFiles() ;
262 fgObjGetter->CleanWhiteBoard() ;
263 fgObjGetter = new AliPHOSGetter(headerFile,branchTitle,toSplit) ;
270 //____________________________________________________________________________
271 const Bool_t AliPHOSGetter::BranchExists(const TString recName) const
273 //Looks in the tree Tree"name" if branch with current name olready exists
275 TString filename("") ;
276 TString name, dataname, zername ;
277 if(recName == "SDigits"){
278 filename=fSDigitsFileName ;
281 zername = "AliPHOSSDigitizer" ;
284 if(recName == "Digits"){
285 filename=fDigitsFileName ;
288 zername = "AliPHOSDigitizer" ;
291 if(recName == "RecPoints"){
292 filename=fRecPointsFileName ;
294 dataname = "PHOSEmcRP" ;
295 zername = "AliPHOSClusterizer" ;
298 if(recName == "TrackSegments"){
299 filename=fTrackSegmentsFileName ;
301 dataname = "PHOSTS" ;
302 zername = "AliPHOSTrackSegmentMaker" ;
305 if(recName == "RecParticles"){
306 filename= fRecParticlesFileName ;
308 dataname = "PHOSRP" ;
309 zername = "AliPHOSPID" ;
317 file = static_cast<TFile*>(gROOT->GetFile(filename.Data() ) ) ;
319 file = TFile::Open(fSDigitsFileName.Data(),"update");
324 tree = (TTree *)file->Get(name.Data()) ;
329 TObjArray * lob = static_cast<TObjArray*>(tree->GetListOfBranches()) ;
331 TBranch * branch = 0 ;
332 TString titleName(fBranchTitle);
334 while ((branch = (static_cast<TBranch*>(next())))) {
335 TString branchName(branch->GetName() ) ;
336 TString branchTitle(branch->GetTitle() ) ;
337 if ( branchName.BeginsWith(dataname) && branchTitle.BeginsWith(fBranchTitle) ){
338 cerr << "WARNING: AliPHOSGetter::BranchExists -> branch " << dataname.Data() << " with title " << fBranchTitle << " already exits in "
339 << name.Data() << endl;
342 if ( branchName.BeginsWith(zername) && branchTitle.BeginsWith(titleName) ){
343 cerr << "WARNING: AliPHOSGetter::BranchExists -> branch AliPHOS... with title " << branch->GetTitle() << " already exits in "
344 << name.Data() << endl;
354 //____________________________________________________________________________
355 void AliPHOSGetter::ListBranches(Int_t event) const
358 TBranch * branch = 0 ;
359 if (gAlice->GetEvent(event) == -1)
362 TTree * t = gAlice->TreeH() ;
364 cout << "INFO: AliPHOSGetter::ListBranches -> ****** Hits : " << endl ;
365 TObjArray * lob = t->GetListOfBranches() ;
367 while ( (branch = static_cast<TBranch*>(next())) )
368 cout << " " << branch->GetName() << endl ;
370 cerr << "WARNING::AliPHOSGetter::ListBranches -> TreeH not found for event " << event << endl ;
372 t = gAlice->TreeS() ;
374 cout << "INFO: AliPHOSGetter::ListBranches -> ****** SDigits : " << endl ;
375 TObjArray * lob = t->GetListOfBranches() ;
377 while ( (branch = static_cast<TBranch*>(next())) )
378 cout << " " << branch->GetName() << " " << branch->GetTitle() << endl ;
380 cerr << "WARNING::AliPHOSGetter::ListBranches -> TreeS not found for event " << event << endl ;
383 t = gAlice->TreeD() ;
385 cout << "INFO: AliPHOSGetter::ListBranches -> ****** Digits : " << endl ;
386 TObjArray * lob = t->GetListOfBranches() ;
388 while ( (branch = static_cast<TBranch*>(next())) )
389 cout << " " << branch->GetName() << " " << branch->GetTitle() << endl ;
391 cerr << "WARNING::AliPHOSGetter::ListBranches -> TreeD not found for event " << event << endl ;
394 t = gAlice->TreeR() ;
396 cout << "INFO: AliPHOSGetter::ListBranches -> ****** Recon : " << endl ;
397 TObjArray * lob = t->GetListOfBranches() ;
399 while ( (branch = static_cast<TBranch*>(next())) )
400 cout << " " << branch->GetName() << " " << branch->GetTitle() << endl ;
402 cerr << "WARNING::AliPHOSGetter::ListBranches -> TreeR not found for event " << event << endl ;
406 //____________________________________________________________________________
407 void AliPHOSGetter::NewBranch(TString name, Int_t event)
409 fBranchTitle = fSDigitsTitle = fDigitsTitle = fRecPointsTitle = fTrackSegmentsTitle = fRecParticlesTitle = name ;
413 //____________________________________________________________________________
414 Bool_t AliPHOSGetter::NewFile(TString name)
420 fFile = static_cast<TFile*>(gROOT->GetFile(fHeaderFile.Data() ) ) ;
421 if(!fFile) { //if file was not opened yet, read gAlice
422 fFile = TFile::Open(fHeaderFile.Data(),"update") ;
423 if (!fFile->IsOpen()) {
424 cerr << "ERROR : AliPHOSGetter::NewFile -> Cannot open " << fHeaderFile.Data() << endl ;
428 gAlice = static_cast<AliRun *>(fFile->Get("gAlice")) ;
432 cerr << "ERROR : AliPHOSGetter::AliPHOSGetter -> Cannot find gAlice in " << fHeaderFile.Data() << endl ;
439 //____________________________________________________________________________
440 const AliPHOS * AliPHOSGetter::PHOS()
442 // returns the PHOS object
443 AliPHOS * phos = dynamic_cast<AliPHOS*>(fModuleFolder->FindObject("PHOS")) ;
446 cout << "WARNING: AliPHOSGetter::PHOS -> PHOS module not found in Folders" << endl ;
450 //____________________________________________________________________________
451 const AliPHOSGeometry * AliPHOSGetter::PHOSGeometry()
453 AliPHOSGeometry * rv = 0 ;
455 rv = PHOS()->GetGeometry() ;
459 //____________________________________________________________________________
460 const Bool_t AliPHOSGetter::PostPrimaries(void) const
461 { //------- Primaries ----------------------
463 // the hierarchy is //Folders/RunMC/Event/Data/Primaries
465 TFolder * primariesFolder = dynamic_cast<TFolder*>(fPrimariesFolder->FindObject("Primaries")) ;
466 if ( !primariesFolder ) {
468 cout << "WARNING: AliPHOSGetter::Post Primaries -> Folder //" << fPrimariesFolder->GetName() << "/Primaries/ not found!" << endl;
469 cout << "INFO: AliPHOSGetter::Post Primaries -> Adding Folder //" << fPrimariesFolder->GetName() << "/Primaries/" << endl;
471 primariesFolder = fPrimariesFolder->AddFolder("Primaries", "Primaries particles from TreeK") ;
473 TClonesArray *primaries= new TClonesArray("TParticle",1000) ;
474 primaries->SetName("Primaries") ;
475 primariesFolder->Add(primaries) ;
480 //____________________________________________________________________________
481 TObject** AliPHOSGetter::PrimariesRef(void) const
482 { //------- Primaries ----------------------
485 // the hierarchy is //Folders/RunMC/Event/Data/Primaries
486 if ( !fPrimariesFolder ) {
487 cerr << "ERROR: AliPHOSGetter::PrimariesRef -> Folder //" << fPrimariesFolder << " not found!" << endl;
491 TFolder * primariesFolder = dynamic_cast<TFolder *>(fPrimariesFolder->FindObject("Primaries")) ;
492 if ( !primariesFolder ) {
493 cerr << "ERROR: AliPHOSGetter::PrimariesRef -> Folder //" << fPrimariesFolder << "/Primaries/ not found!" << endl;
497 TObject * p = primariesFolder->FindObject("Primaries") ;
499 cerr << "ERROR: AliPHOSGetter::PrimariesRef -> " << primariesFolder->GetName() << "/Primaries not found !" << endl ;
503 return primariesFolder->GetListOfFolders()->GetObjectRef(p) ;
506 //____________________________________________________________________________
507 const Bool_t AliPHOSGetter::PostHits(void) const
508 { //------- Hits ----------------------
510 // the hierarchy is //Folders/RunMC/Event/Data/PHOS/Hits
512 TFolder * phosFolder = dynamic_cast<TFolder*>(fHitsFolder->FindObject("PHOS")) ;
515 cout << "WARNING: AliPHOSGetter::Post H -> Folder //" << fHitsFolder << "/PHOS/ not found!" << endl;
516 cout << "INFO: AliPHOSGetter::Post H -> Adding Folder //" << fHitsFolder << "/PHOS/" << endl;
518 phosFolder = fHitsFolder->AddFolder("PHOS", "Hits from PHOS") ;
520 TClonesArray *hits= new TClonesArray("AliPHOSHit",1000) ;
521 hits->SetName("Hits") ;
522 phosFolder->Add(hits) ;
527 //____________________________________________________________________________
528 TObject** AliPHOSGetter::HitsRef(void) const
529 { //------- Hits ----------------------
532 // the hierarchy is //Folders/RunMC/Event/Data/PHOS/Hits
533 if ( !fHitsFolder ) {
534 cerr << "ERROR: AliPHOSGetter::HitsRef -> Folder //" << fHitsFolder << " not found!" << endl;
538 TFolder * phosFolder = dynamic_cast<TFolder *>(fHitsFolder->FindObject("PHOS")) ;
540 cerr << "ERROR: AliPHOSGetter::HitsRef -> Folder //" << fHitsFolder << "/PHOS/ not found!" << endl;
544 TObject * h = phosFolder->FindObject("Hits") ;
546 cerr << "ERROR: AliPHOSGetter::HitsRef -> " << phosFolder->GetName() << "/Hits not found !" << endl ;
550 return phosFolder->GetListOfFolders()->GetObjectRef(h) ;
553 //____________________________________________________________________________
554 const Bool_t AliPHOSGetter::PostSDigits(const char * name, const char * headerFile) const
555 { //---------- SDigits -------------------------
558 // the hierarchy is //Folders/RunMC/Event/Data/PHOS/SDigits/headerFile/sdigitsname
559 // because you can have sdigits from several hit files for mixing
561 TFolder * phosFolder = dynamic_cast<TFolder*>(fSDigitsFolder->FindObject("PHOS")) ;
564 cout << "WARNING: AliPHOSGetter::Post S -> Folder //" << fSDigitsFolder << "/PHOS/ not found!" << endl;
565 cout << "INFO: AliPHOSGetter::Post S -> Adding Folder //" << fHitsFolder << "/PHOS/" << endl;
567 phosFolder = fSDigitsFolder->AddFolder("PHOS", "SDigits from PHOS") ;
570 TString subdir(headerFile) ;
571 subdir.ReplaceAll("/","_") ;
572 TFolder * phosSubFolder = dynamic_cast<TFolder*>(phosFolder->FindObject(subdir)) ;
573 if ( !phosSubFolder )
574 phosSubFolder = phosFolder->AddFolder(subdir, "");
577 TObject * sd = phosSubFolder->FindObject(name);
579 TClonesArray * sdigits = new TClonesArray("AliPHOSDigit",1) ;
580 sdigits->SetName(name) ;
581 phosSubFolder->Add(sdigits) ;
586 //____________________________________________________________________________
587 TObject** AliPHOSGetter::SDigitsRef(const char * name, const char * file) const
588 { //------- SDigits ----------------------
590 // the hierarchy is //Folders/RunMC/Event/Data/PHOS/SDigits/filename/SDigits
592 if ( !fSDigitsFolder ) {
593 cerr << "ERROR: AliPHOSGetter::SDigitsRef -> Folder //" << fSDigitsFolder << " not found!" << endl;
597 TFolder * phosFolder = dynamic_cast<TFolder *>(fSDigitsFolder->FindObject("PHOS")) ;
599 cerr << "ERROR: AliPHOSGetter::SDigitsRef -> Folder //" << fSDigitsFolder << "/PHOS/ not found!" << endl;
603 TFolder * phosSubFolder = 0 ;
605 phosSubFolder = dynamic_cast<TFolder *>(phosFolder->FindObject(file)) ;
607 phosSubFolder = dynamic_cast<TFolder *>(phosFolder->FindObject(fHeaderFile)) ;
610 cerr << "ERROR: AliPHOSGetter::DigitesSRef -> Folder //Folders/RunMC/Event/Data/PHOS/" << file << "not found!" << endl;
614 TObject * dis = phosSubFolder->FindObject(name) ;
616 cerr << "ERROR: AliPHOSGetter::DigitesSRef -> object " << name << " not found! " << endl ;
620 return phosSubFolder->GetListOfFolders()->GetObjectRef(dis) ;
624 //____________________________________________________________________________
625 const Bool_t AliPHOSGetter::PostSDigitizer(AliPHOSSDigitizer * sdigitizer) const
626 { //---------- SDigitizer -------------------------
628 // the hierarchy is //Folders/Tasks/SDigitizer/PHOS/sdigitsname
631 TTask * sd = dynamic_cast<TTask*>(fTasksFolder->FindObject("SDigitizer")) ;
634 cerr << "ERROR: AliPHOSGetter::Post Ser -> Task //" << fTasksFolder << "/SDigitizer not found!" << endl;
637 TTask * phos = dynamic_cast<TTask*>(sd->GetListOfTasks()->FindObject("PHOS")) ;
640 cout <<"WARNING: AliPHOSGetter::Post Ser ->//" << fTasksFolder << "/SDigitizer/PHOS/ not found!" << endl;
641 cout <<"INFO: AliPHOSGetter::Post Ser -> Adding //" << fTasksFolder << "/SDigitizer/PHOS/" << endl;
643 phos = new TTask("PHOS", "") ;
646 AliPHOSSDigitizer * phossd = dynamic_cast<AliPHOSSDigitizer *>(phos->GetListOfTasks()->FindObject( sdigitizer->GetName() ));
649 cout << "INFO: AliPHOSGetter::Post Ser -> Task " << sdigitizer->GetName() << " already exists" << endl ;
650 phos->GetListOfTasks()->Remove(phossd) ;
652 phos->Add(sdigitizer) ;
657 //____________________________________________________________________________
658 TObject** AliPHOSGetter::SDigitizerRef(const char * name) const
661 TTask * sd = dynamic_cast<TTask*>(fTasksFolder->FindObject("SDigitizer")) ;
663 cerr << "ERROR: AliPHOSGetter::Post SerRef -> Task //" << fTasksFolder << "/SDigitizer not found!" << endl;
667 TTask * phos = dynamic_cast<TTask*>(sd->GetListOfTasks()->FindObject("PHOS")) ;
669 cerr <<"ERROR: AliPHOSGetter::Post SerRef -> //" << fTasksFolder << "/SDigitizer/PHOS not found!" << endl;
673 TTask * task = dynamic_cast<TTask*>(phos->GetListOfTasks()->FindObject(name)) ;
675 return phos->GetListOfTasks()->GetObjectRef(task) ;
679 //____________________________________________________________________________
680 const Bool_t AliPHOSGetter::PostSDigitizer(const char * name, const char * file) const
681 { //---------- SDigitizer -------------------------
683 // the hierarchy is //Folders/Tasks/SDigitizer/PHOS/sdigitsname
685 TTask * sd = dynamic_cast<TTask*>(fTasksFolder->FindObject("SDigitizer")) ;
687 cerr << "ERROR: AliPHOSGetter::Post Ser -> Task //" << fTasksFolder << "/SDigitizer not found!" << endl;
691 TTask * phos = dynamic_cast<TTask*>(sd->GetListOfTasks()->FindObject("PHOS")) ;
694 cout <<"WARNING: AliPHOSGetter::Post Ser -> //" << fTasksFolder << "/SDigitizer/PHOS/ not found!" << endl;
695 cout <<"INFO: AliPHOSGetter::Post Ser -> Adding //" << fTasksFolder << "/SDigitizer/PHOS" << endl;
697 phos = new TTask("PHOS", "") ;
701 TString sdname(name) ;
704 sdname.ReplaceAll("/","_") ;
705 AliPHOSSDigitizer * phossd = dynamic_cast<AliPHOSSDigitizer *>(phos->GetListOfTasks()->FindObject( sdname ));
707 phossd = new AliPHOSSDigitizer() ;
708 //Note, we can not call constructor with parameters: it will call Getter and scew up everething
709 phossd->SetName(sdname) ;
710 phossd->SetTitle(file) ;
717 //____________________________________________________________________________
718 const Bool_t AliPHOSGetter::PostDigits(const char * name) const
719 { //---------- Digits -------------------------
721 // the hierarchy is //Folders/Run/Event/Data/PHOS/SDigits/name
723 TFolder * phosFolder = dynamic_cast<TFolder*>(fDigitsFolder->FindObject("PHOS")) ;
727 cout << "WARNING: AliPHOSGetter::Post D -> Folder //" << fDigitsFolder << "/PHOS/ not found!" << endl;
728 cout << "INFO: AliPHOSGetter::Post D -> Adding Folder //" << fDigitsFolder << "/PHOS/" << endl;
730 phosFolder = fDigitsFolder->AddFolder("PHOS", "Digits from PHOS") ;
733 TObject* dig = phosFolder->FindObject( name ) ;
735 TClonesArray * digits = new TClonesArray("AliPHOSDigit",1000) ;
736 digits->SetName(name) ;
737 phosFolder->Add(digits) ;
742 //____________________________________________________________________________
743 TObject** AliPHOSGetter::DigitsRef(const char * name) const
744 { //------- Digits ----------------------
746 // the hierarchy is //Folders/Run/Event/Data/PHOS/Digits/name
748 if ( !fDigitsFolder ) {
749 cerr << "ERROR: AliPHOSGetter::DigitsRef -> Folder //" << fDigitsFolder << " not found!" << endl;
753 TFolder * phosFolder = dynamic_cast<TFolder*>(fDigitsFolder->FindObject("PHOS")) ;
755 cerr << "ERROR: AliPHOSGetter::DigitsRef -> Folder //" << fDigitsFolder << "/PHOS/ not found!" << endl;
759 TObject * d = phosFolder->FindObject(name) ;
761 cerr << "ERROR: AliPHOSGetter::DigitsRef -> object " << name << " not found! " << endl ;
765 return phosFolder->GetListOfFolders()->GetObjectRef(d) ;
769 //____________________________________________________________________________
770 const Bool_t AliPHOSGetter::PostDigitizer(AliPHOSDigitizer * digitizer) const
771 { //---------- Digitizer -------------------------
773 TTask * sd = dynamic_cast<TTask*>(fTasksFolder->FindObject("Digitizer")) ;
776 cerr << "ERROR: AliPHOSGetter::Post Der -> Task //" << fTasksFolder << "/Digitizer not found!" << endl;
779 TTask * phos = dynamic_cast<TTask*>(sd->GetListOfTasks()->FindObject("PHOS")) ;
782 cout <<"WARNING: AliPHOSGetter::Post Der -> //" << fTasksFolder << "/Digitizer/PHOS not found!" << endl;
783 cout <<"INFO: AliPHOSGetter::Post Der -> Adding //" << fTasksFolder << "/Digitizer/PHOS" << endl;
785 phos = new TTask("PHOS", "") ;
789 AliPHOSDigitizer * phosd = dynamic_cast<AliPHOSDigitizer*>(phos->GetListOfTasks()->FindObject(digitizer->GetName())) ;
792 phos->GetListOfTasks()->Remove(phosd) ;
794 phos->Add(digitizer) ;
798 //____________________________________________________________________________
799 const Bool_t AliPHOSGetter::PostDigitizer(const char * name) const
800 { //---------- Digitizer -------------------------
802 // the hierarchy is //Folders/Tasks/SDigitizer/PHOS/sdigitsname
804 TTask * d = dynamic_cast<TTask*>(fTasksFolder->FindObject("Digitizer")) ;
806 cerr << "ERROR: AliPHOSGetter::Post Der -> Task //" << fTasksFolder << "/Digitizer not found!" << endl;
810 TTask * phos = dynamic_cast<TTask*>(d->GetListOfTasks()->FindObject("PHOS")) ;
813 cout <<"WARNING: AliPHOSGetter::Post Der -> //" << fTasksFolder << "/Digitizer/PHOS not found!" << endl;
814 cout <<"INFO: AliPHOSGetter::Post Der -> Adding //" << fTasksFolder << "/Digitizer/PHOS" << endl;
816 phos = new TTask("PHOS", "") ;
820 AliPHOSDigitizer * phosd = dynamic_cast<AliPHOSDigitizer*>(phos->GetListOfTasks()->FindObject(name)) ;
822 phosd = new AliPHOSDigitizer() ;
823 phosd->SetName(fDigitsTitle) ;
824 phosd->SetTitle(fHeaderFile) ;
830 //____________________________________________________________________________
831 TObject** AliPHOSGetter::DigitizerRef(const char * name) const
833 TTask * sd = dynamic_cast<TTask*>(fTasksFolder->FindObject("Digitizer")) ;
835 cerr << "ERROR: AliPHOSGetter::Post DerRef -> Task //" << fTasksFolder << "/Digitizer not found!" << endl;
839 TTask * phos = dynamic_cast<TTask*>(sd->GetListOfTasks()->FindObject("PHOS")) ;
841 cerr <<"ERROR: AliPHOSGetter::Post DerRef -> //" << fTasksFolder << "/Digitizer/PHOS" << endl;
845 TTask * task = dynamic_cast<TTask*>(phos->GetListOfTasks()->FindObject(name)) ;
847 return phos->GetListOfTasks()->GetObjectRef(task) ;
851 //____________________________________________________________________________
852 const Bool_t AliPHOSGetter::PostRecPoints(const char * name) const
853 { // -------------- RecPoints -------------------------------------------
855 // the hierarchy is //Folders/Run/Event/RecData/PHOS/EMCARecPoints/name
856 // the hierarchy is //Folders/Run/Event/RecData/PHOS/CPVRecPoints/name
858 TFolder * phosFolder = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS")) ;
862 cout << "WARNING: AliPHOSGetter::Post RPo -> Folder //" << fRecoFolder->GetName() << "/PHOS/ not found!" << endl;
863 cout << "INFO: AliPHOSGetter::Post Rpo -> Adding Folder //" << fRecoFolder->GetName() << "/PHOS/" << endl;
865 phosFolder = fRecoFolder->AddFolder("PHOS", "Reconstructed data from PHOS") ;
869 TFolder * phosRPoEMCAFolder = dynamic_cast<TFolder*>(phosFolder->FindObject("EMCARecPoints")) ;
870 if ( !phosRPoEMCAFolder ) {
872 cout << "WARNING: AliPHOSGetter::Post RPo -> Folder //" << fRecoFolder->GetName() << "/PHOS/EMCARecPoints/ not found!" << endl;
873 cout << "INFO: AliPHOSGetter::Post Rpo -> Adding Folder //" << fRecoFolder->GetName() << "/PHOS/EMCARecPoints" << endl;
875 phosRPoEMCAFolder = phosFolder->AddFolder("EMCARecPoints", "EMCA RecPoints from PHOS") ;
878 TObject * erp = phosFolder->FindObject( name ) ;
880 TObjArray * emcrp = new TObjArray(100) ;
881 emcrp->SetName(name) ;
882 phosRPoEMCAFolder->Add(emcrp) ;
886 TFolder * phosRPoCPVFolder = dynamic_cast<TFolder*>(phosFolder->FindObject("CPVRecPoints")) ;
887 if ( !phosRPoCPVFolder ) {
889 cout << "WARNING: AliPHOSGetter::Post RPo -> Folder //" << fRecoFolder->GetName() << "/PHOS/CPVRecPoints/ not found!" << endl;
890 cout << "INFO: AliPHOSGetter::Post Rpo -> Adding Folder //" << fRecoFolder->GetName() << "/PHOS/CPVRecPoints/" << endl;
892 phosRPoCPVFolder = phosFolder->AddFolder("CPVRecPoints", "CPV RecPoints from PHOS") ;
895 TObject * crp = phosRPoCPVFolder->FindObject( name ) ;
897 TObjArray * cpvrp = new TObjArray(100) ;
898 cpvrp->SetName(name) ;
899 phosRPoCPVFolder->Add(cpvrp) ;
904 //____________________________________________________________________________
905 TObject** AliPHOSGetter::EmcRecPointsRef(const char * name) const
906 { // -------------- RecPoints -------------------------------------------
908 // the hierarchy is //Folders/Run/Event/RecData/PHOS/EMCARecPoints/name
910 if ( !fRecoFolder ) {
911 cerr << "ERROR: AliPHOSGetter::EmcRecPointsRef -> Folder //" << fRecoFolder->GetName() << " not found!" << endl;
915 TFolder * phosFolder = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/EMCARecPoints")) ;
917 cerr << "ERROR: AliPHOSGetter::EmcRecPointsRef -> Folder //" << fRecoFolder->GetName() << "/PHOS/EMCARecPoints/ not found!" << endl;
922 TObject * erp = phosFolder->FindObject(name ) ;
924 cerr << "ERROR: AliPHOSGetter::EmcRecPointsRef -> object " << name << " not found! " << endl ;
927 return phosFolder->GetListOfFolders()->GetObjectRef(erp) ;
931 //____________________________________________________________________________
932 TObject** AliPHOSGetter::CpvRecPointsRef(const char * name) const
933 { // -------------- RecPoints -------------------------------------------
935 // the hierarchy is //Folders/Run/Event/RecData/PHOS/CPVRecPoints/name
937 if ( !fRecoFolder ) {
938 cerr << "ERROR: AliPHOSGetter::CpvRecPointsRef -> Folder //" << fRecoFolder->GetName() << " not found!" << endl;
942 TFolder * phosFolder = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/CPVRecPoints")) ;
944 cerr << "ERROR: AliPHOSGetter::CpvRecPointsRef -> Folder //" << fRecoFolder->GetName() << "/PHOS/CPVRecPoints/" << endl;
948 TObject * crp = phosFolder->FindObject(name ) ;
950 cerr << "ERROR: AliPHOSGetter::CpvRecPointsRef -> object " << name << " not found " << endl ;
953 return phosFolder->GetListOfFolders()->GetObjectRef(crp) ;
957 //____________________________________________________________________________
958 const Bool_t AliPHOSGetter::PostClusterizer(AliPHOSClusterizer * clu) const
959 { // ------------------ AliPHOSClusterizer ------------------------
961 // the hierarchy is //Folders/Tasks/Reconstructioner/PHOS/sdigitsname
963 TTask * tasks = dynamic_cast<TTask*>(fTasksFolder->FindObject("Reconstructioner")) ;
966 cerr << "ERROR: AliPHOSGetter::Post Rer -> Task //" << fTasksFolder << "/Reconstructioner not found!" << endl;
970 TTask * phos = dynamic_cast<TTask*>(tasks->GetListOfTasks()->FindObject("PHOS")) ;
973 cout <<"WARNING: AliPHOSGetter::Post Rer -> //" << fTasksFolder << "/Reconstructioner/PHOS not found!" << endl;
974 cout <<"INFO: AliPHOSGetter::Post Rer -> Adding //" << fTasksFolder << "/Reconstructioner/PHOS" << endl;
976 phos = new TTask("PHOS", "") ;
980 AliPHOSClusterizer * phoscl = dynamic_cast<AliPHOSClusterizer*>(phos->GetListOfTasks()->FindObject(clu->GetName())) ;
983 cout << "INFO: AliPHOSGetter::Post Rer -> Task " << clu->GetName() << " already exists" << endl ;
985 phos->GetListOfTasks()->Remove(phoscl) ;
991 //____________________________________________________________________________
992 TObject** AliPHOSGetter::ClusterizerRef(const char * name) const
993 { // ------------------ AliPHOSClusterizer ------------------------
995 TTask * tasks = dynamic_cast<TTask*>(fTasksFolder->FindObject("Reconstructioner")) ;
998 cerr << "ERROR: AliPHOSGetter::ClusterizerRef -> Task //" << fTasksFolder->GetName() << "/Reconstructioner not found!" << endl;
1002 TTask * phos = dynamic_cast<TTask*>(tasks->GetListOfTasks()->FindObject("PHOS")) ;
1004 cerr <<"WARNING: AliPHOSGetter::ClusterizerRef -> //" << fTasksFolder->GetName() << "/Reconstructioner/PHOS" << endl;
1008 TList * l = phos->GetListOfTasks() ;
1012 TString cluname(name) ;
1014 while((task = static_cast<TTask *>(it.Next()) )){
1015 TString taskname(task->GetName()) ;
1016 if(taskname.BeginsWith(cluname)){
1023 return l->GetObjectRef(clu) ;
1025 cerr << "ERROR: AliPHOSGetter::ClusterizerRef -> Task //" << fTasksFolder->GetName() << "/Reconstructioner/clusterizer " << name << " not found!" << endl;
1030 //____________________________________________________________________________
1031 const Bool_t AliPHOSGetter::PostClusterizer(const char * name) const
1032 { // ------------------ AliPHOSClusterizer ------------------------
1034 // the hierarchy is //Folders/Tasks/Reconstructioner/PHOS/sdigitsname
1036 TTask * tasks = dynamic_cast<TTask*>(fTasksFolder->FindObject("Reconstructioner")) ;
1039 cerr << "ERROR: AliPHOSGetter::Post Rer -> Task//" << fTasksFolder << "/Reconstructioner not found!" << endl;
1043 TTask * phos = dynamic_cast<TTask*>(tasks->GetListOfTasks()->FindObject("PHOS")) ;
1046 cout <<"WARNING: AliPHOSGetter::Post Rer -> //" << fTasksFolder << "/Reconstructioner/PHOS not found!" << endl;
1047 cout <<"INFO: AliPHOSGetter::Post Rer -> Adding //" << fTasksFolder << "/Reconstructioner/PHOS" << endl;
1049 phos = new TTask("PHOS", "") ;
1053 TList * l = phos->GetListOfTasks() ;
1055 TString clun(name) ;
1058 while((task = static_cast<TTask *>(it.Next()) )){
1059 TString taskname(task->GetName()) ;
1060 if(taskname.BeginsWith(clun))
1064 AliPHOSClusterizerv1 * phoscl = new AliPHOSClusterizerv1() ;
1066 phoscl->SetName(clun) ;
1067 phoscl->SetTitle(fHeaderFile) ;
1073 //____________________________________________________________________________
1074 const Bool_t AliPHOSGetter::PostTrackSegments(const char * name) const
1075 { // ---------------TrackSegments -----------------------------------
1077 // the hierarchy is //Folders/Run/Event/RecData/PHOS/TrackSegments/name
1079 TFolder * phosFolder = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS")) ;
1081 if ( !phosFolder ) {
1083 cout << "WARNING: AliPHOSGetter::Post TS -> Folder //" << fRecoFolder->GetName() << "/PHOS/ not found!" << endl;
1084 cout << "INFO: AliPHOSGetter::Post TS -> Adding Folder //" << fRecoFolder->GetName() << "/PHOS" << endl;
1086 phosFolder = fRecoFolder->AddFolder("PHOS", "Reconstructed data from PHOS") ;
1089 TFolder * phosTSFolder = dynamic_cast<TFolder*>(phosFolder->FindObject("TrackSegments")) ;
1090 if ( !phosTSFolder ) {
1092 cout << "WARNING: AliPHOSGetter::Post TS -> Folder //" << fRecoFolder->GetName() << "/PHOS/TrackSegments/ not found!" << endl;
1093 cout << "INFO: AliPHOSGetter::Post TS -> Adding Folder //" << fRecoFolder->GetName() << "/PHOS/TrackSegments/" << endl;
1095 phosTSFolder = phosFolder->AddFolder("TrackSegments", "TrackSegments from PHOS") ;
1098 TObject * tss = phosTSFolder->FindObject( name ) ;
1100 TClonesArray * ts = new TClonesArray("AliPHOSTrackSegment",100) ;
1102 phosTSFolder->Add(ts) ;
1107 //____________________________________________________________________________
1108 TObject** AliPHOSGetter::TrackSegmentsRef(const char * name) const
1109 { // ---------------TrackSegments -----------------------------------
1111 // the hierarchy is //Folders/Run/Event/RecData/PHOS/TrackSegments/name
1113 if ( !fRecoFolder ) {
1114 cerr << "ERROR: AliPHOSGetter::TrackSegmentsRef -> Folder //" << fRecoFolder->GetName() << "not found!" << endl;
1118 TFolder * phosFolder = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/TrackSegments")) ;
1119 if ( !phosFolder ) {
1120 cerr << "ERROR: AliPHOSGetter::TrackSegmentsRef -> Folder //" << fRecoFolder->GetName() << "/PHOS/TrackSegments/ not found!" << endl;
1124 TObject * tss = phosFolder->FindObject(name) ;
1126 cerr << "ERROR: AliPHOSGetter::TrackSegmentsRef -> object " << name << " not found! " << endl ;
1129 return phosFolder->GetListOfFolders()->GetObjectRef(tss) ;
1132 //____________________________________________________________________________
1133 const Bool_t AliPHOSGetter::PostTrackSegmentMaker(AliPHOSTrackSegmentMaker * tsmaker) const
1134 { //------------Track Segment Maker ------------------------------
1136 // the hierarchy is //Folders/Tasks/Reconstructioner/PHOS/sdigitsname
1138 TTask * tasks = dynamic_cast<TTask*>(fTasksFolder->FindObject("Reconstructioner")) ;
1141 cerr << "ERROR: AliPHOSGetter::Post Ter -> Task //" << fTasksFolder << "/Reconstructioner not found!" << endl;
1145 TTask * phos = dynamic_cast<TTask*>(tasks->GetListOfTasks()->FindObject("PHOS")) ;
1148 cout <<"WARNING: AliPHOSGetter::Post Rer -> //" << fTasksFolder << "/Reconstructioner/PHOS not found!" << endl;
1149 cout <<"INFO: AliPHOSGetter::Post Rer -> Adding //" << fTasksFolder << "/Reconstructioner/PHOS" << endl;
1151 phos = new TTask("PHOS", "") ;
1155 AliPHOSTrackSegmentMaker * phosts =
1156 dynamic_cast<AliPHOSTrackSegmentMaker*>(phos->GetListOfTasks()->FindObject(tsmaker->GetName())) ;
1159 phos->GetListOfTasks()->Remove(phosts) ;
1161 phos->Add(tsmaker) ;
1165 //____________________________________________________________________________
1166 const Bool_t AliPHOSGetter::PostTrackSegmentMaker(const char * name) const
1167 { //------------Track Segment Maker ------------------------------
1169 // the hierarchy is //Folders/Tasks/Reconstructioner/PHOS/sdigitsname
1171 TTask * tasks = dynamic_cast<TTask*>(fTasksFolder->FindObject("Reconstructioner")) ;
1174 cerr << "ERROR: AliPHOSGetter::Post Ter -> Task //" << fTasksFolder->GetName() << "/Reconstructioner not found!" << endl;
1178 TTask * phos = dynamic_cast<TTask*>(tasks->GetListOfTasks()->FindObject("PHOS")) ;
1181 cout <<"WARNING: AliPHOSGetter::Post Ter -> //" << fTasksFolder->GetName() << "/Reconstructioner/PHOS not found!" << endl;
1182 cout <<"INFO: AliPHOSGetter::Post Ter -> Adding //" << fTasksFolder->GetName() << "/Reconstructioner/PHOS" << endl;
1184 phos = new TTask("PHOS", "") ;
1188 TList * l = phos->GetListOfTasks() ;
1193 while((task = static_cast<TTask *>(it.Next()) )){
1194 TString taskname(task->GetName()) ;
1195 if(taskname.BeginsWith(tsn))
1199 AliPHOSTrackSegmentMakerv1 * phosts = new AliPHOSTrackSegmentMakerv1() ;
1201 phosts->SetName(tsn) ;
1202 phosts->SetTitle(fHeaderFile) ;
1208 //____________________________________________________________________________
1209 TObject** AliPHOSGetter::TSMakerRef(const char * name) const
1210 { //------------Track Segment Maker ------------------------------
1212 TTask * tasks = dynamic_cast<TTask*>(fTasksFolder->FindObject("Reconstructioner")) ;
1215 cerr << "ERROR: AliPHOSGetter::TSMakerRef -> Task //" << fTasksFolder->GetName() << "/Reconstructioner not found!" << endl;
1219 TTask * phos = dynamic_cast<TTask*>(tasks->GetListOfTasks()->FindObject("PHOS")) ;
1221 cerr <<"WARNING: AliPHOSGetter::TSMakerRef -> //" << fTasksFolder->GetName() << "/Reconstructioner/PHOS not found!" << endl;
1225 TList * l = phos->GetListOfTasks() ;
1229 TString tsmname(name) ;
1231 while((task = static_cast<TTask *>(it.Next()) )){
1232 TString taskname(task->GetName()) ;
1233 if(taskname.BeginsWith(tsmname)){
1240 return l->GetObjectRef(tsm) ;
1242 cerr << "ERROR: AliPHOSGetter::TSMakerRef -> Task //" << fTasksFolder->GetName() << "/Reconstructioner/PHOS/TrackSegmentMarker/" << name << " not found!" << endl;
1247 //____________________________________________________________________________
1248 const Bool_t AliPHOSGetter::PostRecParticles(const char * name) const
1249 { // -------------------- RecParticles ------------------------
1251 // the hierarchy is //Folders/Run/Event/RecData/PHOS/RecParticles/name
1253 TFolder * phosFolder = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS")) ;
1255 if ( !phosFolder ) {
1257 cout << "WARNING: AliPHOSGetter::Post RPa -> Folder //" << fRecoFolder->GetName() << "/PHOS/ not found!" << endl;
1258 cout << "INFO: AliPHOSGetter::Post Rpa -> Adding Folder //" << fRecoFolder->GetName() << "/PHOS/" << endl;
1260 phosFolder = fRecoFolder->AddFolder("PHOS", "Reconstructed data from PHOS") ;
1263 TFolder * phosRPaFolder = dynamic_cast<TFolder*>(phosFolder->FindObject("RecParticles")) ;
1264 if ( !phosRPaFolder ) {
1266 cout << "WARNING: AliPHOSGetter::Post RPa -> Folder //" << fRecoFolder->GetName() << "/PHOS/RecParticles/ not found!" << endl;
1267 cout << "INFO: AliPHOSGetter::Post RPa -> Adding Folder //" << fRecoFolder->GetName() << "/PHOS/RecParticles/" << endl;
1269 phosRPaFolder = phosFolder->AddFolder("RecParticles", "RecParticles from PHOS") ;
1272 TObject * rps = phosRPaFolder->FindObject( name ) ;
1274 TClonesArray * rp = new TClonesArray("AliPHOSRecParticle",100) ;
1276 phosRPaFolder->Add(rp) ;
1281 //____________________________________________________________________________
1282 TObject** AliPHOSGetter::RecParticlesRef(const char * name) const
1283 { // ---------------RecParticles -----------------------------------
1285 // the hierarchy is //Folders/Run/Event/RecData/PHOS/TrackSegments/name
1287 if ( !fRecoFolder ) {
1288 cerr << "ERROR: AliPHOSGetter::RecParticlesRef -> Folder//" << fRecoFolder->GetName() << " not found!" << endl;
1292 TFolder * phosFolder = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/RecParticles")) ;
1293 if ( !phosFolder ) {
1294 cerr << "ERROR: AliPHOSGetter::RecParticlesRef -> Folder //" << fRecoFolder->GetName() << "/PHOS/RecParticles/ not found!" << endl;
1298 TObject * tss = phosFolder->FindObject(name ) ;
1300 cerr << "ERROR: AliPHOSGetter::RecParticlesRef -> object " << name << " not found! " << endl ;
1303 return phosFolder->GetListOfFolders()->GetObjectRef(tss) ;
1306 //____________________________________________________________________________
1307 const Bool_t AliPHOSGetter::PostPID(AliPHOSPID * pid) const
1308 { // ------------AliPHOS PID -----------------------------
1310 TTask * tasks = dynamic_cast<TTask*>(fTasksFolder->FindObject("Reconstructioner")) ;
1313 cerr << "ERROR: AliPHOSGetter::Post Per -> Task //" << fTasksFolder << "/Reconstructioner not found!" << endl;
1317 TTask * phos = dynamic_cast<TTask*>(tasks->GetListOfTasks()->FindObject("PHOS")) ;
1320 cout <<"WARNING: AliPHOSGetter::Post Per -> //" << fTasksFolder << "/Reconstructioner/PHOS not found!" << endl;
1321 cout <<"INFO: AliPHOSGetter::Post Per -> Adding //" << fTasksFolder << "/Reconstructioner/PHOS" << endl;
1323 phos = new TTask("PHOS", "") ;
1327 AliPHOSPID * phospid = dynamic_cast<AliPHOSPID*>(phos->GetListOfTasks()->FindObject(pid->GetName())) ;
1330 cout << "INFO: AliPHOSGetter::Post Per -> Task " << pid->GetName()
1331 << " already exists" << endl ;
1332 phos->GetListOfTasks()->Remove(phospid) ;
1339 //____________________________________________________________________________
1340 const Bool_t AliPHOSGetter::PostPID(const char * name) const
1342 // the hierarchy is //Folders/Tasks/Reconstructioner/PHOS/sdigitsname
1344 TTask * tasks = dynamic_cast<TTask*>(fTasksFolder->FindObject("Reconstructioner")) ;
1347 cerr << "ERROR: AliPHOSGetter::Post Per -> Task //" << fTasksFolder->GetName() << "/Reconstructioner not found!" << endl;
1351 TTask * phos = dynamic_cast<TTask*>(tasks->GetListOfTasks()->FindObject("PHOS")) ;
1354 cout <<"WARNING: AliPHOSGetter::Post Per -> //" << fTasksFolder->GetName() << "/Reconstructioner/PHOS not found!" << endl;
1355 cout <<"INFO: AliPHOSGetter::Post Per -> Adding //" << fTasksFolder->GetName() << "/Reconstructioner/PHOS" << endl;
1357 phos = new TTask("PHOS", "") ;
1361 TList * l = phos->GetListOfTasks() ;
1363 TString pidname(name) ;
1366 while((task = static_cast<TTask *>(it.Next()) )){
1367 TString taskname(task->GetName()) ;
1368 if(taskname.BeginsWith(pidname))
1372 AliPHOSPIDv1 * phospid = new AliPHOSPIDv1() ;
1374 phospid->SetName(pidname) ;
1375 phospid->SetTitle(fHeaderFile) ;
1376 phos->Add(phospid) ;
1381 //____________________________________________________________________________
1382 TObject** AliPHOSGetter::PIDRef(const char * name) const
1383 { //------------PID ------------------------------
1385 TTask * tasks = dynamic_cast<TTask*>(fTasksFolder->FindObject("Reconstructioner")) ;
1388 cerr << "ERROR: AliPHOSGetter::PIDRef -> Task //" << fTasksFolder->GetName() << "/Reconstructioner not found!" << endl;
1392 TTask * phos = dynamic_cast<TTask*>(tasks->GetListOfTasks()->FindObject("PHOS")) ;
1394 cerr << "ERROR: AliPHOSGetter::PIDRef -> //" << fTasksFolder->GetName() << "/Reconstructioner/PHOS not found!" << endl;
1398 TList * l = phos->GetListOfTasks() ;
1402 TString pidname(name) ;
1404 while((task = static_cast<TTask *>(it.Next()) )){
1405 TString taskname(task->GetName()) ;
1406 if(taskname.BeginsWith(pidname)){
1413 return l->GetObjectRef(pid) ;
1415 cerr << "ERROR: AliPHOSGetter::PIDRef -> Task //" << fTasksFolder->GetName() << "/Reconstructioner/PHOS/PID/" << name << " not found!" << endl;
1421 //____________________________________________________________________________
1422 const Bool_t AliPHOSGetter::PostQA(void) const
1423 { // ------------------ QA ---------------------------------
1425 // the hierarchy is //Folders/Run/Conditions/QA/PHOS/alarmsName
1427 TFolder * phosFolder = dynamic_cast<TFolder*>(fQAFolder->FindObject("PHOS")) ;
1428 if ( !phosFolder ) {
1430 cout << "WARNING: AliPHOSGetter::Post Q -> Folder //" << fQAFolder << "/PHOS/ not found!" << endl;
1431 cout << "INFO: AliPHOSGetter::Post Q -> Adding Folder //" << fQAFolder << "/PHOS/" << endl;
1433 phosFolder = fQAFolder->AddFolder("PHOS", "QA from PHOS") ;
1439 //____________________________________________________________________________
1440 TObject** AliPHOSGetter::AlarmsRef(void) const
1441 { //------- Alarms ----------------------
1444 // the hierarchy is //Folders/Run/Conditions/QA/PHOS
1446 cerr << "ERROR: AliPHOSGetter::AlarmsRef -> Folder //" << fQAFolder << " not found!" << endl;
1450 TFolder * phosFolder = dynamic_cast<TFolder *>(fQAFolder->FindObject("PHOS")) ;
1451 if ( !phosFolder ) {
1452 cerr << "ERROR: AliPHOSGetter::AlarmsRef -> Folder //" << fQAFolder << "/PHOS/ not found!" << endl;
1456 return fQAFolder->GetListOfFolders()->GetObjectRef(phosFolder) ;
1460 //____________________________________________________________________________
1461 TTree * AliPHOSGetter::TreeK(TString filename)
1464 // returns TreeK from file filename
1465 // usefull in case of split file
1467 if ( filename.IsNull() )
1468 filename = fHeaderFile ;
1471 file = static_cast<TFile*>(gROOT->GetFile(filename.Data() ) ) ;
1472 if (file && (filename != fHeaderFile) ) { // file already open
1476 file = TFile::Open(filename.Data(), "read") ;
1477 fAlice = static_cast<AliRun *>(file->Get("gAlice")) ;
1478 TString treeName("TreeK") ;
1479 treeName += EventNumber() ;
1480 TTree * tree = static_cast<TTree *>(file->Get(treeName.Data())) ;
1481 if (!tree && fDebug)
1482 cout << "WARNING: AliPHOSGetter::TreeK -> " << treeName.Data() << " not found in " << filename.Data() << endl ;
1487 //____________________________________________________________________________
1488 TTree * AliPHOSGetter::TreeH(TString filename)
1491 // returns TreeH from file filename
1492 // usefull in case of split file
1494 if ( filename.IsNull() )
1495 filename = fHeaderFile ;
1498 file = static_cast<TFile*>(gROOT->GetFile(filename.Data() ) ) ;
1499 if (!file) { // file not open yet
1500 file = TFile::Open(filename.Data(), "read") ;
1502 TString treeName("TreeH") ;
1503 treeName += EventNumber() ;
1504 TTree * tree = static_cast<TTree *>(file->Get(treeName.Data())) ;
1505 if (!tree && fDebug)
1506 cout << "WARNING: AliPHOSGetter::TreeH -> " << treeName.Data() << " not found in " << filename.Data() << endl ;
1511 //____________________________________________________________________________
1512 TTree * AliPHOSGetter::TreeS(TString filename)
1515 // returns TreeS from file filename
1516 // usefull in case of split file
1518 if ( filename.IsNull() )
1519 filename = fHeaderFile ;
1522 file = static_cast<TFile*>(gROOT->GetFile(filename.Data() ) ) ;
1523 if (!file) { // file not open yet
1524 file = TFile::Open(filename.Data(), "read") ;
1526 TString treeName("TreeS") ;
1527 treeName += EventNumber() ;
1528 TTree * tree = static_cast<TTree *>(file->Get(treeName.Data())) ;
1529 if (!tree && fDebug)
1530 cout << "WARNING: AliPHOSGetter::TreeS -> " << treeName.Data() << " not found in " << filename.Data() << endl ;
1535 //____________________________________________________________________________
1536 TTree * AliPHOSGetter::TreeD(TString filename)
1539 // returns TreeD from file filename
1540 // usefull in case of split file
1542 if ( filename.IsNull() )
1543 filename = fHeaderFile ;
1546 file = static_cast<TFile*>(gROOT->GetFile(filename.Data() ) ) ;
1547 if (!file) { // file not open yet
1548 file = TFile::Open(filename.Data(), "read") ;
1550 TString treeName("TreeD") ;
1551 treeName += EventNumber() ;
1552 TTree * tree = static_cast<TTree *>(file->Get(treeName.Data())) ;
1553 if (!tree && fDebug)
1554 cout << "WARNING: AliPHOSGetter::TreeD -> " << treeName.Data() << " not found in " << filename.Data() << endl ;
1559 //____________________________________________________________________________
1560 const TParticle * AliPHOSGetter::Primary(Int_t index) const
1562 // Return primary particle numbered by <index>
1568 p = fAlice->Particle(index) ;
1570 p = gAlice->Particle(index) ;
1576 //____________________________________________________________________________
1577 const TParticle * AliPHOSGetter::Secondary(TParticle* p, Int_t index) const
1579 // Return first (index=1) or second (index=2) secondary particle of primary particle p
1587 Int_t daughterIndex = p->GetDaughter(index-1) ;
1588 return gAlice->Particle(daughterIndex) ;
1594 //____________________________________________________________________________
1595 Int_t AliPHOSGetter::ReadTreeD(const Int_t event)
1597 // Read the digit tree gAlice->TreeD()
1601 TFile * file = static_cast<TFile*>(gROOT->GetFile(fDigitsFileName));
1603 file = TFile::Open(fDigitsFileName) ;
1604 // Get Digits Tree header from file
1605 TString treeName("TreeD") ;
1607 treeD = dynamic_cast<TTree*>(file->Get(treeName.Data()));
1608 if(!treeD){ // TreeD not found in header file
1610 cout << "WARNING: AliPHOSGetter::ReadTreeD -> Cannot find TreeD in " << fDigitsFileName.Data() << endl;
1615 treeD = gAlice->TreeD() ;
1617 TObjArray * lob = static_cast<TObjArray*>(treeD->GetListOfBranches()) ;
1619 TBranch * branch = 0 ;
1620 TBranch * digitsbranch = 0 ;
1621 TBranch * digitizerbranch = 0 ;
1622 Bool_t phosfound = kFALSE, digitizerfound = kFALSE ;
1624 while ( (branch = static_cast<TBranch*>(next())) && (!phosfound || !digitizerfound) ) {
1625 if ( (strcmp(branch->GetName(), "PHOS")==0) && (strcmp(branch->GetTitle(), fDigitsTitle)==0) ) {
1626 digitsbranch = branch ;
1629 else if ( (strcmp(branch->GetName(), "AliPHOSDigitizer")==0) && (strcmp(branch->GetTitle(), fDigitsTitle)==0) ) {
1630 digitizerbranch = branch ;
1631 digitizerfound = kTRUE ;
1635 if ( !phosfound || !digitizerfound ) {
1637 cout << "WARNING: AliPHOSGetter::ReadTreeD -> Cannot find Digits and/or Digitizer with name "
1638 << fDigitsTitle << endl ;
1643 if(!Digits(fDigitsTitle) )
1644 PostDigits(fDigitsTitle);
1645 digitsbranch->SetAddress(DigitsRef(fDigitsTitle)) ;
1646 digitsbranch->GetEntry(0) ;
1649 // read the Digitizer
1650 RemoveTask("D", fDigitsTitle) ; // I do not understand why I need that
1651 if(!Digitizer(fDigitsTitle))
1652 PostDigitizer(fDigitsTitle) ;
1653 digitizerbranch->SetAddress(DigitizerRef(fDigitsTitle)) ;
1654 digitizerbranch->GetEntry(0) ;
1657 if(gAlice->TreeD()!=treeD)
1662 //____________________________________________________________________________
1663 Int_t AliPHOSGetter::ReadTreeH()
1665 // Read the first entry of PHOS branch in hit tree gAlice->TreeH()
1667 TTree * treeH = gAlice->TreeH() ;
1669 if(!treeH) {// TreeH not found in header file
1672 cout << "WARNING: AliPHOSGetter::ReadTreeH -> Cannot find TreeH in " << fHeaderFile << endl ;
1674 TString searchFileName("PHOS.Hits") ;
1675 if((strcmp(fBranchTitle.Data(),"Default")!=0)&&(strcmp(fBranchTitle.Data(),"")!=0)){
1676 searchFileName+="." ;
1677 searchFileName += fBranchTitle ;
1679 searchFileName+=".root" ;
1681 if ( (treeH = TreeH(searchFileName)) ) { //found TreeH in the file which contains the hits
1683 cout << "INFO: AliPHOSGetter::ReadTreeH -> TreeH found in " << searchFileName.Data() << endl ;
1686 cerr << "ERROR: AliPHOSGetter::ReadTreeH -> TreeH not found " << endl ;
1691 TBranch * hitsbranch = static_cast<TBranch*>(treeH->GetBranch("PHOS")) ;
1692 if ( !hitsbranch ) {
1694 cout << "WARNING: AliPHOSGetter::ReadTreeH -> Cannot find branch PHOS" << endl ;
1700 if (hitsbranch->GetEntries() > 1 ) {
1701 (dynamic_cast<TClonesArray*> (*HitsRef()))->Clear() ;
1702 TClonesArray * tempo = new TClonesArray("AliPHOSHit",1000) ;
1703 TClonesArray * hits = dynamic_cast<TClonesArray*>(*HitsRef()) ;
1704 hitsbranch->SetAddress(&tempo) ;
1707 for (i = 0 ; i < hitsbranch->GetEntries() ; i++) {
1708 hitsbranch->GetEntry(i) ;
1710 for ( j = 0 ; j < tempo->GetEntries() ; j++) {
1711 const AliPHOSHit * hit = static_cast<const AliPHOSHit *>(tempo->At(j)) ;
1712 new((*hits)[index]) AliPHOSHit( *hit ) ;
1719 (dynamic_cast<TClonesArray*> (*HitsRef()))->Clear() ;
1720 hitsbranch->SetAddress(HitsRef()) ;
1721 hitsbranch->GetEntry(0) ;
1726 //____________________________________________________________________________
1727 void AliPHOSGetter::Track(Int_t itrack)
1729 // Read the first entry of PHOS branch in hit tree gAlice->TreeH()
1731 if(gAlice->TreeH()== 0){
1732 cerr << "ERROR: AliPHOSGetter::ReadTreeH: -> Cannot read TreeH " << endl ;
1736 TBranch * hitsbranch = dynamic_cast<TBranch*>(gAlice->TreeH()->GetListOfBranches()->FindObject("PHOS")) ;
1737 if ( !hitsbranch ) {
1739 cout << "WARNING: AliPHOSGetter::ReadTreeH -> Cannot find branch PHOS" << endl ;
1745 (dynamic_cast<TClonesArray*> (*HitsRef()))->Clear() ;
1746 hitsbranch->SetAddress(HitsRef()) ;
1747 hitsbranch->GetEntry(itrack) ;
1751 //____________________________________________________________________________
1752 void AliPHOSGetter::ReadTreeQA()
1754 // Read the digit tree gAlice->TreeQA()
1755 // so far only PHOS knows about this Tree
1757 if(PHOS()->TreeQA()== 0){
1758 cerr << "ERROR: AliPHOSGetter::ReadTreeQA: can not read TreeQA " << endl ;
1762 TBranch * qabranch = PHOS()->TreeQA()->GetBranch("PHOS") ;
1765 cout << "WARNING: AliPHOSGetter::ReadTreeQA -> Cannot find QA Alarms for PHOS" << endl ;
1772 qabranch->SetAddress(AlarmsRef()) ;
1774 qabranch->GetEntry(0) ;
1777 // TFolder * alarmsF = Alarms() ;
1778 // alarmsF->Clear() ;
1779 // qabranch->SetAddress(&alarmsF) ;
1780 // qabranch->GetEntry(0) ;
1784 //____________________________________________________________________________
1785 Int_t AliPHOSGetter::ReadTreeR(const Int_t event)
1787 // Read the reconstrunction tree gAlice->TreeR()
1788 // A particularity has been introduced here :
1789 // if gime->Event(ievent,"R") is called branches with the current title are read, the current title
1790 // being for example give in AliPHOSPID(fileName, title)
1791 // if gime(Event(ievent, "RA") is called the title of the branches is not checked anymore, "A" stands for any
1792 // This is a feature needed by PID to be able to reconstruct several times particles (each time a ther title is given)
1793 // from a given set of TrackSegments (with a given name)
1794 // This is why any is NOT used to read the branch of RecParticles
1795 // any migh have become obsolete : to be checked
1800 TFile * file = static_cast<TFile*>(gROOT->GetFile(fRecPointsFileName));
1802 file = TFile::Open(fRecPointsFileName) ;
1803 // Get Digits Tree header from file
1804 TString treeName("TreeR") ;
1806 treeR = dynamic_cast<TTree*>(file->Get(treeName.Data()));
1807 if(!treeR){ // TreeR not found in header file
1809 cout << "WARNING: AliPHOSGetter::ReadTreeD -> Cannot find TreeR in " << fRecPointsFileName.Data() << endl;
1814 treeR = gAlice->TreeR() ;
1817 TObjArray * lob = static_cast<TObjArray*>(treeR->GetListOfBranches()) ;
1819 TBranch * branch = 0 ;
1820 TBranch * emcbranch = 0 ;
1821 TBranch * cpvbranch = 0 ;
1822 TBranch * clusterizerbranch = 0 ;
1823 Bool_t phosemcrpfound = kFALSE, phoscpvrpfound = kFALSE, clusterizerfound = kFALSE ;
1826 while ( (branch = static_cast<TBranch*>(next())) && (!phosemcrpfound || !phoscpvrpfound || !clusterizerfound) ) {
1827 if(strcmp(branch->GetTitle(), fRecPointsTitle)==0 ) {
1828 if ( strcmp(branch->GetName(), "PHOSEmcRP")==0) {
1829 emcbranch = branch ;
1830 phosemcrpfound = kTRUE ;
1832 else if ( strcmp(branch->GetName(), "PHOSCpvRP")==0) {
1833 cpvbranch = branch ;
1834 phoscpvrpfound = kTRUE ;
1836 else if(strcmp(branch->GetName(), "AliPHOSClusterizer")==0){
1837 clusterizerbranch = branch ;
1838 clusterizerfound = kTRUE ;
1843 if ( !phosemcrpfound || !phoscpvrpfound || !clusterizerfound) {
1845 cout << "WARNING: AliPHOSGetter::ReadTreeR -> Cannot find RecPoints and/or Clusterizer with name "
1846 << fRecPointsTitle << endl ;
1849 if(!EmcRecPoints(fRecPointsTitle) )
1850 PostRecPoints(fRecPointsTitle) ;
1852 emcbranch->SetAddress(EmcRecPointsRef(fRecPointsTitle)) ;
1853 emcbranch->GetEntry(0) ;
1855 cpvbranch->SetAddress(CpvRecPointsRef(fRecPointsTitle)) ;
1856 cpvbranch->GetEntry(0) ;
1858 if(!Clusterizer(fRecPointsTitle) )
1859 PostClusterizer(fRecPointsTitle) ;
1861 clusterizerbranch->SetAddress(ClusterizerRef(fRecPointsTitle)) ;
1862 clusterizerbranch->GetEntry(0) ;
1865 //------------------- TrackSegments ---------------------
1867 TBranch * tsbranch = 0 ;
1868 TBranch * tsmakerbranch = 0 ;
1869 Bool_t phostsfound = kFALSE, tsmakerfound = kFALSE ;
1870 while ( (branch = static_cast<TBranch*>(next())) && (!phostsfound || !tsmakerfound) ) {
1871 if(strcmp(branch->GetTitle(), fTrackSegmentsTitle)==0 ) {
1872 if ( strcmp(branch->GetName(), "PHOSTS")==0){
1874 phostsfound = kTRUE ;
1876 else if(strcmp(branch->GetName(), "AliPHOSTrackSegmentMaker")==0) {
1877 tsmakerbranch = branch ;
1878 tsmakerfound = kTRUE ;
1883 if ( !phostsfound || !tsmakerfound ) {
1885 cout << "WARNING: AliPHOSGetter::ReadTreeR -> Cannot find TrackSegments and/or TrackSegmentMaker with name "
1886 << fTrackSegmentsTitle << endl ;
1888 // Read and Post the TrackSegments
1889 if(!TrackSegments(fTrackSegmentsTitle))
1890 PostTrackSegments(fTrackSegmentsTitle) ;
1891 tsbranch->SetAddress(TrackSegmentsRef(fTrackSegmentsTitle)) ;
1892 tsbranch->GetEntry(0) ;
1894 // Read and Post the TrackSegment Maker
1895 if(!TrackSegmentMaker(fTrackSegmentsTitle))
1896 PostTrackSegmentMaker(fTrackSegmentsTitle) ;
1897 tsmakerbranch->SetAddress(TSMakerRef(fTrackSegmentsTitle)) ;
1898 tsmakerbranch->GetEntry(0) ;
1902 //------------ RecParticles ----------------------------
1904 TBranch * rpabranch = 0 ;
1905 TBranch * pidbranch = 0 ;
1906 Bool_t phosrpafound = kFALSE, pidfound = kFALSE ;
1908 while ( (branch = static_cast<TBranch*>(next())) && (!phosrpafound || !pidfound) )
1909 if(strcmp(branch->GetTitle(), fRecParticlesTitle)==0) {
1910 if ( strcmp(branch->GetName(), "PHOSRP")==0) {
1911 rpabranch = branch ;
1912 phosrpafound = kTRUE ;
1914 else if (strcmp(branch->GetName(), "AliPHOSPID")==0) {
1915 pidbranch = branch ;
1920 if ( !phosrpafound || !pidfound ) {
1922 cout << "WARNING: AliPHOSGetter::ReadTreeR -> Cannot find RecParticles and/or PID with name "
1923 << fRecParticlesTitle << endl ;
1925 // Read and Post the RecParticles
1926 if(!RecParticles(fRecParticlesTitle))
1927 PostRecParticles(fRecParticlesTitle) ;
1928 rpabranch->SetAddress(RecParticlesRef(fRecParticlesTitle)) ;
1929 rpabranch->GetEntry(0) ;
1930 // Read and Post the PID
1931 if(!PID(fRecParticlesTitle))
1932 PostPID(fRecParticlesTitle) ;
1933 pidbranch->SetAddress(PIDRef(fRecParticlesTitle)) ;
1934 pidbranch->GetEntry(0) ;
1937 if(gAlice->TreeR()!=treeR)
1942 //____________________________________________________________________________
1943 Int_t AliPHOSGetter::ReadTreeS(const Int_t event)
1945 // Reads the SDigits treeS from all files
1946 // Files, which should be opened are listed in phosF
1947 // So, first get list of files
1948 TFolder * phosF = dynamic_cast<TFolder *>(fSDigitsFolder->FindObject("PHOS")) ;
1950 phosF = fSDigitsFolder->AddFolder("PHOS", "SDigits from PHOS") ;
1951 TCollection * folderslist = phosF->GetListOfFolders() ;
1953 // Now iterate over the list of files and read TreeS into Whiteboard
1954 TIter next(folderslist) ;
1955 TFolder * folder = 0 ;
1958 while ( (folder = static_cast<TFolder*>(next())) ) {
1959 TString fileName("") ;
1961 fileName = folder->GetTitle() ;
1963 fileName = folder->GetName() ;
1964 fileName.ReplaceAll("_","/") ;
1965 file = static_cast<TFile*>(gROOT->GetFile(fileName));
1967 file = TFile::Open(fileName) ;
1968 // Get SDigits Tree header from file
1969 TString treeName("TreeS") ;
1971 treeS = dynamic_cast<TTree*>(file->Get(treeName.Data()));
1973 if(!treeS){ // TreeS not found in header file
1975 cout << "WARNING: AliPHOSGetter::ReadTreeS -> Cannot find TreeS in " << fileName.Data() << endl;
1979 //set address of the SDigits and SDigitizer
1980 TBranch * sdigitsBranch = 0;
1981 TBranch * sdigitizerBranch = 0;
1982 TBranch * branch = 0 ;
1983 TObjArray * lob = static_cast<TObjArray*>(treeS->GetListOfBranches()) ;
1985 Bool_t phosfound = kFALSE, sdigitizerfound = kFALSE ;
1987 while ( (branch = static_cast<TBranch*>(next())) && (!phosfound || !sdigitizerfound) ) {
1988 if ( (strcmp(branch->GetName(), "PHOS")==0) && (strcmp(branch->GetTitle(), fSDigitsTitle)==0) ) {
1990 sdigitsBranch = branch ;
1993 else if ( (strcmp(branch->GetName(), "AliPHOSSDigitizer")==0) &&
1994 (strcmp(branch->GetTitle(), fSDigitsTitle)==0) ) {
1995 sdigitizerfound = kTRUE ;
1996 sdigitizerBranch = branch ;
1999 if ( !phosfound || !sdigitizerfound ) {
2001 cout << "WARNING: AliPHOSDigitizer::ReadSDigits -> Digits and/or Digitizer branch with name " << GetName()
2002 << " not found" << endl ;
2006 if ( !folder->FindObject(fSDigitsTitle) )
2007 PostSDigits(fSDigitsTitle,folder->GetName()) ;
2009 ((TClonesArray*) (*SDigitsRef(fSDigitsTitle,folder->GetName())))->Clear() ;
2010 sdigitsBranch->SetAddress(SDigitsRef(fSDigitsTitle,folder->GetName())) ;
2011 sdigitsBranch->GetEntry(0) ;
2013 TString sdname(fSDigitsTitle) ;
2015 sdname+=folder->GetName() ;
2016 if(!SDigitizer(sdname) )
2017 PostSDigitizer(fSDigitsTitle,folder->GetName()) ;
2018 sdigitizerBranch->SetAddress(SDigitizerRef(sdname)) ;
2019 sdigitizerBranch->GetEntry(0) ;
2020 if(gAlice->TreeS()!=treeS)
2026 //____________________________________________________________________________
2027 void AliPHOSGetter::ReadTreeS(TTree * treeS, Int_t input)
2029 { // Read the summable digits fron treeS()
2032 TString filename("mergefile") ;
2035 TFolder * phosFolder = dynamic_cast<TFolder*>(fSDigitsFolder->FindObject("PHOS")) ;
2036 if ( !phosFolder ) {
2037 phosFolder = fSDigitsFolder->AddFolder("PHOS", "SDigits from PHOS") ;
2039 TFolder * folder=(TFolder*)phosFolder->FindObject(filename) ;
2040 //set address of the SDigits and SDigitizer
2041 TBranch * sdigitsBranch = 0;
2042 TBranch * sdigitizerBranch = 0;
2043 TBranch * branch = 0 ;
2044 TObjArray * lob = (TObjArray*)treeS->GetListOfBranches() ;
2046 Bool_t phosfound = kFALSE, sdigitizerfound = kFALSE ;
2048 while ( (branch = (TBranch*)next()) && (!phosfound || !sdigitizerfound) ) {
2049 if ( strcmp(branch->GetName(), "PHOS")==0) {
2051 sdigitsBranch = branch ;
2054 else if ( strcmp(branch->GetName(), "AliPHOSSDigitizer")==0) {
2055 sdigitizerfound = kTRUE ;
2056 sdigitizerBranch = branch ;
2059 if ( !phosfound || !sdigitizerfound ) {
2061 cout << "WARNING: AliPHOSGetter::ReadTreeS -> Digits and/or Digitizer branch not found" << endl ;
2065 if (!folder || !(folder->FindObject(sdigitsBranch->GetTitle()) ) )
2066 PostSDigits(sdigitsBranch->GetTitle(),filename) ;
2068 sdigitsBranch->SetAddress(SDigitsRef(sdigitsBranch->GetTitle(),filename)) ;
2069 sdigitsBranch->GetEntry(0) ;
2071 TString sdname(sdigitsBranch->GetTitle()) ;
2075 if(!SDigitizer(sdigitsBranch->GetTitle()) )
2076 PostSDigitizer(sdigitsBranch->GetTitle(),filename) ;
2077 sdigitizerBranch->SetAddress(SDigitizerRef(sdname)) ;
2078 sdigitizerBranch->GetEntry(0) ;
2079 if(gAlice->TreeS()!=treeS)
2084 //____________________________________________________________________________
2085 void AliPHOSGetter::ReadPrimaries()
2087 // a lot simplified.... if 2 files are opened then we have a problem
2089 TClonesArray * ar = 0 ;
2090 if(! (ar = Primaries()) ) {
2096 if (TreeK(fHeaderFile)) { // treeK found in header file
2098 cout << "INFO: AliPHOSGetter::ReadPrimaries -> TreeK found in " << fHeaderFile.Data() << endl ;
2099 fNPrimaries = gAlice->GetNtrack() ;
2102 } else { // treeK not found in header file
2104 cerr << "ERROR: AliPHOSGetter::ReadPrimaries -> TreeK not found " << endl ;
2109 for (index = 0 ; index < fNPrimaries; index++) {
2110 new ((*ar)[index]) TParticle(*(Primary(index)));
2114 //____________________________________________________________________________
2115 void AliPHOSGetter::Event(const Int_t event, const char* opt)
2117 // Reads the content of all Tree's S, D and R
2119 if (event >= gAlice->TreeE()->GetEntries() ) {
2120 cerr << "ERROR: AliPHOSGetter::Event -> " << event << " not found in TreeE!" << endl ;
2124 Bool_t any = kFALSE ;
2125 if (strstr(opt,"A") ) // do not check the title of the branches
2128 gAlice->GetEvent(event) ;
2130 if( strstr(opt,"R") )
2133 if( strstr(opt,"D") )
2136 if(strstr(opt,"S") )
2139 if(strstr(opt,"H") )
2142 if( strstr(opt,"Q") )
2145 if( strstr(opt,"P") || (strcmp(opt,"")==0) )
2150 //____________________________________________________________________________
2151 TObject * AliPHOSGetter::ReturnO(TString what, TString name, TString file) const
2153 // get the object named "what" from the folder
2154 // folders are named like //Folders
2156 if ( file.IsNull() )
2157 file = fHeaderFile ;
2159 TFolder * folder = 0 ;
2160 TObject * phosO = 0 ;
2162 if ( what.CompareTo("Primaries") == 0 ) {
2163 folder = dynamic_cast<TFolder *>(fPrimariesFolder->FindObject("Primaries")) ;
2165 phosO = dynamic_cast<TObject *>(folder->FindObject("Primaries")) ;
2169 else if ( what.CompareTo("Hits") == 0 ) {
2170 folder = dynamic_cast<TFolder *>(fHitsFolder->FindObject("PHOS")) ;
2172 phosO = dynamic_cast<TObject *>(folder->FindObject("Hits")) ;
2174 else if ( what.CompareTo("SDigits") == 0 ) {
2175 file.ReplaceAll("/","_") ;
2176 TString path = "PHOS/" + file ;
2177 folder = dynamic_cast<TFolder *>(fSDigitsFolder->FindObject(path.Data())) ;
2180 name = fSDigitsTitle ;
2181 phosO = dynamic_cast<TObject *>(folder->FindObject(name)) ;
2184 else if ( what.CompareTo("Digits") == 0 ){
2185 folder = dynamic_cast<TFolder *>(fDigitsFolder->FindObject("PHOS")) ;
2188 name = fDigitsTitle ;
2189 phosO = dynamic_cast<TObject *>(folder->FindObject(name)) ;
2192 else if ( what.CompareTo("EmcRecPoints") == 0 ) {
2193 folder = dynamic_cast<TFolder *>(fRecoFolder->FindObject("PHOS/EMCARecPoints")) ;
2196 name = fRecPointsTitle ;
2197 phosO = dynamic_cast<TObject *>(folder->FindObject(name)) ;
2200 else if ( what.CompareTo("CpvRecPoints") == 0 ) {
2201 folder = dynamic_cast<TFolder *>(fRecoFolder->FindObject("PHOS/CPVRecPoints")) ;
2204 name = fRecPointsTitle ;
2205 phosO = dynamic_cast<TObject *>(folder->FindObject(name)) ;
2208 else if ( what.CompareTo("TrackSegments") == 0 ) {
2209 folder = dynamic_cast<TFolder *>(fRecoFolder->FindObject("PHOS/TrackSegments")) ;
2212 name = fTrackSegmentsTitle ;
2213 phosO = dynamic_cast<TObject *>(folder->FindObject(name)) ;
2216 else if ( what.CompareTo("RecParticles") == 0 ) {
2217 folder = dynamic_cast<TFolder *>(fRecoFolder->FindObject("PHOS/RecParticles")) ;
2220 name = fRecParticlesTitle ;
2221 phosO = dynamic_cast<TObject *>(folder->FindObject(name)) ;
2224 else if ( what.CompareTo("Alarms") == 0 ){
2226 phosO = dynamic_cast<TObject *>(fQAFolder->FindObject("PHOS")) ;
2228 folder = dynamic_cast<TFolder *>(fQAFolder->FindObject("PHOS")) ;
2232 phosO = dynamic_cast<TObject *>(folder->FindObject(name)) ;
2237 cerr << "WARNING : AliPHOSGetter::ReturnO -> Object " << what << " not found in PHOS" << endl ;
2244 //____________________________________________________________________________
2245 const TTask * AliPHOSGetter::ReturnT(TString what, TString name) const
2247 // get the TTask named "what" from the folder
2248 // folders are named like //Folders/Tasks/what/PHOS/name
2250 TString search(what) ;
2251 if ( what.CompareTo("Clusterizer") == 0 )
2252 search = "Reconstructioner" ;
2253 else if ( what.CompareTo("TrackSegmentMaker") == 0 )
2254 search = "Reconstructioner" ;
2255 else if ( what.CompareTo("PID") == 0 )
2256 search = "Reconstructioner" ;
2257 else if ( what.CompareTo("QATasks") == 0 )
2260 TTask * tasks = dynamic_cast<TTask*>(fTasksFolder->FindObject(search)) ;
2263 cerr << "ERROR: AliPHOSGetter::ReturnT -> Task " << what << " not found!" << endl ;
2267 TTask * phosT = dynamic_cast<TTask*>(tasks->GetListOfTasks()->FindObject("PHOS")) ;
2269 cerr << "ERROR: AliPHOSGetter::ReturnT -> Task " << what << "/PHOS not found!" << endl ;
2273 TList * list = phosT->GetListOfTasks() ;
2275 if (what.CompareTo("SDigitizer") == 0) {
2276 if ( name.IsNull() )
2277 name = fSDigitsTitle ;
2278 } else if (what.CompareTo("Digitizer") == 0){
2279 if ( name.IsNull() )
2280 name = fDigitsTitle ;
2281 } else if (what.CompareTo("Clusterizer") == 0){
2282 if ( name.IsNull() )
2283 name = fRecPointsTitle ;
2284 name.Append(":clu") ;
2286 else if (what.CompareTo("TrackSegmentMaker") == 0){
2287 if ( name.IsNull() )
2288 name = fTrackSegmentsTitle ;
2289 name.Append(":tsm") ;
2291 else if (what.CompareTo("PID") == 0){
2292 if ( name.IsNull() )
2293 name = fRecParticlesTitle ;
2294 name.Append(":pid") ;
2296 else if (what.CompareTo("QATasks") == 0){
2297 if ( name.IsNull() )
2303 while((task = static_cast<TTask *>(it.Next()) )){
2304 TString taskname(task->GetName()) ;
2305 if(taskname.BeginsWith(name))
2310 cout << "WARNING: AliPHOSGetter::ReturnT -> Task " << search << "/PHOS/" << name << " not found!" << endl ;
2314 //____________________________________________________________________________
2315 void AliPHOSGetter::RemoveTask(TString opt, TString name) const
2317 // remove a task from the folder
2318 // path is fTasksFolder/SDigitizer/PHOS/name
2322 TList * lofTasks = 0 ;
2324 if (opt == "S") { // SDigitizer
2325 task = dynamic_cast<TTask*>(fTasksFolder->FindObject("SDigitizer")) ;
2329 else if (opt == "D") { // Digitizer
2330 task = dynamic_cast<TTask*>(fTasksFolder->FindObject("Digitizer")) ;
2334 else if (opt == "C" || opt == "T" || opt == "P" ) { // Clusterizer, TrackSegmentMaker, PID
2335 task = dynamic_cast<TTask*>(fTasksFolder->FindObject("Reconstructioner")) ;
2340 cerr << "WARNING: AliPHOSGetter::RemoveTask -> Unknown option " << opt.Data() << endl ;
2343 phos = dynamic_cast<TTask*>(task->GetListOfTasks()->FindObject("PHOS")) ;
2346 lofTasks = phos->GetListOfTasks() ;
2349 TObject * obj = lofTasks->FindObject(name) ;
2351 lofTasks->Remove(obj) ;
2355 //____________________________________________________________________________
2356 void AliPHOSGetter::RemoveObjects(TString opt, TString name) const
2358 // remove SDigits from the folder
2359 // path is fSDigitsFolder/fHeaderFileName/name
2361 TFolder * phos = 0 ;
2362 TFolder * phosmain = 0 ;
2364 if (opt == "H") { // Hits
2365 phos = dynamic_cast<TFolder*>(fHitsFolder->FindObject("PHOS")) ;
2371 else if ( opt == "S") { // SDigits
2372 phosmain = dynamic_cast<TFolder*>(fSDigitsFolder->FindObject("PHOS")) ;
2375 phos = dynamic_cast<TFolder*>(phosmain->FindObject(fHeaderFile)) ;
2380 else if (opt == "D") { // Digits
2381 phos = dynamic_cast<TFolder*>(fDigitsFolder->FindObject("PHOS")) ;
2386 else if (opt == "RE") { // EMCARecPoints
2387 phos = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/EMCARecPoints")) ;
2392 else if (opt == "RC") { // CPVRecPoints
2393 phos = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/CPVRecPoints")) ;
2398 else if (opt == "T") { // TrackSegments
2399 phos = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/TrackSegments")) ;
2404 else if (opt == "P") { // RecParticles
2405 phos = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/RecParticles")) ;
2411 cerr << "WARNING: AliPHOSGetter::RemoveObjects -> Unknown option " << opt.Data() << endl ;
2415 TObjArray * ar = dynamic_cast<TObjArray*>(phos->FindObject(name)) ;
2423 phosmain->Remove(phos) ;
2427 //____________________________________________________________________________
2428 void AliPHOSGetter::RemoveSDigits() const
2430 TFolder * phos= dynamic_cast<TFolder*>(fSDigitsFolder->FindObject("PHOS")) ;
2438 //____________________________________________________________________________
2439 void AliPHOSGetter::CleanWhiteBoard(void){
2441 TFolder * phosmain = 0 ;
2444 TList * lofTasks = 0 ;
2449 phos = dynamic_cast<TFolder*>(fHitsFolder->FindObject("PHOS")) ;
2451 TObjArray * ar = dynamic_cast<TObjArray*>(phos->FindObject("Hits")) ;
2460 phosmain = dynamic_cast<TFolder*>(fSDigitsFolder->FindObject("PHOS")) ;
2462 phos = dynamic_cast<TFolder*>(phosmain->FindObject(fHeaderFile)) ;
2464 ar = dynamic_cast<TObjArray*>(phos->FindObject(fSDigitsTitle)) ;
2471 phosmain->Remove(phos) ;
2476 phos = dynamic_cast<TFolder*>(fDigitsFolder->FindObject("PHOS")) ;
2478 ar = dynamic_cast<TObjArray*>(phos->FindObject(fDigitsTitle)) ;
2488 phos = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/EMCARecPoints")) ;
2490 ar = dynamic_cast<TObjArray*>(phos->FindObject(fRecPointsTitle)) ;
2500 phos = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/CPVRecPoints")) ;
2502 ar = dynamic_cast<TObjArray*>(phos->FindObject(fRecPointsTitle)) ;
2512 phos = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/TrackSegments")) ;
2514 ar = dynamic_cast<TObjArray*>(phos->FindObject(fTrackSegmentsTitle)) ;
2525 phos = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/RecParticles")) ;
2527 ar = dynamic_cast<TObjArray*>(phos->FindObject(fRecParticlesTitle)) ;
2536 //---- Now Tasks -----------
2539 TString sdname(fSDigitsTitle);
2542 task = dynamic_cast<TTask*>(fTasksFolder->FindObject("Digitizer")) ;
2544 phost = dynamic_cast<TTask*>(task->GetListOfTasks()->FindObject("PHOS")) ;
2546 lofTasks = phost->GetListOfTasks() ;
2548 obj = lofTasks->FindObject(sdname.Data()) ;
2550 lofTasks->Remove(obj) ;
2556 sdname.Append(":") ;
2557 // Clusterizer, TrackSegmentMaker, PID
2558 task = dynamic_cast<TTask*>(fTasksFolder->FindObject("Reconstructioner")) ;
2560 phost = dynamic_cast<TTask*>(task->GetListOfTasks()->FindObject("PHOS")) ;
2562 lofTasks = phost->GetListOfTasks() ;
2563 TIter next(lofTasks);
2564 while((obj=next())){
2565 TString oname(obj->GetName()) ;
2566 if (oname.BeginsWith(sdname)){
2567 lofTasks->Remove(obj) ;
2575 sdname.Append(fHeaderFile) ;
2576 task = dynamic_cast<TTask*>(fTasksFolder->FindObject("SDigitizer")) ;
2578 phost = dynamic_cast<TTask*>(task->GetListOfTasks()->FindObject("PHOS")) ;
2580 lofTasks = phost->GetListOfTasks() ;
2582 obj = lofTasks->FindObject(sdname.Data()) ;
2584 lofTasks->Remove(obj) ;
2590 //____________________________________________________________________________
2591 void AliPHOSGetter::SetTitle(const char * branchTitle )
2593 fBranchTitle = branchTitle ;
2594 fSDigitsTitle = branchTitle ;
2595 fDigitsTitle = branchTitle ;
2596 fRecPointsTitle = branchTitle ;
2597 fRecParticlesTitle = branchTitle ;
2598 fTrackSegmentsTitle = branchTitle ;
2600 //First - extract full path if necessary
2601 TString sFileName(fHeaderFile) ;
2602 Ssiz_t islash = sFileName.Last('/') ;
2603 if(islash<sFileName.Length())
2604 sFileName.Remove(islash+1,sFileName.Length()) ;
2607 //Now construct file names
2608 fSDigitsFileName = sFileName ;
2609 fDigitsFileName = sFileName ;
2610 fRecPointsFileName = sFileName ;
2611 fRecParticlesFileName = sFileName ;
2612 fTrackSegmentsFileName = sFileName ;
2613 fSDigitsFileName += "PHOS.SDigits." ;
2614 fDigitsFileName += "PHOS.Digits." ;
2615 fRecPointsFileName += "PHOS.RecData." ;
2616 fTrackSegmentsFileName+= "PHOS.RecData." ;
2617 fRecParticlesFileName += "PHOS.RecData." ;
2618 if((strcmp(fBranchTitle.Data(),"Default")!=0)&&(strcmp(fBranchTitle.Data(),"")!=0)){
2619 fSDigitsFileName += fBranchTitle ;
2620 fSDigitsFileName += "." ;
2621 fDigitsFileName += fBranchTitle ;
2622 fDigitsFileName += "." ;
2623 fRecPointsFileName += fBranchTitle ;
2624 fRecPointsFileName += "." ;
2625 fRecParticlesFileName += fBranchTitle ;
2626 fRecParticlesFileName += "." ;
2627 fTrackSegmentsFileName+= fBranchTitle ;
2628 fTrackSegmentsFileName+= "." ;
2630 fSDigitsFileName += "root" ;
2631 fDigitsFileName += "root" ;
2632 fRecPointsFileName += "root" ;
2633 fRecParticlesFileName += "root" ;
2634 fTrackSegmentsFileName+= "root" ;
2636 fSDigitsFileName = "" ;
2637 fDigitsFileName = "" ;
2638 fRecPointsFileName = "" ;
2639 fRecParticlesFileName = "" ;
2640 fTrackSegmentsFileName = "" ;
2642 TFolder * phosFolder ;
2643 phosFolder = dynamic_cast<TFolder*>(fHitsFolder->FindObject("PHOS")) ;
2645 phosFolder = fHitsFolder->AddFolder("PHOS", "Hits from PHOS") ;
2647 phosFolder = dynamic_cast<TFolder*>(fSDigitsFolder->FindObject("PHOS")) ;
2649 phosFolder = fSDigitsFolder->AddFolder("PHOS", "SDigits from PHOS") ;
2651 //Make folder for SDigits
2652 TString subdir(fHeaderFile) ;
2653 subdir.ReplaceAll("/","_") ;
2654 phosFolder->AddFolder(subdir, fSDigitsFileName.Data());
2657 phosFolder = dynamic_cast<TFolder*>(fDigitsFolder->FindObject("PHOS")) ;
2659 phosFolder = fDigitsFolder->AddFolder("PHOS", "Digits from PHOS") ;
2661 phosFolder = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS")) ;
2663 phosFolder = fRecoFolder->AddFolder("PHOS", "Reconstructed data from PHOS") ;
2667 //____________________________________________________________________________
2668 void AliPHOSGetter::CloseSplitFiles(void){
2670 file = static_cast<TFile*>(gROOT->GetFile(fSDigitsFileName.Data() ) ) ;
2673 file = static_cast<TFile*>(gROOT->GetFile(fDigitsFileName.Data() ) ) ;
2676 file = static_cast<TFile*>(gROOT->GetFile(fRecPointsFileName.Data() ) ) ;
2679 file = static_cast<TFile*>(gROOT->GetFile(fTrackSegmentsFileName.Data() ) ) ;
2682 file = static_cast<TFile*>(gROOT->GetFile(fRecParticlesFileName.Data() ) ) ;