/************************************************************************** * Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. * * * * Author: The ALICE Off-line Project. * * Contributors are mentioned in the code where appropriate. * * * * Permission to use, copy, modify and distribute this software and its * * documentation strictly for non-commercial purposes is hereby granted * * without fee, provided that the above copyright notice appears in all * * copies and that both the copyright notice and this permission notice * * appear in the supporting documentation. The authors make no claims * * about the suitability of this software for any purpose. It is * * provided "as is" without express or implied warranty. * **************************************************************************/ ///////////////////////////////////////////////////////////// // // Base class for cuts on AOD reconstructed heavy-flavour decay // // Author: A.Dainese, andrea.dainese@pd.infn.it ///////////////////////////////////////////////////////////// #include #include "AliVEvent.h" #include "AliESDEvent.h" #include "AliAODEvent.h" #include "AliVVertex.h" #include "AliESDVertex.h" #include "AliAODVertex.h" #include "AliESDtrack.h" #include "AliAODTrack.h" #include "AliESDtrackCuts.h" #include "AliAODRecoDecayHF.h" #include "AliRDHFCuts.h" ClassImp(AliRDHFCuts) //-------------------------------------------------------------------------- AliRDHFCuts::AliRDHFCuts(const Char_t* name, const Char_t* title) : AliAnalysisCuts(name,title), fMinVtxType(3), fMinVtxContr(1), fMaxVtxRedChi2(1e6), fMinSPDMultiplicity(0), fTriggerMask(0), fTrackCuts(0), fnPtBins(1), fnPtBinLimits(1), fPtBinLimits(0), fnVars(1), fVarNames(0), fnVarsForOpt(0), fVarsForOpt(0), fGlobalIndex(1), fCutsRD(0), fIsUpperCut(0), fUsePID(kFALSE), fPidHF(0), fWhyRejection(0) { // // Default Constructor // } //-------------------------------------------------------------------------- AliRDHFCuts::AliRDHFCuts(const AliRDHFCuts &source) : AliAnalysisCuts(source), fMinVtxType(source.fMinVtxType), fMinVtxContr(source.fMinVtxContr), fMaxVtxRedChi2(source.fMaxVtxRedChi2), fMinSPDMultiplicity(source.fMinSPDMultiplicity), fTriggerMask(source.fTriggerMask), fTrackCuts(0), fnPtBins(source.fnPtBins), fnPtBinLimits(source.fnPtBinLimits), fPtBinLimits(0), fnVars(source.fnVars), fVarNames(0), fnVarsForOpt(source.fnVarsForOpt), fVarsForOpt(0), fGlobalIndex(source.fGlobalIndex), fCutsRD(0), fIsUpperCut(0), fUsePID(source.fUsePID), fPidHF(0), fWhyRejection(source.fWhyRejection) { // // Copy constructor // cout<<"Copy constructor"<GetTriggerMask()!=fTriggerMask) return kFALSE; // multiplicity cuts no implemented yet const AliVVertex *vertex = event->GetPrimaryVertex(); if(!vertex) return kFALSE; TString title=vertex->GetTitle(); if(title.Contains("Z") && fMinVtxType>1) return kFALSE; if(title.Contains("3D") && fMinVtxType>2) return kFALSE; if(vertex->GetNContributors()GetNDaughters(); AliAODVertex *vAOD = d->GetPrimaryVtx(); Double_t pos[3],cov[6]; vAOD->GetXYZ(pos); vAOD->GetCovarianceMatrix(cov); const AliESDVertex vESD(pos,cov,100.,100); Bool_t retval=kTRUE; for(Int_t idg=0; idgGetDaughter(idg); if(!dgTrack) retval = kFALSE; //printf("charge %d\n",dgTrack->Charge()); if(dgTrack->Charge()==0) continue; // it's not a track, but a V0 if(!IsDaughterSelected(dgTrack,&vESD,fTrackCuts)) retval = kFALSE; } return retval; } //--------------------------------------------------------------------------- Bool_t AliRDHFCuts::IsDaughterSelected(AliAODTrack *track,const AliESDVertex *primary,AliESDtrackCuts *cuts) const { // // Convert to ESDtrack, relate to vertex and check cuts // if(!cuts) return kTRUE; Bool_t retval=kTRUE; // convert to ESD track here AliESDtrack esdTrack(track); // needed to calculate the impact parameters esdTrack.RelateToVertex(primary,0.,3.); if(!cuts->IsSelected(&esdTrack)) retval = kFALSE; return retval; } //--------------------------------------------------------------------------- void AliRDHFCuts::SetPtBins(Int_t nPtBinLimits,Float_t *ptBinLimits) { // Set the pt bins if(fPtBinLimits) { delete [] fPtBinLimits; fPtBinLimits = NULL; printf("Changing the pt bins\n"); } if(nPtBinLimits != fnPtBins+1){ cout<<"Warning: ptBinLimits dimention "< "<=fGlobalIndex) { cout<<"Overflow, exit..."<