+ 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;
+ }
+ 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;
+ }
+ 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 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=static_cast<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::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::MakeTree(Option_t *option, TFile *file)
+{
+ //
+ // Create some trees in the separate file
+ //
+ const char *oD = strstr(option,"D");
+ const char *oR = strstr(option,"R");
+ const char *oS = strstr(option,"S");
+
+ TDirectory *cwd = gDirectory;
+ char hname[30];
+
+ if (oD) {
+ delete fTreeD;
+ sprintf(hname,"TreeD%d",fEvent);
+ file->cd();
+ fTreeD = static_cast<TTree*>(file->Get("hname"));
+ if (!fTreeD) {
+ fTreeD = new TTree(hname,"Digits");
+ fTreeD->Write(0,TObject::kOverwrite);
+ }
+ cwd->cd();
+ }
+ if (oS) {
+ delete fTreeS;
+ sprintf(hname,"TreeS%d",fEvent);
+ file->cd();
+ fTreeS = static_cast<TTree*>(file->Get("hname"));
+ if (!fTreeS) {
+ fTreeS = new TTree(hname,"SDigits");
+ fTreeS->Write(0,TObject::kOverwrite);
+ }
+ cwd->cd();
+ }
+
+ if (oR) {
+ delete fTreeR;
+ sprintf(hname,"TreeR%d",fEvent);
+ file->cd();
+ fTreeR = static_cast<TTree*>(file->Get("hname"));
+ if (!fTreeR) {
+ fTreeR = new TTree(hname,"RecPoint");
+ fTreeR->Write(0,TObject::kOverwrite);
+ }
+ cwd->cd();
+ }
+}