Possibility to set a different file for treeS (or D or R) more than once per aliroot...
authorhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 7 Jun 2002 07:45:13 +0000 (07:45 +0000)
committerhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 7 Jun 2002 07:45:13 +0000 (07:45 +0000)
STEER/AliRun.cxx
STEER/AliRun.h

index 2e2f89116fb0ef0c9dabb90628340691e5ed80e9..7155c94fa2162c1f98f0dd23aaf4378e50675c4a 100644 (file)
@@ -15,6 +15,9 @@
 
 /*
 $Log$
 
 /*
 $Log$
+Revision 1.86  2002/05/28 14:24:57  hristov
+Correct warning messages
+
 Revision 1.85  2002/05/24 13:29:58  hristov
 AliTrackReference added, AliDisplay modified
 
 Revision 1.85  2002/05/24 13:29:58  hristov
 AliTrackReference added, AliDisplay modified
 
@@ -1988,53 +1991,188 @@ TFile* AliRun::InitTreeFile(Option_t *option, TString fileName)
   //
   // create the file where one of the following trees will be saved
   // trees:   S,D,R
   //
   // create the file where one of the following trees will be saved
   // trees:   S,D,R
-  //
+  // WARNING: by default these trees are saved on the file on which
+  // hits are stored. If you divert one of these trees, you cannot restore
+  // it to the original file (usually galice.root) in the same aliroot session
   Bool_t oS = (strstr(option,"S")!=0);
   Bool_t oR = (strstr(option,"R")!=0);
   Bool_t oD = (strstr(option,"D")!=0);
   Bool_t oS = (strstr(option,"S")!=0);
   Bool_t oR = (strstr(option,"R")!=0);
   Bool_t oD = (strstr(option,"D")!=0);
-  Bool_t none = !(oS || oR || oD);
+  Int_t choice[3]; 
+  for (Int_t i=0; i<3; i++) choice[i] = 0;
+  if(oS)choice[0] = 1; 
+  if(oD)choice[1] = 1;
+  if(oR)choice[2] = 1;
+
   TFile *ptr=0;
   TFile *ptr=0;
-  if(none){
-    Warning("InitTreeFile","wrong option - nothing done\n");
-  } else {
-    if (oS){
-      fTreeSFileName=fileName;
-      if (fTreeSFile) {
-        if (fTreeSFile->IsOpen()) {
-          Warning("InitTreeSFile","File already opened");
-        }
-      } else {
-        fTreeSFile = InitFile(fileName);
-      }
+
+  if(!(oS || oR || oD))return ptr;
+
+  Int_t active[3];
+  for (Int_t i=0; i<3; i++) active[i] = 0;
+  if(fTreeSFileName != "") active[0] = 1;
+  if(fTreeDFileName != "") active[1] = 1;
+  if(fTreeDFileName != "") active[2] = 1;
+
+  Bool_t alreadyopen1 = kFALSE;
+  Bool_t alreadyopen2 = kFALSE;
+
+  if(oS){
+    // if already active and same name with non-null ptr
+    if(active[0]==1 && fileName == fTreeSFileName && fTreeSFile){
+      Warning("InitTreeFile","File %s already opened",fTreeSFileName.Data());
       ptr = fTreeSFile;
     }
       ptr = fTreeSFile;
     }
-    if (oD){
-      fTreeDFileName=fileName;
-      if(oS)fTreeDFile = fTreeSFile;
-      if (fTreeDFile) {
-        if (fTreeDFile->IsOpen()) {
-          Warning("InitTreeDFile","File already opened");
-        }
-      } else {
-        fTreeDFile = InitFile(fileName);
+    else {
+      // if already active with different name with non-null ptr
+      if(active[0]==1 && fileName != fTreeSFileName && fTreeSFile){
+        // close the active files and also the other possible files in option
+        CloseTreeFile(option);
+      }
+      fTreeSFileName = fileName;
+      alreadyopen1 = 
+        (active[1] == 1 && fTreeDFileName == fTreeSFileName && fTreeDFile);
+      alreadyopen2 =
+        (active[2] == 1 && fTreeRFileName == fTreeSFileName && fTreeRFile);
+      if(!(alreadyopen1 || alreadyopen2)){
+        ptr = InitFile(fileName);
+        fTreeSFile = ptr;
       }
       }
+      else {
+        if(alreadyopen1){fTreeSFile = fTreeDFile; ptr = fTreeSFile;}
+        if(alreadyopen2){fTreeSFile = fTreeRFile; ptr = fTreeSFile;}
+      }
+      if(choice[1] == 1) { fTreeDFileName = fileName; fTreeDFile = ptr;}
+      if(choice[2] == 1) { fTreeRFileName = fileName; fTreeRFile = ptr;}
+    }
+    return ptr;
+  }
+
+  if(oD){
+    // if already active and same name with non-null ptr
+    if(active[1]==1 && fileName == fTreeDFileName && fTreeDFile){
+      Warning("InitTreeFile","File %s already opened",fTreeDFileName.Data());
       ptr = fTreeDFile;
     }
       ptr = fTreeDFile;
     }
-    if (oR){
-      fTreeRFileName=fileName;
-      if(oS)fTreeRFile = fTreeSFile;
-      if(oD)fTreeRFile = fTreeDFile;
-      if (fTreeRFile) {
-        if (fTreeRFile->IsOpen()) {
-          Warning("InitTreeRFile","File already opened");
-        }
-      } else {
-        fTreeRFile = InitFile(fileName);
+    else {
+      // if already active with different name with non-null ptr
+      if(active[1]==1 && fileName != fTreeDFileName && fTreeDFile){
+        // close the active files and also the other possible files in option
+        CloseTreeFile(option);
+      }
+      fTreeDFileName = fileName;
+      alreadyopen1 = 
+        (active[0] == 1 && fTreeSFileName == fTreeDFileName && fTreeSFile);
+      alreadyopen2 =
+        (active[2] == 1 && fTreeRFileName == fTreeDFileName && fTreeRFile);
+      if(!(alreadyopen1 || alreadyopen2)){
+        ptr = InitFile(fileName);
+        fTreeDFile = ptr;
+      }
+      else {
+        if(alreadyopen1){fTreeDFile = fTreeSFile; ptr = fTreeDFile;}
+        if(alreadyopen2){fTreeDFile = fTreeRFile; ptr = fTreeDFile;}
       }
       }
+      if(choice[2] == 1) { fTreeRFileName = fileName; fTreeRFile = ptr;}
+    }
+    return ptr;
+  }
+
+  if(oR){
+    // if already active and same name with non-null ptr
+    if(active[2]==1 && fileName == fTreeRFileName && fTreeRFile){
+      Warning("InitTreeFile","File %s already opened",fTreeRFileName.Data());
       ptr = fTreeRFile;
     }
       ptr = fTreeRFile;
     }
+    else {
+      // if already active with different name with non-null ptr
+      if(active[2]==1 && fileName != fTreeRFileName && fTreeRFile){
+        // close the active files and also the other possible files in option
+        CloseTreeFile(option);
+      }
+      fTreeRFileName = fileName;
+      alreadyopen1 = 
+        (active[1] == 1 && fTreeDFileName == fTreeRFileName && fTreeDFile);
+      alreadyopen2 =
+        (active[0]== 1 && fTreeSFileName == fTreeRFileName && fTreeSFile);
+      if(!(alreadyopen1 || alreadyopen2)){
+        ptr = InitFile(fileName);
+        fTreeRFile = ptr;
+      }
+      else {
+        if(alreadyopen1){fTreeRFile = fTreeDFile; ptr = fTreeRFile;}
+        if(alreadyopen2){fTreeRFile = fTreeSFile; ptr = fTreeRFile;}
+      }
+    }
+    return ptr;
   }
   }
-  return ptr;
+
+}
+////////////////////////////////////////////////////////////////////////
+void AliRun::CloseTreeFile(Option_t *option)
+{
+  // 
+  // closes the file containing the tree specified in option
+  // (S,D,R)
+  //
+  Bool_t oS = (strstr(option,"S")!=0);
+  Bool_t oR = (strstr(option,"R")!=0);
+  Bool_t oD = (strstr(option,"D")!=0);
+  Bool_t none = !(oS || oR || oD);
+  if(none)return;
+  if(oS){
+    fTreeSFileName = "";
+    if(fTreeSFile){
+      if(!((fTreeSFile == fTreeDFile) || (fTreeSFile == fTreeRFile)) &&
+           fTreeSFile->IsOpen()){
+        fTreeSFile->Close();
+        delete fTreeSFile;
+      }
+    }
+    fTreeSFile = 0;
+  }
+  if(oD){
+    fTreeDFileName = "";
+    if(fTreeDFile){
+      if(!((fTreeDFile == fTreeRFile) || (fTreeDFile == fTreeSFile)) &&
+         fTreeDFile->IsOpen()){
+        fTreeDFile->Close();
+        delete fTreeDFile;
+      }
+    }
+    fTreeDFile = 0;
+  }
+  if(oR){
+    fTreeRFileName = "";
+    if(fTreeRFile){
+      if(!((fTreeRFile == fTreeSFile) || (fTreeRFile == fTreeDFile)) &&
+         fTreeRFile->IsOpen()){
+        fTreeRFile->Close();
+        delete fTreeRFile;
+      }
+    }
+    fTreeRFile = 0;
+  }
+}
+
+////////////////////////////////////////////////////////////////////////
+void AliRun::PrintTreeFile()
+{
+  //
+  // prints the file names and pointer associated to S,D,R trees
+  //
+  cout<<"===================================================\n";
+  TFile *file = fTreeE->GetCurrentFile();
+  TString curfilname="";
+  if(file)curfilname=(TString)file->GetName();
+  cout<<" Current tree file name: "<<curfilname<<endl;
+  cout<<"Pointer: "<<file<<endl;
+  cout<<" Tree S File name: "<<fTreeSFileName<<endl;
+  cout<<"Pointer: "<<fTreeSFile<<endl<<endl;
+  cout<<" Tree D File name: "<<fTreeDFileName<<endl;
+  cout<<"Pointer: "<<fTreeDFile<<endl<<endl;
+  cout<<" Tree R File name: "<<fTreeRFileName<<endl;
+  cout<<"Pointer: "<<fTreeRFile<<endl<<endl;
+  cout<<"===================================================\n";
 }
 ////////////////////////////////////////////////////////////////////////
 void AliRun::MakeTree(Option_t *option, TFile *file)
 }
 ////////////////////////////////////////////////////////////////////////
 void AliRun::MakeTree(Option_t *option, TFile *file)
index 073cbe5713a22a9d599031283d955f4c9232d6b2..2693340926f5a423521337d720ace71e24dad7b7 100644 (file)
@@ -167,6 +167,7 @@ public:
    TFile* GetTreeDFile() const {return fTreeDFile;}
    TFile* GetTreeSFile() const {return fTreeSFile;}
    TFile* GetTreeRFile() const {return fTreeRFile;}
    TFile* GetTreeDFile() const {return fTreeDFile;}
    TFile* GetTreeSFile() const {return fTreeSFile;}
    TFile* GetTreeRFile() const {return fTreeRFile;}
+   void AliRun::PrintTreeFile();
    
 
    TTree         *TreeD() {return fTreeD;}
    
 
    TTree         *TreeD() {return fTreeD;}
@@ -180,6 +181,7 @@ public:
    AliStack      *Stack() {return fStack;}
 
 protected:
    AliStack      *Stack() {return fStack;}
 
 protected:
+  void CloseTreeFile(Option_t *option);
   virtual  void  Tree2Tree(Option_t *option, const char *detector=0);
   TFile* InitFile(TString fileName="");
   Int_t          fRun;               //! Current run number
   virtual  void  Tree2Tree(Option_t *option, const char *detector=0);
   TFile* InitFile(TString fileName="");
   Int_t          fRun;               //! Current run number