#include "AliAnalysisVertexingHF.h"
#include "AliAODMCHeader.h"
#include "AliAODMCParticle.h"
+#include "AliVertexerTracks.h"
#include "AliRDHFCuts.h"
#include "AliAnalysisManager.h"
#include "AliInputEventHandler.h"
fWhyRejection(0),
fEvRejectionBits(0),
fRemoveDaughtersFromPrimary(kFALSE),
+fRecomputePrimVertex(kFALSE),
fUseMCVertex(kFALSE),
fUsePhysicsSelection(kTRUE),
fOptPileup(0),
fWhyRejection(source.fWhyRejection),
fEvRejectionBits(source.fEvRejectionBits),
fRemoveDaughtersFromPrimary(source.fRemoveDaughtersFromPrimary),
+ fRecomputePrimVertex(source.fRecomputePrimVertex),
fUseMCVertex(source.fUseMCVertex),
fUsePhysicsSelection(source.fUsePhysicsSelection),
fOptPileup(source.fOptPileup),
fWhyRejection=source.fWhyRejection;
fEvRejectionBits=source.fEvRejectionBits;
fRemoveDaughtersFromPrimary=source.fRemoveDaughtersFromPrimary;
+ fRecomputePrimVertex=source.fRecomputePrimVertex;
fUseMCVertex=source.fUseMCVertex;
fUsePhysicsSelection=source.fUsePhysicsSelection;
fOptPileup=source.fOptPileup;
fEvRejectionBits=0;
Bool_t accept=kTRUE;
+ if(fRecomputePrimVertex){
+ Bool_t vertOK= RecomputePrimaryVertex((AliAODEvent*)event);
+ if(!vertOK){
+ fWhyRejection=6;
+ return kFALSE;
+ }
+ }
+
// check if it's MC
Bool_t isMC=kFALSE;
TClonesArray *mcArray = (TClonesArray*)((AliAODEvent*)event)->GetList()->FindObject(AliAODMCParticle::StdBranchName());
printf("Min SPD mult %d\n",fMinSPDMultiplicity);
printf("Use PID %d\n",(Int_t)fUsePID);
printf("Remove daughters from vtx %d\n",(Int_t)fRemoveDaughtersFromPrimary);
+ printf("Recompute primary vertex %d\n",(Int_t)fRecomputePrimVertex);
printf("Physics selection: %s\n",fUsePhysicsSelection ? "Yes" : "No");
printf("Pileup rejection: %s\n",(fOptPileup > 0) ? "Yes" : "No");
if(fOptPileup==1) printf(" -- Reject pileup event");
}
+//--------------------------------------------------------------------------
+Bool_t AliRDHFCuts::RecomputePrimaryVertex(AliAODEvent* event) const{
+ // recompute event primary vertex from AOD tracks
+
+ AliVertexerTracks *vertexer = new AliVertexerTracks(event->GetMagneticField());
+ vertexer->SetITSMode();
+ vertexer->SetMinClusters(3);
+
+ AliAODVertex* pvtx=event->GetPrimaryVertex();
+ if(strstr(pvtx->GetTitle(),"VertexerTracksWithConstraint")) {
+ Float_t diamondcovxy[3];
+ event->GetDiamondCovXY(diamondcovxy);
+ Double_t pos[3]={event->GetDiamondX(),event->GetDiamondY(),0.};
+ Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
+ AliESDVertex *diamond = new AliESDVertex(pos,cov,1.,1);
+ vertexer->SetVtxStart(diamond);
+ delete diamond; diamond=NULL;
+ }
+
+ AliESDVertex* vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
+ if(!vertexESD) return kFALSE;
+ if(vertexESD->GetNContributors()<=0) {
+ //AliDebug(2,"vertexing failed");
+ delete vertexESD; vertexESD=NULL;
+ return kFALSE;
+ }
+ delete vertexer; vertexer=NULL;
+
+ // convert to AliAODVertex
+ Double_t pos[3],cov[6],chi2perNDF;
+ vertexESD->GetXYZ(pos); // position
+ vertexESD->GetCovMatrix(cov); //covariance matrix
+ chi2perNDF = vertexESD->GetChi2toNDF();
+ delete vertexESD; vertexESD=NULL;
+
+ pvtx->SetPosition(pos[0],pos[1],pos[2]);
+ pvtx->SetChi2perNDF(chi2perNDF);
+ pvtx->SetCovMatrix(cov);
+
+ return kTRUE;
+}
fPidHF=new AliAODPidHF(*pidObj);
}
void SetRemoveDaughtersFromPrim(Bool_t removeDaughtersPrim) {fRemoveDaughtersFromPrimary=removeDaughtersPrim;}
+ void SetRecomputePrimaryVertex(Bool_t opt) {fRecomputePrimVertex=opt;}
void SetMinPtCandidate(Double_t ptCand=-1.) {fMinPtCand=ptCand; return;}
void SetMaxPtCandidate(Double_t ptCand=1000.) {fMaxPtCand=ptCand; return;}
void SetOptPileup(Int_t opt=0){
void SetNVars(Int_t nVars){fnVars=nVars;}
Bool_t IsSignalMC(AliAODRecoDecay *d,AliAODEvent *aod,Int_t pdg) const;
+ Bool_t RecomputePrimaryVertex(AliAODEvent* event) const;
// cuts on the event
Int_t fMinVtxType; // 0: not cut; 1: SPDZ; 2: SPD3D; 3: Tracks
Int_t fWhyRejection; // used to code the step at which candidate was rejected
UInt_t fEvRejectionBits; //bit map storing the full info about event rejection
Bool_t fRemoveDaughtersFromPrimary; // flag to switch on the removal of duaghters from the primary vertex computation
+ Bool_t fRecomputePrimVertex; // flag to recompute primary vertex
Bool_t fUseMCVertex; // use MC primary vertex
Bool_t fUsePhysicsSelection; // use Physics selection criteria
Int_t fOptPileup; // option for pielup selection
Bool_t fIsCandTrackSPDFirst; // flag to select the track kFirst criteria for pt < ptlimit
Double_t fMaxPtCandTrackSPDFirst; // maximum pt of the candidate for which to check if the daughters fulfill kFirst criteria
- ClassDef(AliRDHFCuts,21); // base class for cuts on AOD reconstructed heavy-flavour decays
+ ClassDef(AliRDHFCuts,22); // base class for cuts on AOD reconstructed heavy-flavour decays
};
#endif