Create the verxer inside the event loop. In this way we can handle correctly the...
authorcvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 28 Nov 2008 16:39:30 +0000 (16:39 +0000)
committercvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 28 Nov 2008 16:39:30 +0000 (16:39 +0000)
STEER/AliReconstruction.cxx
STEER/AliReconstruction.h

index c1ed0ac..be791a8 100644 (file)
@@ -245,7 +245,6 @@ AliReconstruction::AliReconstruction(const char* gAliceFilename) :
 
   fRecoParam(),
 
-  fVertexer(NULL),
   fDiamondProfileSPD(NULL),
   fDiamondProfile(NULL),
   fDiamondProfileTPC(NULL),
@@ -339,7 +338,6 @@ AliReconstruction::AliReconstruction(const AliReconstruction& rec) :
 
   fRecoParam(rec.fRecoParam),
 
-  fVertexer(NULL),
   fDiamondProfileSPD(rec.fDiamondProfileSPD),
   fDiamondProfile(rec.fDiamondProfile),
   fDiamondProfileTPC(rec.fDiamondProfileTPC),
@@ -464,7 +462,6 @@ AliReconstruction& AliReconstruction::operator = (const AliReconstruction& rec)
     fQAWriteExpert[iDet] = rec.fQAWriteExpert[iDet] ;
   } 
     
-  fVertexer             = NULL;
   delete fDiamondProfileSPD; fDiamondProfileSPD = NULL;
   if (rec.fDiamondProfileSPD) fDiamondProfileSPD = new AliESDVertex(*rec.fDiamondProfileSPD);
   delete fDiamondProfile; fDiamondProfile = NULL;
@@ -1318,13 +1315,6 @@ void AliReconstruction::SlaveBegin(TTree*)
  
   ftVertexer = new AliVertexerTracks(AliTracker::GetBz());
 
