]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PHOS/AliPHOSClusterizer.cxx
Metadata record is updated.
[u/mrichter/AliRoot.git] / PHOS / AliPHOSClusterizer.cxx
index a355eea5f77106586111375722688f0f04a4b922..f88550f922d21449a7d4b7f5f72a5cf405072141 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/* $Id$ */
-
 //_________________________________________________________________________
 //  Base class for the clusterization algorithm (pure abstract)
 //*--
 //*-- Author: Yves Schutz  SUBATECH 
 //////////////////////////////////////////////////////////////////////////////
 
-// --- ROOT system ---
-#include "TGeometry.h"
-#include "TDirectory.h"
-#include "TFile.h"
-#include "TTree.h"
-
+#include <TClonesArray.h>
+#include <TTree.h>
 
-// --- Standard library ---
-#include <iostream.h>
-#include <stdlib.h>   
-
-// --- AliRoot header files ---
-#include "AliRun.h" 
 #include "AliPHOSClusterizer.h"
-#include "AliHeader.h" 
-#include "AliPHOSGetter.h"
-#include "AliPHOSSDigitizer.h"
-#include "AliPHOSDigitizer.h"
+#include "AliPHOSDigit.h"
+#include "AliLog.h"
 
 ClassImp(AliPHOSClusterizer)
 
+AliPHOSCalibData * AliPHOSClusterizer::fgCalibData  = 0 ; 
+
 //____________________________________________________________________________
-  AliPHOSClusterizer::AliPHOSClusterizer():TTask("","")
+AliPHOSClusterizer::AliPHOSClusterizer():
+  fGeom(NULL),
+  fDigitsArr(0),
+  fTreeR(0),
+  fEMCRecPoints(0),
+  fCPVRecPoints(0)
 {
   // ctor
-  fSplitFile= 0 ; 
-  fHitsFileName = "" ; 
-  fSDigitsFileName = "" ; 
-  fDigitsFileName = "" ; 
-
+  fDigitsArr    = new TClonesArray("AliPHOSDigit",100);
+  fEMCRecPoints = new TObjArray(100) ;
+  fEMCRecPoints ->SetName("EMCRECPOINTS") ;
+  fCPVRecPoints = new TObjArray(100) ;
+  fCPVRecPoints ->SetName("CPVRECPOINTS") ;
 }
 
 //____________________________________________________________________________
-AliPHOSClusterizer::AliPHOSClusterizer(const char* headerFile, const char* name):
-TTask(name, headerFile)
+AliPHOSClusterizer::AliPHOSClusterizer(AliPHOSGeometry *geom):
+  fGeom(geom),
+  fDigitsArr(0),
+  fTreeR(0),
+  fEMCRecPoints(0),
+  fCPVRecPoints(0)
 {
   // ctor
-  fSplitFile= 0 ; 
-  fDigitsFileName = headerFile ; 
-  AliPHOSGetter * gime = AliPHOSGetter::GetInstance(headerFile, name) ; 
-  gime->Event(0,"D") ; 
-  fSDigitsFileName = gime->Digitizer()->GetTitle() ; 
-  gime = AliPHOSGetter::GetInstance(fSDigitsFileName, name) ; 
-  gime->Event(0,"S") ; 
-  fHitsFileName = gime->SDigitizer()->GetTitle() ; 
+  fDigitsArr    = new TClonesArray("AliPHOSDigit",100);
+  fEMCRecPoints = new TObjArray(100) ;
+  fEMCRecPoints ->SetName("EMCRECPOINTS") ;
+  fCPVRecPoints = new TObjArray(100) ;
+  fCPVRecPoints ->SetName("CPVRECPOINTS") ;
 }
 
 //____________________________________________________________________________
 AliPHOSClusterizer::~AliPHOSClusterizer()
 {
   // dtor
-         
-  fSplitFile = 0 ; ;
+  if (fDigitsArr) {
+    fDigitsArr->Delete();
+    delete fDigitsArr;
+  }
+  if (fEMCRecPoints) {
+    fEMCRecPoints->Delete();
+    delete fEMCRecPoints;
+  }
+  if (fCPVRecPoints) {
+    fCPVRecPoints->Delete();
+    delete fCPVRecPoints;
+  }
 }
 
 //____________________________________________________________________________
-void AliPHOSClusterizer::SetSplitFile(const TString splitFileName) 
+void AliPHOSClusterizer::SetInput(TTree * digitsTree) 
 {
-  // Diverts the RecPoints in a file separate from the Digits file
-  
+  // Get the tree with digits and sets
+  // the input array with digits for PHOS
+  TBranch *branch = digitsTree->GetBranch("PHOS");
+  if (!branch) { 
+    AliError("can't get the branch with the PHOS digits !");
+    return;
+  }
+  fDigitsArr->Clear();
+  branch->SetAddress(&fDigitsArr);
+  branch->GetEntry(0);
+}
 
-  TDirectory * cwd = gDirectory ;
-  fSplitFile = gAlice->InitTreeFile("R",splitFileName.Data());
-  fSplitFile->cd() ; 
-  gAlice->Write(0, TObject::kOverwrite);
+//____________________________________________________________________________
+void AliPHOSClusterizer::SetOutput(TTree * clustersTree) 
+{
+  // Set the output clusters tree,
+  // creates the arrays for EMC and CPV,
+  // and set the corresponding branch addresses
+  fTreeR = clustersTree;
 
-  TTree *treeE  = gAlice->TreeE();
-  if (!treeE) {
-    cerr << "ERROR: AliPHOSClusterizer::SetSplitFile -> No TreeE found "<<endl;
-    abort() ;
-  }      
-  
-  // copy TreeE
-  AliHeader *header = new AliHeader();
-  treeE->SetBranchAddress("Header", &header);
-  treeE->SetBranchStatus("*",1);
-  TTree *treeENew =  treeE->CloneTree();
-  treeENew->Write(0, TObject::kOverwrite);
-    
-  // copy AliceGeom
-  TGeometry *AliceGeom = static_cast<TGeometry*>(cwd->Get("AliceGeom"));
-  if (!AliceGeom) {
-    cerr << "ERROR: AliPHOSClusterizer::SetSplitFile -> AliceGeom was not found in the input file "<<endl;
-    abort() ;
-  }
-  AliceGeom->Write(0, TObject::kOverwrite);
-  
-  gAlice->MakeTree("R", fSplitFile);
-  cwd->cd() ; 
-  cout << "INFO: AliPHOSClusterizer::SetSPlitMode -> RecPoints will be stored in " << splitFileName.Data() << endl ;   
+  AliDebug(9, "Making array for EMC clusters");
+  Int_t split = 0;
+  Int_t bufsize = 32000;
+  fTreeR->Branch("PHOSEmcRP", "TObjArray", &fEMCRecPoints, bufsize, split);
+
+  AliDebug(9, "Making array for CPV clusters");
+  fTreeR->Branch("PHOSCpvRP", "TObjArray", &fCPVRecPoints, bufsize, split);
 }