]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PHOS/AliPHOSGetter.cxx
Inheritance from TObject. Automatic streamers.
[u/mrichter/AliRoot.git] / PHOS / AliPHOSGetter.cxx
index f651e2b655ea09f51cf0411c7c7ecdc339b246b4..3a1b88be4a5c70d5a1f40a90e3eec93f6948aa27 100644 (file)
@@ -83,6 +83,8 @@ AliPHOSGetter::AliPHOSGetter(const char* headerFile, const char* branchTitle )
 {
   //Initialize  all lists
 
+  fDebug = 0 ; 
+  
   fHeaderFile         = headerFile ; 
   fBranchTitle        = branchTitle ;
   fSDigitsTitle       = branchTitle ; 
@@ -226,7 +228,7 @@ Bool_t AliPHOSGetter::PostPrimaries(void) const
 } 
 
 //____________________________________________________________________________ 
-void * AliPHOSGetter::PrimariesRef(void) const 
+TObject** AliPHOSGetter::PrimariesRef(void) const 
 {  //------- Primaries ----------------------
 
   
@@ -248,7 +250,7 @@ void * AliPHOSGetter::PrimariesRef(void) const
     return 0 ;
   }
   else
-    return static_cast<void *>(primariesFolder->GetListOfFolders()->GetObjectRef(p)) ;
+    return primariesFolder->GetListOfFolders()->GetObjectRef(p) ;
 }
 
 //____________________________________________________________________________ 
@@ -273,7 +275,7 @@ Bool_t AliPHOSGetter::PostHits(void) const
 } 
 
 //____________________________________________________________________________ 
-void * AliPHOSGetter::HitsRef(void) const 
+TObject** AliPHOSGetter::HitsRef(void) const 
 {  //------- Hits ----------------------
 
   
@@ -295,7 +297,7 @@ void * AliPHOSGetter::HitsRef(void) const
     return 0 ;
   }
   else
-    return static_cast<void *>(phosFolder->GetListOfFolders()->GetObjectRef(h)) ;
+    return phosFolder->GetListOfFolders()->GetObjectRef(h) ;
 }
 
 //____________________________________________________________________________ 
@@ -315,6 +317,7 @@ Bool_t AliPHOSGetter::PostSDigits(const char * name, const char * headerFile) co
     phosFolder = fSDigitsFolder->AddFolder("PHOS", "SDigits from PHOS") ; 
   }    
   TString subdir(headerFile) ;
+  subdir.ReplaceAll("/","_") ; 
   TFolder * phosSubFolder = dynamic_cast<TFolder*>(phosFolder->FindObject(subdir)) ; 
   if ( !phosSubFolder ) 
     phosSubFolder = phosFolder->AddFolder(subdir, ""); 
@@ -333,7 +336,7 @@ Bool_t AliPHOSGetter::PostSDigits(const char * name, const char * headerFile) co
   return kTRUE;
 } 
 //____________________________________________________________________________ 
-void * AliPHOSGetter::SDigitsRef(const char * name, const char * file) const 
+TObject** AliPHOSGetter::SDigitsRef(const char * name, const char * file) const 
 {  //------- SDigits ----------------------
   
   // the hierarchy is //Folders/RunMC/Event/Data/PHOS/SDigits/filename/SDigits
@@ -364,7 +367,7 @@ void * AliPHOSGetter::SDigitsRef(const char * name, const char * file) const
   if(!dis)
     return 0 ;
   else
-    return static_cast<void *>(phosSubFolder->GetListOfFolders()->GetObjectRef(dis)) ;
+    return phosSubFolder->GetListOfFolders()->GetObjectRef(dis) ;
 
 }
 
@@ -402,7 +405,7 @@ Bool_t AliPHOSGetter::PostSDigitizer(AliPHOSSDigitizer * sdigitizer) const
 }
 
 //____________________________________________________________________________ 
-void * AliPHOSGetter::SDigitizerRef(const char * name) const 
+TObject** AliPHOSGetter::SDigitizerRef(const char * name) const 
 {  
 
   TTask * sd  = dynamic_cast<TTask*>(fTasksFolder->FindObject("SDigitizer")) ; 
@@ -419,7 +422,7 @@ void * AliPHOSGetter::SDigitizerRef(const char * name) const
 
   TTask * task = dynamic_cast<TTask*>(phos->GetListOfTasks()->FindObject(name)) ; 
 
-  return static_cast<void *>(phos->GetListOfTasks()->GetObjectRef(task)) ;
+  return phos->GetListOfTasks()->GetObjectRef(task) ;
 
 }
 
