Improved the mechanism to divert SDigits into a separate file.
authorschutz <schutz@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 30 May 2002 16:22:58 +0000 (16:22 +0000)
committerschutz <schutz@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 30 May 2002 16:22:58 +0000 (16:22 +0000)
EMCAL/AliEMCALDigitizer.cxx
EMCAL/AliEMCALDigitizer.h
PHOS/AliPHOSDigitizer.cxx
PHOS/AliPHOSDigitizer.h

index 1ca93731dc332440e3aaed9679e7e337b140cdc8..c29b59ab0f06ac439bc381fc875b705d7606b76c 100644 (file)
@@ -103,6 +103,7 @@ ClassImp(AliEMCALDigitizer)
   fNADCPreSho = 0;      // number of channels in Pre Shower ADC
   fTimeThreshold = 0.0; //Means 1 MeV in terms of SDigits amplitude
   fManager = 0 ;
+  fSplitFile= 0 ; 
 
 
 
@@ -172,6 +173,7 @@ AliEMCALDigitizer::AliEMCALDigitizer(const char *headerFile,const char *name)
   SetName(name) ;
   SetTitle(headerFile) ;
   fManager = 0 ;                     // We work in the standalong mode
+  fSplitFile= 0 ; 
   Init() ;
   
 
@@ -190,7 +192,12 @@ AliEMCALDigitizer::AliEMCALDigitizer(AliRunDigitizer * ard):AliDigitizer(ard)
 {
   // dtor
 
+  if (fSplitFile)       
+    if ( fSplitFile->IsOpen() )
+      fSplitFile->Close() ;
+
 }
+
 //____________________________________________________________________________
 void AliEMCALDigitizer::Reset() { 
   //sets current event number to the first simulated event
@@ -486,6 +493,10 @@ if(strcmp(GetName(), "") == 0 )
     fDigitsInRun += gime->Digits()->GetEntriesFast() ;  
   }
   
+  if (fSplitFile) 
+    if ( fSplitFile->IsOpen() ) 
+      fSplitFile->Close() ; 
+
   if(strstr(option,"tim")){
     gBenchmark->Stop("EMCALDigitizer");
     cout << "AliEMCALDigitizer:" << endl ;
@@ -620,7 +631,7 @@ void AliEMCALDigitizer::WriteDigits(Int_t event)
    treeD = fManager->GetTreeD() ;
  else {
    if (!gAlice->TreeD() ) 
-     gAlice->MakeTree("D");
+     gAlice->MakeTree("D",fSplitFile);
    treeD = gAlice->TreeD();
  }
  
@@ -635,7 +646,8 @@ void AliEMCALDigitizer::WriteDigits(Int_t event)
  TBranch * digitizerBranch = treeD->Branch("AliEMCALDigitizer", "AliEMCALDigitizer", &d,bufferSize,splitlevel); 
  digitizerBranch->SetTitle(GetName());
  
- treeD->Fill() ; 
+ digitsBranch->Fill() ;
+ digitizerBranch->Fill() ; 
  treeD->AutoSave() ;  
  
 }
@@ -676,7 +688,7 @@ void AliEMCALDigitizer::SetSDigitsBranch(const char* title)
 }
 
 //__________________________________________________________________
-void AliEMCALDigitizer::SetSplitFile(const TString splitFileName) const
+void AliEMCALDigitizer::SetSplitFile(const TString splitFileName)
 {
   // Diverts the Digits in a file separate from the hits file
   
@@ -687,9 +699,15 @@ void AliEMCALDigitizer::SetSplitFile(const TString splitFileName) const
   }
 
   TDirectory * cwd = gDirectory ;
-  TFile * splitFile = gAlice->InitTreeFile("D",splitFileName.Data());
-  splitFile->cd() ; 
-  gAlice->Write();
+  if ( !(gAlice->GetTreeDFileName() == splitFileName) ) {
+    if (gAlice->GetTreeDFile() )  
+      gAlice->GetTreeDFile()->Close() ; 
+  }
+
+  fSplitFile = gAlice->InitTreeFile("D",splitFileName.Data());
+  fSplitFile->cd() ; 
+  if ( !fSplitFile->Get("gAlice") ) 
+    gAlice->Write();
   
   TTree *treeE  = gAlice->TreeE();
   if (!treeE) {
@@ -698,20 +716,25 @@ void AliEMCALDigitizer::SetSplitFile(const TString splitFileName) const
   }      
   
   // copy TreeE
