fMassCutBeforeVertexing(kFALSE),
fMassCalc2(0),
fMassCalc3(0),
-fMassCalc4(0)
+fMassCalc4(0),
+fnTrksTotal(0),
+fnSeleTrksTotal(0)
{
// Default constructor
fMassCutBeforeVertexing(source.fMassCutBeforeVertexing),
fMassCalc2(source.fMassCalc2),
fMassCalc3(source.fMassCalc3),
-fMassCalc4(source.fMassCalc4)
+fMassCalc4(source.fMassCalc4),
+fnTrksTotal(0),
+fnSeleTrksTotal(0)
{
//
// Copy constructor
trkEntries = (Int_t)event->GetNumberOfTracks();
AliDebug(1,Form(" Number of tracks: %d",trkEntries));
+ fnTrksTotal += trkEntries;
nv0 = (Int_t)event->GetNumberOfV0s();
AliDebug(1,Form(" Number of V0s: %d",nv0));
SelectTracksAndCopyVertex(event,trkEntries,seleTrksArray,nSeleTrks,seleFlags,evtNumber);
AliDebug(1,Form(" Selected tracks: %d",nSeleTrks));
+ fnSeleTrksTotal += nSeleTrks;
TObjArray *twoTrackArray1 = new TObjArray(2);
TObjArray *twoTrackArray2 = new TObjArray(2);
if(fAODMap) { delete fAODMap; fAODMap=NULL; }
}
+ //printf("Trks: total %d sele %d\n",fnTrksTotal,fnSeleTrksTotal);
+
return;
}
//----------------------------------------------------------------------------
if(postrack->Charge()!=0 && negtrack->Charge()!=0) { // don't apply these cuts if it's a Dstar
+
+ // Add daughter references already here
+ if(fInputAOD) AddDaughterRefs(secVert,(AliAODEvent*)event,twoTrackArray);
+
// select D0->Kpi
if(fD0toKpi) {
- okD0 = (Bool_t)fCutsD0toKpi->IsSelected(the2Prong,AliRDHFCuts::kCandidate);
+ okD0 = (Bool_t)fCutsD0toKpi->IsSelected(the2Prong,AliRDHFCuts::kCandidate,(AliAODEvent*)event);
if(okD0) the2Prong->SetSelectionBit(AliRDHFCuts::kD0toKpiCuts);
}
//if(fDebug && fD0toKpi) printf(" %d\n",(Int_t)okD0);
delete primVertexAOD; primVertexAOD=NULL;
+ // Add daughter references already here
+ if(fInputAOD) AddDaughterRefs(secVert,(AliAODEvent*)event,threeTrackArray);
+
// select D+->Kpipi, Ds->KKpi, Lc->pKpi
if(f3Prong) {
ok3Prong = kFALSE;
- if(fCutsDplustoKpipi->IsSelected(the3Prong,AliRDHFCuts::kCandidate)) {
+ if(fCutsDplustoKpipi->IsSelected(the3Prong,AliRDHFCuts::kCandidate,(AliAODEvent*)event)) {
ok3Prong = kTRUE;
the3Prong->SetSelectionBit(AliRDHFCuts::kDplusCuts);
}
- if(fCutsDstoKKpi->IsSelected(the3Prong,AliRDHFCuts::kCandidate)) {
+ if(fCutsDstoKKpi->IsSelected(the3Prong,AliRDHFCuts::kCandidate,(AliAODEvent*)event)) {
ok3Prong = kTRUE;
the3Prong->SetSelectionBit(AliRDHFCuts::kDsCuts);
}
- if(fCutsLctopKpi->IsSelected(the3Prong,AliRDHFCuts::kCandidate)) {
+ if(fCutsLctopKpi->IsSelected(the3Prong,AliRDHFCuts::kCandidate,(AliAODEvent*)event)) {
ok3Prong = kTRUE;
the3Prong->SetSelectionBit(AliRDHFCuts::kLcCuts);
}
fIsSelectedCuts(0),
fIsSelectedPID(0),
fMinPtCand(-1.),
-fMaxPtCand(100000.)
+fMaxPtCand(100000.),
+fKeepSignalMC(kFALSE)
{
//
// Default Constructor
fIsSelectedCuts(source.fIsSelectedCuts),
fIsSelectedPID(source.fIsSelectedPID),
fMinPtCand(source.fMinPtCand),
- fMaxPtCand(source.fMaxPtCand)
+ fMaxPtCand(source.fMaxPtCand),
+ fKeepSignalMC(source.fKeepSignalMC)
{
//
// Copy constructor
fIsSelectedPID=source.fIsSelectedPID;
fMinPtCand=source.fMinPtCand;
fMaxPtCand=source.fMaxPtCand;
+ fKeepSignalMC=source.fKeepSignalMC;
if(source.GetTrackCuts()) AddTrackCuts(source.GetTrackCuts());
if(source.fPtBinLimits) SetPtBins(source.fnPtBinLimits,source.fPtBinLimits);
}
return;
}
+//--------------------------------------------------------------------------
+Bool_t AliRDHFCuts::IsSignalMC(AliAODRecoDecay *d,AliAODEvent *aod,Int_t pdg) const
+{
+ //
+ // Checks if this candidate is matched to MC signal
+ //
+
+ if(!aod) return kFALSE;
+
+ // get the MC array
+ TClonesArray *mcArray = (TClonesArray*)((AliAODEvent*)aod)->GetList()->FindObject(AliAODMCParticle::StdBranchName());
+ if(!mcArray) return kFALSE;
+
+ // try to match
+ Int_t label = d->MatchToMC(pdg,mcArray);
+
+ if(label>=0) {
+ //printf("MATCH!\n");
+ return kTRUE;
+ }
+
+ return kFALSE;
+}
Bool_t CountEventForNormalization() const
{ if(fWhyRejection==0) {return kTRUE;} else {return kFALSE;} }
+ void SetKeepSignalMC() {fKeepSignalMC=kTRUE; return;}
protected:
void SetNPtBins(Int_t nptBins){fnPtBins=nptBins;}
void SetNVars(Int_t nVars){fnVars=nVars;}
+ Bool_t IsSignalMC(AliAODRecoDecay *d,AliAODEvent *aod,Int_t pdg) const;
// cuts on the event
Int_t fMinVtxType; // 0: not cut; 1: SPDZ; 2: SPD3D; 3: Tracks
Int_t fIsSelectedPID; // outcome of PID selection
Double_t fMinPtCand; // minimum pt of the candidate
Double_t fMaxPtCand; // minimum pt of the candidate
+ Bool_t fKeepSignalMC; // IsSelected returns always kTRUE for MC signal
- ClassDef(AliRDHFCuts,16); // base class for cuts on AOD reconstructed heavy-flavour decays
+ ClassDef(AliRDHFCuts,17); // base class for cuts on AOD reconstructed heavy-flavour decays
};
#endif