#include "AliAODTrdTrack.h"
#include "AliAODTrdTracklet.h"
#include "AliEMCALRecoUtils.h"
+#include "AliESDUtils.h"
using std::cout;
using std::endl;
fIsPidOwner(kFALSE),
fTPCaloneTrackCuts(0),
fDoPropagateTrackToEMCal(kTRUE),
- fEMCalSurfaceDistance(440)
+ fEMCalSurfaceDistance(440),
+ fRefitVertexTracks(-1),
+ fRefitVertexTracksCuts(0)
{
// Default constructor
fV0Cuts[0] = 33. ; // max allowed chi2
fIsPidOwner(kFALSE),
fTPCaloneTrackCuts(0),
fDoPropagateTrackToEMCal(kTRUE),
- fEMCalSurfaceDistance(440)
+ fEMCalSurfaceDistance(440),
+ fRefitVertexTracks(-1),
+ fRefitVertexTracksCuts(0)
{
// Constructor
}
AliAnalysisTaskESDfilter::~AliAnalysisTaskESDfilter(){
if(fIsPidOwner) delete fESDpid;
+ delete fRefitVertexTracksCuts;
}
+
//______________________________________________________________________________
void AliAnalysisTaskESDfilter::UserCreateOutputObjects()
{
cout << spaces.Data() << Form("PHOS triggers are %s",fArePHOSTriggerEnabled ? "ENABLED":"DISABLED") << endl;
cout << spaces.Data() << Form("Tracklets are %s",fAreTrackletsEnabled ? "ENABLED":"DISABLED") << endl;
cout << spaces.Data() << Form("PropagateTrackToEMCal is %s", fDoPropagateTrackToEMCal ? "ENABLED":"DISABLED") << endl;
+ if (fRefitVertexTracks<0) cout << spaces.Data() << Form("RefitVerteTracks is DISABLED") << endl;
+ else cout << spaces.Data() << Form("RefitVerteTracks is ENABLED to %d",fRefitVertexTracks) << endl;
}
//______________________________________________________________________________
if(!esd)return;
AliCodeTimerAuto("",0);
+
+ if (fRefitVertexTracks) AliESDUtils::RefitESDVertexTracks(esd,fRefitVertexTracks,fRefitVertexTracksCuts);
fOldESDformat = ( esd->GetAliESDOld() != 0x0 );
}
//______________________________________________________________________________
-
-
+void AliAnalysisTaskESDfilter::SetRefitVertexTracks(Int_t algo, Double_t* cuts)
+{
+ // request vertexTrack reprocessing from ESDtracks
+ // if algo>=0 and cuts==0 then algo is interpreted as the algorithm ID to be run with default cuts
+ // otherwise it is number of cuts to digest
+ fRefitVertexTracks = algo;
+ //
+ if (algo>0 && cuts) {
+ fRefitVertexTracksCuts = new Double_t[fRefitVertexTracks];
+ for (int i=fRefitVertexTracks;i--;) fRefitVertexTracksCuts[i] = cuts[i];
+ }
+}
void SetPropagateTrackToEMCal(Bool_t propagate) {fDoPropagateTrackToEMCal = propagate;}
void SetEMCalSurfaceDistance(Double_t d) {fEMCalSurfaceDistance = d;}
+ void SetRefitVertexTracks(Int_t algo=6, Double_t* cuts=0);
private:
AliAnalysisTaskESDfilter(const AliAnalysisTaskESDfilter&);
Double_t fCascadeCuts[8]; // Array to store the values for the different reco selections cascades related
Bool_t fDoPropagateTrackToEMCal; // whether or not to propagate the tracks to the EMCal surface -- true by default
Double_t fEMCalSurfaceDistance; // EMCal surface distance from the center of the detector (r = 440 by default)
+ //
+ Int_t fRefitVertexTracks; // request to refit the vertex if >=0 (algoID if cuts not supplied, otherwise ncuts)
+ Double_t* fRefitVertexTracksCuts; // optional cuts for vertex refit
-
- ClassDef(AliAnalysisTaskESDfilter, 17); // Analysis task for standard ESD filtering
+ ClassDef(AliAnalysisTaskESDfilter, 18); // Analysis task for standard ESD filtering
};
#endif
//==============================================================================
Int_t iAODhandler = 1; // Analysis produces an AOD or dAOD's
Int_t iESDfilter = 1; // ESD to AOD filter (barrel + muon tracks)
+Int_t iESDfilterReVtx = -1; // Request revertexing in ESD filtering
Int_t iMUONcopyAOD = 1; // Task that copies only muon events in a separate AOD (PWG3)
Int_t iJETAN = 1; // Jet analysis (PWG4)
Int_t iJETANdelta = 1; // Jet delta AODs
printf("= Configuring analysis train for: =\n");
if (usePhysicsSelection) printf("= Physics selection =\n");
if (useTender) printf("= TENDER =\n");
- if (iESDfilter) printf("= ESD filter =\n");
+ if (iESDfilter) {
+ printf("= ESD filter =\n");
+ if (iESDfilterReVtx>=0) printf("= ESD event revertexed before filterering, algo %2d =\n",iESDfilterReVtx);
+ }
if (iMUONcopyAOD) printf("= MUON copy AOD =\n");
if (iJETAN) printf("= Jet analysis =\n");
if (iJETANdelta) printf("= Jet delta AODs =\n");
if (iESDfilter) {
// ESD filter task configuration.
- gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskESDFilter.C");
+ gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/ESDfilter/macros/AddTaskESDFilter.C");
+ AliAnalysisTaskESDfilter *taskesdfilter = 0;
if (iMUONcopyAOD) {
printf("Registering delta AOD file\n");
mgr->RegisterExtraFile("AliAOD.Muons.root");
mgr->RegisterExtraFile("AliAOD.Dimuons.root");
- AliAnalysisTaskESDfilter *taskesdfilter = AddTaskESDFilter(useKFILTER, kTRUE, kFALSE, kFALSE /*usePhysicsSelection*/,kFALSE,kTRUE,kFALSE,kFALSE,run_flag);
+ taskesdfilter = AddTaskESDFilter(useKFILTER, kTRUE, kFALSE, kFALSE /*usePhysicsSelection*/,kFALSE,kTRUE,kFALSE,kFALSE,run_flag);
} else {
- AliAnalysisTaskESDfilter *taskesdfilter = AddTaskESDFilter(useKFILTER, kFALSE, kFALSE, kFALSE /*usePhysicsSelection*/,kFALSE,kTRUE,kFALSE,kFALSE,run_flag); // others
+ taskesdfilter = AddTaskESDFilter(useKFILTER, kFALSE, kFALSE, kFALSE /*usePhysicsSelection*/,kFALSE,kTRUE,kFALSE,kFALSE,run_flag); // others
}
+ if (iESDfilterReVtx>=0 && taskesdfilter) taskesdfilter->SetRefitVertexTracks(iESDfilterReVtx);
}
// ********** PWG3 wagons ******************************************************