-  AliHeader *header = new AliHeader();
-  treeE->SetBranchAddress("Header", &header);
-  treeE->SetBranchStatus("*",1);
-  TTree *treeENew =  treeE->CloneTree();
-  treeENew->Write();
-  
+  if ( !fSplitFile->Get("TreeE") ) {
+    AliHeader *header = new AliHeader();
+    treeE->SetBranchAddress("Header", &header);
+    treeE->SetBranchStatus("*",1);
+    TTree *treeENew =  treeE->CloneTree();
+    treeENew->Write();
+  }
+
   // copy AliceGeom
-  TGeometry *AliceGeom = static_cast<TGeometry*>(cwd->Get("AliceGeom"));
-  if (!AliceGeom) {
-    cerr << "ERROR: AliEMCALDigitizer::SetSplitFile -> AliceGeom was not found in the input file "<<endl;
-    abort() ;
+  if ( !fSplitFile->Get("AliceGeom") ) {
+    TGeometry *AliceGeom = static_cast<TGeometry*>(cwd->Get("AliceGeom"));
+    if (!AliceGeom) {
+      cerr << "ERROR: AliEMCALDigitizer::SetSplitFile -> AliceGeom was not found in the input file "<<endl;
+      abort() ;
+    }
+    AliceGeom->Write();
   }
-  AliceGeom->Write();
+  
+  gAlice->MakeTree("D",fSplitFile);
   cwd->cd() ; 
-  gAlice->MakeTree("D",splitFile);
   cout << "INFO: AliEMCALDigitizer::SetSPlitMode -> Digits will be stored in " << splitFileName.Data() << endl ; 
 }
index 96d18eea42d6d3fa0f506f56dcafcba9f12a699a..1beb66ad65417911b9862a2f5c84142ec167e179 100644 (file)
@@ -57,7 +57,7 @@ public:
   void    SetPinNoise(Float_t PinNoise )         {fPinNoise = PinNoise;}
 
   void    SetSDigitsBranch(const char* file) ;
-  void    SetSplitFile(const TString splitFileName = "EMCAL.Digits.root") const ;
+  void    SetSplitFile(const TString splitFileName = "EMCAL.Digits.root") ;
  
 
  AliEMCALDigitizer & operator = (const AliEMCALDigitizer & rvalue)  {
@@ -102,6 +102,7 @@ private:
   Float_t fADCchannelPreSho ;           // width of one ADC channel in Pre Shower (GeV)
   Float_t fADCpedestalPreSho ;                   // 
   Int_t fNADCPreSho ;                // number of channels in Pre Shower ADC
+  TFile * fSplitFile ;               //! file in which Digits will eventually be stored
 
   ClassDef(AliEMCALDigitizer,1)  // description 
 
index 0ac1e94b6e1093041d959799730f26da8f136cb1..4da8bd1df594a379277e5adc445ecdda90f0be68 100644 (file)
@@ -105,6 +105,7 @@ ClassImp(AliPHOSDigitizer)
 
   fTimeThreshold = 0.001*10000000 ; //Means 1 MeV in terms of SDigits amplitude
   fManager = 0 ;                        // We work in the standalong mode
+  fSplitFile= 0 ; 
 }
 
 //____________________________________________________________________________ 
@@ -114,6 +115,7 @@ AliPHOSDigitizer::AliPHOSDigitizer(const char *headerFile,const char * name)
   SetName(name) ;
   SetTitle(headerFile) ;
   fManager = 0 ;                     // We work in the standalong mode
+  fSplitFile= 0 ; 
   Init() ;
   
 }
@@ -131,6 +133,9 @@ AliPHOSDigitizer::AliPHOSDigitizer(AliRunDigitizer * ard):AliDigitizer(ard)
 {
   // dtor
 
+ if (fSplitFile)       
+   if ( fSplitFile->IsOpen() )         
+     fSplitFile->Close() ;
 
 }
 
@@ -462,6 +467,10 @@ void AliPHOSDigitizer::Exec(Option_t *option)
     fDigitsInRun += gime->Digits()->GetEntriesFast() ;  
   }
   
+  if (fSplitFile) 
+    if ( fSplitFile->IsOpen() ) 
+      fSplitFile->Close() ; 
   if(strstr(option,"tim")){
     gBenchmark->Stop("PHOSDigitizer");
     cout << "AliPHOSDigitizer:" << endl ;
@@ -593,7 +602,7 @@ void AliPHOSDigitizer::MixWith(const char* headerFile)
 }
 
 //__________________________________________________________________