@@ -449,6 +452,7 @@ Bool_t AliPHOSGetter::PostSDigitizer(const char * name, const char * file) const
   TString sdname(name) ;
   sdname.Append(":") ;
   sdname.Append(file);
+  sdname.ReplaceAll("/","_") ; 
   AliPHOSSDigitizer * phossd  = dynamic_cast<AliPHOSSDigitizer *>(phos->GetListOfTasks()->FindObject( sdname )); 
   if (!phossd) {
     phossd = new AliPHOSSDigitizer() ;  
@@ -487,7 +491,7 @@ Bool_t AliPHOSGetter::PostDigits(const char * name) const
 }
 
 //____________________________________________________________________________ 
-void * AliPHOSGetter::DigitsRef(const char * name) const 
+TObject** AliPHOSGetter::DigitsRef(const char * name) const 
 { //------- Digits ----------------------
   
   // the hierarchy is //Folders/Run/Event/Data/PHOS/Digits/name
@@ -507,7 +511,7 @@ void * AliPHOSGetter::DigitsRef(const char * name) const
   if(!d)
     return 0 ;
   else
-    return static_cast<void *>(phosFolder->GetListOfFolders()->GetObjectRef(d)) ;
+    return phosFolder->GetListOfFolders()->GetObjectRef(d) ;
 
 }
 
@@ -573,7 +577,7 @@ Bool_t AliPHOSGetter::PostDigitizer(const char * name) const
 }
 
 //____________________________________________________________________________ 
-void * AliPHOSGetter::DigitizerRef(const char * name) const 
+TObject** AliPHOSGetter::DigitizerRef(const char * name) const 
 {  
   TTask * sd  = dynamic_cast<TTask*>(fTasksFolder->FindObject("Digitizer")) ; 
   if ( !sd ) {
@@ -589,7 +593,7 @@ void * AliPHOSGetter::DigitizerRef(const char * name) const
 
   TTask * task = dynamic_cast<TTask*>(phos->GetListOfTasks()->FindObject(name)) ; 
 
-  return static_cast<void *>(phos->GetListOfTasks()->GetObjectRef(task)) ;
+  return phos->GetListOfTasks()->GetObjectRef(task) ;
 
 }
  
@@ -647,7 +651,7 @@ Bool_t AliPHOSGetter::PostRecPoints(const char * name) const
 }
 
 //____________________________________________________________________________ 
-void * AliPHOSGetter::EmcRecPointsRef(const char * name) const 
+TObject** AliPHOSGetter::EmcRecPointsRef(const char * name) const 
 { // -------------- RecPoints -------------------------------------------
   
   // the hierarchy is //Folders/Run/Event/RecData/PHOS/EMCARecPoints/name
@@ -668,12 +672,12 @@ void * AliPHOSGetter::EmcRecPointsRef(const char * name) const
   if ( !erp )   {
     return 0 ;
   }
-  return static_cast<void *>(phosFolder->GetListOfFolders()->GetObjectRef(erp)) ;
+  return phosFolder->GetListOfFolders()->GetObjectRef(erp) ;
 
 } 
 
 //____________________________________________________________________________ 
-void * AliPHOSGetter::CpvRecPointsRef(const char * name) const 
+TObject** AliPHOSGetter::CpvRecPointsRef(const char * name) const 
 { // -------------- RecPoints -------------------------------------------
   
   // the hierarchy is //Folders/Run/Event/RecData/PHOS/CPVRecPoints/name
@@ -693,7 +697,7 @@ void * AliPHOSGetter::CpvRecPointsRef(const char * name) const
   if ( !crp )   {
     return 0 ;
   }
-  return static_cast<void *>(phosFolder->GetListOfFolders()->GetObjectRef(crp)) ;
+  return phosFolder->GetListOfFolders()->GetObjectRef(crp) ;
 
 } 
 
@@ -732,7 +736,7 @@ Bool_t AliPHOSGetter::PostClusterizer(AliPHOSClusterizer * clu) const
 } 
 
 //____________________________________________________________________________ 
