]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PHOS/AliPHOSPIDv0.cxx
fADCValuesHigh4x4 is not persistent
[u/mrichter/AliRoot.git] / PHOS / AliPHOSPIDv0.cxx
index 4f601c2073e8c95d2718e22377fd7322968d7cfb..2516937dbeb8f21e3901fe19831de2f1ec17ceb1 100644 (file)
 
 /* $Id$ */
 
+/* History of cvs commits:
+ *
+ * $Log$
+ */
+
 //_________________________________________________________________________
 // Implementation version v0 of the PHOS particle identifier 
 // Particle identification based on the 
 //            Completely redesined by Dmitri Peressounko, March 2001
 
 // --- ROOT system ---
-#include "TROOT.h"
 #include "TTree.h"
-#include "TFile.h"
 #include "TF2.h"
 #include "TFormula.h"
 #include "TCanvas.h"
-#include "TFolder.h"
-#include "TSystem.h"
+
 #include "TBenchmark.h"
 // --- Standard library ---
 
-#include <iostream.h>
-#include <iomanip.h>
-
 // --- AliRoot header files ---
-
+#include "AliLog.h"
 #include "AliRun.h"
 #include "AliGenerator.h"
-#include "AliPHOS.h"
 #include "AliPHOSPIDv0.h"
-#include "AliPHOSClusterizerv1.h"
+#include "AliPHOSEmcRecPoint.h"
 #include "AliPHOSTrackSegment.h"
-#include "AliPHOSTrackSegmentMakerv1.h"
 #include "AliPHOSRecParticle.h"
 #include "AliPHOSGeometry.h"
-#include "AliPHOSGetter.h"
+#include "AliPHOSLoader.h"
 
 ClassImp( AliPHOSPIDv0) 
 
@@ -94,7 +91,7 @@ AliPHOSPIDv0::AliPHOSPIDv0():AliPHOSPID()
   fDispersion        = 0. ; 
   fCpvEmcDistance    = 0 ; 
   fTimeGate          = 2.e-9 ;
-  fHeaderFileName    = "" ; 
+  fEventFolderName    = "" ; 
   fTrackSegmentsTitle= "" ; 
   fRecPointsTitle    = "" ; 
   fRecParticlesTitle = "" ; 
@@ -105,7 +102,7 @@ AliPHOSPIDv0::AliPHOSPIDv0():AliPHOSPID()
 }
 
 //____________________________________________________________________________
