Added new creator which passes a pointer to type AliRun. Can now use either
[u/mrichter/AliRoot.git] / ITS / AliITSreconstruction.cxx
index 8a4fb39edfcc457400c1fd00d727166c23da7e17..a2f68d9412108db0097b99ecc8d2bc01610bdf5d 100644 (file)
  
 /*
 $Log$
+Revision 1.5  2002/05/13 14:27:57  hristov
+TreeC created once per event (M.Masera)
+
+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.
+
+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
@@ -55,9 +69,32 @@ AliITSreconstruction::AliITSreconstruction(){
 
     fFilename = "";
     fFile     = 0;
+    fFile2    = 0;
     fITS      = 0;
     fDet[0] = fDet[1] = fDet[2] = kTRUE;
     fInit     = kFALSE;
+    fArp      = 0;
+    fDfArp    = kFALSE;
+}
+//______________________________________________________________________
+AliITSreconstruction::AliITSreconstruction(AliRun *ar){
+    // Standard constructor.
+    // Inputs:
+    //  AliRun *ar   Pointer to an existing AliRun object. Assumed that
+    //               this AliRun object will not be deleted by this distructor.
+    // Outputs:
+    //   none.
+    // Return:
+    //    A standardly constructed AliITSreconstruction class.
+
+    fFilename = "";
+    fFile     = 0;
+    fFile2    = 0;
+    fITS      = 0;
+    fDet[0] = fDet[1] = fDet[2] = kTRUE;
+    fInit     = kFALSE;
+    fDfArp    = kFALSE;
+    fArp      = ar;
 }
 //______________________________________________________________________
 AliITSreconstruction::AliITSreconstruction(const char* filename){
@@ -74,22 +111,25 @@ AliITSreconstruction::AliITSreconstruction(const char* filename){
     //    A standardly constructed AliITSreconstruction class.
 
     fFilename = filename;
-
+    fFile2 = 0;
+    fFile = 0;
+    fArp      = 0;
+    fDfArp    = kTRUE;
     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) {
+    if(fArp) {
+      delete fArp;
+      fArp = 0;
+    }
+       fArp = (AliRun*)fFile->Get("gAlice");
+       if(!fArp) {
            cout << "gAlice not found on file. Aborting." << endl;
            fInit = kFALSE;
            return;
-       } // end if !gAlice
+       } // end if !fArp
     } // end if !filename.
-
-    Init();
 }
 //______________________________________________________________________
 AliITSreconstruction::~AliITSreconstruction(){
@@ -104,7 +144,9 @@ AliITSreconstruction::~AliITSreconstruction(){
     if(fFile) fFile->Close();
     fFile     = 0;
     fITS      = 0;
-    
+    if(fDfArp){
+       if(fArp) delete fArp;
+    } // end if
 }
 //______________________________________________________________________
 Bool_t AliITSreconstruction::Init(){
@@ -116,8 +158,7 @@ Bool_t AliITSreconstruction::Init(){
     // Return:
     //    kTRUE if no errors initilizing this class occurse else kFALSE
     Int_t nparticles;
-
-    fITS = (AliITS*) gAlice->GetDetector("ITS");
+    fITS = (AliITS*) fArp->GetDetector("ITS");
     if(!fITS){
        cout << "ITS not found aborting. fITS=" << fITS << endl;
        fInit = kFALSE;
@@ -132,9 +173,9 @@ Bool_t AliITSreconstruction::Init(){
 
     fDet[0] = fDet[1] = fDet[2] = kTRUE;
     fEnt0 = 0;
-    fEnt  = gAlice->GetEventsPerRun();
+    fEnt  = fArp->GetEventsPerRun();
     fITS->MakeTreeC();
-    nparticles = gAlice->GetEvent(fEnt0);
+    nparticles = fArp->GetEvent(fEnt0);
     
     // finished init.
     fInit = InitRec();
@@ -218,11 +259,33 @@ void AliITSreconstruction::Exec(const Option_t *opt){
        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()) gAlice->MakeTree("R");
-       fITS->MakeBranch("R");
-       fITS->DigitsToRecPoints(evnt,0,lopt);
+      nparticles = fArp->GetEvent(evnt);
+      fArp->SetEvent(evnt);
+      if(!fArp->TreeR()){
+        if(fFile2){
+          fArp->MakeTree("R",fFile2);
+        }
+        else {
+          fArp->MakeTree("R");
+        }
+      }
+      fITS->MakeBranch("R");
+      fITS->MakeTreeC();
+      fITS->DigitsToRecPoints(evnt,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 = fArp->InitTreeFile("R",filename);
+}
+
+
+
+
+