]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
AliVertexerTracks works now with the new AliVEvent and AliVTrack classes (A. Dainese)
authorbelikov <belikov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 24 Oct 2008 14:51:37 +0000 (14:51 +0000)
committerbelikov <belikov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 24 Oct 2008 14:51:37 +0000 (14:51 +0000)
STEER/AliVertexerTracks.cxx
STEER/AliVertexerTracks.h

index de569baa2fb38c98431aa2923e651755c86b337d..5633121323d93a08aa6ecc6eafa036c1678a2bbe 100644 (file)
@@ -35,6 +35,8 @@
 #include "AliLog.h"
 #include "AliStrLine.h"
 #include "AliExternalTrackParam.h"
+#include "AliVEvent.h"
+#include "AliVTrack.h"
 #include "AliESDEvent.h"
 #include "AliESDtrack.h"
 #include "AliVertexerTracks.h"
@@ -107,7 +109,6 @@ fAlgo(1)
 //
   SetVtxStart();
   SetVtxStartSigma();
-  SetTPCMode();
 }
 //-----------------------------------------------------------------------------
 AliVertexerTracks::~AliVertexerTracks() 
@@ -120,10 +121,10 @@ AliVertexerTracks::~AliVertexerTracks()
   if(fIdSel) { delete [] fIdSel; fIdSel=NULL; }
 }
 //----------------------------------------------------------------------------
