if ( fHeaderFile != "aliroot" ) { // to call the getter without a file
//open headers file
- TFile * file = static_cast<TFile*>(gROOT->GetFile(fHeaderFile.Data() ) ) ;
- if(file == 0){ //if file was not opened yet, read gAlice
- if(fHeaderFile.Contains("rfio")) // if we read file using HPSS
- file = TFile::Open(fHeaderFile.Data(),"update") ;
- else
- file = new TFile(fHeaderFile.Data(),"update") ;
+ fFile = static_cast<TFile*>(gROOT->GetFile(fHeaderFile.Data() ) ) ;
+ if(!fFile) { //if file was not opened yet, read gAlice
+ fFile = TFile::Open(fHeaderFile.Data(),"update") ;
- if (!file->IsOpen()) {
+ if (!fFile->IsOpen()) {
cerr << "ERROR : AliPHOSGetter::AliPHOSGetter -> Cannot open " << fHeaderFile.Data() << endl ;
fFailed = kTRUE ;
return ;
}
-
- gAlice = static_cast<AliRun *>(file->Get("gAlice")) ;
- }
+ gAlice = static_cast<AliRun *>(fFile->Get("gAlice")) ;
+ }
}
if (!gAlice) {
if (!PHOS()) {
if (fDebug)
cout << "INFO: AliPHOSGetter -> Posting PHOS to Folders" << endl ;
- AliConfig * conf = AliConfig::Instance() ;
- conf->Add(static_cast<AliDetector*>(gAlice->GetDetector("PHOS"))) ;
- conf->Add(static_cast<AliModule*>(gAlice->GetDetector("PHOS"))) ;
+ if (gAlice->GetDetector("PHOS")) {
+ AliConfig * conf = AliConfig::Instance() ;
+ conf->Add(static_cast<AliDetector*>(gAlice->GetDetector("PHOS"))) ;
+ conf->Add(static_cast<AliModule*>(gAlice->GetDetector("PHOS"))) ;
+ }
+ else
+ cerr << "ERROR: AliPHOSGetter -> detector PHOS not found" << endl ;
}
fDebug=0;
fPrimaries->Delete() ;
delete fPrimaries ;
}
-
+ fFile->Close() ;
+ delete fFile ;
+ fFile = 0 ;
+
}
//____________________________________________________________________________
if((fgObjGetter->fBranchTitle.CompareTo(branchTitle) == 0) &&
(fgObjGetter->fHeaderFile.CompareTo(headerFile)==0))
return fgObjGetter ;
- else
+ else
fgObjGetter->~AliPHOSGetter() ; // delete it already exists another version
-
+
fgObjGetter = new AliPHOSGetter(headerFile,branchTitle) ;
// Posts a few item to the white board (folders)
if ( !phosFolder ) {
if (fDebug) {
- cout << "WARNING: AliPHOSGetter::Post RPo -> Folder //" << fRecoFolder << "/PHOS/ not found!" << endl;
- cout << "INFO: AliPHOSGetter::Post Rpo -> Adding Folder //" << fRecoFolder << "/PHOS/" << endl;
+ cout << "WARNING: AliPHOSGetter::Post RPo -> Folder //" << fRecoFolder->GetName() << "/PHOS/ not found!" << endl;
+ cout << "INFO: AliPHOSGetter::Post Rpo -> Adding Folder //" << fRecoFolder->GetName() << "/PHOS/" << endl;
}
phosFolder = fRecoFolder->AddFolder("PHOS", "Reconstructed data from PHOS") ;
}
TFolder * phosRPoEMCAFolder = dynamic_cast<TFolder*>(phosFolder->FindObject("EMCARecPoints")) ;
if ( !phosRPoEMCAFolder ) {
if (fDebug) {
- cout << "WARNING: AliPHOSGetter::Post RPo -> Folder //" << fRecoFolder << "/PHOS/EMCARecPoints/ not found!" << endl;
- cout << "INFO: AliPHOSGetter::Post Rpo -> Adding Folder //" << fRecoFolder << "/PHOS/EMCARecPoints not found!" << endl;
+ cout << "WARNING: AliPHOSGetter::Post RPo -> Folder //" << fRecoFolder->GetName() << "/PHOS/EMCARecPoints/ not found!" << endl;
+ cout << "INFO: AliPHOSGetter::Post Rpo -> Adding Folder //" << fRecoFolder->GetName() << "/PHOS/EMCARecPoints" << endl;
}
phosRPoEMCAFolder = phosFolder->AddFolder("EMCARecPoints", "EMCA RecPoints from PHOS") ;
}
TFolder * phosRPoCPVFolder = dynamic_cast<TFolder*>(phosFolder->FindObject("CPVRecPoints")) ;
if ( !phosRPoCPVFolder ) {
if (fDebug) {
- cout << "WARNING: AliPHOSGetter::Post RPo -> Folder //" << fRecoFolder << "/PHOS/CPVRecPoints/ not found!" << endl;
- cout << "INFO: AliPHOSGetter::Post Rpo -> Adding Folder //" << fRecoFolder << "/PHOS/CPVRecPoints/" << endl;
+ cout << "WARNING: AliPHOSGetter::Post RPo -> Folder //" << fRecoFolder->GetName() << "/PHOS/CPVRecPoints/ not found!" << endl;
+ cout << "INFO: AliPHOSGetter::Post Rpo -> Adding Folder //" << fRecoFolder->GetName() << "/PHOS/CPVRecPoints/" << endl;
}
phosRPoCPVFolder = phosFolder->AddFolder("CPVRecPoints", "CPV RecPoints from PHOS") ;
}
// the hierarchy is //Folders/Run/Event/RecData/PHOS/EMCARecPoints/name
if ( !fRecoFolder ) {
- cerr << "ERROR: AliPHOSGetter::EmcRecPointsRef -> Folder //" << fRecoFolder << " not found!" << endl;
+ cerr << "ERROR: AliPHOSGetter::EmcRecPointsRef -> Folder //" << fRecoFolder->GetName() << " not found!" << endl;
return 0 ;
}
TFolder * phosFolder = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/EMCARecPoints")) ;
if ( !phosFolder ) {
- cerr << "ERROR: AliPHOSGetter::EmcRecPointsRef -> Folder //" << fRecoFolder << "/PHOS/EMCARecPoints/ not found!" << endl;
+ cerr << "ERROR: AliPHOSGetter::EmcRecPointsRef -> Folder //" << fRecoFolder->GetName() << "/PHOS/EMCARecPoints/ not found!" << endl;
return 0;
}
// the hierarchy is //Folders/Run/Event/RecData/PHOS/CPVRecPoints/name
if ( !fRecoFolder ) {
- cerr << "ERROR: AliPHOSGetter::EmcRecPointsRef -> Folder //" << fRecoFolder << " not found!" << endl;
+ cerr << "ERROR: AliPHOSGetter::EmcRecPointsRef -> Folder //" << fRecoFolder->GetName() << " not found!" << endl;
return 0 ;
}
TFolder * phosFolder = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/CPVRecPoints")) ;
if ( !phosFolder ) {
- cerr << "ERROR: AliPHOSGetter::CpvRecPointsRef -> Folder //" << fRecoFolder << "/PHOS/CPVRecPoints/" << endl;
+ cerr << "ERROR: AliPHOSGetter::CpvRecPointsRef -> Folder //" << fRecoFolder->GetName() << "/PHOS/CPVRecPoints/" << endl;
return 0;
}
if ( !phosFolder ) {
if (fDebug) {
cout << "WARNING: AliPHOSGetter::Post TS -> Folder //" << fRecoFolder << "/PHOS/ not found!" << endl;
- cout << "INFO: AliPHOSGetter::Post TS -> Adding Folder //" << fRecoFolder << "/PHOS" << endl;
+ cout << "INFO: AliPHOSGetter::Post TS -> Adding Folder //" << fRecoFolder->GetName() << "/PHOS" << endl;
}
phosFolder = fRecoFolder->AddFolder("PHOS", "Reconstructed data from PHOS") ;
}
TFolder * phosTSFolder = dynamic_cast<TFolder*>(phosFolder->FindObject("TrackSegments")) ;
if ( !phosTSFolder ) {
if (fDebug) {
- cout << "WARNING: AliPHOSGetter::Post TS -> Folder//" << fRecoFolder << "/PHOS/TrackSegments/ not found!" << endl;
- cout << "INFO: AliPHOSGetter::Post TS -> Adding Folder //" << fRecoFolder << "/PHOS/TrackSegments/" << endl;
+ cout << "WARNING: AliPHOSGetter::Post TS -> Folder//" << fRecoFolder->GetName() << "/PHOS/TrackSegments/ not found!" << endl;
+ cout << "INFO: AliPHOSGetter::Post TS -> Adding Folder //" << fRecoFolder->GetName() << "/PHOS/TrackSegments/" << endl;
}
phosTSFolder = phosFolder->AddFolder("TrackSegments", "TrackSegments from PHOS") ;
}
// the hierarchy is //Folders/Run/Event/RecData/PHOS/TrackSegments/name
if ( !fRecoFolder ) {
- cerr << "ERROR: AliPHOSGetter::TrackSegmentsRef -> Folder //" << fRecoFolder << "not found!" << endl;
+ cerr << "ERROR: AliPHOSGetter::TrackSegmentsRef -> Folder //" << fRecoFolder->GetName() << "not found!" << endl;
return 0 ;
}
TFolder * phosFolder = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/TrackSegments")) ;
if ( !phosFolder ) {
- cerr << "ERROR: AliPHOSGetter::TrackSegmentsRef -> Folder //" << fRecoFolder << "/PHOS/TrackSegments/ not found!" << endl;
+ cerr << "ERROR: AliPHOSGetter::TrackSegmentsRef -> Folder //" << fRecoFolder->GetName() << "/PHOS/TrackSegments/ not found!" << endl;
return 0;
}
if ( !phosFolder ) {
if (fDebug) {
- cout << "WARNING: AliPHOSGetter::Post RPa -> Folder //" << fRecoFolder << "/PHOS/ not found!" << endl;
- cout << "INFO: AliPHOSGetter::Post Rpa -> Adding Folder //" << fRecoFolder << "/PHOS/" << endl;
+ cout << "WARNING: AliPHOSGetter::Post RPa -> Folder //" << fRecoFolder->GetName() << "/PHOS/ not found!" << endl;
+ cout << "INFO: AliPHOSGetter::Post Rpa -> Adding Folder //" << fRecoFolder->GetName() << "/PHOS/" << endl;
}
phosFolder = fRecoFolder->AddFolder("PHOS", "Reconstructed data from PHOS") ;
}
TFolder * phosRPaFolder = dynamic_cast<TFolder*>(phosFolder->FindObject("RecParticles")) ;
if ( !phosRPaFolder ) {
if (fDebug) {
- cout << "WARNING: AliPHOSGetter::Post RPa -> Folder //" << fRecoFolder << "/PHOS/RecParticles/ not found!" << endl;
- cout << "INFO: AliPHOSGetter::Post RPa -> Adding Folder //" << fRecoFolder << "/PHOS/RecParticles/" << endl;
+ cout << "WARNING: AliPHOSGetter::Post RPa -> Folder //" << fRecoFolder->GetName() << "/PHOS/RecParticles/ not found!" << endl;
+ cout << "INFO: AliPHOSGetter::Post RPa -> Adding Folder //" << fRecoFolder->GetName() << "/PHOS/RecParticles/" << endl;
}
phosRPaFolder = phosFolder->AddFolder("RecParticles", "RecParticles from PHOS") ;
}
// the hierarchy is //Folders/Run/Event/RecData/PHOS/TrackSegments/name
if ( !fRecoFolder ) {
- cerr << "ERROR: AliPHOSGetter::RecParticlesRef -> Folder//" << fRecoFolder << " not found!" << endl;
+ cerr << "ERROR: AliPHOSGetter::RecParticlesRef -> Folder//" << fRecoFolder->GetName() << " not found!" << endl;
return 0 ;
}
TFolder * phosFolder = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/RecParticles")) ;
if ( !phosFolder ) {
- cerr << "ERROR: AliPHOSGetter::RecParticlesRef -> Folder //" << fRecoFolder << "/PHOS/RecParticles/ not found!" << endl;
+ cerr << "ERROR: AliPHOSGetter::RecParticlesRef -> Folder //" << fRecoFolder->GetName() << "/PHOS/RecParticles/ not found!" << endl;
return 0;
}
}
//____________________________________________________________________________
-Int_t AliPHOSGetter::ReadTreeR()
+Int_t AliPHOSGetter::ReadTreeR(Bool_t any)
{
// Read the reconstrunction tree gAlice->TreeR()
+ // A particularity has been introduced here :
+ // if gime->Event(ievent,"R") is called branches with the current title are read, the current title
+ // being for example give in AliPHOSPID(fileName, title)
+ // if gime(Event(ievent, "RA") is called the title of the branches is not checked anymore, "A" stands for any
+ // This is a feature needed by PID to be able to reconstruct several times particles (each time a ther title is given)
+ // from a given set of TrackSegments (with a given name)
+ // This is why any is NOT used to read the branch of RecParticles
+ // See AliPHOSPIDv2
if(gAlice->TreeR()== 0){
cerr << "WARNING: AliPHOSGetter::ReadTreeR: can not read TreeR " << endl ;
Bool_t phosemcrpfound = kFALSE, phoscpvrpfound = kFALSE, clusterizerfound = kFALSE ;
while ( (branch = static_cast<TBranch*>(next())) && (!phosemcrpfound || !phoscpvrpfound || !clusterizerfound) )
- if(strcmp(branch->GetTitle(), fRecPointsTitle)==0) {
+ if(strcmp(branch->GetTitle(), fRecPointsTitle)==0 || any) {
if ( strcmp(branch->GetName(), "PHOSEmcRP")==0) {
emcbranch = branch ;
phosemcrpfound = kTRUE ;
Bool_t phostsfound = kFALSE, tsmakerfound = kFALSE ;
while ( (branch = static_cast<TBranch*>(next())) && (!phostsfound || !tsmakerfound) )
- if(strcmp(branch->GetTitle(), fTrackSegmentsTitle)==0) {
+ if(strcmp(branch->GetTitle(), fTrackSegmentsTitle)==0 || any) {
if ( strcmp(branch->GetName(), "PHOSTS")==0){
tsbranch = branch ;
phostsfound = kTRUE ;
void AliPHOSGetter::Event(const Int_t event, const char* opt)
{
// Reads the content of all Tree's S, D and R
-
+
if (event >= gAlice->TreeE()->GetEntries() ) {
cerr << "ERROR: AliPHOSGetter::Event -> " << event << " not found in TreeE!" << endl ;
return ;
}
+
+ Bool_t any = kFALSE ;
+ if (strstr(opt,"A") ) // do not check the title of the branches
+ any = kTRUE;
+
gAlice->GetEvent(event) ;
Int_t rvRH = 0 ;
rvRD = ReadTreeD() ;
if( strstr(opt,"R") )
- rvRR = ReadTreeR() ;
+ rvRR = ReadTreeR(any) ;
if( strstr(opt,"Q") )
ReadTreeQA() ;
if (folder) {
if (name.IsNull())
name = fRecPointsTitle ;
- phosO = dynamic_cast<TObject *>(folder->FindObject(name)) ;
+ phosO = dynamic_cast<TObject *>(folder->FindObject(name)) ;
}
}
else if ( what.CompareTo("CpvRecPoints") == 0 ) {
}
if (!phosO) {
if(fDebug)
- cerr << "ERROR : AliPHOSGetter::ReturnO -> Object " << what << " not found in " << folder->GetName() << endl ;
+ cerr << "ERROR : AliPHOSGetter::ReturnO -> Object " << what << " not found in " << fQAFolder->GetName() << endl ;
return 0 ;
}
// Warning in <TDatabasePDG::TDatabasePDG>: object already instantiated
// root [1] p1->SetIdentificationMethod("disp ellipse")
// root [2] p1->ExecuteTask()
-// root [3] AliPHOSPIDv2 * p2 = new AliPHOSPIDv2("galice1.root","ts1")
+// root [3] AliPHOSPIDv2 * p2 = new AliPHOSPIDv2("galice1.root","v2")
// Warning in <TDatabasePDG::TDatabasePDG>: object already instantiated
-// // reading headers from file galice1.root and TrackSegments
-// // with title "ts1"
-// root [4] p2->SetRecParticlesBranch("rp1")
+// // reading headers from file galice1.root and create RecParticles with title v2
+ // TrackSegments and RecPoints with title "v2" are used
// // set file name for the branch RecParticles
-// root [5] p2->ExecuteTask("deb all time")
+// root [4] p2->ExecuteTask("deb all time")
// // available options
// // "deb" - prints # of reconstructed particles
// // "deb all" - prints # and list of RecParticles
// // "time" - prints benchmarking results
//
+// root [5] AliPHOSPIDv2 * p3 = new AliPHOSPIDv2("galice1.root","v2","v0")
+// Warning in <TDatabasePDG::TDatabasePDG>: object already instantiated
+// // reading headers from file galice1.root and create RecParticles with title v2
+ // RecPoints and TrackSegments with title "v0" are used
+// root [6] p3->ExecuteTask()
//*-- Author: Yves Schutz (SUBATECH) & Gines Martinez (SUBATECH) &
// Gustavo Conesa April 2002
fRecParticlesInRun = 0 ;
fClusterizer = 0 ;
fTSMaker = 0 ;
+ fFrom = "" ;
}
//____________________________________________________________________________
-AliPHOSPIDv2::AliPHOSPIDv2(const char * headerFile,const char * name) : AliPHOSPID(headerFile, name)
+AliPHOSPIDv2::AliPHOSPIDv2(const char * headerFile,const char * name, const char * from) : AliPHOSPID(headerFile, name)
{
//ctor with the indication on where to look for the track segments
tempo.Append(Version()) ;
SetName(tempo) ;
fRecParticlesInRun = 0 ;
-
+ if ( from == 0 )
+ fFrom = name ;
+ else
+ fFrom = from ;
Init() ;
}
return ;
}
+ cout << gDirectory->GetName() << endl ;
+
gAlice->GetEvent(0) ;
+
//check, if the branch with name of this" already exits?
TObjArray * lob = (TObjArray*)gAlice->TreeR()->GetListOfBranches() ;
TIter next(lob) ;
Int_t nevents = (Int_t) gAlice->TreeE()->GetEntries() ;
Int_t ievent ;
- AliPHOSGetter * gime = AliPHOSGetter::GetInstance() ;
-
+ AliPHOSGetter * gime = AliPHOSGetter::GetInstance() ;
for(ievent = 0; ievent < nevents; ievent++){
- gime->Event(ievent,"R") ;
-
+ gime->Event(ievent,"RA") ;
+
MakeRecParticles() ;
WriteRecParticles(ievent);
PrintRecParticles(option) ;
//increment the total number of rec particles per run
- fRecParticlesInRun += gime->RecParticles()->GetEntriesFast() ;
+ fRecParticlesInRun += gime->RecParticles(taskName)->GetEntriesFast() ;
}
fFileName = "$ALICE_ROOT/PHOS/PCA8pa15_0.5-100.root" ;
TFile f( fFileName.Data(), "read" ) ;
fPrincipal = dynamic_cast<TPrincipal*> (f.Get("principal")) ;
-
+ f.Close() ;
// Ellipse parameters
fX_center = 2.0 ;
fY_center = -0.35 ;
fB = 1.0 ;
fAngle = -60. ;
- AliPHOSGetter * gime = AliPHOSGetter::GetInstance(GetTitle(), taskName.Data()) ;
+ AliPHOSGetter * gime = AliPHOSGetter::GetInstance(GetTitle(), fFrom.Data()) ;
+
+ gime->SetRecParticlesTitle(taskName) ;
if ( gime == 0 ) {
cerr << "ERROR: AliPHOSPIDv2::Init -> Could not obtain the Getter object !" << endl ;
return ;
void AliPHOSPIDv2::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) ;
+ TObjArray * emcRecPoints = gime->EmcRecPoints(fFrom) ;
+ TObjArray * cpvRecPoints = gime->CpvRecPoints(fFrom) ;
+ TClonesArray * trackSegments = gime->TrackSegments(fFrom) ;
+ if ( !emcRecPoints || !cpvRecPoints || !trackSegments ) {
+ cerr << "ERROR: AliPHOSPIDv2::MakeRecParticles -> RecPoints or TrackSegments with name "
+ << fFrom << " not found ! " << endl ;
+ abort() ;
+ }
TClonesArray * recParticles = gime->RecParticles(taskName) ;
recParticles->Clear();