#include "AliVVertex.h"
#include "AliESDVertex.h"
#include "AliAODVertex.h"
+#include "AliESDtrack.h"
+#include "AliAODTrack.h"
#include "AliESDtrackCuts.h"
#include "AliAODRecoDecayHF.h"
#include "AliRDHFCuts.h"
//
cout<<"Copy constructor"<<endl;
if(source.GetTrackCuts()) AddTrackCuts(source.GetTrackCuts());
- /*
- if(source.GetPtBinLimits()) SetPtBins(source.fnPtBinLimits,source.GetPtBinLimits());
- if(source.GetVarNames()) SetVarNames(source.fnVars,source.GetVarNames(),source.GetIsUpperCut());
- */
if(source.fPtBinLimits) SetPtBins(source.fnPtBinLimits,source.fPtBinLimits);
if(source.fVarNames) SetVarNames(source.fnVars,source.fVarNames,source.fIsUpperCut);
if(source.fCutsRD) SetCuts(source.fGlobalIndex,source.fCutsRD);
if(source.fVarsForOpt) SetVarsForOpt(source.fnVarsForOpt,source.fVarsForOpt);
PrintAll();
- /*
- if (source.fCutsRD){
- fCutsRD = new Float_t*[fnVars];
-
- for(Int_t iv=0; iv<fnVars; iv++) {
-
- fCutsRD[iv] = new Float_t[fnPtBins];
-
- for(Int_t ib=0; ib<fnPtBins; ib++) {
-
- fCutsRD[iv][ib] = source.fCutsRD[iv][ib];
- }
- }
- }
- */
- /*
- Float_t** cutsRD=0;
-
- cutsRD=new Float_t*[source.fnVars];
- for (Int_t iv=0;iv<source.fnVars;iv++){
- cutsRD[iv]=new Float_t[source.fnPtBins];
- }
-
- source.GetCuts(source.fnVars,source.fnPtBins,cutsRD);
-
- //if(source.GetCuts())SetCuts(source.fnVars,source.fnPtBins,source.GetCuts());
-
- for(Int_t iv=0; iv<source.fnVars; iv++) {
-
- for(Int_t ib=0; ib<source.fnPtBins; ib++) {
- cout<<"fCutsRD["<<iv<<"]["<<ib<<"] = "<<fCutsRD[iv][ib]<<endl;
- //cutsRD[iv][ib] = fCutsRD[iv][ib];
- //cout<<"cutsRD["<<iv<<"]["<<ib<<"] = "<<cutsRD[iv][ib]<<endl;
- }
- }
-
- if(cutsRD) SetCuts(source.fnVars,source.fnPtBins,cutsRD);
- */
- //if(source.GetVarsForOpt()) SetVarsForOpt(source.fnVars,source.GetVarsForOpt());
}
//--------------------------------------------------------------------------
if(source.fVarsForOpt) SetVarsForOpt(source.fnVarsForOpt,source.fVarsForOpt);
PrintAll();
- /*
- if(source.GetTrackCuts()) AddTrackCuts(source.GetTrackCuts());
-
- if(source.GetPtBinLimits()) SetPtBins(source.fnPtBinLimits,source.GetPtBinLimits());
- if(source.GetVarNames()) SetVarNames(source.fnVars,source.GetVarNames(),source.GetIsUpperCut());
- */
-/*
- Float_t** cutsRD;
- cutsRD=new Float_t*[source.fnVars];
- for (Int_t iv=0;iv<source.fnVars;iv++){
- cutsRD[iv]=new Float_t[source.fnPtBins];
- }
- source.GetCuts(source.fnVars,source.fnPtBins,cutsRD);
-
- if(cutsRD) SetCuts(source.fnVars,source.fnPtBins,cutsRD);
-*/
- //if(source.GetCuts()) SetCuts(source.fnVars,source.fnPtBins,source.GetCuts());
- //if(source.GetVarsForOpt()) SetVarsForOpt(source.fnVars,source.GetVarsForOpt());
-
return *this;
}
//--------------------------------------------------------------------------
//
// Event selection
//
- if(fTriggerMask && event->GetTriggerMask()!=fTriggerMask) return kFALSE;
+ //if(fTriggerMask && event->GetTriggerMask()!=fTriggerMask) return kFALSE;
// multiplicity cuts no implemented yet
return kTRUE;
}
//---------------------------------------------------------------------------
+Bool_t AliRDHFCuts::AreDaughtersSelected(AliAODRecoDecayHF *d) const {
+ //
+ // Daughter tracks selection
+ //
+ Int_t ndaughters = d->GetNDaughters();
+ AliESDtrack* esdTrack=0;
+
+ for(Int_t idg=0; idg<ndaughters; idg++) {
+ AliAODTrack *dgTrack = (AliAODTrack*)d->GetDaughter(idg);
+ if(!dgTrack) return kFALSE;
+ //printf("charge %d\n",dgTrack->Charge());
+ if(dgTrack->Charge()==0) continue; // it's not a track, but a V0
+ // convert to ESD track here
+ esdTrack=new AliESDtrack(dgTrack);
+
+ if(!fTrackCuts->IsSelected(esdTrack)) {
+ delete esdTrack; esdTrack=0;
+ return kFALSE;
+ }
+ delete esdTrack; esdTrack=0;
+ }
+ return kTRUE;
+}
+//---------------------------------------------------------------------------
void AliRDHFCuts::SetPtBins(Int_t nPtBinLimits,Float_t *ptBinLimits) {
// Set the pt bins
// return;
// }
cout<<"Give back a "<<fnVars<<"x"<<fnPtBins<<" matrix."<<endl;
- //cutsRD=fCutsRD;
if(!cutsRD) {
cout<<"Initialization..."<<endl;
}
}
- cout<<"Ptr cuts rd "<<cutsRD<<endl;
+
Int_t iGlobal=0;
for(Int_t iv=0; iv<fnVars; iv++) {
for(Int_t ib=0; ib<fnPtBins; ib++) {
- //cout<<"fCutsRD["<<iv<<"]["<<ib<<"] = "<<fCutsRD[iv][ib]<<endl;
+
cutsRD[iv][ib] = fCutsRD[iGlobal];
- //cout<<"cutsRD["<<iv<<"]["<<ib<<"] = "<<cutsRD[iv][ib]<<endl;
+
iGlobal++;
}
}
//---------------------------------------------------------------------------
Int_t AliRDHFCuts::GetGlobalIndex(Int_t iVar,Int_t iPtBin) const{
+
+ // give the global index from variable and pt bin
+
return iPtBin*fnVars+iVar;
}
// Fills in vars the values of the variables
//
- cout<<"Ingetvarforopt"<<endl;
- //PrintAll();
-
if(nvars!=fnVarsForOpt) {
printf("AliRDHFCutsD0toKpi::GetCutsVarsForOpt: wrong number of variables\n");
return;
return;
*/
- //possibile generalizzazione
Int_t iter=-1;
if(fVarsForOpt[0]){
iter++;
if(!fCutsRD){
cout<<"Cut matrice not inizialized. Exit..."<<endl;
- return -1;
+ return 0;
}
//PrintAll();
- AliAODRecoDecayHF2Prong* d=(AliAODRecoDecayHF2Prong*)obj; // ????
+ AliAODRecoDecayHF2Prong* d=(AliAODRecoDecayHF2Prong*)obj;
- Int_t returnvalue=1;
if(!d){
cout<<"AliAODRecoDecayHF2Prong null"<<endl;
return 0;
}
+
// selection on daughter tracks
if(selectionLevel==AliRDHFCuts::kAll ||
selectionLevel==AliRDHFCuts::kTracks) {
- Int_t ndaughters = d->GetNDaughters();
- //cout<<"loop on "<<ndaughters<<"daughters"<<endl;
- for(Int_t idg=0; idg<ndaughters; idg++) {
- AliAODTrack *dgTrack = (AliAODTrack*)d->GetDaughter(idg);
- if(!dgTrack) returnvalue=0;
- //printf("charge %d\n",dgTrack->Charge());
- if(dgTrack->Charge()==0) continue; // it's not a track, but a V0
- // convert to ESD track here
- AliESDtrack* esdTrack=new AliESDtrack(dgTrack);
-
- if(!fTrackCuts->IsSelected(esdTrack)) returnvalue=0;//kFALSE;
- }
- if(!returnvalue) return 0;
+ if(!AreDaughtersSelected(d)) return 0;
}
-
- //cout<<"cand sel? "<<selectionLevel<<" = "<<AliRDHFCuts::kAll<<" or "<<AliRDHFCuts::kCandidate<<endl;
+ Int_t returnvalue=1;
// selection on candidate
if(selectionLevel==AliRDHFCuts::kAll ||