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 //_________________________________________________________________________
25 // A singleton. This class should be used in the analysis stage to get
26 // reconstructed objects: Digits, RecPoints, TrackSegments and RecParticles,
27 // instead of directly reading them from galice.root file. This container
28 // ensures, that one reads Digits, made of these particular digits, RecPoints,
29 // made of these particular RecPoints, TrackSegments and RecParticles.
30 // This becomes non trivial if there are several identical branches, produced with
31 // different set of parameters.
33 // An example of how to use (see also class AliPHOSAnalyser):
34 // AliPHOSGetter * gime = AliPHOSGetter::GetInstance("galice.root","test") ;
35 // for(Int_t irecp = 0; irecp < gime->NRecParticles() ; irecp++)
36 // AliPHOSRecParticle * part = gime->RecParticle(1) ;
38 // please->GetEvent(event) ; // reads new event from galice.root
40 //*-- Author: Yves Schutz (SUBATECH) & Dmitri Peressounko (RRC KI & SUBATECH)
41 //*-- Completely redesigned by Dmitri Peressounko March 2001
43 //*-- YS June 2001 : renamed the original AliPHOSIndexToObject and make
44 //*-- systematic usage of TFolders without changing the interface
45 //////////////////////////////////////////////////////////////////////////////
48 // --- ROOT system ---
53 #include "TObjString.h"
56 // --- Standard library ---
59 // --- AliRoot header files ---
62 #include "AliPHOSGetter.h"
64 #include "AliPHOSDigitizer.h"
65 #include "AliPHOSSDigitizer.h"
66 #include "AliPHOSClusterizer.h"
67 #include "AliPHOSClusterizerv1.h"
68 #include "AliPHOSTrackSegmentMaker.h"
69 #include "AliPHOSTrackSegmentMakerv1.h"
70 #include "AliPHOSTrackSegment.h"
71 #include "AliPHOSPID.h"
72 #include "AliPHOSPIDv1.h"
73 #include "AliPHOSGeometry.h"
75 ClassImp(AliPHOSGetter)
77 AliPHOSGetter * AliPHOSGetter::fgObjGetter = 0 ;
79 //____________________________________________________________________________
80 AliPHOSGetter::AliPHOSGetter(const char* headerFile, const char* branchTitle )
82 //Initialize all lists
84 fHeaderFile = headerFile ;
85 fBranchTitle = branchTitle ;
86 fSDigitsTitle = branchTitle ;
87 fDigitsTitle = branchTitle ;
88 fRecPointsTitle = branchTitle ;
89 fRecParticlesTitle = branchTitle ;
90 fTrackSegmentsTitle = branchTitle ;
92 fPrimaries = new TObjArray(1) ;
94 if ( fHeaderFile != "aliroot" ) { // to call the getter without a file
97 TFile * file = (TFile*) gROOT->GetFile(fHeaderFile.Data() ) ;
99 if(file == 0){ //if file was not opened yet, read gAlice
100 if(fHeaderFile.Contains("rfio")) // if we read file using HPSS
101 file = TFile::Open(fHeaderFile.Data(),"update") ;
103 file = new TFile(fHeaderFile.Data(),"update") ;
105 if (!file->IsOpen()) {
106 cerr << "ERROR : AliPHOSGetter::AliPHOSGetter -> Cannot open " << fHeaderFile.Data() << endl ;
110 gAlice = (AliRun *) file->Get("gAlice") ;
113 cerr << "ERROR : AliPHOSGetter::AliPHOSGetter -> Cannot find gAlice in " << fHeaderFile.Data() << endl ;
120 //____________________________________________________________________________
121 void AliPHOSGetter::CreateWhiteBoard() const
123 // Posts a few item to the white board (folders)
126 if(!PostGeometry() ) abort() ;
130 //____________________________________________________________________________
131 AliPHOSGetter * AliPHOSGetter::GetInstance()
133 // Returns the pointer of the unique instance already defined
135 AliPHOSGetter * rv = 0 ;
139 cout << "AliPHOSGetter::GetInstance ERROR: not yet initialized" << endl ;
144 //____________________________________________________________________________
145 AliPHOSGetter * AliPHOSGetter::GetInstance(const char* headerFile,
146 const char* branchTitle)
148 // Creates and returns the pointer of the unique instance
149 // Must be called only when the environment has changed
152 if((fgObjGetter->fBranchTitle.CompareTo(branchTitle) == 0) &&
153 (fgObjGetter->fHeaderFile.CompareTo(headerFile)==0))
156 delete fgObjGetter ; // delete it if already exists another version
158 fgObjGetter = new AliPHOSGetter(headerFile,branchTitle) ;
160 // Posts a few item to the white board (folders)
161 fgObjGetter->CreateWhiteBoard() ;
167 //____________________________________________________________________________
168 const AliPHOS * AliPHOSGetter::PHOS() const
170 // returns the PHOS object
171 return ( (AliPHOS*)gAlice->GetDetector("PHOS") );
174 //____________________________________________________________________________
175 const AliPHOSGeometry * AliPHOSGetter::PHOSGeometry() const
177 // retrieves the geometr from the folder
179 TString path("YSAlice/WhiteBoard/Geometry/PHOS/") ;
180 path += PHOS()->GetTitle() ;
181 return (AliPHOSGeometry*)gROOT->FindObjectAny(path.Data()) ;
184 //____________________________________________________________________________
185 Bool_t AliPHOSGetter::PostGeometry() const
186 { //--------Geometry --------------
188 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
190 // the hierarchy is //YSALICE/WhiteBoard/Geometry/PHOS/
191 TFolder * geomF = (TFolder*)aliceF->FindObject("WhiteBoard/Geometry/PHOS") ;
193 cerr << "ERROR: AliPHOSGetter::Post G -> Folder WhiteBoard/Geometry/PHOS/" << " not found!" << endl;
197 AliPHOSGeometry * geom = AliPHOSGeometry::GetInstance(PHOS()->GetTitle(),"") ;
198 geomF->Add((TObject*)geom) ;
202 //____________________________________________________________________________
203 Bool_t AliPHOSGetter::PostHits(void) const
204 { //------- Hits ----------------------
206 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
208 // the hierarchy is //YSALICE/WhiteBoard/SDigits/PHOS/Hits
209 TFolder * hitsF = (TFolder*)aliceF->FindObject("WhiteBoard/Hits/PHOS") ;
211 cerr << "ERROR: AliPHOSGetter::Post H -> Folder WhiteBoard/Hits/PHOS/" << " not found!" << endl;
215 TObject * h = hitsF->FindObject("Hits") ;
218 TClonesArray *hits= new TClonesArray("AliPHOSHit",1000) ;
219 hits->SetName("Hits") ;
225 //____________________________________________________________________________
226 TClonesArray ** AliPHOSGetter::HitsRef(void) const
227 { //------- Hits ----------------------
229 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
231 // the hierarchy is //YSALICE/WhiteBoard/SDigits/PHOS/Hits
232 TFolder * hitsF = (TFolder*)aliceF->FindObject("WhiteBoard/Hits/PHOS") ;
234 cerr << "ERROR: AliPHOSGetter::Post H -> Folder WhiteBoard/Hits/PHOS/" << " not found!" << endl;
238 TObject * h = hitsF->FindObject("Hits") ;
242 return (TClonesArray **) hitsF->GetListOfFolders()->GetObjectRef(h) ;
245 //____________________________________________________________________________
246 Bool_t AliPHOSGetter::PostSDigits(const char * name, const char * headerFile) const
247 { //---------- SDigits -------------------------
249 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
251 // the hierarchy is //YSALICE/WhiteBoard/SDigits/PHOS/headerFile/sdigitsname
252 // because you can have sdigits from several hit files for mixing
254 TFolder * sdigitsF = (TFolder*)aliceF->FindObject("WhiteBoard/SDigits/PHOS") ;
255 TString subdir(headerFile) ;
256 TFolder * sdigitsF2 = (sdigitsF2=(TFolder*)sdigitsF->FindObject(subdir)) ;
258 sdigitsF2 = sdigitsF->AddFolder(subdir, "");
260 TObject * sd = sdigitsF2->FindObject(name );
263 cerr <<"INFO: AliPHOSGetter::Post S -> Folder " << subdir
264 << " already exists!" << endl ;
266 TClonesArray * sdigits = new TClonesArray("AliPHOSDigit",1000) ;
267 sdigits->SetName(name) ;
268 sdigitsF2->Add(sdigits) ;
273 //____________________________________________________________________________
274 TClonesArray ** AliPHOSGetter::SDigitsRef(const char * name, const char * file) const
275 { //------- Hits ----------------------
277 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
279 // the hierarchy is //YSALICE/WhiteBoard/SDigits/PHOS/Hits
280 TFolder * sdisF = (TFolder*)aliceF->FindObject("WhiteBoard/SDigits/PHOS") ;
282 cerr << "ERROR: AliPHOSGetter::SDRef -> Folder WhiteBoard/SDigits/PHOS/" << " not found!" << endl;
287 fileF = (TFolder *) sdisF->FindObject(file) ;
289 fileF = (TFolder *) sdisF->FindObject(fHeaderFile) ;
294 TObject * dis = fileF->FindObject(name) ;
298 return (TClonesArray **) fileF->GetListOfFolders()->GetObjectRef(dis) ;
302 //____________________________________________________________________________
303 Bool_t AliPHOSGetter::PostSDigitizer(AliPHOSSDigitizer * sdigitizer) const
304 { //---------- SDigitizer -------------------------
306 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
308 // the hierarchy is //YSALICE/tasks/Digitizer/PHOS/sdigitsname
309 TTask * sdigitsF = (TTask*)aliceF->FindObject("tasks/SDigitizer") ;
311 cerr << "ERROR: AliPHOSGetter::Post Ser -> Task tasks/SDigitizer" << " not found!" << endl;
314 TTask * phos = (TTask*)sdigitsF->GetListOfTasks()->FindObject("PHOS") ;
316 cerr <<"ERROR: AliPHOSGetter::Post Ser -> tasks/SDigitizer/PHOS" << " not found!" << endl;
319 AliPHOSSDigitizer * phossd = (AliPHOSSDigitizer *) phos->GetListOfTasks()->FindObject( sdigitizer->GetName() );
322 cout << "INFO: AliPHOSGetter::Post Ser -> Task " << sdigitizer->GetName() << " already exists" << endl ;
323 phos->GetListOfTasks()->Remove(phossd) ;
325 phos->Add(sdigitizer) ;
329 //____________________________________________________________________________
330 AliPHOSSDigitizer ** AliPHOSGetter::SDigitizerRef(const char * name) const
333 TString path("tasks/SDigitizer") ;
335 TFolder * aliceF = (TFolder*)gROOT ->FindObjectAny("YSAlice") ;
336 TTask * aliceT = (TTask*) aliceF->FindObject(path) ;
339 cerr << "ERROR: AliPHOSGetter::ReturnT -> Task " << path << " not found!" << endl ;
343 TTask * phosT = (TTask*) aliceT->GetListOfTasks()->FindObject("PHOS") ;
345 cerr << "ERROR: AliPHOSGetter::ReturnT -> Task " << path << "/PHOS not found!" << endl ;
348 TList * l = phosT->GetListOfTasks() ;
350 TTask * task = (TTask*)l->FindObject(name) ;
352 return (AliPHOSSDigitizer **) l->GetObjectRef(task) ;
357 //____________________________________________________________________________
358 Bool_t AliPHOSGetter::PostSDigitizer(const char * name, const char * file) const
359 { //---------- SDigitizer -------------------------
361 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
363 // the hierarchy is //YSALICE/tasks/Digitizer/PHOS/sdigitsname
364 TTask * sdigitsF = (TTask*)aliceF->FindObject("tasks/SDigitizer") ;
366 cerr << "ERROR: AliPHOSGetter::Post Ser -> Task tasks/SDigitizer" << " not found!" << endl;
369 TTask * phos = (TTask*)sdigitsF->GetListOfTasks()->FindObject("PHOS") ;
371 cerr <<"ERROR: AliPHOSGetter::Post Ser -> tasks/SDigitizer/PHOS" << " not found!" << endl;
374 TString sdname(name) ;
377 AliPHOSSDigitizer * phossd = (AliPHOSSDigitizer *) phos->GetListOfTasks()->FindObject( sdname );
379 phossd = new AliPHOSSDigitizer() ;
380 //Note, we can not call constructor with parameters: it will call Getter and scrud up everething
381 phossd->SetName(sdname) ;
382 phossd->SetTitle(file) ;
388 //____________________________________________________________________________
389 Bool_t AliPHOSGetter::PostDigits(const char * name) const
390 { //---------- Digits -------------------------
392 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
394 // the hierarchy is //YSALICE/WhiteBoard/Digits/PHOS/digitsname
395 TFolder * digitsF = (TFolder*)aliceF->FindObject("WhiteBoard/Digits/PHOS") ;
397 cerr << "ERROR: AliPHOSGetter::Post D -> Folder WhiteBoard/Digits/PHOS/" << " not found!" << endl;
400 digitsF->SetTitle("") ;
401 TObject* dig = digitsF->FindObject( name ) ;
403 TClonesArray * digits = new TClonesArray("AliPHOSDigit",1000) ;
404 digits->SetName(name) ;
405 digitsF->Add(digits) ;
409 //____________________________________________________________________________
410 TClonesArray ** AliPHOSGetter::DigitsRef(const char * name) const
413 TFolder * digitsF = (TFolder*)gROOT->FindObjectAny("YSAlice/WhiteBoard/Digits/PHOS") ;
416 cerr << "ERROR: AliPHOSGetter::DRef -> Folder WhiteBoard/Digits/PHOS/" << " not found!" << endl;
420 TObject * d = digitsF->FindObject(name) ;
424 return (TClonesArray **) digitsF->GetListOfFolders()->GetObjectRef(d) ;
429 //____________________________________________________________________________
430 Bool_t AliPHOSGetter::PostDigitizer(AliPHOSDigitizer * digitizer) const
431 { //---------- Digitizer -------------------------
433 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
435 // the hierarchy is //YSALICE/tasks/Digitizer/PHOS/digitsname
436 TTask * digitsF = (TTask*)aliceF->FindObject("tasks/Digitizer") ;
438 cerr << "ERROR: AliPHOSGetter::Post Der -> Task tasks/Digitizer" << " not found!" << endl;
441 TTask * phos = (TTask*)digitsF->GetListOfTasks()->FindObject("PHOS") ;
443 cerr <<"ERROR: AliPHOSGetter::Post Der -> tasks/Digitizer/PHOS" << " not found!" << endl;
446 AliPHOSDigitizer * phosd = (AliPHOSDigitizer*)phos->GetListOfTasks()->FindObject(digitizer->GetName()) ;
449 phos->GetListOfTasks()->Remove(phosd) ;
451 phos->Add((TTask*)digitizer) ;
455 //____________________________________________________________________________
456 Bool_t AliPHOSGetter::PostDigitizer(const char * name) const
457 { //---------- Digitizer -------------------------
459 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
461 // the hierarchy is //YSALICE/tasks/Digitizer/PHOS/digitsname
462 TTask * digitsF = (TTask*)aliceF->FindObject("tasks/Digitizer") ;
464 cerr << "ERROR: AliPHOSGetter::Post Der -> Task tasks/Digitizer" << " not found!" << endl;
467 TTask * phos = (TTask*)digitsF->GetListOfTasks()->FindObject("PHOS") ;
469 cerr <<"ERROR: AliPHOSGetter::Post Der -> tasks/Digitizer/PHOS" << " not found!" << endl;
473 AliPHOSDigitizer * phosd = (AliPHOSDigitizer*)phos->GetListOfTasks()->FindObject(name) ;
475 phosd = new AliPHOSDigitizer() ;
476 phosd->SetName(fDigitsTitle) ;
477 phosd->SetTitle(fHeaderFile) ;
483 //____________________________________________________________________________
484 AliPHOSDigitizer ** AliPHOSGetter::DigitizerRef(const char * name) const
487 TString path("tasks/Digitizer") ;
489 TFolder * aliceF = (TFolder*)gROOT ->FindObjectAny("YSAlice") ;
490 TTask * aliceT = (TTask*) aliceF->FindObject(path) ;
493 cerr << "ERROR: AliPHOSGetter::ReturnT -> Task " << path << " not found!" << endl ;
497 TTask * phosT = (TTask*) aliceT->GetListOfTasks()->FindObject("PHOS") ;
499 cerr << "ERROR: AliPHOSGetter::ReturnT -> Task " << path << "/PHOS not found!" << endl ;
502 TList * l = phosT->GetListOfTasks() ;
504 TTask * task = (TTask*)l->FindObject(name) ;
506 return (AliPHOSDigitizer **) l->GetObjectRef(task) ;
510 //____________________________________________________________________________
511 Bool_t AliPHOSGetter::PostRecPoints(const char * name) const
512 { // -------------- RecPoints -------------------------------------------
514 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
516 // the hierarchy is //YSALICE/WhiteBoard/RecPoints/PHOS/emc/recpointsname
517 TFolder * emcrpF = (TFolder*)aliceF->FindObject("WhiteBoard/RecPoints/PHOS/emc") ;
520 cerr << "ERROR: AliPHOSGetter::Post R -> Folder WhiteBoard/RecPoints/PHOS/emc"
521 << " not found!" << endl;
524 emcrpF->SetTitle("") ;
525 TObject * erp = emcrpF->FindObject(name ) ;
527 TObjArray * emcrp = new TObjArray(100) ;
528 emcrp->SetName(name) ;
532 TFolder * cpvrpF = (TFolder*)aliceF->FindObject("WhiteBoard/RecPoints/PHOS/cpv") ;
535 cerr << "ERROR: AliPHOSGetter::Post R -> Folder WhiteBoard/RecPoints/PHOS/cpv"
536 << " not found!" << endl;
539 cpvrpF->SetTitle("") ;
540 TObject * crp = cpvrpF->FindObject( name ) ;
542 TObjArray * cpvrp = new TObjArray(100) ;
543 cpvrp->SetName(name) ;
549 //____________________________________________________________________________
550 TObjArray ** AliPHOSGetter::EmcRecPointsRef(const char * name) const
551 { // -------------- RecPoints -------------------------------------------
553 TFolder * emcrpF = (TFolder*)gROOT->FindObjectAny("YSAlice/WhiteBoard/RecPoints/PHOS/emc") ;
556 cerr << "ERROR: AliPHOSGetter::EmcRecPointsRef -> Folder WhiteBoard/RecPoints/PHOS/emc"
557 << " not found!" << endl;
561 TObject * erp = emcrpF->FindObject(name ) ;
565 return (TObjArray **) emcrpF->GetListOfFolders()->GetObjectRef(erp) ;
568 //____________________________________________________________________________
569 TObjArray ** AliPHOSGetter::CpvRecPointsRef(const char * name) const
570 { // -------------- RecPoints -------------------------------------------
572 TFolder * cpvrpF = (TFolder*)gROOT->FindObjectAny("YSAlice/WhiteBoard/RecPoints/PHOS/cpv") ;
575 cerr << "ERROR: AliPHOSGetter::CpvRecPointsRef -> Folder WhiteBoard/RecPoints/PHOS/cpv"
576 << " not found!" << endl;
579 TObject * crp = cpvrpF->FindObject(name ) ;
583 return (TObjArray **) cpvrpF->GetListOfFolders()->GetObjectRef(crp) ;
587 //____________________________________________________________________________
588 Bool_t AliPHOSGetter::PostClusterizer(AliPHOSClusterizer * clu) const
589 { // ------------------ AliPHOSClusterizer ------------------------
591 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
593 // the hierarchy is //YSALICE/tasks/Reconstructionner/PHOS/recpointsname
594 TTask * reF = (TTask*)aliceF->FindObject("tasks/Reconstructioner") ;
596 cerr << "ERROR: AliPHOSGetter::Post Rer -> Task tasks/Reconstructioner" << " not found!" << endl;
600 TTask * phos = (TTask*)reF->GetListOfTasks()->FindObject("PHOS") ;
603 cerr <<"ERROR: AliPHOSGetter::Post Rer -> tasks/Reconstructioner/PHOS" << " not found!" << endl;
606 AliPHOSClusterizer * phoscl = (AliPHOSClusterizer*)phos->GetListOfTasks()->FindObject(clu->GetName()) ;
609 cout << "INFO: AliPHOSGetter::Post Rer -> Task " << clu->GetName() << " already exists" << endl ;
610 phos->GetListOfTasks()->Remove(phoscl) ;
617 //____________________________________________________________________________
618 AliPHOSClusterizer ** AliPHOSGetter::ClusterizerRef(const char * name) const
619 { // ------------------ AliPHOSClusterizer ------------------------
621 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
623 // the hierarchy is //YSALICE/tasks/Reconstructionner/PHOS/recpointsname
624 TTask * reF = (TTask*)aliceF->FindObject("tasks/Reconstructioner") ;
626 cerr << "ERROR: AliPHOSGetter::Post Rer -> Task tasks/Reconstructioner" << " not found!" << endl;
630 TTask * phos = (TTask*)reF->GetListOfTasks()->FindObject("PHOS") ;
633 cerr <<"ERROR: AliPHOSGetter::Post Rer -> tasks/Reconstructioner/PHOS" << " not found!" << endl;
636 TList * l = phos->GetListOfTasks() ;
640 TString cluname(name) ;
642 while((task = (TTask *)it.Next()) ){
643 TString taskname(task->GetName()) ;
644 if(taskname.BeginsWith(cluname)){
651 return (AliPHOSClusterizer **) l->GetObjectRef(clu) ;
656 //____________________________________________________________________________
657 Bool_t AliPHOSGetter::PostClusterizer(const char * name) const
658 { // ------------------ AliPHOSClusterizer ------------------------
660 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
662 // the hierarchy is //YSALICE/tasks/Reconstructionner/PHOS/recpointsname
663 TTask * reF = (TTask*)aliceF->FindObject("tasks/Reconstructioner") ;
665 cerr << "ERROR: AliPHOSGetter::Post Rer -> Task tasks/Reconstructioner" << " not found!" << endl;
669 TTask * phos = (TTask*)reF->GetListOfTasks()->FindObject("PHOS") ;
672 cerr <<"ERROR: AliPHOSGetter::Post Rer -> tasks/Reconstructioner/PHOS" << " not found!" << endl;
675 AliPHOSClusterizer * phoscl = new AliPHOSClusterizerv1() ;
678 phoscl->SetName(clun) ;
683 //____________________________________________________________________________
684 Bool_t AliPHOSGetter::PostTrackSegments(const char * name) const
685 { // ---------------TrackSegments -----------------------------------
687 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
688 // the hierarchy is //YSALICE/WhiteBoard/TrackSegments/PHOS/tracksegmentsname
689 TFolder * tracksegmentsF = (TFolder*)aliceF->FindObject("WhiteBoard/TrackSegments/PHOS") ;
690 tracksegmentsF->SetTitle("") ;
691 if ( !tracksegmentsF) {
692 cerr << "ERROR: AliPHOSGetter::Post T -> Folder WhiteBoard/TrackSegments/PHOS" << " not found!" << endl;
695 TObject * tss = tracksegmentsF->FindObject(name ) ;
697 TClonesArray * ts = new TClonesArray("AliPHOSTrackSegment",100) ;
699 tracksegmentsF->Add(ts) ;
704 //____________________________________________________________________________
705 TClonesArray ** AliPHOSGetter::TrackSegmentsRef(const char * name) const
706 { // ---------------TrackSegments -----------------------------------
708 TFolder * phosF = (TFolder*)gROOT->FindObjectAny("YSAlice/WhiteBoard/TrackSegments/PHOS") ;
710 cerr << "ERROR: AliPHOSGetter::TrackSegmentsRef -> Folder WhiteBoard/TrackSegments/PHOS" << " not found!" << endl;
714 TObject * tss = phosF->FindObject(name) ;
718 return (TClonesArray **) phosF->GetListOfFolders()->GetObjectRef(tss) ;
721 //____________________________________________________________________________
722 Bool_t AliPHOSGetter::PostTrackSegmentMaker(AliPHOSTrackSegmentMaker * tsmaker) const
723 { //------------Track Segment Maker ------------------------------
725 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
727 // the hierarchy is //YSALICE/tasks/Reconstructionner/PHOS/tracksegmentsname
728 TTask * reF = (TTask*)aliceF->FindObject("tasks/Reconstructioner") ;
730 cerr << "ERROR: AliPHOSGetter::Post Ter -> Task tasks/Reconstructioner" << " not found!" << endl;
733 TTask * phos = (TTask*)reF->GetListOfTasks()->FindObject("PHOS") ;
735 cerr <<"ERROR: AliPHOSGetter::Post Ter -> tasks/Reconstructioner/PHOS" << " not found!" << endl;
739 AliPHOSTrackSegmentMaker * phosts =
740 (AliPHOSTrackSegmentMaker*)phos->GetListOfTasks()->FindObject(tsmaker->GetName()) ;
743 phos->GetListOfTasks()->Remove(phosts) ;
749 //____________________________________________________________________________
750 Bool_t AliPHOSGetter::PostTrackSegmentMaker(const char * name) const
751 { //------------Track Segment Maker ------------------------------
753 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
755 // the hierarchy is //YSALICE/tasks/Reconstructionner/PHOS/tracksegmentsname
756 TTask * reF = (TTask*)aliceF->FindObject("tasks/Reconstructioner") ;
758 cerr << "ERROR: AliPHOSGetter::Post Ter -> Task tasks/Reconstructioner" << " not found!" << endl;
761 TTask * phos = (TTask*)reF->GetListOfTasks()->FindObject("PHOS") ;
763 cerr <<"ERROR: AliPHOSGetter::Post Ter -> tasks/Reconstructioner/PHOS" << " not found!" << endl;
766 AliPHOSTrackSegmentMaker * phosts =
767 (AliPHOSTrackSegmentMaker*)phos->GetListOfTasks()->FindObject(name) ;
769 phosts = new AliPHOSTrackSegmentMakerv1() ;
772 phosts->SetName(tsn) ;
778 //____________________________________________________________________________
779 AliPHOSTrackSegmentMaker ** AliPHOSGetter::TSMakerRef(const char * name) const
780 { //------------Track Segment Maker ------------------------------
782 TTask * reF = (TTask*)gROOT->FindObjectAny("YSAlice/tasks/Reconstructioner") ;
784 cerr << "ERROR: AliPHOSGetter::TrackSegmentMakerRef -> Task tasks/Reconstructioner"
785 << " not found!" << endl;
789 TTask * phos = (TTask*)reF->GetListOfTasks()->FindObject("PHOS") ;
791 cerr << "ERROR: AliPHOSGetter::TrackSegmentMakerRef -> Task tasks/Reconstructioner/PHOS"
792 << " not found!" << endl;
795 TList * l = phos->GetListOfTasks() ;
799 TString tsmname(name) ;
801 while((task = (TTask *)it.Next()) ){
802 TString taskname(task->GetName()) ;
803 if(taskname.BeginsWith(tsmname)){
810 return (AliPHOSTrackSegmentMaker **) l->GetObjectRef(tsm) ;
816 //____________________________________________________________________________
817 Bool_t AliPHOSGetter::PostRecParticles(const char * name) const
818 { // -------------------- RecParticles ------------------------
820 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
822 // the hierarchy is //YSALICE/WhiteBoard/RecParticles/PHOS/recparticlesname
823 TFolder * recparticlesF = (TFolder*)aliceF->FindObject("WhiteBoard/RecParticles/PHOS") ;
824 recparticlesF->SetTitle("") ;
825 if ( !recparticlesF) {
826 cerr << "ERROR: AliPHOSGetter::Post P -> Folder WhiteBoard/RecParticles/PHOS" << " not found!" << endl;
829 TObject * rps = recparticlesF->FindObject( name ) ;
831 TClonesArray * rp = new TClonesArray("AliPHOSRecParticle",100) ;
833 recparticlesF->Add(rp) ;
837 //____________________________________________________________________________
838 TClonesArray ** AliPHOSGetter::RecParticlesRef(const char * name) const
839 { // ---------------TrackSegments -----------------------------------
841 TFolder * tsF = (TFolder*)gROOT->FindObjectAny("YSAlice/WhiteBoard/RecParticles/PHOS") ;
843 cerr << "ERROR: AliPHOSGetter::RecParticlesRef -> Folder WhiteBoard/RecParticles/PHOS" << " not found!" << endl;
846 TObject * tss = tsF->FindObject(name ) ;
850 return (TClonesArray **) tsF->GetListOfFolders()->GetObjectRef(tss) ;
853 //____________________________________________________________________________
854 Bool_t AliPHOSGetter::PostPID(AliPHOSPID * pid) const
856 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
858 // ------------AliPHOS PID -----------------------------
859 // the hierarchy is //YSALICE/tasks/Reconstructionner/PHOS/recparticlesname
860 TTask * reF = (TTask*)aliceF->FindObject("tasks/Reconstructioner") ;
862 cerr << "ERROR: AliPHOSGetter::Post Per -> Task tasks/Reconstructioner" << " not found!" << endl;
865 TTask * phos = (TTask*)reF->GetListOfTasks()->FindObject("PHOS") ;
867 cerr <<"ERROR: AliPHOSGetter::Post Per -> tasks/Reconstructioner/PHOS" << " not found!" << endl;
870 AliPHOSPID * phospid = (AliPHOSPID*)phos->GetListOfTasks()->FindObject(pid->GetName()) ;
873 cout << "INFO: AliPHOSGetter::Post Per -> Task " << pid->GetName()
874 << " already exists" << endl ;
875 phos->GetListOfTasks()->Remove(phospid) ;
881 //____________________________________________________________________________
882 Bool_t AliPHOSGetter::PostPID(const char * name) const
884 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
886 // ------------AliPHOS PID -----------------------------
887 // the hierarchy is //YSALICE/tasks/Reconstructionner/PHOS/recparticlesname
888 TTask * reF = (TTask*)aliceF->FindObject("tasks/Reconstructioner") ;
890 cerr << "ERROR: AliPHOSGetter::Post Per -> Task tasks/Reconstructioner" << " not found!" << endl;
893 TTask * phos = (TTask*)reF->GetListOfTasks()->FindObject("PHOS") ;
895 cerr <<"ERROR: AliPHOSGetter::Post Per -> tasks/Reconstructioner/PHOS" << " not found!" << endl;
899 TList * l = phos->GetListOfTasks() ;
901 TString pidname(name) ;
904 while((task = (TTask *)it.Next()) ){
905 TString taskname(task->GetName()) ;
906 if(taskname.BeginsWith(pidname))
910 AliPHOSPIDv1 * phospid = new AliPHOSPIDv1() ;
912 phospid->SetName(pidname) ;
917 //____________________________________________________________________________
918 AliPHOSPID ** AliPHOSGetter::PIDRef(const char * name) const
919 { //------------PID ------------------------------
921 TTask * reF = (TTask*)gROOT->FindObjectAny("YSAlice/tasks/Reconstructioner") ;
923 cerr << "ERROR: AliPHOSGetter::PIDRef -> Task tasks/Reconstructioner"
924 << " not found!" << endl;
928 TTask * phos = (TTask*)reF->GetListOfTasks()->FindObject("PHOS") ;
931 cerr << "ERROR: AliPHOSGetter::PIDRef -> Task tasks/Reconstructioner/PHOS"
932 << " not found!" << endl;
935 TList * l = phos->GetListOfTasks() ;
939 TString pidname(name) ;
941 while((task = (TTask *)it.Next()) ){
942 TString taskname(task->GetName()) ;
943 if(taskname.BeginsWith(pidname)){
950 return (AliPHOSPID **) l->GetObjectRef(pid) ;
956 //____________________________________________________________________________
957 Bool_t AliPHOSGetter::PostQA( const char * name) const
959 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
961 // ------------------ QA ---------------------------------
962 // the hierarchy is //YSALICE/WhiteBoard/Alarms/PHOS/
964 TFolder * alarmsF = new TFolder() ;
969 alarmsName = "Alarm with no name" ;
970 alarmsF->SetName( alarmsName.Data() ) ;
971 alarmsF->SetTitle("") ;
972 TFolder * qaaF = (TFolder*)aliceF->FindObject("WhiteBoard/QAAlarms") ;
974 cerr << "ERROR: AliPHOSGetter::Post QA -> Folder WhiteBoard/QAAlarms/" << " not found!" << endl;
977 if ( qaaF->FindObject( alarmsName.Data() ) )
978 qaaF->RecursiveRemove( qaaF->FindObject( alarmsName.Data() ) ) ;
985 //____________________________________________________________________________
986 const TParticle * AliPHOSGetter::Primary(Int_t index) const
988 // Return primary particle numbered by <index>
993 Int_t primaryIndex = index % 10000000 ;
994 Int_t primaryList = (Int_t ) ((index-primaryIndex)/10000000.) ;
996 if ( primaryList > 0 ) {
997 cout << " Getter does not support currently Mixing of primary " << endl ;
998 cout << " can not return primary: " << index<< " (list "<< primaryList<< " primary # " << primaryIndex << " )"<<endl ;
1002 return gAlice->Particle(primaryIndex) ;
1006 //____________________________________________________________________________
1007 void AliPHOSGetter::ReadTreeD()
1009 // Read the digit tree gAlice->TreeD()
1010 if(gAlice->TreeD()== 0){
1011 cerr << "ERROR: AliPHOSGetter::ReadTreeD: can not read TreeD " << endl ;
1015 TObjArray * lob = (TObjArray*)gAlice->TreeD()->GetListOfBranches() ;
1017 TBranch * branch = 0 ;
1018 TBranch * digitsbranch = 0 ;
1019 TBranch * digitizerbranch = 0 ;
1020 Bool_t phosfound = kFALSE, digitizerfound = kFALSE ;
1022 while ( (branch = (TBranch*)next()) && (!phosfound || !digitizerfound) ) {
1023 if ( (strcmp(branch->GetName(), "PHOS")==0) && (strcmp(branch->GetTitle(), fDigitsTitle)==0) ) {
1024 digitsbranch = branch ;
1027 else if ( (strcmp(branch->GetName(), "AliPHOSDigitizer")==0) && (strcmp(branch->GetTitle(), fDigitsTitle)==0) ) {
1028 digitizerbranch = branch ;
1029 digitizerfound = kTRUE ;
1033 if ( !phosfound || !digitizerfound ) {
1034 cerr << "WARNING: AliPHOSGetter::ReadTreeD -> Cannot find Digits and/or Digitizer with name "
1035 << fDigitsTitle << endl ;
1040 if(!Digits(fDigitsTitle) )
1041 PostDigits(fDigitsTitle);
1042 digitsbranch->SetAddress(DigitsRef(fDigitsTitle)) ;
1043 digitsbranch->GetEntry(0) ;
1046 // read the Digitizer
1047 if(!Digitizer(fDigitsTitle))
1048 PostDigitizer(fDigitsTitle) ;
1049 digitizerbranch->SetAddress(DigitizerRef(fDigitsTitle)) ;
1050 digitizerbranch->GetEntry(0) ;
1055 //____________________________________________________________________________
1056 void AliPHOSGetter::ReadTreeH()
1058 // Read the first entry of PHOS branch in hit tree gAlice->TreeH()
1060 if(gAlice->TreeH()== 0){
1061 cerr << "ERROR: AliPHOSGetter::ReadTreeH: -> Cannot read TreeH " << endl ;
1065 TBranch * hitsbranch = (TBranch*)gAlice->TreeH()->GetBranch("PHOS") ;
1066 if ( !hitsbranch ) {
1067 cerr << "WARNING: AliPHOSGetter::ReadTreeH -> Cannot find branch PHOS" << endl ;
1073 hitsbranch->SetAddress(HitsRef()) ;
1075 hitsbranch->GetEntry(0) ;
1079 //____________________________________________________________________________
1080 void AliPHOSGetter::Track(Int_t itrack)
1082 // Read the first entry of PHOS branch in hit tree gAlice->TreeH()
1084 if(gAlice->TreeH()== 0){
1085 cerr << "ERROR: AliPHOSGetter::ReadTreeH: -> Cannot read TreeH " << endl ;
1089 TBranch * hitsbranch = (TBranch*)gAlice->TreeH()->GetListOfBranches()->FindObject("PHOS") ;
1090 if ( !hitsbranch ) {
1091 cerr << "WARNING: AliPHOSGetter::ReadTreeH -> Cannot find branch PHOS" << endl ;
1096 hitsbranch->SetAddress(HitsRef()) ;
1097 hitsbranch->GetEntry(itrack) ;
1101 //____________________________________________________________________________
1102 void AliPHOSGetter::ReadTreeQA()
1104 // Read the digit tree gAlice->TreeQA()
1105 // so far only PHOS knows about this Tree
1107 if(PHOS()->TreeQA()== 0){
1108 cerr << "ERROR: AliPHOSGetter::ReadTreeQA: can not read TreeQA " << endl ;
1112 TBranch * qabranch = PHOS()->TreeQA()->GetBranch("PHOS") ;
1114 cerr << "WARNING: AliPHOSGetter::ReadTreeQA -> Cannot find QA Alarms for PHOS" << endl ;
1118 // Post the QA Alarms
1120 TFolder * alarmsF = Alarms() ;
1122 qabranch->SetAddress(&alarmsF) ;
1123 qabranch->GetEntry(0) ;
1127 //____________________________________________________________________________
1128 void AliPHOSGetter::ReadTreeR()
1130 // Read the reconstrunction tree gAlice->TreeR()
1132 if(gAlice->TreeR()== 0){
1133 cout << "ERROR: AliPHOSGetter::ReadTreeR: can not read TreeR " << endl ;
1138 TObjArray * lob = (TObjArray*)gAlice->TreeR()->GetListOfBranches() ;
1140 TBranch * branch = 0 ;
1141 TBranch * emcbranch = 0 ;
1142 TBranch * cpvbranch = 0 ;
1143 TBranch * clusterizerbranch = 0 ;
1144 Bool_t phosemcrpfound = kFALSE, phoscpvrpfound = kFALSE, clusterizerfound = kFALSE ;
1146 while ( (branch = (TBranch*)next()) && (!phosemcrpfound || !phoscpvrpfound || !clusterizerfound) )
1147 if(strcmp(branch->GetTitle(), fRecPointsTitle)==0) {
1148 if ( strcmp(branch->GetName(), "PHOSEmcRP")==0) {
1149 emcbranch = branch ;
1150 phosemcrpfound = kTRUE ;
1152 else if ( strcmp(branch->GetName(), "PHOSCpvRP")==0) {
1153 cpvbranch = branch ;
1154 phoscpvrpfound = kTRUE ;
1156 else if(strcmp(branch->GetName(), "AliPHOSClusterizer")==0){
1157 clusterizerbranch = branch ;
1158 clusterizerfound = kTRUE ;
1162 if ( !phosemcrpfound ) {
1163 cerr << "WARNING: AliPHOSGetter::ReadTreeR -> Cannot find EmcRecPoints with title "
1164 << fRecPointsTitle << endl ;
1167 if ( !phoscpvrpfound ) {
1168 cerr << "WARNING: AliPHOSGetter::ReadTreeR -> Cannot find CpvRecPoints with title "
1169 << fRecPointsTitle << endl ;
1172 if ( !clusterizerfound ) {
1173 cerr << "WARNING: AliPHOSGetter::ReadTreeR -> Can not find Clusterizer with title "
1174 << fRecPointsTitle << endl ;
1178 // Read and Post the RecPoints
1179 if(!EmcRecPoints(fRecPointsTitle) )
1180 PostRecPoints(fRecPointsTitle) ;
1181 emcbranch->SetAddress(EmcRecPointsRef(fRecPointsTitle)) ;
1182 emcbranch->GetEntry(0) ;
1184 cpvbranch->SetAddress(CpvRecPointsRef(fRecPointsTitle)) ;
1185 cpvbranch->GetEntry(0) ;
1187 if(!Clusterizer(fRecPointsTitle) )
1188 PostClusterizer(fRecPointsTitle) ;
1189 clusterizerbranch->SetAddress(ClusterizerRef(fRecPointsTitle)) ;
1190 clusterizerbranch->GetEntry(0) ;
1193 //------------------- TrackSegments ---------------------
1195 TBranch * tsbranch = 0 ;
1196 TBranch * tsmakerbranch = 0 ;
1197 Bool_t phostsfound = kFALSE, tsmakerfound = kFALSE ;
1199 while ( (branch = (TBranch*)next()) && (!phostsfound || !tsmakerfound) )
1200 if(strcmp(branch->GetTitle(), fTrackSegmentsTitle)==0) {
1201 if ( strcmp(branch->GetName(), "PHOSTS")==0){
1203 phostsfound = kTRUE ;
1205 else if(strcmp(branch->GetName(), "AliPHOSTrackSegmentMaker")==0) {
1206 tsmakerbranch = branch ;
1207 tsmakerfound = kTRUE ;
1211 if ( !phostsfound || !tsmakerfound ) {
1212 cerr << "WARNING: AliPHOSGetter::ReadTreeR -> Cannot find TrackSegments and/or TrackSegmentMaker with name "
1213 << fTrackSegmentsTitle << endl ;
1217 // Read and Post the TrackSegments
1218 if(!TrackSegments(fTrackSegmentsTitle))
1219 PostTrackSegments(fTrackSegmentsTitle) ;
1220 tsbranch->SetAddress(TrackSegmentsRef(fTrackSegmentsTitle)) ;
1221 tsbranch->GetEntry(0) ;
1223 // Read and Post the TrackSegment Maker
1224 if(!TrackSegmentMaker(fTrackSegmentsTitle))
1225 PostTrackSegmentMaker(fTrackSegmentsTitle) ;
1226 tsmakerbranch->SetAddress(TSMakerRef(fTrackSegmentsTitle)) ;
1227 tsmakerbranch->GetEntry(0) ;
1230 //------------ RecParticles ----------------------------
1232 TBranch * rpabranch = 0 ;
1233 TBranch * pidbranch = 0 ;
1234 Bool_t phosrpafound = kFALSE, pidfound = kFALSE ;
1236 while ( (branch = (TBranch*)next()) && (!phosrpafound || !pidfound) )
1237 if(strcmp(branch->GetTitle(), fRecParticlesTitle)==0) {
1238 if ( strcmp(branch->GetName(), "PHOSRP")==0) {
1239 rpabranch = branch ;
1240 phosrpafound = kTRUE ;
1242 else if (strcmp(branch->GetName(), "AliPHOSPID")==0) {
1243 pidbranch = branch ;
1248 if ( !phosrpafound || !pidfound ) {
1249 cerr << "WARNING: AliPHOSGetter::ReadTreeR -> Cannot find RecParticles and/or PID with name "
1250 << fRecParticlesTitle << endl ;
1254 // Read and Post the RecParticles
1255 if(!RecParticles(fRecParticlesTitle))
1256 PostRecParticles(fRecParticlesTitle) ;
1257 rpabranch->SetAddress(RecParticlesRef(fRecParticlesTitle)) ;
1258 rpabranch->GetEntry(0) ;
1260 // Read and Post the PID
1261 if(!PID(fRecParticlesTitle))
1262 PostPID(fRecParticlesTitle) ;
1263 pidbranch->SetAddress(PIDRef(fRecParticlesTitle)) ;
1264 pidbranch->GetEntry(0) ;
1269 //____________________________________________________________________________
1270 void AliPHOSGetter::ReadTreeS(Int_t event)
1272 // Read the summable digits tree gAlice->TreeS()
1274 // loop over all opened files and read their SDigits to the White Board
1275 TFolder * phosF = (TFolder *)gROOT->FindObjectAny("YSAlice/WhiteBoard/SDigits/PHOS") ;
1276 TCollection * folderslist = phosF->GetListOfFolders() ;
1278 //Add current file to list if it is not there yet
1279 if ( (fHeaderFile != "aliroot") && ( !folderslist->Contains(fHeaderFile) ) ){
1280 phosF->AddFolder(fHeaderFile, "");
1281 folderslist = phosF->GetListOfFolders() ;
1284 TIter next(folderslist) ;
1285 TFolder * folder = 0 ;
1288 while ( (folder = (TFolder*)next()) ) {
1289 if(fHeaderFile.CompareTo(folder->GetName()) == 0 )
1290 treeS=gAlice->TreeS() ;
1292 file = (TFile*)gROOT->GetFile(folder->GetName());
1295 // Get SDigits Tree header from file
1296 TString treeName("TreeS") ;
1298 treeS = (TTree*)gDirectory->Get(treeName.Data());
1301 cerr << "ERROR: AliPHOSGetter::ReadTreeS There is no SDigit Tree" << endl;
1305 //set address of the SDigits and SDigitizer
1306 TBranch * sdigitsBranch = 0;
1307 TBranch * sdigitizerBranch = 0;
1308 TBranch * branch = 0 ;
1309 TObjArray * lob = (TObjArray*)treeS->GetListOfBranches() ;
1311 Bool_t phosfound = kFALSE, sdigitizerfound = kFALSE ;
1313 while ( (branch = (TBranch*)next()) && (!phosfound || !sdigitizerfound) ) {
1314 if ( (strcmp(branch->GetName(), "PHOS")==0) && (strcmp(branch->GetTitle(), fSDigitsTitle)==0) ) {
1316 sdigitsBranch = branch ;
1319 else if ( (strcmp(branch->GetName(), "AliPHOSSDigitizer")==0) && (strcmp(branch->GetTitle(), fSDigitsTitle)==0) ) {
1320 sdigitizerfound = kTRUE ;
1321 sdigitizerBranch = branch ;
1324 if ( !phosfound || !sdigitizerfound ) {
1325 cerr << "WARNING: AliPHOSDigitizer::ReadSDigits -> Digits and/or Digitizer branch with name " << GetName()
1326 << " not found" << endl ;
1330 if ( !folder->FindObject(fSDigitsTitle) )
1331 PostSDigits(fSDigitsTitle,folder->GetName()) ;
1332 sdigitsBranch->SetAddress(SDigitsRef(fSDigitsTitle,folder->GetName())) ;
1333 sdigitsBranch->GetEntry(0) ;
1335 TString sdname(fSDigitsTitle) ;
1337 sdname+=folder->GetName() ;
1338 if(!SDigitizer(sdname) )
1339 PostSDigitizer(fSDigitsTitle,folder->GetName()) ;
1340 sdigitizerBranch->SetAddress(SDigitizerRef(sdname)) ;
1341 sdigitizerBranch->GetEntry(0) ;
1345 // After SDigits have been read from all files, return to the first one
1348 folder = (TFolder*)next();
1350 file = (TFile*)gROOT->GetFile(folder->GetName());
1355 //____________________________________________________________________________
1356 void AliPHOSGetter::ReadTreeS(TTree * treeS, Int_t input)
1357 { // Read the summable digits fron treeS()
1359 TString filename("mergefile") ;
1361 TFolder * phosF =(TFolder*)gROOT->FindObjectAny("YSAlice/WhiteBoard/SDigits/PHOS") ;
1362 TFolder * folder=(TFolder*)phosF->FindObject(filename) ;
1363 //set address of the SDigits and SDigitizer
1364 TBranch * sdigitsBranch = 0;
1365 TBranch * sdigitizerBranch = 0;
1366 TBranch * branch = 0 ;
1367 TObjArray * lob = (TObjArray*)treeS->GetListOfBranches() ;
1369 Bool_t phosfound = kFALSE, sdigitizerfound = kFALSE ;
1371 while ( (branch = (TBranch*)next()) && (!phosfound || !sdigitizerfound) ) {
1372 if ( strcmp(branch->GetName(), "PHOS")==0) {
1374 sdigitsBranch = branch ;
1377 else if ( strcmp(branch->GetName(), "AliPHOSSDigitizer")==0) {
1378 sdigitizerfound = kTRUE ;
1379 sdigitizerBranch = branch ;
1382 if ( !phosfound || !sdigitizerfound ) {
1383 cerr << "WARNING: AliPHOSGetter::ReadTreeS -> Digits and/or Digitizer branch not found" << endl ;
1387 if (!folder || !(folder->FindObject(sdigitsBranch->GetTitle()) ) )
1388 PostSDigits(sdigitsBranch->GetTitle(),filename) ;
1390 sdigitsBranch->SetAddress(SDigitsRef(sdigitsBranch->GetTitle(),filename)) ;
1392 TString sdname(sdigitsBranch->GetTitle()) ;
1395 if(!SDigitizer(sdigitsBranch->GetTitle()) )
1396 PostSDigitizer(sdigitsBranch->GetTitle(),filename) ;
1397 sdigitizerBranch->SetAddress(SDigitizerRef(sdname)) ;
1399 sdigitsBranch->GetEntry(0) ;
1400 sdigitizerBranch->GetEntry(0) ;
1405 //____________________________________________________________________________
1406 void AliPHOSGetter::ReadPrimaries()
1408 // Reads specific branches of primaries
1410 fNPrimaries = gAlice->GetNtrack();
1412 // //Check, is it necessary to open new files
1413 // TArrayI* events = fDigitizer->GetCurrentEvents() ;
1414 // TClonesArray * filenames = fDigitizer->GetHeadersFiles() ;
1416 // for(input = 0; input < filenames->GetEntriesFast(); input++){
1418 // TObjString * filename = (TObjString *) filenames->At(input) ;
1420 // //Test, if this file already open
1421 // TFile *file = (TFile*) gROOT->GetFile( filename->GetString() ) ;
1423 // file = new TFile( filename->GetString()) ;
1426 // // Get Kine Tree from file
1427 // // char treeName[20];
1428 // // sprintf(treeName,"TreeK%d",events->At(input));
1429 // // TTree * treeK = (TTree*)gDirectory->Get(treeName);
1431 // // treeK->SetBranchAddress("Particles", &fParticleBuffer);
1433 // // cout << "AliPHOSGetter: cannot find Kine Tree for event:" << events->At(input) << endl;
1435 // // // Create the particle stack
1436 // // if(!fParticles) fParticles = new TClonesArray("TParticle",1000);
1437 // // // Build the pointer list
1438 // // if(fParticleMap) { <----
1439 // // fParticleMap->Clear();
1440 // // fParticleMap->Expand(treeK->GetEntries());
1442 // // fParticleMap = new TObjArray(treeK->GetEntries());
1444 // // From gAlice->Particle(i)
1447 // // if(!(*fParticleMap)[i]) {
1448 // // Int_t nentries = fParticles->GetEntries();
1450 // // // algorithmic way of getting entry index
1451 // // // (primary particles are filled after secondaries)
1453 // // if (i<fHeader.GetNprimary())
1454 // // entry = i+fHeader.GetNsecondary();
1456 // // entry = i-fHeader.GetNprimary();
1458 // // // only check the algorithmic way and give
1459 // // // the fatal error if it is wrong
1460 // // if (entry != fParticleFileMap[i]) {
1461 // // Fatal("Particle",
1462 // // "!!!! The algorithmic way is WRONG: !!!\n entry: %d map: %d",
1463 // // entry, fParticleFileMap[i]);
1466 // // fTreeK->GetEntry(fParticleFileMap[i]);
1467 // // new ((*fParticles)[nentries]) TParticle(*fParticleBuffer);
1468 // // fParticleMap->AddAt((*fParticles)[nentries],i);
1470 // // return (TParticle *) (*fParticleMap)[i];
1477 // //scan over opened files and read corresponding TreeK##
1481 //____________________________________________________________________________
1482 void AliPHOSGetter::Event(Int_t event, const char* opt)
1484 // Reads the content of all Tree's S, D and R
1486 if ( event > gAlice->TreeE()->GetEntries() ) {
1487 cerr << "ERROR: AliPHOSGetter::Event -> There are only "
1488 << gAlice->TreeE()->GetEntries() << " events in this file" << endl ;
1492 gAlice->GetEvent(event) ;
1494 if(strstr(opt,"H") )
1497 if(strstr(opt,"S") )
1500 if( strstr(opt,"D") )
1503 if( strstr(opt,"R") )
1506 if( strstr(opt,"Q") )
1509 if( strstr(opt,"P") )
1514 //____________________________________________________________________________
1515 const TObject * AliPHOSGetter::ReturnO(TString what, TString name, TString file) const
1517 // get the object named "what" from the folder
1518 // folders are named like //YSAlice/WhiteBoard/what/PHOS/name
1520 if ( file.IsNull() )
1521 file = fHeaderFile ;
1522 TString path("WhiteBoard/") ;
1523 if ( name.IsNull() ) {
1524 if ( what.CompareTo("Hits") == 0 ) {
1529 else if ( what.CompareTo("SDigits") == 0 ) {
1534 path += fSDigitsTitle ;
1536 else if ( what.CompareTo("Digits") == 0 ){
1539 path += fDigitsTitle ;
1541 else if ( what.CompareTo("EmcRecPoints") == 0 ) {
1542 path += "RecPoints/PHOS/";
1544 path += fRecPointsTitle ;
1546 else if ( what.CompareTo("CpvRecPoints") == 0 ) {
1547 path += "RecPoints/PHOS/";
1549 path += fRecPointsTitle ;
1551 else if ( what.CompareTo("TrackSegments") == 0 ) {
1552 path += "TrackSegments/PHOS/";
1553 path += fTrackSegmentsTitle ;
1555 else if ( what.CompareTo("RecParticles") == 0 ) {
1556 path += "RecParticles/PHOS/";
1557 path += fRecParticlesTitle ;
1559 else if ( what.CompareTo("Alarms") == 0 ) {
1560 path += "QAAlarms/PHOS";
1564 if ( what.CompareTo("SDigits") == 0 ) {
1571 else if ( what.CompareTo("Digits") == 0 ) {
1576 else if ( what.CompareTo("EmcRecPoints") == 0 ) {
1577 path += "RecPoints/PHOS/";
1581 else if ( what.CompareTo("CpvRecPoints") == 0 ) {
1582 path += "RecPoints/PHOS/";
1586 else if ( what.CompareTo("TrackSegments") == 0 ) {
1587 path += "TrackSegments/PHOS/";
1590 else if ( what.CompareTo("RecParticles") == 0 ) {
1591 path += "RecParticles/PHOS/";
1594 else if ( what.CompareTo("Alarms") == 0 ) {
1595 path += "QAAlarms/PHOS/";
1599 path.Prepend("YSAlice/") ;
1600 TObject * phosO = (TObject*)gROOT->FindObjectAny(path) ;
1603 cerr << "ERROR : AliPHOSGetter::ReturnO -> Object " << path << " not found!" << endl ;
1609 //____________________________________________________________________________
1610 const TTask * AliPHOSGetter::ReturnT(TString what, TString name) const
1612 // get the TTask named "what" from the folder
1613 // folders are named like //YSAlice/Tasks/what/PHOS/name
1615 TString path("tasks") ;
1617 if ( what.CompareTo("SDigitizer") == 0 )
1618 path += "/SDigitizer" ;
1619 else if ( what.CompareTo("Digitizer") == 0 )
1620 path += "/Digitizer" ;
1621 else if ( what.CompareTo("Clusterizer") == 0 )
1622 path += "/Reconstructioner" ;
1623 else if ( what.CompareTo("TrackSegmentMaker") == 0 )
1624 path += "/Reconstructioner" ;
1625 else if ( what.CompareTo("PID") == 0 )
1626 path += "/Reconstructioner" ;
1627 else if ( what.CompareTo("QATasks") == 0 )
1630 TFolder * aliceF = (TFolder*)gROOT ->FindObjectAny("YSAlice") ;
1631 TTask * aliceT = (TTask*) aliceF->FindObject(path) ;
1634 cerr << "ERROR: AliPHOSGetter::ReturnT -> Task " << path << " not found!" << endl ;
1638 TTask * phosT = (TTask*) aliceT->GetListOfTasks()->FindObject("PHOS") ;
1640 cerr << "ERROR: AliPHOSGetter::ReturnT -> Task " << path << "/PHOS not found!" << endl ;
1643 TList * l = phosT->GetListOfTasks() ;
1645 if (what.CompareTo("SDigitizer") == 0) {
1646 if ( name.IsNull() )
1647 name = fSDigitsTitle ;
1648 } else if (what.CompareTo("Digitizer") == 0){
1649 if ( name.IsNull() )
1650 name = fDigitsTitle ;
1651 } else if (what.CompareTo("Clusterizer") == 0){
1652 if ( name.IsNull() )
1653 name = fRecPointsTitle ;
1654 name.Append(":clu") ;
1656 else if (what.CompareTo("TrackSegmentMaker") == 0){
1657 if ( name.IsNull() )
1658 name = fTrackSegmentsTitle ;
1659 name.Append(":tsm") ;
1661 else if (what.CompareTo("PID") == 0){
1662 if ( name.IsNull() )
1663 name = fRecParticlesTitle ;
1664 name.Append(":pid") ;
1666 else if (what.CompareTo("QATasks") == 0){
1667 if ( name.IsNull() )
1673 while((task = (TTask *)it.Next()) ){
1674 TString taskname(task->GetName()) ;
1675 if(taskname.BeginsWith(name))
1680 cerr << "WARNING: AliPHOSGetter::ReturnT -> Task " << path << "/" << name << " not found!" << endl ;