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 AliPHOSGetter::~AliPHOSGetter(){
122 //Here we remove all TFolders and TTasks with current title and file name
123 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
126 //Hits: the hierarchy is //YSALICE/WhiteBoard/Hits/PHOS/...
127 TFolder * hitsF = (TFolder*)aliceF->FindObject("WhiteBoard/Hits/PHOS") ;
129 TObject * h = hitsF->FindObject("hits") ;
133 //SDigits: the hierarchy is //YSALICE/WhiteBoard/SDigits/PHOS/...
134 TFolder * sdigitsF = (TFolder*)aliceF->FindObject("WhiteBoard/SDigits/PHOS") ;
136 TCollection* l = sdigitsF->GetListOfFolders() ;
139 while((sf = it.Next()) )
140 sdigitsF->RecursiveRemove(sf) ;
144 //____________________________________________________________________________
145 void AliPHOSGetter::CreateWhiteBoard() const
147 // Posts a few item to the white board (folders)
150 if(!PostGeometry() ) abort() ;
154 //____________________________________________________________________________
155 AliPHOSGetter * AliPHOSGetter::GetInstance()
157 // Returns the pointer of the unique instance already defined
159 AliPHOSGetter * rv = 0 ;
163 cout << "AliPHOSGetter::GetInstance ERROR: not yet initialized" << endl ;
168 //____________________________________________________________________________
169 AliPHOSGetter * AliPHOSGetter::GetInstance(const char* headerFile,
170 const char* branchTitle)
172 // Creates and returns the pointer of the unique instance
173 // Must be called only when the environment has changed
176 if((fgObjGetter->fBranchTitle.CompareTo(branchTitle) == 0) &&
177 (fgObjGetter->fHeaderFile.CompareTo(headerFile)==0))
180 fgObjGetter->~AliPHOSGetter() ; // delete it if already exists another version
182 fgObjGetter = new AliPHOSGetter(headerFile,branchTitle) ;
184 // Posts a few item to the white board (folders)
185 fgObjGetter->CreateWhiteBoard() ;
191 //____________________________________________________________________________
192 const AliPHOS * AliPHOSGetter::PHOS() const
194 // returns the PHOS object
195 return ( (AliPHOS*)gAlice->GetDetector("PHOS") );
198 //____________________________________________________________________________
199 const AliPHOSGeometry * AliPHOSGetter::PHOSGeometry() const
201 // retrieves the geometr from the folder
203 TString path("YSAlice/WhiteBoard/Geometry/PHOS/") ;
204 path += PHOS()->GetTitle() ;
205 return (AliPHOSGeometry*)gROOT->FindObjectAny(path.Data()) ;
208 //____________________________________________________________________________
209 Bool_t AliPHOSGetter::PostGeometry() const
210 { //--------Geometry --------------
212 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
214 // the hierarchy is //YSALICE/WhiteBoard/Geometry/PHOS/
215 TFolder * geomF = (TFolder*)aliceF->FindObject("WhiteBoard/Geometry/PHOS") ;
217 cerr << "ERROR: AliPHOSGetter::Post G -> Folder WhiteBoard/Geometry/PHOS/" << " not found!" << endl;
221 AliPHOSGeometry * geom = AliPHOSGeometry::GetInstance(PHOS()->GetTitle(),"") ;
222 geomF->Add((TObject*)geom) ;
226 //____________________________________________________________________________
227 Bool_t AliPHOSGetter::PostHits(void) const
228 { //------- Hits ----------------------
230 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
232 // the hierarchy is //YSALICE/WhiteBoard/SDigits/PHOS/Hits
233 TFolder * hitsF = (TFolder*)aliceF->FindObject("WhiteBoard/Hits/PHOS") ;
235 cerr << "ERROR: AliPHOSGetter::Post H -> Folder WhiteBoard/Hits/PHOS/" << " not found!" << endl;
239 TObject * h = hitsF->FindObject("Hits") ;
242 TClonesArray *hits= new TClonesArray("AliPHOSHit",1000) ;
243 hits->SetName("Hits") ;
249 //____________________________________________________________________________
250 TClonesArray ** AliPHOSGetter::HitsRef(void) const
251 { //------- Hits ----------------------
253 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
255 // the hierarchy is //YSALICE/WhiteBoard/SDigits/PHOS/Hits
256 TFolder * hitsF = (TFolder*)aliceF->FindObject("WhiteBoard/Hits/PHOS") ;
258 cerr << "ERROR: AliPHOSGetter::Post H -> Folder WhiteBoard/Hits/PHOS/" << " not found!" << endl;
262 TObject * h = hitsF->FindObject("Hits") ;
266 return (TClonesArray **) hitsF->GetListOfFolders()->GetObjectRef(h) ;
269 //____________________________________________________________________________
270 Bool_t AliPHOSGetter::PostSDigits(const char * name, const char * headerFile) const
271 { //---------- SDigits -------------------------
273 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
275 // the hierarchy is //YSALICE/WhiteBoard/SDigits/PHOS/headerFile/sdigitsname
276 // because you can have sdigits from several hit files for mixing
278 TFolder * sdigitsF = (TFolder*)aliceF->FindObject("WhiteBoard/SDigits/PHOS") ;
279 TString subdir(headerFile) ;
280 TFolder * sdigitsF2 = (sdigitsF2=(TFolder*)sdigitsF->FindObject(subdir)) ;
282 sdigitsF2 = sdigitsF->AddFolder(subdir, "");
284 TObject * sd = sdigitsF2->FindObject(name );
287 cerr <<"INFO: AliPHOSGetter::Post S -> Folder " << subdir
288 << " already exists!" << endl ;
290 TClonesArray * sdigits = new TClonesArray("AliPHOSDigit",1000) ;
291 sdigits->SetName(name) ;
292 sdigitsF2->Add(sdigits) ;
297 //____________________________________________________________________________
298 TClonesArray ** AliPHOSGetter::SDigitsRef(const char * name, const char * file) const
299 { //------- Hits ----------------------
301 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
303 // the hierarchy is //YSALICE/WhiteBoard/SDigits/PHOS/Hits
304 TFolder * sdisF = (TFolder*)aliceF->FindObject("WhiteBoard/SDigits/PHOS") ;
306 cerr << "ERROR: AliPHOSGetter::SDRef -> Folder WhiteBoard/SDigits/PHOS/" << " not found!" << endl;
311 fileF = (TFolder *) sdisF->FindObject(file) ;
313 fileF = (TFolder *) sdisF->FindObject(fHeaderFile) ;
318 TObject * dis = fileF->FindObject(name) ;
322 return (TClonesArray **) fileF->GetListOfFolders()->GetObjectRef(dis) ;
326 //____________________________________________________________________________
327 Bool_t AliPHOSGetter::PostSDigitizer(AliPHOSSDigitizer * sdigitizer) const
328 { //---------- SDigitizer -------------------------
330 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
332 // the hierarchy is //YSALICE/tasks/Digitizer/PHOS/sdigitsname
333 TTask * sdigitsF = (TTask*)aliceF->FindObject("tasks/SDigitizer") ;
335 cerr << "ERROR: AliPHOSGetter::Post Ser -> Task tasks/SDigitizer" << " not found!" << endl;
338 TTask * phos = (TTask*)sdigitsF->GetListOfTasks()->FindObject("PHOS") ;
340 cerr <<"ERROR: AliPHOSGetter::Post Ser -> tasks/SDigitizer/PHOS" << " not found!" << endl;
343 AliPHOSSDigitizer * phossd = (AliPHOSSDigitizer *) phos->GetListOfTasks()->FindObject( sdigitizer->GetName() );
346 cout << "INFO: AliPHOSGetter::Post Ser -> Task " << sdigitizer->GetName() << " already exists" << endl ;
347 phos->GetListOfTasks()->Remove(phossd) ;
349 phos->Add(sdigitizer) ;
353 //____________________________________________________________________________
354 AliPHOSSDigitizer ** AliPHOSGetter::SDigitizerRef(const char * name) const
357 TString path("tasks/SDigitizer") ;
359 TFolder * aliceF = (TFolder*)gROOT ->FindObjectAny("YSAlice") ;
360 TTask * aliceT = (TTask*) aliceF->FindObject(path) ;
363 cerr << "ERROR: AliPHOSGetter::ReturnT -> Task " << path << " not found!" << endl ;
367 TTask * phosT = (TTask*) aliceT->GetListOfTasks()->FindObject("PHOS") ;
369 cerr << "ERROR: AliPHOSGetter::ReturnT -> Task " << path << "/PHOS not found!" << endl ;
372 TList * l = phosT->GetListOfTasks() ;
374 TTask * task = (TTask*)l->FindObject(name) ;
376 return (AliPHOSSDigitizer **) l->GetObjectRef(task) ;
381 //____________________________________________________________________________
382 Bool_t AliPHOSGetter::PostSDigitizer(const char * name, const char * file) const
383 { //---------- SDigitizer -------------------------
385 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
387 // the hierarchy is //YSALICE/tasks/Digitizer/PHOS/sdigitsname
388 TTask * sdigitsF = (TTask*)aliceF->FindObject("tasks/SDigitizer") ;
390 cerr << "ERROR: AliPHOSGetter::Post Ser -> Task tasks/SDigitizer" << " not found!" << endl;
393 TTask * phos = (TTask*)sdigitsF->GetListOfTasks()->FindObject("PHOS") ;
395 cerr <<"ERROR: AliPHOSGetter::Post Ser -> tasks/SDigitizer/PHOS" << " not found!" << endl;
398 TString sdname(name) ;
401 AliPHOSSDigitizer * phossd = (AliPHOSSDigitizer *) phos->GetListOfTasks()->FindObject( sdname );
403 phossd = new AliPHOSSDigitizer() ;
404 //Note, we can not call constructor with parameters: it will call Getter and scrud up everething
405 phossd->SetName(sdname) ;
406 phossd->SetTitle(file) ;
412 //____________________________________________________________________________
413 Bool_t AliPHOSGetter::PostDigits(const char * name) const
414 { //---------- Digits -------------------------
416 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
418 // the hierarchy is //YSALICE/WhiteBoard/Digits/PHOS/digitsname
419 TFolder * digitsF = (TFolder*)aliceF->FindObject("WhiteBoard/Digits/PHOS") ;
421 cerr << "ERROR: AliPHOSGetter::Post D -> Folder WhiteBoard/Digits/PHOS/" << " not found!" << endl;
424 digitsF->SetTitle("") ;
425 TObject* dig = digitsF->FindObject( name ) ;
427 TClonesArray * digits = new TClonesArray("AliPHOSDigit",1000) ;
428 digits->SetName(name) ;
429 digitsF->Add(digits) ;
433 //____________________________________________________________________________
434 TClonesArray ** AliPHOSGetter::DigitsRef(const char * name) const
437 TFolder * digitsF = (TFolder*)gROOT->FindObjectAny("YSAlice/WhiteBoard/Digits/PHOS") ;
440 cerr << "ERROR: AliPHOSGetter::DRef -> Folder WhiteBoard/Digits/PHOS/" << " not found!" << endl;
444 TObject * d = digitsF->FindObject(name) ;
448 return (TClonesArray **) digitsF->GetListOfFolders()->GetObjectRef(d) ;
453 //____________________________________________________________________________
454 Bool_t AliPHOSGetter::PostDigitizer(AliPHOSDigitizer * digitizer) const
455 { //---------- Digitizer -------------------------
457 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
459 // the hierarchy is //YSALICE/tasks/Digitizer/PHOS/digitsname
460 TTask * digitsF = (TTask*)aliceF->FindObject("tasks/Digitizer") ;
462 cerr << "ERROR: AliPHOSGetter::Post Der -> Task tasks/Digitizer" << " not found!" << endl;
465 TTask * phos = (TTask*)digitsF->GetListOfTasks()->FindObject("PHOS") ;
467 cerr <<"ERROR: AliPHOSGetter::Post Der -> tasks/Digitizer/PHOS" << " not found!" << endl;
470 AliPHOSDigitizer * phosd = (AliPHOSDigitizer*)phos->GetListOfTasks()->FindObject(digitizer->GetName()) ;
473 phos->GetListOfTasks()->Remove(phosd) ;
475 phos->Add((TTask*)digitizer) ;
479 //____________________________________________________________________________
480 Bool_t AliPHOSGetter::PostDigitizer(const char * name) const
481 { //---------- Digitizer -------------------------
483 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
485 // the hierarchy is //YSALICE/tasks/Digitizer/PHOS/digitsname
486 TTask * digitsF = (TTask*)aliceF->FindObject("tasks/Digitizer") ;
488 cerr << "ERROR: AliPHOSGetter::Post Der -> Task tasks/Digitizer" << " not found!" << endl;
491 TTask * phos = (TTask*)digitsF->GetListOfTasks()->FindObject("PHOS") ;
493 cerr <<"ERROR: AliPHOSGetter::Post Der -> tasks/Digitizer/PHOS" << " not found!" << endl;
497 AliPHOSDigitizer * phosd = (AliPHOSDigitizer*)phos->GetListOfTasks()->FindObject(name) ;
499 phosd = new AliPHOSDigitizer() ;
500 phosd->SetName(fDigitsTitle) ;
501 phosd->SetTitle(fHeaderFile) ;
507 //____________________________________________________________________________
508 AliPHOSDigitizer ** AliPHOSGetter::DigitizerRef(const char * name) const
511 TString path("tasks/Digitizer") ;
513 TFolder * aliceF = (TFolder*)gROOT ->FindObjectAny("YSAlice") ;
514 TTask * aliceT = (TTask*) aliceF->FindObject(path) ;
517 cerr << "ERROR: AliPHOSGetter::ReturnT -> Task " << path << " not found!" << endl ;
521 TTask * phosT = (TTask*) aliceT->GetListOfTasks()->FindObject("PHOS") ;
523 cerr << "ERROR: AliPHOSGetter::ReturnT -> Task " << path << "/PHOS not found!" << endl ;
526 TList * l = phosT->GetListOfTasks() ;
528 TTask * task = (TTask*)l->FindObject(name) ;
530 return (AliPHOSDigitizer **) l->GetObjectRef(task) ;
534 //____________________________________________________________________________
535 Bool_t AliPHOSGetter::PostRecPoints(const char * name) const
536 { // -------------- RecPoints -------------------------------------------
538 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
540 // the hierarchy is //YSALICE/WhiteBoard/RecPoints/PHOS/emc/recpointsname
541 TFolder * emcrpF = (TFolder*)aliceF->FindObject("WhiteBoard/RecPoints/PHOS/emc") ;
544 cerr << "ERROR: AliPHOSGetter::Post R -> Folder WhiteBoard/RecPoints/PHOS/emc"
545 << " not found!" << endl;
548 emcrpF->SetTitle("") ;
549 TObject * erp = emcrpF->FindObject(name ) ;
551 TObjArray * emcrp = new TObjArray(100) ;
552 emcrp->SetName(name) ;
556 TFolder * cpvrpF = (TFolder*)aliceF->FindObject("WhiteBoard/RecPoints/PHOS/cpv") ;
559 cerr << "ERROR: AliPHOSGetter::Post R -> Folder WhiteBoard/RecPoints/PHOS/cpv"
560 << " not found!" << endl;
563 cpvrpF->SetTitle("") ;
564 TObject * crp = cpvrpF->FindObject( name ) ;
566 TObjArray * cpvrp = new TObjArray(100) ;
567 cpvrp->SetName(name) ;
573 //____________________________________________________________________________
574 TObjArray ** AliPHOSGetter::EmcRecPointsRef(const char * name) const
575 { // -------------- RecPoints -------------------------------------------
577 TFolder * emcrpF = (TFolder*)gROOT->FindObjectAny("YSAlice/WhiteBoard/RecPoints/PHOS/emc") ;
580 cerr << "ERROR: AliPHOSGetter::EmcRecPointsRef -> Folder WhiteBoard/RecPoints/PHOS/emc"
581 << " not found!" << endl;
585 TObject * erp = emcrpF->FindObject(name ) ;
589 return (TObjArray **) emcrpF->GetListOfFolders()->GetObjectRef(erp) ;
592 //____________________________________________________________________________
593 TObjArray ** AliPHOSGetter::CpvRecPointsRef(const char * name) const
594 { // -------------- RecPoints -------------------------------------------
596 TFolder * cpvrpF = (TFolder*)gROOT->FindObjectAny("YSAlice/WhiteBoard/RecPoints/PHOS/cpv") ;
599 cerr << "ERROR: AliPHOSGetter::CpvRecPointsRef -> Folder WhiteBoard/RecPoints/PHOS/cpv"
600 << " not found!" << endl;
603 TObject * crp = cpvrpF->FindObject(name ) ;
607 return (TObjArray **) cpvrpF->GetListOfFolders()->GetObjectRef(crp) ;
611 //____________________________________________________________________________
612 Bool_t AliPHOSGetter::PostClusterizer(AliPHOSClusterizer * clu) const
613 { // ------------------ AliPHOSClusterizer ------------------------
615 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
617 // the hierarchy is //YSALICE/tasks/Reconstructionner/PHOS/recpointsname
618 TTask * reF = (TTask*)aliceF->FindObject("tasks/Reconstructioner") ;
620 cerr << "ERROR: AliPHOSGetter::Post Rer -> Task tasks/Reconstructioner" << " not found!" << endl;
624 TTask * phos = (TTask*)reF->GetListOfTasks()->FindObject("PHOS") ;
627 cerr <<"ERROR: AliPHOSGetter::Post Rer -> tasks/Reconstructioner/PHOS" << " not found!" << endl;
630 AliPHOSClusterizer * phoscl = (AliPHOSClusterizer*)phos->GetListOfTasks()->FindObject(clu->GetName()) ;
633 cout << "INFO: AliPHOSGetter::Post Rer -> Task " << clu->GetName() << " already exists" << endl ;
634 phos->GetListOfTasks()->Remove(phoscl) ;
641 //____________________________________________________________________________
642 AliPHOSClusterizer ** AliPHOSGetter::ClusterizerRef(const char * name) const
643 { // ------------------ AliPHOSClusterizer ------------------------
645 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
647 // the hierarchy is //YSALICE/tasks/Reconstructionner/PHOS/recpointsname
648 TTask * reF = (TTask*)aliceF->FindObject("tasks/Reconstructioner") ;
650 cerr << "ERROR: AliPHOSGetter::Post Rer -> Task tasks/Reconstructioner" << " not found!" << endl;
654 TTask * phos = (TTask*)reF->GetListOfTasks()->FindObject("PHOS") ;
657 cerr <<"ERROR: AliPHOSGetter::Post Rer -> tasks/Reconstructioner/PHOS" << " not found!" << endl;
660 TList * l = phos->GetListOfTasks() ;
664 TString cluname(name) ;
666 while((task = (TTask *)it.Next()) ){
667 TString taskname(task->GetName()) ;
668 if(taskname.BeginsWith(cluname)){
675 return (AliPHOSClusterizer **) l->GetObjectRef(clu) ;
680 //____________________________________________________________________________
681 Bool_t AliPHOSGetter::PostClusterizer(const char * name) const
682 { // ------------------ AliPHOSClusterizer ------------------------
684 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
686 // the hierarchy is //YSALICE/tasks/Reconstructionner/PHOS/recpointsname
687 TTask * reF = (TTask*)aliceF->FindObject("tasks/Reconstructioner") ;
689 cerr << "ERROR: AliPHOSGetter::Post Rer -> Task tasks/Reconstructioner" << " not found!" << endl;
693 TTask * phos = (TTask*)reF->GetListOfTasks()->FindObject("PHOS") ;
696 cerr <<"ERROR: AliPHOSGetter::Post Rer -> tasks/Reconstructioner/PHOS" << " not found!" << endl;
699 AliPHOSClusterizer * phoscl = new AliPHOSClusterizerv1() ;
702 phoscl->SetName(clun) ;
707 //____________________________________________________________________________
708 Bool_t AliPHOSGetter::PostTrackSegments(const char * name) const
709 { // ---------------TrackSegments -----------------------------------
711 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
712 // the hierarchy is //YSALICE/WhiteBoard/TrackSegments/PHOS/tracksegmentsname
713 TFolder * tracksegmentsF = (TFolder*)aliceF->FindObject("WhiteBoard/TrackSegments/PHOS") ;
714 tracksegmentsF->SetTitle("") ;
715 if ( !tracksegmentsF) {
716 cerr << "ERROR: AliPHOSGetter::Post T -> Folder WhiteBoard/TrackSegments/PHOS" << " not found!" << endl;
719 TObject * tss = tracksegmentsF->FindObject(name ) ;
721 TClonesArray * ts = new TClonesArray("AliPHOSTrackSegment",100) ;
723 tracksegmentsF->Add(ts) ;
728 //____________________________________________________________________________
729 TClonesArray ** AliPHOSGetter::TrackSegmentsRef(const char * name) const
730 { // ---------------TrackSegments -----------------------------------
732 TFolder * phosF = (TFolder*)gROOT->FindObjectAny("YSAlice/WhiteBoard/TrackSegments/PHOS") ;
734 cerr << "ERROR: AliPHOSGetter::TrackSegmentsRef -> Folder WhiteBoard/TrackSegments/PHOS" << " not found!" << endl;
738 TObject * tss = phosF->FindObject(name) ;
742 return (TClonesArray **) phosF->GetListOfFolders()->GetObjectRef(tss) ;
745 //____________________________________________________________________________
746 Bool_t AliPHOSGetter::PostTrackSegmentMaker(AliPHOSTrackSegmentMaker * tsmaker) const
747 { //------------Track Segment Maker ------------------------------
749 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
751 // the hierarchy is //YSALICE/tasks/Reconstructionner/PHOS/tracksegmentsname
752 TTask * reF = (TTask*)aliceF->FindObject("tasks/Reconstructioner") ;
754 cerr << "ERROR: AliPHOSGetter::Post Ter -> Task tasks/Reconstructioner" << " not found!" << endl;
757 TTask * phos = (TTask*)reF->GetListOfTasks()->FindObject("PHOS") ;
759 cerr <<"ERROR: AliPHOSGetter::Post Ter -> tasks/Reconstructioner/PHOS" << " not found!" << endl;
763 AliPHOSTrackSegmentMaker * phosts =
764 (AliPHOSTrackSegmentMaker*)phos->GetListOfTasks()->FindObject(tsmaker->GetName()) ;
767 phos->GetListOfTasks()->Remove(phosts) ;
773 //____________________________________________________________________________
774 Bool_t AliPHOSGetter::PostTrackSegmentMaker(const char * name) const
775 { //------------Track Segment Maker ------------------------------
777 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
779 // the hierarchy is //YSALICE/tasks/Reconstructionner/PHOS/tracksegmentsname
780 TTask * reF = (TTask*)aliceF->FindObject("tasks/Reconstructioner") ;
782 cerr << "ERROR: AliPHOSGetter::Post Ter -> Task tasks/Reconstructioner" << " not found!" << endl;
785 TTask * phos = (TTask*)reF->GetListOfTasks()->FindObject("PHOS") ;
787 cerr <<"ERROR: AliPHOSGetter::Post Ter -> tasks/Reconstructioner/PHOS" << " not found!" << endl;
790 AliPHOSTrackSegmentMaker * phosts =
791 (AliPHOSTrackSegmentMaker*)phos->GetListOfTasks()->FindObject(name) ;
793 phosts = new AliPHOSTrackSegmentMakerv1() ;
796 phosts->SetName(tsn) ;
802 //____________________________________________________________________________
803 AliPHOSTrackSegmentMaker ** AliPHOSGetter::TSMakerRef(const char * name) const
804 { //------------Track Segment Maker ------------------------------
806 TTask * reF = (TTask*)gROOT->FindObjectAny("YSAlice/tasks/Reconstructioner") ;
808 cerr << "ERROR: AliPHOSGetter::TrackSegmentMakerRef -> Task tasks/Reconstructioner"
809 << " not found!" << endl;
813 TTask * phos = (TTask*)reF->GetListOfTasks()->FindObject("PHOS") ;
815 cerr << "ERROR: AliPHOSGetter::TrackSegmentMakerRef -> Task tasks/Reconstructioner/PHOS"
816 << " not found!" << endl;
819 TList * l = phos->GetListOfTasks() ;
823 TString tsmname(name) ;
825 while((task = (TTask *)it.Next()) ){
826 TString taskname(task->GetName()) ;
827 if(taskname.BeginsWith(tsmname)){
834 return (AliPHOSTrackSegmentMaker **) l->GetObjectRef(tsm) ;
840 //____________________________________________________________________________
841 Bool_t AliPHOSGetter::PostRecParticles(const char * name) const
842 { // -------------------- RecParticles ------------------------
844 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
846 // the hierarchy is //YSALICE/WhiteBoard/RecParticles/PHOS/recparticlesname
847 TFolder * recparticlesF = (TFolder*)aliceF->FindObject("WhiteBoard/RecParticles/PHOS") ;
848 recparticlesF->SetTitle("") ;
849 if ( !recparticlesF) {
850 cerr << "ERROR: AliPHOSGetter::Post P -> Folder WhiteBoard/RecParticles/PHOS" << " not found!" << endl;
853 TObject * rps = recparticlesF->FindObject( name ) ;
855 TClonesArray * rp = new TClonesArray("AliPHOSRecParticle",100) ;
857 recparticlesF->Add(rp) ;
861 //____________________________________________________________________________
862 TClonesArray ** AliPHOSGetter::RecParticlesRef(const char * name) const
863 { // ---------------TrackSegments -----------------------------------
865 TFolder * tsF = (TFolder*)gROOT->FindObjectAny("YSAlice/WhiteBoard/RecParticles/PHOS") ;
867 cerr << "ERROR: AliPHOSGetter::RecParticlesRef -> Folder WhiteBoard/RecParticles/PHOS" << " not found!" << endl;
870 TObject * tss = tsF->FindObject(name ) ;
874 return (TClonesArray **) tsF->GetListOfFolders()->GetObjectRef(tss) ;
877 //____________________________________________________________________________
878 Bool_t AliPHOSGetter::PostPID(AliPHOSPID * pid) const
880 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
882 // ------------AliPHOS PID -----------------------------
883 // the hierarchy is //YSALICE/tasks/Reconstructionner/PHOS/recparticlesname
884 TTask * reF = (TTask*)aliceF->FindObject("tasks/Reconstructioner") ;
886 cerr << "ERROR: AliPHOSGetter::Post Per -> Task tasks/Reconstructioner" << " not found!" << endl;
889 TTask * phos = (TTask*)reF->GetListOfTasks()->FindObject("PHOS") ;
891 cerr <<"ERROR: AliPHOSGetter::Post Per -> tasks/Reconstructioner/PHOS" << " not found!" << endl;
894 AliPHOSPID * phospid = (AliPHOSPID*)phos->GetListOfTasks()->FindObject(pid->GetName()) ;
897 cout << "INFO: AliPHOSGetter::Post Per -> Task " << pid->GetName()
898 << " already exists" << endl ;
899 phos->GetListOfTasks()->Remove(phospid) ;
905 //____________________________________________________________________________
906 Bool_t AliPHOSGetter::PostPID(const char * name) const
908 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
910 // ------------AliPHOS PID -----------------------------
911 // the hierarchy is //YSALICE/tasks/Reconstructionner/PHOS/recparticlesname
912 TTask * reF = (TTask*)aliceF->FindObject("tasks/Reconstructioner") ;
914 cerr << "ERROR: AliPHOSGetter::Post Per -> Task tasks/Reconstructioner" << " not found!" << endl;
917 TTask * phos = (TTask*)reF->GetListOfTasks()->FindObject("PHOS") ;
919 cerr <<"ERROR: AliPHOSGetter::Post Per -> tasks/Reconstructioner/PHOS" << " not found!" << endl;
923 TList * l = phos->GetListOfTasks() ;
925 TString pidname(name) ;
928 while((task = (TTask *)it.Next()) ){
929 TString taskname(task->GetName()) ;
930 if(taskname.BeginsWith(pidname))
934 AliPHOSPIDv1 * phospid = new AliPHOSPIDv1() ;
936 phospid->SetName(pidname) ;
941 //____________________________________________________________________________
942 AliPHOSPID ** AliPHOSGetter::PIDRef(const char * name) const
943 { //------------PID ------------------------------
945 TTask * reF = (TTask*)gROOT->FindObjectAny("YSAlice/tasks/Reconstructioner") ;
947 cerr << "ERROR: AliPHOSGetter::PIDRef -> Task tasks/Reconstructioner"
948 << " not found!" << endl;
952 TTask * phos = (TTask*)reF->GetListOfTasks()->FindObject("PHOS") ;
955 cerr << "ERROR: AliPHOSGetter::PIDRef -> Task tasks/Reconstructioner/PHOS"
956 << " not found!" << endl;
959 TList * l = phos->GetListOfTasks() ;
963 TString pidname(name) ;
965 while((task = (TTask *)it.Next()) ){
966 TString taskname(task->GetName()) ;
967 if(taskname.BeginsWith(pidname)){
974 return (AliPHOSPID **) l->GetObjectRef(pid) ;
980 //____________________________________________________________________________
981 Bool_t AliPHOSGetter::PostQA( const char * name) const
983 TFolder * aliceF = (TFolder*)gROOT->FindObjectAny("YSAlice") ;
985 // ------------------ QA ---------------------------------
986 // the hierarchy is //YSALICE/WhiteBoard/Alarms/PHOS/
988 TFolder * alarmsF = new TFolder() ;
993 alarmsName = "Alarm with no name" ;
994 alarmsF->SetName( alarmsName.Data() ) ;
995 alarmsF->SetTitle("") ;
996 TFolder * qaaF = (TFolder*)aliceF->FindObject("WhiteBoard/QAAlarms") ;
998 cerr << "ERROR: AliPHOSGetter::Post QA -> Folder WhiteBoard/QAAlarms/" << " not found!" << endl;
1001 if ( qaaF->FindObject( alarmsName.Data() ) )
1002 qaaF->RecursiveRemove( qaaF->FindObject( alarmsName.Data() ) ) ;
1004 qaaF->Add(alarmsF) ;
1009 //____________________________________________________________________________
1010 const TParticle * AliPHOSGetter::Primary(Int_t index) const
1012 // Return primary particle numbered by <index>
1017 Int_t primaryIndex = index % 10000000 ;
1018 Int_t primaryList = (Int_t ) ((index-primaryIndex)/10000000.) ;
1020 if ( primaryList > 0 ) {
1021 cout << " Getter does not support currently Mixing of primary " << endl ;
1022 cout << " can not return primary: " << index<< " (list "<< primaryList<< " primary # " << primaryIndex << " )"<<endl ;
1026 return gAlice->Particle(primaryIndex) ;
1030 //____________________________________________________________________________
1031 void AliPHOSGetter::ReadTreeD()
1033 // Read the digit tree gAlice->TreeD()
1034 if(gAlice->TreeD()== 0){
1035 cerr << "ERROR: AliPHOSGetter::ReadTreeD: can not read TreeD " << endl ;
1039 TObjArray * lob = (TObjArray*)gAlice->TreeD()->GetListOfBranches() ;
1041 TBranch * branch = 0 ;
1042 TBranch * digitsbranch = 0 ;
1043 TBranch * digitizerbranch = 0 ;
1044 Bool_t phosfound = kFALSE, digitizerfound = kFALSE ;
1046 while ( (branch = (TBranch*)next()) && (!phosfound || !digitizerfound) ) {
1047 if ( (strcmp(branch->GetName(), "PHOS")==0) && (strcmp(branch->GetTitle(), fDigitsTitle)==0) ) {
1048 digitsbranch = branch ;
1051 else if ( (strcmp(branch->GetName(), "AliPHOSDigitizer")==0) && (strcmp(branch->GetTitle(), fDigitsTitle)==0) ) {
1052 digitizerbranch = branch ;
1053 digitizerfound = kTRUE ;
1057 if ( !phosfound || !digitizerfound ) {
1058 cout << "WARNING: AliPHOSGetter::ReadTreeD -> Cannot find Digits and/or Digitizer with name "
1059 << fDigitsTitle << endl ;
1064 if(!Digits(fDigitsTitle) )
1065 PostDigits(fDigitsTitle);
1066 digitsbranch->SetAddress(DigitsRef(fDigitsTitle)) ;
1067 digitsbranch->GetEntry(0) ;
1070 // read the Digitizer
1071 if(!Digitizer(fDigitsTitle))
1072 PostDigitizer(fDigitsTitle) ;
1073 digitizerbranch->SetAddress(DigitizerRef(fDigitsTitle)) ;
1074 digitizerbranch->GetEntry(0) ;
1079 //____________________________________________________________________________
1080 void AliPHOSGetter::ReadTreeH()
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()->GetBranch("PHOS") ;
1090 if ( !hitsbranch ) {
1091 cout << "WARNING: AliPHOSGetter::ReadTreeH -> Cannot find branch PHOS" << endl ;
1097 hitsbranch->SetAddress(HitsRef()) ;
1099 hitsbranch->GetEntry(0) ;
1103 //____________________________________________________________________________
1104 void AliPHOSGetter::Track(Int_t itrack)
1106 // Read the first entry of PHOS branch in hit tree gAlice->TreeH()
1108 if(gAlice->TreeH()== 0){
1109 cerr << "ERROR: AliPHOSGetter::ReadTreeH: -> Cannot read TreeH " << endl ;
1113 TBranch * hitsbranch = (TBranch*)gAlice->TreeH()->GetListOfBranches()->FindObject("PHOS") ;
1114 if ( !hitsbranch ) {
1115 cout << "WARNING: AliPHOSGetter::ReadTreeH -> Cannot find branch PHOS" << endl ;
1120 hitsbranch->SetAddress(HitsRef()) ;
1121 hitsbranch->GetEntry(itrack) ;
1125 //____________________________________________________________________________
1126 void AliPHOSGetter::ReadTreeQA()
1128 // Read the digit tree gAlice->TreeQA()
1129 // so far only PHOS knows about this Tree
1131 if(PHOS()->TreeQA()== 0){
1132 cerr << "ERROR: AliPHOSGetter::ReadTreeQA: can not read TreeQA " << endl ;
1136 TBranch * qabranch = PHOS()->TreeQA()->GetBranch("PHOS") ;
1138 cout << "WARNING: AliPHOSGetter::ReadTreeQA -> Cannot find QA Alarms for PHOS" << endl ;
1142 // Post the QA Alarms
1144 TFolder * alarmsF = Alarms() ;
1146 qabranch->SetAddress(&alarmsF) ;
1147 qabranch->GetEntry(0) ;
1151 //____________________________________________________________________________
1152 void AliPHOSGetter::ReadTreeR()
1154 // Read the reconstrunction tree gAlice->TreeR()
1156 if(gAlice->TreeR()== 0){
1157 cout << "ERROR: AliPHOSGetter::ReadTreeR: can not read TreeR " << endl ;
1162 TObjArray * lob = (TObjArray*)gAlice->TreeR()->GetListOfBranches() ;
1164 TBranch * branch = 0 ;
1165 TBranch * emcbranch = 0 ;
1166 TBranch * cpvbranch = 0 ;
1167 TBranch * clusterizerbranch = 0 ;
1168 Bool_t phosemcrpfound = kFALSE, phoscpvrpfound = kFALSE, clusterizerfound = kFALSE ;
1170 while ( (branch = (TBranch*)next()) && (!phosemcrpfound || !phoscpvrpfound || !clusterizerfound) )
1171 if(strcmp(branch->GetTitle(), fRecPointsTitle)==0) {
1172 if ( strcmp(branch->GetName(), "PHOSEmcRP")==0) {
1173 emcbranch = branch ;
1174 phosemcrpfound = kTRUE ;
1176 else if ( strcmp(branch->GetName(), "PHOSCpvRP")==0) {
1177 cpvbranch = branch ;
1178 phoscpvrpfound = kTRUE ;
1180 else if(strcmp(branch->GetName(), "AliPHOSClusterizer")==0){
1181 clusterizerbranch = branch ;
1182 clusterizerfound = kTRUE ;
1186 if ( !phosemcrpfound ) {
1187 cout << "WARNING: AliPHOSGetter::ReadTreeR -> Cannot find EmcRecPoints with title "
1188 << fRecPointsTitle << endl ;
1191 if ( !phoscpvrpfound ) {
1192 cout << "WARNING: AliPHOSGetter::ReadTreeR -> Cannot find CpvRecPoints with title "
1193 << fRecPointsTitle << endl ;
1196 if ( !clusterizerfound ) {
1197 cout << "WARNING: AliPHOSGetter::ReadTreeR -> Can not find Clusterizer with title "
1198 << fRecPointsTitle << endl ;
1202 // Read and Post the RecPoints
1203 if(!EmcRecPoints(fRecPointsTitle) )
1204 PostRecPoints(fRecPointsTitle) ;
1205 emcbranch->SetAddress(EmcRecPointsRef(fRecPointsTitle)) ;
1206 emcbranch->GetEntry(0) ;
1208 cpvbranch->SetAddress(CpvRecPointsRef(fRecPointsTitle)) ;
1209 cpvbranch->GetEntry(0) ;
1211 if(!Clusterizer(fRecPointsTitle) )
1212 PostClusterizer(fRecPointsTitle) ;
1213 clusterizerbranch->SetAddress(ClusterizerRef(fRecPointsTitle)) ;
1214 clusterizerbranch->GetEntry(0) ;
1217 //------------------- TrackSegments ---------------------
1219 TBranch * tsbranch = 0 ;
1220 TBranch * tsmakerbranch = 0 ;
1221 Bool_t phostsfound = kFALSE, tsmakerfound = kFALSE ;
1223 while ( (branch = (TBranch*)next()) && (!phostsfound || !tsmakerfound) )
1224 if(strcmp(branch->GetTitle(), fTrackSegmentsTitle)==0) {
1225 if ( strcmp(branch->GetName(), "PHOSTS")==0){
1227 phostsfound = kTRUE ;
1229 else if(strcmp(branch->GetName(), "AliPHOSTrackSegmentMaker")==0) {
1230 tsmakerbranch = branch ;
1231 tsmakerfound = kTRUE ;
1235 if ( !phostsfound || !tsmakerfound ) {
1236 cout << "WARNING: AliPHOSGetter::ReadTreeR -> Cannot find TrackSegments and/or TrackSegmentMaker with name "
1237 << fTrackSegmentsTitle << endl ;
1241 // Read and Post the TrackSegments
1242 if(!TrackSegments(fTrackSegmentsTitle))
1243 PostTrackSegments(fTrackSegmentsTitle) ;
1244 tsbranch->SetAddress(TrackSegmentsRef(fTrackSegmentsTitle)) ;
1245 tsbranch->GetEntry(0) ;
1247 // Read and Post the TrackSegment Maker
1248 if(!TrackSegmentMaker(fTrackSegmentsTitle))
1249 PostTrackSegmentMaker(fTrackSegmentsTitle) ;
1250 tsmakerbranch->SetAddress(TSMakerRef(fTrackSegmentsTitle)) ;
1251 tsmakerbranch->GetEntry(0) ;
1254 //------------ RecParticles ----------------------------
1256 TBranch * rpabranch = 0 ;
1257 TBranch * pidbranch = 0 ;
1258 Bool_t phosrpafound = kFALSE, pidfound = kFALSE ;
1260 while ( (branch = (TBranch*)next()) && (!phosrpafound || !pidfound) )
1261 if(strcmp(branch->GetTitle(), fRecParticlesTitle)==0) {
1262 if ( strcmp(branch->GetName(), "PHOSRP")==0) {
1263 rpabranch = branch ;
1264 phosrpafound = kTRUE ;
1266 else if (strcmp(branch->GetName(), "AliPHOSPID")==0) {
1267 pidbranch = branch ;
1272 if ( !phosrpafound || !pidfound ) {
1273 cout << "WARNING: AliPHOSGetter::ReadTreeR -> Cannot find RecParticles and/or PID with name "
1274 << fRecParticlesTitle << endl ;
1278 // Read and Post the RecParticles
1279 if(!RecParticles(fRecParticlesTitle))
1280 PostRecParticles(fRecParticlesTitle) ;
1281 rpabranch->SetAddress(RecParticlesRef(fRecParticlesTitle)) ;
1282 rpabranch->GetEntry(0) ;
1284 // Read and Post the PID
1285 if(!PID(fRecParticlesTitle))
1286 PostPID(fRecParticlesTitle) ;
1287 pidbranch->SetAddress(PIDRef(fRecParticlesTitle)) ;
1288 pidbranch->GetEntry(0) ;
1293 //____________________________________________________________________________
1294 void AliPHOSGetter::ReadTreeS(Int_t event)
1296 // Read the summable digits tree gAlice->TreeS()
1298 // loop over all opened files and read their SDigits to the White Board
1299 TFolder * phosF = (TFolder *)gROOT->FindObjectAny("YSAlice/WhiteBoard/SDigits/PHOS") ;
1300 TCollection * folderslist = phosF->GetListOfFolders() ;
1302 //Add current file to list if it is not there yet
1303 if ( (fHeaderFile != "aliroot") && ( !folderslist->Contains(fHeaderFile) ) ){
1304 phosF->AddFolder(fHeaderFile, "");
1305 folderslist = phosF->GetListOfFolders() ;
1308 TIter next(folderslist) ;
1309 TFolder * folder = 0 ;
1312 while ( (folder = (TFolder*)next()) ) {
1313 if(fHeaderFile.CompareTo(folder->GetName()) == 0 )
1314 treeS=gAlice->TreeS() ;
1316 file = (TFile*)gROOT->GetFile(folder->GetName());
1319 // Get SDigits Tree header from file
1320 TString treeName("TreeS") ;
1322 treeS = (TTree*)gDirectory->Get(treeName.Data());
1325 cerr << "ERROR: AliPHOSGetter::ReadTreeS There is no SDigit Tree" << endl;
1329 //set address of the SDigits and SDigitizer
1330 TBranch * sdigitsBranch = 0;
1331 TBranch * sdigitizerBranch = 0;
1332 TBranch * branch = 0 ;
1333 TObjArray * lob = (TObjArray*)treeS->GetListOfBranches() ;
1335 Bool_t phosfound = kFALSE, sdigitizerfound = kFALSE ;
1337 while ( (branch = (TBranch*)next()) && (!phosfound || !sdigitizerfound) ) {
1338 if ( (strcmp(branch->GetName(), "PHOS")==0) && (strcmp(branch->GetTitle(), fSDigitsTitle)==0) ) {
1340 sdigitsBranch = branch ;
1343 else if ( (strcmp(branch->GetName(), "AliPHOSSDigitizer")==0) && (strcmp(branch->GetTitle(), fSDigitsTitle)==0) ) {
1344 sdigitizerfound = kTRUE ;
1345 sdigitizerBranch = branch ;
1348 if ( !phosfound || !sdigitizerfound ) {
1349 cout << "WARNING: AliPHOSDigitizer::ReadSDigits -> Digits and/or Digitizer branch with name " << GetName()
1350 << " not found" << endl ;
1354 if ( !folder->FindObject(fSDigitsTitle) )
1355 PostSDigits(fSDigitsTitle,folder->GetName()) ;
1356 sdigitsBranch->SetAddress(SDigitsRef(fSDigitsTitle,folder->GetName())) ;
1357 sdigitsBranch->GetEntry(0) ;
1359 TString sdname(fSDigitsTitle) ;
1361 sdname+=folder->GetName() ;
1362 if(!SDigitizer(sdname) )
1363 PostSDigitizer(fSDigitsTitle,folder->GetName()) ;
1364 sdigitizerBranch->SetAddress(SDigitizerRef(sdname)) ;
1365 sdigitizerBranch->GetEntry(0) ;
1369 // After SDigits have been read from all files, return to the first one
1372 folder = (TFolder*)next();
1374 file = (TFile*)gROOT->GetFile(folder->GetName());
1379 //____________________________________________________________________________
1380 void AliPHOSGetter::ReadTreeS(TTree * treeS, Int_t input)
1381 { // Read the summable digits fron treeS()
1383 TString filename("mergefile") ;
1385 TFolder * phosF =(TFolder*)gROOT->FindObjectAny("YSAlice/WhiteBoard/SDigits/PHOS") ;
1386 TFolder * folder=(TFolder*)phosF->FindObject(filename) ;
1387 //set address of the SDigits and SDigitizer
1388 TBranch * sdigitsBranch = 0;
1389 TBranch * sdigitizerBranch = 0;
1390 TBranch * branch = 0 ;
1391 TObjArray * lob = (TObjArray*)treeS->GetListOfBranches() ;
1393 Bool_t phosfound = kFALSE, sdigitizerfound = kFALSE ;
1395 while ( (branch = (TBranch*)next()) && (!phosfound || !sdigitizerfound) ) {
1396 if ( strcmp(branch->GetName(), "PHOS")==0) {
1398 sdigitsBranch = branch ;
1401 else if ( strcmp(branch->GetName(), "AliPHOSSDigitizer")==0) {
1402 sdigitizerfound = kTRUE ;
1403 sdigitizerBranch = branch ;
1406 if ( !phosfound || !sdigitizerfound ) {
1407 cout << "WARNING: AliPHOSGetter::ReadTreeS -> Digits and/or Digitizer branch not found" << endl ;
1411 if (!folder || !(folder->FindObject(sdigitsBranch->GetTitle()) ) )
1412 PostSDigits(sdigitsBranch->GetTitle(),filename) ;
1414 sdigitsBranch->SetAddress(SDigitsRef(sdigitsBranch->GetTitle(),filename)) ;
1416 TString sdname(sdigitsBranch->GetTitle()) ;
1419 if(!SDigitizer(sdigitsBranch->GetTitle()) )
1420 PostSDigitizer(sdigitsBranch->GetTitle(),filename) ;
1421 sdigitizerBranch->SetAddress(SDigitizerRef(sdname)) ;
1423 sdigitsBranch->GetEntry(0) ;
1424 sdigitizerBranch->GetEntry(0) ;
1429 //____________________________________________________________________________
1430 void AliPHOSGetter::ReadPrimaries()
1432 // Reads specific branches of primaries
1434 fNPrimaries = gAlice->GetNtrack();
1436 // //Check, is it necessary to open new files
1437 // TArrayI* events = fDigitizer->GetCurrentEvents() ;
1438 // TClonesArray * filenames = fDigitizer->GetHeadersFiles() ;
1440 // for(input = 0; input < filenames->GetEntriesFast(); input++){
1442 // TObjString * filename = (TObjString *) filenames->At(input) ;
1444 // //Test, if this file already open
1445 // TFile *file = (TFile*) gROOT->GetFile( filename->GetString() ) ;
1447 // file = new TFile( filename->GetString()) ;
1450 // // Get Kine Tree from file
1451 // // char treeName[20];
1452 // // sprintf(treeName,"TreeK%d",events->At(input));
1453 // // TTree * treeK = (TTree*)gDirectory->Get(treeName);
1455 // // treeK->SetBranchAddress("Particles", &fParticleBuffer);
1457 // // cout << "AliPHOSGetter: cannot find Kine Tree for event:" << events->At(input) << endl;
1459 // // // Create the particle stack
1460 // // if(!fParticles) fParticles = new TClonesArray("TParticle",1000);
1461 // // // Build the pointer list
1462 // // if(fParticleMap) { <----
1463 // // fParticleMap->Clear();
1464 // // fParticleMap->Expand(treeK->GetEntries());
1466 // // fParticleMap = new TObjArray(treeK->GetEntries());
1468 // // From gAlice->Particle(i)
1471 // // if(!(*fParticleMap)[i]) {
1472 // // Int_t nentries = fParticles->GetEntries();
1474 // // // algorithmic way of getting entry index
1475 // // // (primary particles are filled after secondaries)
1477 // // if (i<fHeader.GetNprimary())
1478 // // entry = i+fHeader.GetNsecondary();
1480 // // entry = i-fHeader.GetNprimary();
1482 // // // only check the algorithmic way and give
1483 // // // the fatal error if it is wrong
1484 // // if (entry != fParticleFileMap[i]) {
1485 // // Fatal("Particle",
1486 // // "!!!! The algorithmic way is WRONG: !!!\n entry: %d map: %d",
1487 // // entry, fParticleFileMap[i]);
1490 // // fTreeK->GetEntry(fParticleFileMap[i]);
1491 // // new ((*fParticles)[nentries]) TParticle(*fParticleBuffer);
1492 // // fParticleMap->AddAt((*fParticles)[nentries],i);
1494 // // return (TParticle *) (*fParticleMap)[i];
1501 // //scan over opened files and read corresponding TreeK##
1505 //____________________________________________________________________________
1506 void AliPHOSGetter::Event(Int_t event, const char* opt)
1508 // Reads the content of all Tree's S, D and R
1510 if ( event > gAlice->TreeE()->GetEntries() ) {
1511 cerr << "ERROR: AliPHOSGetter::Event -> There are only "
1512 << gAlice->TreeE()->GetEntries() << " events in this file" << endl ;
1516 gAlice->GetEvent(event) ;
1518 if(strstr(opt,"H") )
1521 if(strstr(opt,"S") )
1524 if( strstr(opt,"D") )
1527 if( strstr(opt,"R") )
1530 if( strstr(opt,"Q") )
1533 if( strstr(opt,"P") )
1538 //____________________________________________________________________________
1539 const TObject * AliPHOSGetter::ReturnO(TString what, TString name, TString file) const
1541 // get the object named "what" from the folder
1542 // folders are named like //YSAlice/WhiteBoard/what/PHOS/name
1544 if ( file.IsNull() )
1545 file = fHeaderFile ;
1546 TString path("WhiteBoard/") ;
1547 if ( name.IsNull() ) {
1548 if ( what.CompareTo("Hits") == 0 ) {
1553 else if ( what.CompareTo("SDigits") == 0 ) {
1558 path += fSDigitsTitle ;
1560 else if ( what.CompareTo("Digits") == 0 ){
1563 path += fDigitsTitle ;
1565 else if ( what.CompareTo("EmcRecPoints") == 0 ) {
1566 path += "RecPoints/PHOS/";
1568 path += fRecPointsTitle ;
1570 else if ( what.CompareTo("CpvRecPoints") == 0 ) {
1571 path += "RecPoints/PHOS/";
1573 path += fRecPointsTitle ;
1575 else if ( what.CompareTo("TrackSegments") == 0 ) {
1576 path += "TrackSegments/PHOS/";
1577 path += fTrackSegmentsTitle ;
1579 else if ( what.CompareTo("RecParticles") == 0 ) {
1580 path += "RecParticles/PHOS/";
1581 path += fRecParticlesTitle ;
1583 else if ( what.CompareTo("Alarms") == 0 ) {
1584 path += "QAAlarms/PHOS";
1588 if ( what.CompareTo("SDigits") == 0 ) {
1595 else if ( what.CompareTo("Digits") == 0 ) {
1600 else if ( what.CompareTo("EmcRecPoints") == 0 ) {
1601 path += "RecPoints/PHOS/";
1605 else if ( what.CompareTo("CpvRecPoints") == 0 ) {
1606 path += "RecPoints/PHOS/";
1610 else if ( what.CompareTo("TrackSegments") == 0 ) {
1611 path += "TrackSegments/PHOS/";
1614 else if ( what.CompareTo("RecParticles") == 0 ) {
1615 path += "RecParticles/PHOS/";
1618 else if ( what.CompareTo("Alarms") == 0 ) {
1619 path += "QAAlarms/PHOS/";
1623 path.Prepend("YSAlice/") ;
1624 TObject * phosO = (TObject*)gROOT->FindObjectAny(path) ;
1627 cerr << "ERROR : AliPHOSGetter::ReturnO -> Object " << path << " not found!" << endl ;
1633 //____________________________________________________________________________
1634 const TTask * AliPHOSGetter::ReturnT(TString what, TString name) const
1636 // get the TTask named "what" from the folder
1637 // folders are named like //YSAlice/Tasks/what/PHOS/name
1639 TString path("tasks") ;
1641 if ( what.CompareTo("SDigitizer") == 0 )
1642 path += "/SDigitizer" ;
1643 else if ( what.CompareTo("Digitizer") == 0 )
1644 path += "/Digitizer" ;
1645 else if ( what.CompareTo("Clusterizer") == 0 )
1646 path += "/Reconstructioner" ;
1647 else if ( what.CompareTo("TrackSegmentMaker") == 0 )
1648 path += "/Reconstructioner" ;
1649 else if ( what.CompareTo("PID") == 0 )
1650 path += "/Reconstructioner" ;
1651 else if ( what.CompareTo("QATasks") == 0 )
1654 TFolder * aliceF = (TFolder*)gROOT ->FindObjectAny("YSAlice") ;
1655 TTask * aliceT = (TTask*) aliceF->FindObject(path) ;
1658 cerr << "ERROR: AliPHOSGetter::ReturnT -> Task " << path << " not found!" << endl ;
1662 TTask * phosT = (TTask*) aliceT->GetListOfTasks()->FindObject("PHOS") ;
1664 cerr << "ERROR: AliPHOSGetter::ReturnT -> Task " << path << "/PHOS not found!" << endl ;
1667 TList * l = phosT->GetListOfTasks() ;
1669 if (what.CompareTo("SDigitizer") == 0) {
1670 if ( name.IsNull() )
1671 name = fSDigitsTitle ;
1672 } else if (what.CompareTo("Digitizer") == 0){
1673 if ( name.IsNull() )
1674 name = fDigitsTitle ;
1675 } else if (what.CompareTo("Clusterizer") == 0){
1676 if ( name.IsNull() )
1677 name = fRecPointsTitle ;
1678 name.Append(":clu") ;
1680 else if (what.CompareTo("TrackSegmentMaker") == 0){
1681 if ( name.IsNull() )
1682 name = fTrackSegmentsTitle ;
1683 name.Append(":tsm") ;
1685 else if (what.CompareTo("PID") == 0){
1686 if ( name.IsNull() )
1687 name = fRecParticlesTitle ;
1688 name.Append(":pid") ;
1690 else if (what.CompareTo("QATasks") == 0){
1691 if ( name.IsNull() )
1697 while((task = (TTask *)it.Next()) ){
1698 TString taskname(task->GetName()) ;
1699 if(taskname.BeginsWith(name))
1704 cout << "WARNING: AliPHOSGetter::ReturnT -> Task " << path << "/" << name << " not found!" << endl ;