+
+//____________________________________________________________________________
+void AliPHOSGetter::RemoveTask(TString opt, TString name) const
+{
+ // remove a task from the folder
+ // path is fTasksFolder/SDigitizer/PHOS/name
+
+ TTask * task = 0 ;
+ TTask * phos = 0 ;
+ TList * lofTasks = 0 ;
+
+ if (opt == "S") { // SDigitizer
+ task = dynamic_cast<TTask*>(fTasksFolder->FindObject("SDigitizer")) ;
+ if (!task)
+ return ;
+ }
+ else if (opt == "D") { // Digitizer
+ task = dynamic_cast<TTask*>(fTasksFolder->FindObject("Digitizer")) ;
+ if (!task)
+ return ;
+ }
+ else if (opt == "C" || opt == "T" || opt == "P" ) { // Clusterizer, TrackSegmentMaker, PID
+ task = dynamic_cast<TTask*>(fTasksFolder->FindObject("Reconstructioner")) ;
+ if (!task)
+ return ;
+ }
+ else {
+ Warning("RemoveTask", "Unknown option %s", opt.Data() );
+ return ;
+ }
+ phos = dynamic_cast<TTask*>(task->GetListOfTasks()->FindObject("PHOS")) ;
+ if (!phos)
+ return ;
+ lofTasks = phos->GetListOfTasks() ;
+ if (!lofTasks)
+ return ;
+ TObject * obj = lofTasks->FindObject(name) ;
+ if (obj)
+ lofTasks->Remove(obj) ;
+
+}
+
+//____________________________________________________________________________
+void AliPHOSGetter::RemoveObjects(TString opt, TString name) const
+{
+ // remove SDigits from the folder
+ // path is fSDigitsFolder/fHeaderFileName/name
+
+ TFolder * phos = 0 ;
+ TFolder * phosmain = 0 ;
+
+ if (opt == "H") { // Hits
+ phos = dynamic_cast<TFolder*>(fHitsFolder->FindObject("PHOS")) ;
+ if (!phos)
+ return ;
+ name = "Hits" ;
+ }
+
+ else if ( opt == "S") { // SDigits
+ phosmain = dynamic_cast<TFolder*>(fSDigitsFolder->FindObject("PHOS")) ;
+ if (!phosmain)
+ return ;
+ phos = dynamic_cast<TFolder*>(phosmain->FindObject(fHeaderFile)) ;
+ if (!phos)
+ return ;
+ }
+
+ else if (opt == "D") { // Digits
+ phos = dynamic_cast<TFolder*>(fDigitsFolder->FindObject("PHOS")) ;
+ if (!phos)
+ return ;
+ }
+
+ else if (opt == "RE") { // EMCARecPoints
+ phos = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/EMCARecPoints")) ;
+ if (!phos)
+ return ;
+ }
+
+ else if (opt == "RC") { // CPVRecPoints
+ phos = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/CPVRecPoints")) ;
+ if (!phos)
+ return ;
+ }
+
+ else if (opt == "T") { // TrackSegments
+ phos = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/TrackSegments")) ;
+ if (!phos)
+ return ;
+ }
+
+ else if (opt == "P") { // RecParticles
+ phos = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/RecParticles")) ;
+ if (!phos)
+ return ;
+ }
+
+ else {
+ Warning("RemoveObjects", "Unknown option %s", opt.Data() ) ;
+ return ;
+ }
+
+ TObjArray * ar = dynamic_cast<TObjArray*>(phos->FindObject(name)) ;
+ if (ar) {
+ phos->Remove(ar) ;
+ ar->Delete() ;
+ delete ar ;
+ }
+
+ if (opt == "S")
+ phosmain->Remove(phos) ;
+
+}
+
+//____________________________________________________________________________
+void AliPHOSGetter::RemoveSDigits() const
+{
+ TFolder * phos= dynamic_cast<TFolder*>(fSDigitsFolder->FindObject("PHOS")) ;
+ if (!phos)
+ return ;
+
+ phos->SetOwner() ;
+ phos->Clear() ;
+}
+
+//____________________________________________________________________________
+void AliPHOSGetter::CleanWhiteBoard(void){
+
+ TFolder * phosmain = 0 ;
+ TFolder * phos ;
+ TObjArray * ar ;
+ TList * lofTasks = 0 ;
+ TTask * task = 0 ;
+ TTask * phost = 0 ;
+
+ // Hits
+ phos = dynamic_cast<TFolder*>(fHitsFolder->FindObject("PHOS")) ;
+ if (phos){
+ TObjArray * ar = dynamic_cast<TObjArray*>(phos->FindObject("Hits")) ;
+ if (ar) {
+ phos->Remove(ar) ;
+ ar->Delete() ;
+ delete ar ;
+ }
+ }
+
+ // SDigits
+ phosmain = dynamic_cast<TFolder*>(fSDigitsFolder->FindObject("PHOS")) ;
+ if (phosmain){
+ phos = dynamic_cast<TFolder*>(phosmain->FindObject(fHeaderFile)) ;
+ if (phos) {
+ ar = dynamic_cast<TObjArray*>(phos->FindObject(fSDigitsTitle)) ;
+ if (ar) {
+ phos->Remove(ar) ;
+ ar->Delete() ;
+ delete ar ;
+ }
+ }
+ phosmain->Remove(phos) ;
+ }
+
+
+ // Digits
+ phos = dynamic_cast<TFolder*>(fDigitsFolder->FindObject("PHOS")) ;
+ if (phos){
+ ar = dynamic_cast<TObjArray*>(phos->FindObject(fDigitsTitle)) ;
+ if (ar) {
+ phos->Remove(ar) ;
+ ar->Delete() ;
+ delete ar ;
+ }
+ }
+
+
+ // EMCARecPoints
+ phos = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/EMCARecPoints")) ;
+ if (phos){
+ ar = dynamic_cast<TObjArray*>(phos->FindObject(fRecPointsTitle)) ;
+ if (ar) {
+ phos->Remove(ar) ;
+ ar->Delete() ;
+ delete ar ;
+ }
+ }
+
+
+ // CPVRecPoints
+ phos = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/CPVRecPoints")) ;
+ if (phos){
+ ar = dynamic_cast<TObjArray*>(phos->FindObject(fRecPointsTitle)) ;
+ if (ar) {
+ phos->Remove(ar) ;
+ ar->Delete() ;
+ delete ar ;
+ }
+ }
+
+
+ // TrackSegments
+ phos = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/TrackSegments")) ;
+ if (phos) {
+ ar = dynamic_cast<TObjArray*>(phos->FindObject(fTrackSegmentsTitle)) ;
+ if (ar) {
+ phos->Remove(ar) ;
+ ar->Delete() ;
+ delete ar ;
+ }
+ }
+
+
+
+ // RecParticles
+ phos = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS/RecParticles")) ;
+ if (phos){
+ ar = dynamic_cast<TObjArray*>(phos->FindObject(fRecParticlesTitle)) ;
+ if (ar) {
+ phos->Remove(ar) ;
+ ar->Delete() ;
+ delete ar ;
+ }
+ }
+
+
+ //---- Now Tasks -----------
+
+ TObject * obj ;
+ TString sdname(fSDigitsTitle);
+
+ // Digitizer
+ task = dynamic_cast<TTask*>(fTasksFolder->FindObject("Digitizer")) ;
+ if (task){
+ phost = dynamic_cast<TTask*>(task->GetListOfTasks()->FindObject("PHOS")) ;
+ if (phost){
+ lofTasks = phost->GetListOfTasks() ;
+ if (lofTasks){
+ obj = lofTasks->FindObject(sdname.Data()) ;
+ if (obj)
+ lofTasks->Remove(obj) ;
+ }
+ }
+ }
+
+
+ sdname.Append(":") ;
+ // Clusterizer, TrackSegmentMaker, PID
+ task = dynamic_cast<TTask*>(fTasksFolder->FindObject("Reconstructioner")) ;
+ if (task){
+ phost = dynamic_cast<TTask*>(task->GetListOfTasks()->FindObject("PHOS")) ;
+ if (phost){
+ lofTasks = phost->GetListOfTasks() ;
+ TIter next(lofTasks);
+ while((obj=next())){
+ TString oname(obj->GetName()) ;
+ if (oname.BeginsWith(sdname)){
+ lofTasks->Remove(obj) ;
+ }
+ }
+ }
+ }
+
+
+ // SDigitizer
+ sdname.Append(fHeaderFile) ;
+ task = dynamic_cast<TTask*>(fTasksFolder->FindObject("SDigitizer")) ;
+ if (task) {
+ phost = dynamic_cast<TTask*>(task->GetListOfTasks()->FindObject("PHOS")) ;
+ if (phost){
+ lofTasks = phost->GetListOfTasks() ;
+ if (lofTasks){
+ obj = lofTasks->FindObject(sdname.Data()) ;
+ if (obj)
+ lofTasks->Remove(obj) ;
+ }
+ }
+ }
+
+}
+//____________________________________________________________________________
+void AliPHOSGetter::SetTitle(const char * branchTitle )
+{
+ fBranchTitle = branchTitle ;
+ fSDigitsTitle = branchTitle ;
+ fDigitsTitle = branchTitle ;
+ fRecPointsTitle = branchTitle ;
+ fRecParticlesTitle = branchTitle ;
+ fTrackSegmentsTitle = branchTitle ;
+ if(fToSplit){
+ //First - extract full path if necessary
+ TString sFileName(fHeaderFile) ;
+ Ssiz_t islash = sFileName.Last('/') ;
+ if(islash<sFileName.Length())
+ sFileName.Remove(islash+1,sFileName.Length()) ;
+ else
+ sFileName="" ;
+ //Now construct file names
+ fSDigitsFileName = sFileName ;
+ fDigitsFileName = sFileName ;
+ fRecPointsFileName = sFileName ;
+ fRecParticlesFileName = sFileName ;
+ fTrackSegmentsFileName = sFileName ;
+ fSDigitsFileName += "PHOS.SDigits." ;
+ fDigitsFileName += "PHOS.Digits." ;
+ fRecPointsFileName += "PHOS.RecData." ;
+ fTrackSegmentsFileName+= "PHOS.RecData." ;
+ fRecParticlesFileName += "PHOS.RecData." ;
+ if((strcmp(fBranchTitle.Data(),"Default")!=0)&&(strcmp(fBranchTitle.Data(),"")!=0)){
+ fSDigitsFileName += fBranchTitle ;
+ fSDigitsFileName += "." ;
+ fDigitsFileName += fBranchTitle ;
+ fDigitsFileName += "." ;
+ fRecPointsFileName += fBranchTitle ;
+ fRecPointsFileName += "." ;
+ fRecParticlesFileName += fBranchTitle ;
+ fRecParticlesFileName += "." ;
+ fTrackSegmentsFileName+= fBranchTitle ;
+ fTrackSegmentsFileName+= "." ;
+ }
+ fSDigitsFileName += "root" ;
+ fDigitsFileName += "root" ;
+ fRecPointsFileName += "root" ;
+ fRecParticlesFileName += "root" ;
+ fTrackSegmentsFileName+= "root" ;
+ }else{
+ fSDigitsFileName = "" ;
+ fDigitsFileName = "" ;
+ fRecPointsFileName = "" ;
+ fRecParticlesFileName = "" ;
+ fTrackSegmentsFileName = "" ;
+ }
+ TFolder * phosFolder ;
+ phosFolder = dynamic_cast<TFolder*>(fHitsFolder->FindObject("PHOS")) ;
+ if ( !phosFolder )
+ phosFolder = fHitsFolder->AddFolder("PHOS", "Hits from PHOS") ;
+
+ phosFolder = dynamic_cast<TFolder*>(fSDigitsFolder->FindObject("PHOS")) ;
+ if ( !phosFolder )
+ phosFolder = fSDigitsFolder->AddFolder("PHOS", "SDigits from PHOS") ;
+
+ //Make folder for SDigits
+ TString subdir(fHeaderFile) ;
+ subdir.ReplaceAll("/","_") ;
+ phosFolder->AddFolder(subdir, fSDigitsFileName.Data());
+
+
+ phosFolder = dynamic_cast<TFolder*>(fDigitsFolder->FindObject("PHOS")) ;
+ if ( !phosFolder )
+ phosFolder = fDigitsFolder->AddFolder("PHOS", "Digits from PHOS") ;
+
+ phosFolder = dynamic_cast<TFolder*>(fRecoFolder->FindObject("PHOS")) ;
+ if ( !phosFolder )
+ phosFolder = fRecoFolder->AddFolder("PHOS", "Reconstructed data from PHOS") ;
+
+
+}
+//____________________________________________________________________________
+void AliPHOSGetter::CloseSplitFiles(void){
+ TFile * file ;
+ file = static_cast<TFile*>(gROOT->GetFile(fSDigitsFileName.Data() ) ) ;
+ if(file)
+ file->Close() ;
+ file = static_cast<TFile*>(gROOT->GetFile(fDigitsFileName.Data() ) ) ;
+ if(file)
+ file->Close() ;
+ file = static_cast<TFile*>(gROOT->GetFile(fRecPointsFileName.Data() ) ) ;
+ if(file)
+ file->Close() ;
+ file = static_cast<TFile*>(gROOT->GetFile(fTrackSegmentsFileName.Data() ) ) ;
+ if(file)
+ file->Close() ;
+ file = static_cast<TFile*>(gROOT->GetFile(fRecParticlesFileName.Data() ) ) ;
+ if(file)
+ file->Close() ;
+
+}