-AliPHOSPIDv0::AliPHOSPIDv0(const char * headerFile,const char * name, const Bool_t toSplit) : AliPHOSPID(headerFile, name,toSplit)
+AliPHOSPIDv0::AliPHOSPIDv0(const char * evFolderName,const char * name) : AliPHOSPID(evFolderName, name)
 { 
   //ctor with the indication on where to look for the track segments
 
@@ -114,16 +111,12 @@ AliPHOSPIDv0::AliPHOSPIDv0(const char * headerFile,const char * name, const Bool
   fCpvEmcDistance = 3.0 ;
   fTimeGate          = 2.e-9 ;
  
-  fHeaderFileName     = GetTitle() ; 
-  fTrackSegmentsTitle = GetName() ; 
-  fRecPointsTitle     = GetName() ; 
-  fRecParticlesTitle  = GetName() ; 
+  fEventFolderName     = GetTitle() ; 
+  fTrackSegmentsTitle = GetName();
+  fRecPointsTitle     = GetName();
+  fRecParticlesTitle  = GetName();
   fIDOptions          = "dis time" ;
     
-  TString tempo(GetName()) ; 
-  tempo.Append(":") ;
-  tempo.Append(Version()) ; 
-  SetName(tempo) ; 
   fRecParticlesInRun = 0 ; 
 
   Init() ;
@@ -140,7 +133,7 @@ Float_t  AliPHOSPIDv0::GetDistance(AliPHOSEmcRecPoint * emc,AliPHOSRecPoint * cp
 {
   // Calculates the distance between the EMC RecPoint and the PPSD RecPoint
  
-  const AliPHOSGeometry * geom = AliPHOSGetter::GetInstance()->PHOSGeometry() ; 
+  const AliPHOSGeometry * geom = AliPHOSLoader::GetPHOSGeometry() ; 
   TVector3 vecEmc ;
   TVector3 vecCpv ;
   
@@ -175,47 +168,41 @@ void  AliPHOSPIDv0::Exec(Option_t * option)
     gBenchmark->Start("PHOSPID");
   
   if(strstr(option,"print")) {
-    Print("") ; 
+    Print() ; 
     return ; 
   }
 
-  AliPHOSGetter * gime = AliPHOSGetter::GetInstance() ; 
+  AliRunLoader* runget = AliRunLoader::GetRunLoader(GetTitle());
+  if(runget == 0x0) 
+   {
+     AliError(Form("Can not find run getter in event folder \"%s\"",
+                  GetTitle()));
+     return;
+   }
+  
+  AliPHOSLoader* gime = dynamic_cast<AliPHOSLoader*>(runget->GetLoader("PHOSLoader"));
+  if ( gime == 0 ) 
+   {
+     AliError("Could not obtain the Loader object !"); 
+     return ;
+   } 
+
   if(gime->BranchExists("RecParticles") )
     return ;
 
-//   gAlice->GetEvent(0) ;
-//   //check, if the branch with name of this" already exits?
-//   TObjArray * lob = (TObjArray*)gAlice->TreeR()->GetListOfBranches() ;
-//   TIter next(lob) ; 
-//   TBranch * branch = 0 ;  
-//   Bool_t phospidfound = kFALSE, pidfound = kFALSE ; 
   
-//   TString taskName(GetName()) ; 
-//   taskName.Remove(taskName.Index(Version())-1) ;
+  Int_t nevents = runget->GetNumberOfEvents() ;       //(Int_t) gAlice->TreeE()->GetEntries() ;
 
-//   while ( (branch = (TBranch*)next()) && (!phospidfound || !pidfound) ) {
-//     if ( (strcmp(branch->GetName(), "PHOSPID")==0) && (strcmp(branch->GetTitle(), taskName.Data())==0) ) 
-//       phospidfound = kTRUE ;
-    
-//     else if ( (strcmp(branch->GetName(), "AliPHOSPID")==0) && (strcmp(branch->GetTitle(), taskName.Data())==0) ) 
-//       pidfound = kTRUE ; 
-//   }
-
-//   if ( phospidfound || pidfound ) {
-//     cerr << "WARNING: AliPHOSPIDv0::Exec -> RecParticles and/or PIDtMaker branch with name " 
-//      << taskName.Data() << " already exits" << endl ;
-//     return ; 
-//   }       
-  
-  Int_t nevents = gime->MaxEvent() ;       //(Int_t) gAlice->TreeE()->GetEntries() ;
   Int_t ievent ;
   
   for(ievent = 0; ievent < nevents; ievent++){
-    gime->Event(ievent,"R") ;
-    cout << "event " << ievent << " " << gime->EmcRecPoints() << " " << gime->TrackSegments() << endl ;
+    runget->GetEvent(ievent);
+    AliInfo(Form("event %d %d %d", 
+                ievent, gime->EmcRecPoints(), 
+                gime->TrackSegments())) ;
     MakeRecParticles() ;
     
-    WriteRecParticles(ievent);
+    WriteRecParticles();
     
     if(strstr(option,"deb"))
       PrintRecParticles(option) ;
@@ -227,10 +214,9 @@ void  AliPHOSPIDv0::Exec(Option_t * option)
   
   if(strstr(option,"tim")){
     gBenchmark->Stop("PHOSPID");
-    cout << "AliPHOSPID:" << endl ;
-    cout << "  took " << gBenchmark->GetCpuTime("PHOSPID") << " seconds for PID " 
-        <<  gBenchmark->GetCpuTime("PHOSPID")/nevents << " seconds per event " << endl ;
-    cout << endl ;
+    AliInfo(Form("took %f seconds for PID %f seconds per event", 
+                gBenchmark->GetCpuTime("PHOSPID"), 
+                gBenchmark->GetCpuTime("PHOSPID")/nevents)) ; 
   }
   
 }
@@ -240,57 +226,54 @@ void AliPHOSPIDv0::Init()
   // Make all memory allocations that are not possible in default constructor
   // Add the PID task to the list of PHOS tasks
   
-  if ( strcmp(GetTitle(), "") == 0 )
-    SetTitle("galice.root") ;
-  
-  TString taskName(GetName()) ; 
-  taskName.Remove(taskName.Index(Version())-1) ;
-  
-  AliPHOSGetter * gime = AliPHOSGetter::GetInstance(GetTitle(), taskName.Data(),fToSplit) ; 
-  if ( gime == 0 ) {
-    cerr << "ERROR: AliPHOSPIDv0::Init -> Could not obtain the Getter object !" << endl ; 
-    return ;
-  } 
+  AliRunLoader* runget = AliRunLoader::GetRunLoader(GetTitle());
+  if(runget == 0x0) 
+   {
+     AliError(Form("Can not find run getter in event folder \"%s\"",
+                  GetTitle()));
+     return;
+   }
+  
+  AliPHOSLoader* gime = dynamic_cast<AliPHOSLoader*>(runget->GetLoader("PHOSLoader"));
+  if ( gime == 0 ) 
+   {
+     AliError("Could not obtain the Loader object !"); 
+     return ;
+   } 
    
-  fSplitFile = 0 ;
-  if(fToSplit){
-    //First - extract full path if necessary
-    TString fileName(GetTitle()) ;
-    Ssiz_t islash = fileName.Last('/') ;
-    if(islash<fileName.Length())
-      fileName.Remove(islash+1,fileName.Length()) ;
-    else
-      fileName="" ;
-    fileName+="PHOS.RecData." ;
-    if((strcmp(taskName.Data(),"Default")!=0)&&(strcmp(taskName.Data(),"")!=0)){
-      fileName+=taskName ;
-      fileName+="." ;
-    }
-    fileName+="root" ;
-    fSplitFile = static_cast<TFile*>(gROOT->GetFile(fileName.Data()));   
-    if(!fSplitFile)
-      fSplitFile =  TFile::Open(fileName.Data(),"update") ;
-  }
-
-
-  gime->PostPID(this) ;
-  // create a folder on the white board //YSAlice/WhiteBoard/RecParticles/PHOS/recparticlesName
-  gime->PostRecParticles(taskName.Data() ) ; 
+  gime->PostPID(this);
+  gime->LoadRecParticles("UPDATE");
   
 }
 
 //____________________________________________________________________________
-void  AliPHOSPIDv0::MakeRecParticles(){
+void  AliPHOSPIDv0::MakeRecParticles()
+{
+  // Reconstructs the particles from the tracksegments
 
-  // Makes a RecParticle out of a TrackSegment
   TString taskName(GetName()) ; 
   taskName.Remove(taskName.Index(Version())-1) ;
 
-  AliPHOSGetter * gime = AliPHOSGetter::GetInstance() ; 
-  TObjArray * emcRecPoints = gime->EmcRecPoints(taskName) ; 
-  TObjArray * cpvRecPoints = gime->CpvRecPoints(taskName) ; 
-  TClonesArray * trackSegments = gime->TrackSegments(taskName) ; 
-  TClonesArray * recParticles  = gime->RecParticles(taskName) ; 
+  AliRunLoader* runget = AliRunLoader::GetRunLoader(GetTitle());
+  if(runget == 0x0) 
+   {
+     AliError(Form("Can not find run getter in event folder \"%s\"",
+                  GetTitle()));
+     return;
+   }
+  
+  AliPHOSLoader* gime = dynamic_cast<AliPHOSLoader*>(runget->GetLoader("PHOSLoader"));
+  if ( gime == 0 ) 
+   {
+     AliError("Could not obtain the Loader object !"); 
+     return ;
+   } 
+
+  TObjArray * emcRecPoints = gime->EmcRecPoints() ; 
+  TObjArray * cpvRecPoints = gime->CpvRecPoints() ; 
+  TClonesArray * trackSegments = gime->TrackSegments() ; 
+  TClonesArray * recParticles  = gime->RecParticles() ; 
+
   recParticles->Clear();
   
   TIter next(trackSegments) ; 
@@ -364,30 +347,36 @@ void  AliPHOSPIDv0::MakeRecParticles(){
 }
 
 //____________________________________________________________________________
-void  AliPHOSPIDv0:: Print(Option_t * option) const
+void  AliPHOSPIDv0:: Print(const Option_t *) const
 {
   // Print the parameters used for the particle type identification
-    cout <<  "=============== AliPHOSPID1 ================" << endl ;
-    cout <<  "Making PID "<< endl ;
-    cout <<  "    Headers file:               " << fHeaderFileName.Data() << endl ;
-    cout <<  "    RecPoints branch title:     " << fRecPointsTitle.Data() << endl ;
-    cout <<  "    TrackSegments Branch title: " << fTrackSegmentsTitle.Data() << endl ;
-    cout <<  "    RecParticles Branch title   " << fRecParticlesTitle.Data() << endl;
-    cout <<  "with parameters: " << endl ;
-    cout <<  "    Maximal EMC - CPV  distance (cm) " << fCpvEmcDistance << endl ;
-    if(fIDOptions.Contains("dis",TString::kIgnoreCase ))
-      cout <<  "                    dispersion cut " << fDispersion << endl ;
-    if(fIDOptions.Contains("ell",TString::kIgnoreCase )){
-      cout << "             Eliptic cuts function: " << endl ;
-      cout << fFormula->GetTitle() << endl ;
-    }
-    if(fIDOptions.Contains("tim",TString::kIgnoreCase ))
-      cout << "             Time Gate uzed: " << fTimeGate <<  endl ;
-    cout <<  "============================================" << endl ;
+  TString message ; 
+  message  = "=============== AliPHOSPIDv0 ================\n" ;
+  message += "Making PID\n" ;
+  message += "    Headers file:               %s\n" ; 
+  message += "    RecPoints branch title:     %s\n" ;
+  message += "    TrackSegments Branch title: %s\n" ; 
+  message += "    RecParticles Branch title   %s\n" ;  
+  message += "with parameters:\n"  ;
+  message += "    Maximal EMC - CPV  distance (cm) %f\n" ;
+  AliInfo(Form( message.Data(),  
+       GetTitle(), 
+       fRecPointsTitle.Data(), 
+       fTrackSegmentsTitle.Data(), 
+       fRecParticlesTitle.Data(), 
+       fCpvEmcDistance ));
+
+  if(fIDOptions.Contains("dis",TString::kIgnoreCase ))
+    AliInfo(Form("                    dispersion cut %f",  fDispersion )) ;
+  if(fIDOptions.Contains("ell",TString::kIgnoreCase ))
+    AliInfo(Form("             Eliptic cuts function: %s",  
+                fFormula->GetTitle() )) ;
+  if(fIDOptions.Contains("tim",TString::kIgnoreCase ))
+    AliInfo(Form("             Time Gate used: %f",  fTimeGate)) ;
 }
 
 //____________________________________________________________________________
-void  AliPHOSPIDv0::SetShowerProfileCut(char * formula)
+void  AliPHOSPIDv0::SetShowerProfileCut(const char * formula)
 {
   //set shape of the cut on the axis of ellipce, drown around shouer
   //shower considered "narrow" if Formula(lambda[0],lambda[1]) > 0.
@@ -396,77 +385,52 @@ void  AliPHOSPIDv0::SetShowerProfileCut(char * formula)
   fFormula = new TFormula("Lambda Cut",formula) ;
 }
 //____________________________________________________________________________
-void  AliPHOSPIDv0::WriteRecParticles(Int_t event)
+void  AliPHOSPIDv0::WriteRecParticles()
 {
+  // Saves the reconstructed particles too a file
  
-  AliPHOSGetter *gime = AliPHOSGetter::GetInstance() ; 
-  TString taskName(GetName()) ; 
-  taskName.Remove(taskName.Index(Version())-1) ;
-  TClonesArray * recParticles = gime->RecParticles(taskName) ; 
+  AliRunLoader* runget = AliRunLoader::GetRunLoader(GetTitle());
+  if(runget == 0x0) 
+   {
+     AliError(Form("Can not find run getter in event folder \"%s\"",
+                  GetTitle()));
+     return;
+   }
+  
+  AliPHOSLoader* gime = dynamic_cast<AliPHOSLoader*>(runget->GetLoader("PHOSLoader"));
+  if ( gime == 0 ) 
+   {
+     AliError("Could not obtain the Loader object !"); 
+     return ;
+   } 
+
+  TClonesArray * recParticles = gime->RecParticles() ; 
   recParticles->Expand(recParticles->GetEntriesFast() ) ;
 
-  TTree * treeR ;
-  
-  if(fToSplit){
-    if(!fSplitFile)
-      return ;
-    fSplitFile->cd() ;
-    char name[10] ;
-    sprintf(name,"%s%d", "TreeR",event) ;
-    treeR = dynamic_cast<TTree*>(fSplitFile->Get(name)); 
-  }
-  else{
-    treeR = gAlice->TreeR();
-  }
+  TTree * treeR = gime->TreeR();
   
   if(!treeR){
-    gAlice->MakeTree("R", fSplitFile);
-    treeR = gAlice->TreeR() ;
+    gime->MakeTree("R");
+    treeR = gime->TreeR() ;
   }
-
-//  //Make branch in TreeR for RecParticles 
-//   char * filename = 0;
-//   if(gSystem->Getenv("CONFIG_SPLIT_FILE")!=0){   //generating file name
-//     filename = new char[strlen(gAlice->GetBaseFile())+20] ;
-//     sprintf(filename,"%s/PHOS.Reco.root",gAlice->GetBaseFile()) ; 
-//   }
-  
-//   TDirectory *cwd = gDirectory;
   
   //First rp
   Int_t bufferSize = 32000 ;    
   TBranch * rpBranch = treeR->Branch("PHOSRP",&recParticles,bufferSize);
   rpBranch->SetTitle(fRecParticlesTitle);
-//   if (filename) {
-//     rpBranch->SetFile(filename);
-//     TIter next( rpBranch->GetListOfBranches());
-//     TBranch * sb ;
-//     while ((sb=(TBranch*)next())) {
-//       sb->SetFile(filename);
-//     }   
-//     cwd->cd();
-//   }
   
   //second, pid
   Int_t splitlevel = 0 ; 
   AliPHOSPIDv0 * pid = this ;
   TBranch * pidBranch = treeR->Branch("AliPHOSPID","AliPHOSPIDv0",&pid,bufferSize,splitlevel);
   pidBranch->SetTitle(fRecParticlesTitle.Data());
-//   if (filename) {
-//     pidBranch->SetFile(filename);
-//     TIter next( pidBranch->GetListOfBranches());
-//     TBranch * sb ;
-//     while ((sb=(TBranch*)next())) {
-//       sb->SetFile(filename);
-//     }   
-//     cwd->cd();
-//   }    
   
   rpBranch->Fill() ;
   pidBranch->Fill() ;
-  
-  treeR->AutoSave() ; //Write(0,kOverwrite) ;  
-  
+
+  gime->WriteRecParticles("OVERWRITE");
+  gime->WritePID("OVERWRITE");
+
 }
 
 //____________________________________________________________________________
@@ -503,7 +467,7 @@ void  AliPHOSPIDv0::PlotDispersionCuts()const
 }
 
 //____________________________________________________________________________
-TVector3 AliPHOSPIDv0::GetMomentumDirection(AliPHOSEmcRecPoint * emc, AliPHOSRecPoint * cpv)const 
+TVector3 AliPHOSPIDv0::GetMomentumDirection(AliPHOSEmcRecPoint * emc, AliPHOSRecPoint * )const 
 { 
   // Calculates the momentum direction:
   //   1. if only a EMC RecPoint, direction is given by IP and this RecPoint
@@ -552,25 +516,34 @@ void AliPHOSPIDv0::PrintRecParticles(Option_t * option)
 {
   // Print table of reconstructed particles
 
-  AliPHOSGetter *gime = AliPHOSGetter::GetInstance() ; 
+  AliRunLoader* runget = AliRunLoader::GetRunLoader(GetTitle());
+  if(runget == 0x0) 
+   {
+     AliError(Form("Can not find run getter in event folder \"%s\"",
+                  GetTitle()));
+     return;
+   }
+  
+  AliPHOSLoader* gime = dynamic_cast<AliPHOSLoader*>(runget->GetLoader("PHOSLoader"));
+  if ( gime == 0 ) 
+   {
+     AliError("Could not obtain the Loader object !"); 
+     return ;
+   } 
 
   TString taskName(GetName()) ; 
   taskName.Remove(taskName.Index(Version())-1) ;
-  TClonesArray * recParticles = gime->RecParticles(taskName) ; 
-  
-  cout << "AliPHOSPIDv0: event "<<gAlice->GetEvNumber()  << endl ;
-  cout << "       found " << recParticles->GetEntriesFast() << " RecParticles " << endl ;
+  TClonesArray * recParticles = gime->RecParticles() ; 
   
+  TString message ; 
+  message  = "event %d\n" ; 
+  message += "       found %d RecParticles\n" ; 
+  AliInfo(Form(message.Data(), 
+              gAlice->GetEvNumber(), recParticles->GetEntriesFast() )) ;   
+
   if(strstr(option,"all")) {  // printing found TS
-    
-    cout << "  PARTICLE "   
-        << "  Index    "  << endl ;
-      //        << "  X        "     
-      //        << "  Y        " 
-      //        << "  Z        "    
-      //        << " # of primaries "          
-      //        << " Primaries list "    <<  endl;      
-    
+    AliInfo("  PARTICLE   Index"  ) ; 
+   
     Int_t index ;
     for (index = 0 ; index < recParticles->GetEntries() ; index++) {
       AliPHOSRecParticle * rp = (AliPHOSRecParticle * ) recParticles->At(index) ;       
@@ -607,16 +580,10 @@ void AliPHOSPIDv0::PrintRecParticles(Option_t * option)
       //    Int_t nprimaries;
       //    primaries = rp->GetPrimaries(nprimaries);
       
-      cout << setw(10) << particle << "  "
-          << setw(5) <<  rp->GetIndexInList() << " "  ;
-       //         << setw(4) <<  nprimaries << "  ";
-       //      for (Int_t iprimary=0; iprimary<nprimaries; iprimary++)
-       //      cout << setw(4)  <<  primaries[iprimary] << " ";
-      cout << endl;     
+      AliInfo(Form("          %s     %d",  
+                  particle, rp->GetIndexInList())) ;
     }
-    cout << "-------------------------------------------" << endl ;
-  }
-  
+  }  
 }