-AliESDVertex* AliVertexerTracks::FindPrimaryVertex(const AliESDEvent *esdEvent)
+AliESDVertex* AliVertexerTracks::FindPrimaryVertex(const AliVEvent *vEvent)
 {
 //
-// Primary vertex for current ESD event
+// Primary vertex for current ESD or AOD event
 // (Two iterations: 
 //  1st with 5*fNSigma*sigma cut w.r.t. to initial vertex
 //      + cut on sqrt(d0d0+z0z0) if fConstraint=kFALSE  
@@ -131,11 +132,20 @@ AliESDVertex* AliVertexerTracks::FindPrimaryVertex(const AliESDEvent *esdEvent)
 //
   fCurrentVertex = 0;
 
+  TString evtype = vEvent->IsA()->GetName();
+  Bool_t inputAOD = ((evtype=="AliAODEvent") ? kTRUE : kFALSE);
+
+  if(inputAOD && fMode==1) {
+    printf("Error : AliVertexerTracks: no TPC-only vertex from AOD\n"); 
+    TooFewTracks(); 
+    return fCurrentVertex;
+  }
+
   // accept 1-track case only if constraint is available
   if(!fConstraint && fMinTracks==1) fMinTracks=2;
 
-  // read tracks from ESD
-  Int_t nTrks = (Int_t)esdEvent->GetNumberOfTracks();
+  // read tracks from AlivEvent
+  Int_t nTrks = (Int_t)vEvent->GetNumberOfTracks();
   if(nTrks<fMinTracks) {
     TooFewTracks();
     return fCurrentVertex;
@@ -150,43 +160,36 @@ AliESDVertex* AliVertexerTracks::FindPrimaryVertex(const AliESDEvent *esdEvent)
 
   Int_t nTrksOrig=0;
   AliExternalTrackParam *t=0;
-  // loop on ESD tracks
+  // loop on tracks
   for(Int_t i=0; i<nTrks; i++) {
-    AliESDtrack *esdt = esdEvent->GetTrack(i);
-    // check tracks to skip
-    Bool_t skipThis = kFALSE;
-    for(Int_t j=0; j<fNTrksToSkip; j++) { 
-      if(esdt->GetID()==fTrksToSkip[j]) {
-       AliDebug(1,Form("skipping track: %d",i));
-       skipThis = kTRUE;
-      }
-    }
-    if(skipThis) continue;
+    AliVTrack *track = (AliVTrack*)vEvent->GetTrack(i);
+
+    if(fITSrefit && !(track->GetStatus()&AliESDtrack::kITSrefit)) continue;
 
-    // check number of clusters in ITS or TPC
-    if(esdt->GetNcls(fMode) < fMinClusters) continue;
+    // check number of clusters in ITS
+    Int_t ncls0=0;
+    for(Int_t l=0;l<6;l++) if(TESTBIT(track->GetITSClusterMap(),l)) ncls0++;
+    if(fMode==0 && ncls0 < fMinClusters) continue;
 
-    if(fMode==0) {        // ITS mode
-      if(fITSrefit && !(esdt->GetStatus()&AliESDtrack::kITSrefit)) continue;
+    if(!inputAOD) {
       Double_t x,p[5],cov[15];
+      AliESDtrack* esdt = (AliESDtrack*)track;
+      if(esdt->GetNcls(fMode) < fMinClusters) continue;
       esdt->GetExternalParameters(x,p);
       esdt->GetExternalCovariance(cov);
       t = new AliExternalTrackParam(x,esdt->GetAlpha(),p,cov);
-    } else if(fMode==1) { // TPC mode
-      t = (AliExternalTrackParam*)esdt->GetTPCInnerParam();
-      if(!t) continue;
-      Double_t radius = 2.8; //something less than the beam pipe radius
-      if(!PropagateTrackTo(t,radius)) continue;
+    } else {
+      t = new AliExternalTrackParam(track);
     }
     trkArrayOrig.AddLast(t);
-    idOrig[nTrksOrig]=(UShort_t)esdt->GetID();
+    idOrig[nTrksOrig]=(UShort_t)track->GetID();
     nTrksOrig++;
-  } // end loop on ESD tracks
+  } // end loop on tracks
   
   // call method that will reconstruct the vertex
   FindPrimaryVertex(&trkArrayOrig,idOrig);
 
-  if(fMode==0) trkArrayOrig.Delete();
+  trkArrayOrig.Delete();
   delete [] idOrig; idOrig=NULL;
 
   if(f) {
index cc693f4dd7b4a32158823b390d841c1085fcd220..948fc972cf4904a5ca7d98e99fb8230f7692e0ea 100644 (file)
@@ -28,6 +28,7 @@
 #include "AliExternalTrackParam.h"
 #include "AliLog.h"
 
+class AliVEvent;
 class AliESDEvent;
 
 class AliVertexerTracks : public TObject {
@@ -37,7 +38,7 @@ class AliVertexerTracks : public TObject {
   AliVertexerTracks(Double_t fieldkG); 
   virtual ~AliVertexerTracks();
 
-  AliESDVertex* FindPrimaryVertex(const AliESDEvent *esdEvent);
+  AliESDVertex* FindPrimaryVertex(const AliVEvent *vEvent);
   AliESDVertex* FindPrimaryVertex(TObjArray *trkArrayOrig,UShort_t *idOrig);
   AliESDVertex* VertexForSelectedTracks(TObjArray *trkArray,UShort_t *id,
                                        Bool_t optUseFitter=kTRUE,
@@ -75,10 +76,12 @@ class AliVertexerTracks : public TObject {
   void  SetDCAcutIter0(Double_t maxdca) { fDCAcutIter0=maxdca; return; }
   void  SetFinderAlgorithm(Int_t opt=1) { fAlgo=opt; return; }
   void  SetITSrefitRequired() { fITSrefit=kTRUE; return; }
+  Bool_t GetITSrefitRequired() const { return fITSrefit; }
   void  SetITSrefitNotRequired() { fITSrefit=kFALSE; return; }
   void  SetFiducialRZ(Double_t r=3,Double_t z=30) { fFiducialR=r; fFiducialZ=z; return; }
   void  SetMaxd0z0(Double_t maxd0z0=0.5) { fMaxd0z0=maxd0z0; return; }
   void  SetMinClusters(Int_t n=5) { fMinClusters=n; return; }
+  Int_t GetMinClusters() const { return fMinClusters; }
   void  SetMinTracks(Int_t n=1) { fMinTracks=n; return; }
   void  SetNSigmad0(Double_t n=3) { fNSigma=n; return; }
   Double_t GetNSigmad0() const { return fNSigma; }