-void * AliPHOSGetter::ClusterizerRef(const char * name) const 
+TObject** AliPHOSGetter::ClusterizerRef(const char * name) const 
 { // ------------------ AliPHOSClusterizer ------------------------
   
   TTask * tasks  = dynamic_cast<TTask*>(fTasksFolder->FindObject("Reconstructioner")) ; 
@@ -763,7 +767,7 @@ void * AliPHOSGetter::ClusterizerRef(const char * name) const
   }
 
   if(clu) 
-    return static_cast<void *>(l->GetObjectRef(clu)) ;
+    return l->GetObjectRef(clu) ;
   else
     return 0 ;
 }
@@ -835,7 +839,7 @@ Bool_t AliPHOSGetter::PostTrackSegments(const char * name) const
 } 
 
 //____________________________________________________________________________ 
-void * AliPHOSGetter::TrackSegmentsRef(const char * name) const 
+TObject** AliPHOSGetter::TrackSegmentsRef(const char * name) const 
 { // ---------------TrackSegments -----------------------------------
   
   // the hierarchy is //Folders/Run/Event/RecData/PHOS/TrackSegments/name
@@ -855,7 +859,7 @@ void * AliPHOSGetter::TrackSegmentsRef(const char * name) const
   if (!tss) {
     return 0 ;  
   }
-  return static_cast<void *>(phosFolder->GetListOfFolders()->GetObjectRef(tss)) ;
+  return phosFolder->GetListOfFolders()->GetObjectRef(tss) ;
 } 
 
 //____________________________________________________________________________ 
@@ -929,7 +933,7 @@ Bool_t AliPHOSGetter::PostTrackSegmentMaker(const char * name) const
 } 
 
 //____________________________________________________________________________ 
-void * AliPHOSGetter::TSMakerRef(const char * name) const 
+TObject** AliPHOSGetter::TSMakerRef(const char * name) const 
 { //------------Track Segment Maker ------------------------------
   
   TTask * tasks  = dynamic_cast<TTask*>(fTasksFolder->FindObject("Reconstructioner")) ; 
@@ -960,7 +964,7 @@ void * AliPHOSGetter::TSMakerRef(const char * name) const
   }
   
   if(tsm) 
-    return static_cast<void *>(l->GetObjectRef(tsm)) ;
+    return l->GetObjectRef(tsm) ;
   else
     return 0 ;
   
@@ -1001,7 +1005,7 @@ Bool_t AliPHOSGetter::PostRecParticles(const char * name) const
 } 
 
 //____________________________________________________________________________ 
-void * AliPHOSGetter::RecParticlesRef(const char * name) const 
+TObject** AliPHOSGetter::RecParticlesRef(const char * name) const 
 { // ---------------TrackSegments -----------------------------------
   
   // the hierarchy is //Folders/Run/Event/RecData/PHOS/TrackSegments/name
@@ -1021,7 +1025,7 @@ void * AliPHOSGetter::RecParticlesRef(const char * name) const
   if (!tss) {
     return 0 ;  
   }
-  return static_cast<void *>(phosFolder->GetListOfFolders()->GetObjectRef(tss)) ;
+  return phosFolder->GetListOfFolders()->GetObjectRef(tss) ;
 }
 
 //____________________________________________________________________________ 
@@ -1099,7 +1103,7 @@ Bool_t AliPHOSGetter::PostPID(const char * name) const
 } 
 
 //____________________________________________________________________________ 
-void * AliPHOSGetter::PIDRef(const char * name) const 
+TObject** AliPHOSGetter::PIDRef(const char * name) const 
 { //------------PID ------------------------------
 
   TTask * tasks  = dynamic_cast<TTask*>(fTasksFolder->FindObject("Reconstructioner")) ; 
@@ -1130,7 +1134,7 @@ void * AliPHOSGetter::PIDRef(const char * name) const
   }
   
   if(pid) 
-    return static_cast<void *>(l->GetObjectRef(pid)) ;
+    return l->GetObjectRef(pid) ;
   else
     return 0 ;
   
@@ -1155,7 +1159,7 @@ Bool_t AliPHOSGetter::PostQA(void) const
 }
 
 //____________________________________________________________________________ 
-void * AliPHOSGetter::AlarmsRef(void) const 
+TObject** AliPHOSGetter::AlarmsRef(void) const 
 {  //------- Alarms ----------------------
 
   
@@ -1171,7 +1175,7 @@ void * AliPHOSGetter::AlarmsRef(void) const
     return 0;
   }
    