-  // get vertexer
-  if (fRunVertexFinder && !CreateVertexer()) {
-    Abort("CreateVertexer", TSelector::kAbortProcess);
-    return;
-  }
-  AliSysInfo::AddStamp("CreateVertexer");
-
   // get trackers
   if (!fRunTracking.IsNull() && !CreateTrackers(fRunTracking)) {
     Abort("CreateTrackers", TSelector::kAbortProcess);
@@ -1973,56 +1963,43 @@ Bool_t AliReconstruction::RunVertexFinder(AliESDEvent*& esd)
 
   AliCodeTimerAuto("")
 
+  AliVertexer *vertexer = CreateVertexer();
+  if (!vertexer) return kFALSE;
+
+  AliInfo("running the ITS vertex finder");
   AliESDVertex* vertex = NULL;
-  Double_t vtxPos[3] = {0, 0, 0};
-  Double_t vtxErr[3] = {0.07, 0.07, 0.1};
-  TArrayF mcVertex(3); 
-  if (fRunLoader->GetHeader() && fRunLoader->GetHeader()->GenEventHeader()) {
-    fRunLoader->GetHeader()->GenEventHeader()->PrimaryVertex(mcVertex);
-    for (Int_t i = 0; i < 3; i++) vtxPos[i] = mcVertex[i];
-  }
-
-  if (fVertexer) {
-    AliInfo("running the ITS vertex finder");
-    if (fLoader[0]) {
-      fLoader[0]->LoadRecPoints();
-      TTree* cltree = fLoader[0]->TreeR();
-      if (cltree) {
-       if(fDiamondProfileSPD) fVertexer->SetVtxStart(fDiamondProfileSPD);
-       vertex = fVertexer->FindVertexForCurrentEvent(cltree);
-      }
-      else {
-       AliError("Can't get the ITS cluster tree");
-      }
-      fLoader[0]->UnloadRecPoints();
+  if (fLoader[0]) {
+    fLoader[0]->LoadRecPoints();
+    TTree* cltree = fLoader[0]->TreeR();
+    if (cltree) {
+      if(fDiamondProfileSPD) vertexer->SetVtxStart(fDiamondProfileSPD);
+      vertex = vertexer->FindVertexForCurrentEvent(cltree);
     }
     else {
-      AliError("Can't get the ITS loader");
+      AliError("Can't get the ITS cluster tree");
     }
-    if(!vertex){
-      AliWarning("Vertex not found");
-      vertex = new AliESDVertex();
-      vertex->SetName("default");
-    }
-    else {
-      vertex->SetName("reconstructed");
-    }
-
-  } else {
-    AliInfo("getting the primary vertex from MC");
-    vertex = new AliESDVertex(vtxPos, vtxErr);
+    fLoader[0]->UnloadRecPoints();
   }
-
-  if (vertex) {
-    vertex->GetXYZ(vtxPos);
-    vertex->GetSigmaXYZ(vtxErr);
-  } else {
-    AliWarning("no vertex reconstructed");
-    vertex = new AliESDVertex(vtxPos, vtxErr);
+  else {
+    AliError("Can't get the ITS loader");
+  }
+  if(!vertex){
+    AliWarning("Vertex not found");
+    vertex = new AliESDVertex();
+    vertex->SetName("default");
+  }
+  else {
+    vertex->SetName("reconstructed");
   }
+
+  Double_t vtxPos[3];
+  Double_t vtxErr[3];
+  vertex->GetXYZ(vtxPos);
+  vertex->GetSigmaXYZ(vtxErr);
+
   esd->SetPrimaryVertexSPD(vertex);
   // if SPD multiplicity has been determined, it is stored in the ESD
-  AliMultiplicity *mult = fVertexer->GetMultiplicity();
+  AliMultiplicity *mult = vertexer->GetMultiplicity();
   if(mult)esd->SetMultiplicity(mult);
 
   for (Int_t iDet = 0; iDet < kNDetectors; iDet++) {
@@ -2030,6 +2007,8 @@ Bool_t AliReconstruction::RunVertexFinder(AliESDEvent*& esd)
   }  
   delete vertex;
 
+  delete vertexer;
+
   return kTRUE;
 }
 
@@ -2595,21 +2574,22 @@ AliReconstructor* AliReconstruction::GetReconstructor(Int_t iDet)
 }
 
 //_____________________________________________________________________________
-Bool_t AliReconstruction::CreateVertexer()
+AliVertexer* AliReconstruction::CreateVertexer()
 {
 // create the vertexer
+// Please note that the caller is the owner of the
+// vertexer
 
-  fVertexer = NULL;
+  AliVertexer* vertexer = NULL;
   AliReconstructor* itsReconstructor = GetReconstructor(0);
   if (itsReconstructor) {
-    fVertexer = itsReconstructor->CreateVertexer();
+    vertexer = itsReconstructor->CreateVertexer();
   }
-  if (!fVertexer) {
+  if (!vertexer) {
     AliWarning("couldn't create a vertexer for ITS");
-    if (fStopOnError) return kFALSE;
   }
 
-  return kTRUE;
+  return vertexer;
 }
 
 //_____________________________________________________________________________
@@ -2660,9 +2640,6 @@ void AliReconstruction::CleanUp()
   delete fRunInfo;
   fRunInfo = NULL;
 
-  delete fVertexer;
-  fVertexer = NULL;
-
   delete ftVertexer;
   ftVertexer = NULL;
   
index 00c34ba..b8cd1af 100644 (file)
@@ -175,7 +175,7 @@ private:
   Bool_t         IsSelected(TString detName, TString& detectors) const;
   Bool_t         InitRunLoader();
   AliReconstructor* GetReconstructor(Int_t iDet);
-  Bool_t         CreateVertexer();
+  AliVertexer*   CreateVertexer();
   void           CleanUp();
 
   //==========================================//
@@ -247,7 +247,6 @@ private:
   AliReconstructor*  fReconstructor[kNDetectors];  //! array of reconstructor objects
   AliRecoParam   fRecoParam;                      // container for the reco-param objects for detectors
   AliLoader*     fLoader[kNDetectors];   //! detector loaders
-  AliVertexer*   fVertexer;                //! vertexer for ITS
   AliTracker*    fTracker[kNDetectors];  //! trackers
   AliESDVertex*  fDiamondProfileSPD;       // (x,y) diamond profile from SPD for AliITSVertexer3D(Z)
   AliESDVertex*  fDiamondProfile;          // (x,y) diamond profile for AliVertexerTracks (ITS+TPC)
@@ -288,7 +287,7 @@ private:
 
   TTree*              fChain;      //! The raw-data chain in case of AliRawReaderChain
 
-  ClassDef(AliReconstruction, 29)      // class for running the reconstruction
+  ClassDef(AliReconstruction, 30)      // class for running the reconstruction
 };
 
 #endif