]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSreconstruction.cxx
Add plot for check of drift speed calibration
[u/mrichter/AliRoot.git] / ITS / AliITSreconstruction.cxx
index 8a4fb39edfcc457400c1fd00d727166c23da7e17..aee2a3fcfa81d146684f1e4a3000b5b6f4a4abea 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
  
-/*
-$Log$
-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>
+/* $Id$ */
+/////////////////////////////////////////////////////////////////////////
+//                                                                     //
+// Class for ITS RecPoint reconstruction                               //
+//                                                                     //
+////////////////////////////////////////////////////////////////////////
 
+#include <TString.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"
 
+
 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.
@@ -52,15 +49,33 @@ AliITSreconstruction::AliITSreconstruction(){
     //   none.
     // Return:
     //    A zero-ed constructed AliITSreconstruction class.
-
-    fFilename = "";
-    fFile     = 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
@@ -73,37 +88,48 @@ AliITSreconstruction::AliITSreconstruction(const char* filename){
     // Return:
     //    A standardly constructed AliITSreconstruction class.
 
-    fFilename = filename;
-
-    if(filename){
-       fFile = (TFile*)gROOT->GetListOfFiles()->FindObject(fFilename.Data());
-       if(fFile) fFile->Close();
-       fFile = new TFile(fFilename.Data(),"UPDATE");
-       //
-       if(gAlice) delete gAlice;
-       gAlice = (AliRun*)fFile->Get("gAlice");
-       if(!gAlice) {
-           cout << "gAlice not found on file. Aborting." << endl;
-           fInit = kFALSE;
-           return;
-       } // end if !gAlice
-    } // end if !filename.
-
-    Init();
+    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(const AliITSreconstruction &rec):TTask(rec),
+fInit(rec.fInit),
+fEnt(rec.fEnt),
+fEnt0(rec.fEnt0),
+fDetTypeRec(rec.fDetTypeRec),
+fDfArp(rec.fDfArp),
+fITSgeom(rec.fITSgeom),
+fLoader(rec.fLoader),
+fRunLoader(rec.fRunLoader)
+{
+    // Copy constructor. 
+
+  
+}
+
+//______________________________________________________________________
+AliITSreconstruction& AliITSreconstruction::operator=(const AliITSreconstruction& source){
+    // Assignment operator. 
+  this->~AliITSreconstruction();
+  new(this) AliITSreconstruction(source);
+  return *this;
+
+}
+
 //______________________________________________________________________
 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;
     
 }
 //______________________________________________________________________
@@ -115,29 +141,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;
 }
 //______________________________________________________________________
@@ -149,46 +192,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){
@@ -200,29 +208,49 @@ void AliITSreconstruction::Exec(const Option_t *opt){
     // Return:
     //      none.
     Option_t *lopt;
-    Int_t nparticles,evnt;
+    Int_t evnt;
 
     if(strstr(opt,"All")||strstr(opt,"ALL")||strstr(opt,"ITS")||opt==0){
-       fDet[0] = fDet[1] = fDet[2] = kTRUE;
-       lopt = "All";
+      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
-    for(evnt=0;evnt<fEnt;evnt++){
-       nparticles = gAlice->GetEvent(evnt);
-       gAlice->SetEvent(evnt);
-       if(!gAlice->TreeR()) gAlice->MakeTree("R");
-       fITS->MakeBranch("R");
-       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
 }
+//______________________________________________________________________ 
+void AliITSreconstruction::SetOutputFile(TString 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());
+  }
+}