-  return static_cast<void *>(fQAFolder->GetListOfFolders()->GetObjectRef(phosFolder)) ;
+  return fQAFolder->GetListOfFolders()->GetObjectRef(phosFolder) ;
 }
 
 //____________________________________________________________________________ 
@@ -1290,10 +1294,27 @@ void AliPHOSGetter::ReadTreeH()
   if(!Hits())
     PostHits() ;
 
-  hitsbranch->SetAddress(HitsRef()) ;
-
-  hitsbranch->GetEntry(0) ;
-
+  if (hitsbranch->GetEntries() > 1 ) {
+    TClonesArray * tempo =  new TClonesArray("AliPHOSHit",1000) ;
+    TClonesArray * hits = dynamic_cast<TClonesArray*>(*HitsRef()) ; 
+    hitsbranch->SetAddress(&tempo) ;
+    Int_t index = 0 ; 
+    Int_t i = 0 ;
+    for (i = 0 ; i < hitsbranch->GetEntries() ; i++) {
+      hitsbranch->GetEntry(i) ;
+      Int_t j = 0 ; 
+      for ( j = 0 ; j < tempo->GetEntries() ; j++) { 
+       const AliPHOSHit * hit = static_cast<const AliPHOSHit *>(tempo->At(j)) ; 
+       new((*hits)[index]) AliPHOSHit( *hit ) ;
+       index++ ; 
+      }
+    }
+    delete tempo ; 
+  }
+  else {
+    hitsbranch->SetAddress(HitsRef()) ;
+    hitsbranch->GetEntry(0) ;
+  }
 }
 
 //____________________________________________________________________________ 
@@ -1314,6 +1335,7 @@ void AliPHOSGetter::Track(Int_t itrack)
   }  
   if(!Hits())
     PostHits() ;
+
   hitsbranch->SetAddress(HitsRef()) ;
   hitsbranch->GetEntry(itrack) ;
 
@@ -1407,16 +1429,18 @@ void AliPHOSGetter::ReadTreeR()
   }   
   
   // Read and Post the RecPoints
-  if(!EmcRecPoints(fRecPointsTitle) )
+  if(!EmcRecPoints(fRecPointsTitle) ) 
     PostRecPoints(fRecPointsTitle) ;
+
   emcbranch->SetAddress(EmcRecPointsRef(fRecPointsTitle)) ;
   emcbranch->GetEntry(0) ;
 
-  cpvbranch->SetAddress(CpvRecPointsRef(fRecPointsTitle)) ;
+  cpvbranch->SetAddress(CpvRecPointsRef(fRecPointsTitle)) ; 
   cpvbranch->GetEntry(0) ;
   
   if(!Clusterizer(fRecPointsTitle) )
     PostClusterizer(fRecPointsTitle) ;
+
   clusterizerbranch->SetAddress(ClusterizerRef(fRecPointsTitle)) ;
   clusterizerbranch->GetEntry(0) ;
  
@@ -1449,12 +1473,14 @@ void AliPHOSGetter::ReadTreeR()
   // Read and Post the TrackSegments
   if(!TrackSegments(fTrackSegmentsTitle))
     PostTrackSegments(fTrackSegmentsTitle) ;
+
   tsbranch->SetAddress(TrackSegmentsRef(fTrackSegmentsTitle)) ;
   tsbranch->GetEntry(0) ;
   
   // Read and Post the TrackSegment Maker
   if(!TrackSegmentMaker(fTrackSegmentsTitle))
     PostTrackSegmentMaker(fTrackSegmentsTitle) ;
   tsmakerbranch->SetAddress(TSMakerRef(fTrackSegmentsTitle)) ;
   tsmakerbranch->GetEntry(0) ;
   
@@ -1487,12 +1513,14 @@ void AliPHOSGetter::ReadTreeR()
   // Read and Post the RecParticles
   if(!RecParticles(fRecParticlesTitle))
     PostRecParticles(fRecParticlesTitle) ;
+
   rpabranch->SetAddress(RecParticlesRef(fRecParticlesTitle)) ;
   rpabranch->GetEntry(0) ;
   
   // Read and Post the PID
   if(!PID(fRecParticlesTitle))
     PostPID(fRecParticlesTitle) ;
+
   pidbranch->SetAddress(PIDRef(fRecParticlesTitle)) ;
   pidbranch->GetEntry(0) ;
   
