#include "AliLog.h"
#include "AliStrLine.h"
#include "AliExternalTrackParam.h"
+#include "AliVEvent.h"
+#include "AliVTrack.h"
#include "AliESDEvent.h"
#include "AliESDtrack.h"
#include "AliVertexerTracks.h"
//
SetVtxStart();
SetVtxStartSigma();
- SetTPCMode();
}
//-----------------------------------------------------------------------------
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
//
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;
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) {
#include "AliExternalTrackParam.h"
#include "AliLog.h"
+class AliVEvent;
class AliESDEvent;
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,
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; }