-void AliPHOSDigitizer::SetSplitFile(const TString splitFileName) const
+void AliPHOSDigitizer::SetSplitFile(const TString splitFileName)
 {
   // Diverts the Digits in a file separate from the hits file
   
@@ -604,9 +613,14 @@ void AliPHOSDigitizer::SetSplitFile(const TString splitFileName) const
   }
 
   TDirectory * cwd = gDirectory ;
-  TFile * splitFile = gAlice->InitTreeFile("D",splitFileName.Data());
-  splitFile->cd() ; 
-  if ( !splitFile->Get("gAlice") ) 
+  if ( !(gAlice->GetTreeDFileName() == splitFileName) ) {
+    if (gAlice->GetTreeDFile() )  
+      gAlice->GetTreeDFile()->Close() ; 
+  }
+
+  fSplitFile = gAlice->InitTreeFile("D",splitFileName.Data());
+  fSplitFile->cd() ; 
+  if ( !fSplitFile->Get("gAlice") ) 
     gAlice->Write();
   
   TTree *treeE  = gAlice->TreeE();
@@ -616,7 +630,7 @@ void AliPHOSDigitizer::SetSplitFile(const TString splitFileName) const
   }      
   
   // copy TreeE
-  if ( !splitFile->Get("TreeE") ) {
+  if ( !fSplitFile->Get("TreeE") ) {
     AliHeader *header = new AliHeader();
     treeE->SetBranchAddress("Header", &header);
     treeE->SetBranchStatus("*",1);
@@ -625,7 +639,7 @@ void AliPHOSDigitizer::SetSplitFile(const TString splitFileName) const
   }
 
   // copy AliceGeom
-  if ( !splitFile->Get("AliceGeom") ) {
+  if ( !fSplitFile->Get("AliceGeom") ) {
     TGeometry *AliceGeom = static_cast<TGeometry*>(cwd->Get("AliceGeom"));
     if (!AliceGeom) {
       cerr << "ERROR: AliPHOSDigitizer::SetSplitFile -> AliceGeom was not found in the input file "<<endl;
@@ -634,8 +648,8 @@ void AliPHOSDigitizer::SetSplitFile(const TString splitFileName) const
     AliceGeom->Write();
   }
   
+  gAlice->MakeTree("D",fSplitFile);
   cwd->cd() ; 
-  gAlice->MakeTree("D",splitFile);
   cout << "INFO: AliPHOSDigitizer::SetSPlitMode -> Digits will be stored in " << splitFileName.Data() << endl ; 
 }
 
@@ -782,7 +796,7 @@ void AliPHOSDigitizer::WriteDigits(Int_t event)
    treeD = fManager->GetTreeD() ;
  else {
    if (!gAlice->TreeD() ) 
-     gAlice->MakeTree("D");
+     gAlice->MakeTree("D", fSplitFile);
    treeD = gAlice->TreeD();
  }
 
@@ -799,6 +813,7 @@ void AliPHOSDigitizer::WriteDigits(Int_t event)
   digitizerBranch->SetTitle(GetName());
 
   digitsBranch->Fill() ;
+  digitizerBranch->Fill() ; 
   treeD->AutoSave() ; 
  
 }
index 3f9ad00e4cb1828ad66c88c25a7f55f0e5b73438..9c50f0ef649315ac9899961fff48b299be9b4468 100644 (file)
@@ -69,7 +69,7 @@ public:
   void    MixWith(const char* HeaderFile) ; // Add another one file to mix
   void    Print(Option_t* option)const ;
   void    Reset() ;   //restarts starts event processing from 0 event(s)
-  void    SetSplitFile(const TString splitFileName = "PHOS.Digits.root") const ;
+  void    SetSplitFile(const TString splitFileName = "PHOS.Digits.root") ;
   void    SetSDigitsBranch(const char* file) ;
 
   AliPHOSDigitizer & operator = (const AliPHOSDigitizer & rvalue)  {
@@ -112,6 +112,7 @@ private:
   Float_t fADCchanelCpv ;           // width of one ADC channel in CPV 'popugais'
   Float_t fADCpedestalCpv ;         // 
   Int_t   fNADCcpv ;                // number of channels in CPV ADC
+  TFile * fSplitFile ;             //! file in which Digits will eventually be stored
 
 
   ClassDef(AliPHOSDigitizer,1)  // description