@@ -1511,8 +1539,12 @@ void AliPHOSGetter::ReadTreeS(Int_t event)
   TCollection * folderslist = phosF->GetListOfFolders() ; 
   
   //Add current file to list if it is not there yet
-  if ( (fHeaderFile != "aliroot") && ( !folderslist->Contains(fHeaderFile) ) ){
-    phosF->AddFolder(fHeaderFile, ""); 
+  
+  TString subdir(fHeaderFile) ;
+  subdir.ReplaceAll("/","_") ; 
+
+  if ( (subdir != "aliroot") && ( !folderslist->Contains(subdir) ) ){
+    phosF->AddFolder(subdir, ""); 
   }
     
   TIter next(folderslist) ; 
@@ -1520,10 +1552,12 @@ void AliPHOSGetter::ReadTreeS(Int_t event)
   TFile * file; 
   TTree * treeS = 0;
   while ( (folder = static_cast<TFolder*>(next())) ) {
-    if(fHeaderFile.CompareTo(folder->GetName()) == 0 ) 
+    TString fileName(folder->GetName()) ; 
+    fileName.ReplaceAll("_","/") ; 
+    if(fHeaderFile.CompareTo(fileName) == 0 ) 
       treeS=gAlice->TreeS() ;
     else{
-      file = static_cast<TFile*>(gROOT->GetFile(folder->GetName())); 
+      file = static_cast<TFile*>(gROOT->GetFile(fileName)); 
       file->cd() ;
       
       // Get SDigits Tree header from file
@@ -1564,6 +1598,7 @@ void AliPHOSGetter::ReadTreeS(Int_t event)
     
     if ( !folder->FindObject(fSDigitsTitle) )  
       PostSDigits(fSDigitsTitle,folder->GetName()) ;
+
     sdigitsBranch->SetAddress(SDigitsRef(fSDigitsTitle,folder->GetName())) ;
     sdigitsBranch->GetEntry(0) ;
     
@@ -1572,6 +1607,7 @@ void AliPHOSGetter::ReadTreeS(Int_t event)
     sdname+=folder->GetName() ;
     if(!SDigitizer(sdname) ) 
       PostSDigitizer(fSDigitsTitle,folder->GetName()) ;
+
     sdigitizerBranch->SetAddress(SDigitizerRef(sdname)) ;
     sdigitizerBranch->GetEntry(0) ;
     
@@ -1582,7 +1618,9 @@ void AliPHOSGetter::ReadTreeS(Int_t event)
   next.Reset();
   folder = static_cast<TFolder*>(next());
   if(folder){
-    file   = static_cast<TFile*>(gROOT->GetFile(folder->GetName())); 
+    TString fileName(folder->GetName()) ; 
+    fileName.ReplaceAll("_","/") ; 
+    file   = static_cast<TFile*>(gROOT->GetFile(fileName)); 
     file   ->cd() ;
   }
   
@@ -1760,7 +1798,7 @@ void AliPHOSGetter::Event(const Int_t event, const char* opt)
     return ; 
   }
   gAlice->GetEvent(event) ; 
+
   if(strstr(opt,"H") )
     ReadTreeH() ;
   
@@ -1776,8 +1814,8 @@ void AliPHOSGetter::Event(const Int_t event, const char* opt)
   if( strstr(opt,"Q") )
     ReadTreeQA() ;
 
-  //  if( strstr(opt,"P") || (strcmp(opt,"")==0) )
-  //  ReadPrimaries() ;
+    if( strstr(opt,"P") || (strcmp(opt,"")==0) )
+    ReadPrimaries() ;
 
 }
 
@@ -1804,8 +1842,9 @@ TObject * AliPHOSGetter::ReturnO(TString what, TString name, TString file) const
     if (folder) 
       phosO  = dynamic_cast<TObject *>(folder->FindObject("Hits")) ;  
   }
-  else if ( what.CompareTo("SDigits") == 0 ) { 
-    TString path = "PHOS/" + file  ; 
+  else if ( what.CompareTo("SDigits") == 0 ) {
+    file.ReplaceAll("/","_") ; 
+    TString path = "PHOS/" + file  ;
     folder = dynamic_cast<TFolder *>(fSDigitsFolder->FindObject(path.Data())) ; 
     if (folder) { 
       if (name.IsNull())