]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSreconstruction.cxx
from Ruediger
[u/mrichter/AliRoot.git] / ITS / AliITSreconstruction.cxx
index 88167646502e5047bd4081f696433ceada1de712..0e099239b85e9991eff1f2a7606237a5694063f7 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
  
-/*
-$Log$
-Revision 1.4  2002/05/10 22:31:30  nilsen
-Changes by Massimo Masera to allow Recpoints and Clusters to be written
-to separate files.
+/* $Id$ */
+/////////////////////////////////////////////////////////////////////////
+//                                                                     //
+// Class for ITS RecPoint reconstruction                               //
+//                                                                     //
+////////////////////////////////////////////////////////////////////////
 
-Revision 1.3  2002/02/06 13:52:27  barbera
-gAlice deletion corrected (from M. Masera)
-
-Revision 1.2  2002/01/31 18:52:09  nilsen
-Minor change to allow the use of files that are already open. grun.C macro
-that also does ITS digitizationa and Reconstruction all in one go.
-
-Revision 1.1  2002/01/30 22:20:22  nilsen
-New TTask based method to do Digits To clusters. Works with files of multiple
-events in the file. Macro added to show how to use. Also the changes made
-in the nessesary complilation files.
-
-*/
-#include <TROOT.h>
-#include <TFile.h>
-#include <TSeqCollection.h>
 #include <TString.h>
-#include <TClonesArray.h>
-
 #include "AliRun.h"
-
-#include "AliITS.h"
-#include "AliITSDetType.h"
+#include "AliRunLoader.h"
+#include "AliITSDetTypeRec.h"
+#include "AliITSLoader.h"
 #include "AliITSreconstruction.h"
-#include "AliITSsegmentationSPD.h"
-#include "AliITSsegmentationSDD.h"
-#include "AliITSsegmentationSSD.h"
-#include "AliITSClusterFinderSPD.h"
-#include "AliITSClusterFinderSDD.h"
-#include "AliITSClusterFinderSSD.h"
-#include "AliITSresponseSDD.h"
 #include "AliITSgeom.h"
 
+using std::endl;
+using std::cout;
 ClassImp(AliITSreconstruction)
 
 //______________________________________________________________________
