#include "TBenchmark.h"
// --- Standard library ---
-#include <iostream.h>
-#include <iomanip.h>
-
// --- AliRoot header files ---
#include "AliRun.h"
#include "AliGenerator.h"
#include "AliPHOS.h"
#include "AliPHOSPIDv0.h"
+#include "AliPHOSEmcRecPoint.h"
#include "AliPHOSClusterizerv1.h"
#include "AliPHOSTrackSegment.h"
#include "AliPHOSTrackSegmentMakerv1.h"
#include "AliPHOSRecParticle.h"
#include "AliPHOSGeometry.h"
-#include "AliPHOSGetter.h"
+#include "AliPHOSLoader.h"
ClassImp( AliPHOSPIDv0)
fDispersion = 0. ;
fCpvEmcDistance = 0 ;
fTimeGate = 2.e-9 ;
- fHeaderFileName = "" ;
+ fEventFolderName = "" ;
fTrackSegmentsTitle= "" ;
fRecPointsTitle = "" ;
fRecParticlesTitle = "" ;
}
//____________________________________________________________________________
-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
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() ;
{
// 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 ;
gBenchmark->Start("PHOSPID");
if(strstr(option,"print")) {
- Print("") ;
+ Print() ;
return ;
}
- AliPHOSGetter * gime = AliPHOSGetter::GetInstance() ;
+ AliRunLoader* runget = AliRunLoader::GetRunLoader(GetTitle());
+ if(runget == 0x0)
+ {
+ Error("Exec","Can not find run getter in event folder \"%s\"",GetTitle());
+ return;
+ }
+
+ AliPHOSLoader* gime = dynamic_cast<AliPHOSLoader*>(runget->GetLoader("PHOSLoader"));
+ if ( gime == 0 )
+ {
+ Error("Exec","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);
+ Info("Exec", "event %d %d %d", ievent, gime->EmcRecPoints(), gime->TrackSegments()) ;
MakeRecParticles() ;
- WriteRecParticles(ievent);
+ WriteRecParticles();
if(strstr(option,"deb"))
PrintRecParticles(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 ;
+ Info("Exec", "took %f seconds for PID %f seconds per event",
+ gBenchmark->GetCpuTime("PHOSPID"), gBenchmark->GetCpuTime("PHOSPID")/nevents) ;
}
}
// 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)
+ {
+ Error("Exec","Can not find run getter in event folder \"%s\"",GetTitle());
+ return;
+ }
+
+ AliPHOSLoader* gime = dynamic_cast<AliPHOSLoader*>(runget->GetLoader("PHOSLoader"));
+ if ( gime == 0 )
+ {
+ Error("Exec","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(){
- // 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)
+ {
+ Error("Exec","Can not find run getter in event folder \"%s\"",GetTitle());
+ return;
+ }
+
+ AliPHOSLoader* gime = dynamic_cast<AliPHOSLoader*>(runget->GetLoader("PHOSLoader"));
+ if ( gime == 0 )
+ {
+ Error("Exec","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) ;
}
//____________________________________________________________________________
-void AliPHOSPIDv0:: Print(Option_t * option) const
+void AliPHOSPIDv0:: Print() 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" ;
+ Info("Print", message.Data(),
+ GetTitle(),
+ fRecPointsTitle.Data(),
+ fTrackSegmentsTitle.Data(),
+ fRecParticlesTitle.Data(),
+ fCpvEmcDistance );
+
+ if(fIDOptions.Contains("dis",TString::kIgnoreCase ))
+ Info("Print", " dispersion cut %f", fDispersion ) ;
+ if(fIDOptions.Contains("ell",TString::kIgnoreCase ))
+ Info("Print", " Eliptic cuts function: %s", fFormula->GetTitle() ) ;
+ if(fIDOptions.Contains("tim",TString::kIgnoreCase ))
+ Info("Print", " Time Gate used: %f", fTimeGate) ;
}
//____________________________________________________________________________
fFormula = new TFormula("Lambda Cut",formula) ;
}
//____________________________________________________________________________
-void AliPHOSPIDv0::WriteRecParticles(Int_t event)
+void AliPHOSPIDv0::WriteRecParticles()
{
- 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)
+ {
+ Error("Exec","Can not find run getter in event folder \"%s\"",GetTitle());
+ return;
+ }
+
+ AliPHOSLoader* gime = dynamic_cast<AliPHOSLoader*>(runget->GetLoader("PHOSLoader"));
+ if ( gime == 0 )
+ {
+ Error("Exec","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");
+
}
//____________________________________________________________________________
}
//____________________________________________________________________________
-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
{
// Print table of reconstructed particles
- AliPHOSGetter *gime = AliPHOSGetter::GetInstance() ;
+ AliRunLoader* runget = AliRunLoader::GetRunLoader(GetTitle());
+ if(runget == 0x0)
+ {
+ Error("WriteRecParticles","Can not find run getter in event folder \"%s\"",GetTitle());
+ return;
+ }
+
+ AliPHOSLoader* gime = dynamic_cast<AliPHOSLoader*>(runget->GetLoader("PHOSLoader"));
+ if ( gime == 0 )
+ {
+ Error("WriteRecParticles","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" ;
+ Info("PrintRecParticles", 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;
-
+ Info("PrintRecParticles"," PARTICLE Index \n" ) ;
+
Int_t index ;
for (index = 0 ; index < recParticles->GetEntries() ; index++) {
AliPHOSRecParticle * rp = (AliPHOSRecParticle * ) recParticles->At(index) ;
// 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;
+ Info("PrintRecParticles", " %s %d\n", particle, rp->GetIndexInList()) ;
}
- cout << "-------------------------------------------" << endl ;
- }
-
+ }
}