-AliITSreconstruction::AliITSreconstruction(){
+AliITSreconstruction::AliITSreconstruction():
+ fInit(kFALSE),
+ fEnt(0),
+ fEnt0(0),
+ fDetTypeRec(0x0),
+ fDfArp(kFALSE),
+ fITSgeom(0x0),
+ fLoader(0x0),
+ fRunLoader(0x0)
+{
     // Default constructor.
     // Inputs:
     //  none.
@@ -63,16 +50,33 @@ AliITSreconstruction::AliITSreconstruction(){
     //   none.
     // Return:
     //    A zero-ed constructed AliITSreconstruction class.
-
-    fFilename = "";
-    fFile     = 0;
-    fFile2    = 0;
-    fITS      = 0;
     fDet[0] = fDet[1] = fDet[2] = kTRUE;
-    fInit     = kFALSE;
 }
 //______________________________________________________________________
-AliITSreconstruction::AliITSreconstruction(const char* filename){
+
+AliITSreconstruction::AliITSreconstruction(AliRunLoader *rl):
+ fInit(kFALSE),
+ fEnt(0),
+ fEnt0(0),
+ fDetTypeRec(0x0),
+ fDfArp(kFALSE),
+ fITSgeom(0x0),
+ fLoader(0x0),
+ fRunLoader(rl)
+{
+  fDet[0] = fDet[1] = fDet[2] = kTRUE;
+}
+//______________________________________________________________________
+AliITSreconstruction::AliITSreconstruction(const char* filename):
+ fInit(kFALSE),
+ fEnt(0),
+ fEnt0(0),
+ fDetTypeRec(0x0),
+ fDfArp(kFALSE),
+ fITSgeom(0x0),
+ fLoader(0x0),
+ fRunLoader(0x0)
+{
     // Standard constructor.
     // Inputs:
     //  const char* filename    filename containing the digits to be
@@ -85,38 +89,24 @@ AliITSreconstruction::AliITSreconstruction(const char* filename){
     // Return:
     //    A standardly constructed AliITSreconstruction class.
 
-    fFilename = filename;
-    fFile2 = 0;
-    fFile = 0;
-    if(filename){
-       fFile = (TFile*)gROOT->GetListOfFiles()->FindObject(fFilename.Data());
-       if(fFile) fFile->Close();
-       fFile = new TFile(fFilename.Data(),"UPDATE");
-    if(gAlice) {
-      delete gAlice;
-      gAlice = 0;
-    }
-       gAlice = (AliRun*)fFile->Get("gAlice");
-       if(!gAlice) {
-           cout << "gAlice not found on file. Aborting." << endl;
-           fInit = kFALSE;
-           return;
-       } // end if !gAlice
-    } // end if !filename.
+    fDet[0] = fDet[1] = fDet[2] = kTRUE;
+
+    fRunLoader = AliRunLoader::Open(filename);
+    if (fRunLoader == 0x0)
+     {
+       Error("AliITSreconstruction","Can not load the session %s \n",filename);
+       return;
+     }
+
 }
+
+
 //______________________________________________________________________
 AliITSreconstruction::~AliITSreconstruction(){
-    // Default constructor.
-    // Inputs:
-    //  none.
-    // Outputs:
-    //   none.
-    // Return:
     //    A destroyed AliITSreconstruction class.
-
-    if(fFile) fFile->Close();
-    fFile     = 0;
-    fITS      = 0;
+    
+    //fITS      = 0;
+    delete fRunLoader;
     
 }
 //______________________________________________________________________
@@ -128,28 +118,46 @@ Bool_t AliITSreconstruction::Init(){
     //   none.
     // Return:
     //    kTRUE if no errors initilizing this class occurse else kFALSE
-    Int_t nparticles;
-    fITS = (AliITS*) gAlice->GetDetector("ITS");
-    if(!fITS){
-       cout << "ITS not found aborting. fITS=" << fITS << endl;
-       fInit = kFALSE;
-       return fInit;
-    } // end if !fITS
-    if(!(fITS->GetITSgeom())){
-       cout << "ITSgeom not found aborting."<< endl;
-       fInit = kFALSE;
-       return fInit;
-    } // end if !GetITSgeom()
+    Info("Init"," Init ITS reconstruction");
+    if (fRunLoader == 0x0)
+     {
+       Error("Init","Run Loader is NULL");
+       return kFALSE;
+     }
+    //  fRunLoader->LoadgAlice();
+    //   fRunLoader->LoadHeader();  
+
+    fLoader = (AliITSLoader*) fRunLoader->GetLoader("ITSLoader");
+    if(!fLoader) {
+      Error("Init","ITS loader not found");
+      fInit = kFALSE;
+    }
+
     // Now ready to init.
+    //fRunLoader->CdGAFile();
+    fITSgeom = fLoader->GetITSgeom();
 
+    fDetTypeRec = new AliITSDetTypeRec();
+    fDetTypeRec->SetITSgeom(fITSgeom);
+    fDetTypeRec->SetDefaults();
     fDet[0] = fDet[1] = fDet[2] = kTRUE;
     fEnt0 = 0;
-    fEnt  = gAlice->GetEventsPerRun();
-    fITS->MakeTreeC();
-    nparticles = gAlice->GetEvent(fEnt0);
-    
-    // finished init.
+
+    fEnt = Int_t(fRunLoader->GetNumberOfEvents());
+
+    fLoader->LoadDigits("read");
+    fLoader->LoadRecPoints("recreate");
+    if (fLoader->TreeR() == 0x0) fLoader->MakeTree("R");
+    fDetTypeRec->SetTreeAddressD(fLoader->TreeD());
+    fDetTypeRec->MakeBranchR(fLoader->TreeR());
+    fDetTypeRec->SetTreeAddressR(fLoader->TreeR());
+
     fInit = InitRec();
+
+    Info("Init","  Done\n\n\n");
+
     return fInit;
 }
 //______________________________________________________________________
@@ -161,46 +169,11 @@ Bool_t AliITSreconstruction::InitRec(){
     //      none.
     // Return:
     //      none.
-    AliITSDetType *idt;
 
-    // SPD
-    if(fDet[kSPD]){
-       idt = fITS->DetType(kSPD);
-       AliITSsegmentationSPD *segSPD = (AliITSsegmentationSPD*)
-                                              idt->GetSegmentationModel();
-       TClonesArray *digSPD = fITS->DigitsAddress(kSPD);
-       TClonesArray *recpSPD = fITS->ClustersAddress(kSPD);
-       AliITSClusterFinderSPD *recSPD = new AliITSClusterFinderSPD(segSPD,
-                                                                   digSPD,
-                                                                   recpSPD);
-       fITS->SetReconstructionModel(kSPD,recSPD);
-    } // end if fDet[kSPD].
-    // SDD
-    if(fDet[kSDD]){
-       idt = fITS->DetType(kSDD);
-       AliITSsegmentationSDD *segSDD = (AliITSsegmentationSDD*)
-                                          idt->GetSegmentationModel();
-       AliITSresponseSDD *resSDD = (AliITSresponseSDD*)
-                                          idt->GetResponseModel();
-       TClonesArray *digSDD = fITS->DigitsAddress(kSDD);
-       TClonesArray *recpSDD = fITS->ClustersAddress(kSDD);
-       AliITSClusterFinderSDD *recSDD =new AliITSClusterFinderSDD(segSDD,
-                                                                  resSDD,
-                                                              digSDD,recpSDD);
-       fITS->SetReconstructionModel(kSDD,recSDD);
-    } // end if fDet[kSDD]
-    // SSD
-    if(fDet[kSSD]){
-       idt = fITS->DetType(kSSD);
-       AliITSsegmentationSSD *segSSD = (AliITSsegmentationSSD*)
-                                        idt->GetSegmentationModel();
-       TClonesArray *digSSD = fITS->DigitsAddress(kSSD);
-       AliITSClusterFinderSSD *recSSD =new AliITSClusterFinderSSD(segSSD,
-                                                                  digSSD);
-       fITS->SetReconstructionModel(kSSD,recSSD);
-    } // end if fDet[kSSD]
 
-    return kTRUE;
+  fDetTypeRec->SetDefaultClusterFindersV2();
+  Info("InitRec","    Done\n");
+  return kTRUE;
 }
 //______________________________________________________________________ 
 void AliITSreconstruction::Exec(const Option_t *opt){
@@ -212,51 +185,55 @@ void AliITSreconstruction::Exec(const Option_t *opt){
     // Return:
     //      none.
     Option_t *lopt;
-    Int_t nparticles,evnt;
-
-    if(strstr(opt,"All")||strstr(opt,"ALL")||strstr(opt,"ITS")||opt==0){
-       fDet[0] = fDet[1] = fDet[2] = kTRUE;
-       lopt = "All";
+    Int_t evnt;
+    Bool_t condition =kFALSE;
+    if(opt){
+      if(strstr(opt,"All")||strstr(opt,"ALL")||strstr(opt,"ITS"))condition =kTRUE;
+    }
+    else{
+      condition = kTRUE;
+    }
+    if(condition){
+      fDet[0] = fDet[1] = fDet[2] = kTRUE;
+      lopt = "All";
     }else{
-       fDet[0] = fDet[1] = fDet[2] = kFALSE;
-       if(strstr(opt,"SPD")) fDet[kSPD] = kTRUE;
-       if(strstr(opt,"SDD")) fDet[kSDD] = kTRUE;
-       if(strstr(opt,"SSD")) fDet[kSSD] = kTRUE;
-       if(fDet[kSPD] && fDet[kSDD] && fDet[kSSD]) lopt = "All";
-       else lopt = opt;
+      fDet[0] = fDet[1] = fDet[2] = kFALSE;
+      if(strstr(opt,"SPD")) fDet[kSPD] = kTRUE;
+      if(strstr(opt,"SDD")) fDet[kSDD] = kTRUE;
+      if(strstr(opt,"SSD")) fDet[kSSD] = kTRUE;
+      if(fDet[kSPD] && fDet[kSDD] && fDet[kSSD]) lopt = "All";
+      else lopt = opt;
     } // end if strstr(opt,...)
 
     if(!fInit){
-       cout << "Initilization Failed, Can't run Exec." << endl;
-       return;
+      cout << "Initilization Failed, Can't run Exec." << endl;
+      return;
     } // end if !fInit
-    TDirectory *curr = gDirectory;
-    if(fFile2)fFile2->cd();
-    for(evnt=0;evnt<fEnt;evnt++){
-      nparticles = gAlice->GetEvent(evnt);
-      gAlice->SetEvent(evnt);
-      if(!gAlice->TreeR()){
-        if(fFile2){
-          gAlice->MakeTree("R",fFile2);
-        }
-        else {
-          gAlice->MakeTree("R");
-        }
-      }
-      fITS->MakeBranch("R");
-      fITS->MakeTreeC();
-      fITS->DigitsToRecPoints(evnt,0,lopt);
+    for(evnt=0;evnt<fEnt;evnt++)
+     {
+       //      Info("Exec","");
+      Info("Exec","Processing Event %d",evnt);
+      //      Info("Exec","");
+
+      fRunLoader->GetEvent(evnt);
+      if (fLoader->TreeR() == 0x0) fLoader->MakeTree("R");
+      fDetTypeRec->MakeBranchR(0);
+      fDetTypeRec->SetTreeAddressR(fLoader->TreeR());
+      fDetTypeRec->SetTreeAddressD(fLoader->TreeD());
+      fDetTypeRec->DigitsToRecPoints(fLoader->TreeD(),fLoader->TreeR(),0,lopt);
     } // end for evnt
-    curr->cd();
 }
 //______________________________________________________________________ 
 void AliITSreconstruction::SetOutputFile(TString filename){
-  // Set a file name for recpoints. Used only if this file is not the file
-  // containing digits. This obj is deleted by AliRun.
-  fFile2 = gAlice->InitTreeFile("R",filename);
+  // Set a new file name for recpoints. 
+  // It must be called before Init()
+  if(!fLoader)fLoader = (AliITSLoader*) fRunLoader->GetLoader("ITSLoader");
+  if(fLoader){
+    Info("SetOutputFile","name for rec points is %s",filename.Data());
+    fLoader->SetRecPointsFileName(filename);
+  }
+  else {
+    Error("SetOutputFile",
+    "ITS loader not available. Not possible to set name: %s",filename.Data());
+  }
 }
-
-
-
-
-