// $Id$
+//
+// Task to skim ESD files.
+//
+//
#include "AliEsdSkimTask.h"
#include <TClonesArray.h>
#include <TFile.h>
#include <TTree.h>
+#include "AliAnalysisManager.h"
#include "AliESDEvent.h"
#include "AliESDtrackCuts.h"
#include "AliMultiplicity.h"
AliAnalysisTaskSE(opt), fEvent(0), fTree(0), fCuts(0),
fDoZDC(1), fDoV0(1), fDoT0(1), fDoTPCv(1), fDoSPDv(1), fDoPriv(1),
fDoEmCs(1), fDoPCs(1), fDoEmT(1), fDoPT(1), fDoTracks(1), fDoMult(1),
- fDoTof(1), fDoPileup(1), fDoClus(1)
+ fDoTof(1), fDoPileup(1), fDoClus(1), fEmcNames(""),
+ fDoMiniTracks(0), fTracks("Tracks"), fPhosClusOnly(0)
{
// Constructor.
if (!esdin)
return;
+ AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
+
fEvent->Reset();
- TList* objs = fEvent->GetList();
+ TList* objsin = esdin->GetList();
+ TList* objsout = fEvent->GetList();
- AliESDHeader *header = dynamic_cast<AliESDHeader*>(objs->FindObject("AliESDHeader"));
+ AliESDHeader *header = dynamic_cast<AliESDHeader*>(objsin->FindObject("AliESDHeader"));
if (header) {
+ am->LoadBranch("AliESDHeader.");
*header = *esdin->GetHeader();
}
- AliESDRun *run = dynamic_cast<AliESDRun*>(objs->FindObject("AliESDRun"));
+ AliESDRun *run = dynamic_cast<AliESDRun*>(objsin->FindObject("AliESDRun"));
if (run) {
+ am->LoadBranch("AliESDRun.");
*run = *esdin->GetESDRun();
}
- AliESDZDC *zdc = dynamic_cast<AliESDZDC*>(objs->FindObject("AliESDZDC"));
+ AliESDZDC *zdc = dynamic_cast<AliESDZDC*>(objsin->FindObject("AliESDZDC"));
if (zdc) {
+ am->LoadBranch("AliESDZDC.");
*zdc = *esdin->GetESDZDC();
}
- AliESDVZERO *v0 = dynamic_cast<AliESDVZERO*>(objs->FindObject("AliESDVZERO"));
+ AliESDVZERO *v0 = dynamic_cast<AliESDVZERO*>(objsin->FindObject("AliESDVZERO"));
if (v0) {
+ am->LoadBranch("AliESDVZERO.");
*v0 = *esdin->GetVZEROData();
}
- AliESDTZERO *t0 = dynamic_cast<AliESDTZERO*>(objs->FindObject("AliESDTZERO"));
+ AliESDTZERO *t0 = dynamic_cast<AliESDTZERO*>(objsin->FindObject("AliESDTZERO"));
if (t0) {
+ am->LoadBranch("AliESDTZERO.");
*t0 = *esdin->GetESDTZERO();
}
- AliESDVertex *tpcv = dynamic_cast<AliESDVertex*>(objs->FindObject("TPCVertex"));
+ AliESDVertex *tpcv = dynamic_cast<AliESDVertex*>(objsin->FindObject("TPCVertex"));
if (tpcv) {
+ am->LoadBranch("TPCVertex.");
*tpcv = *esdin->GetPrimaryVertexTPC();
}
- AliESDVertex *spdv = dynamic_cast<AliESDVertex*>(objs->FindObject("SPDVertex"));
+ AliESDVertex *spdv = dynamic_cast<AliESDVertex*>(objsin->FindObject("SPDVertex"));
if (spdv) {
+ am->LoadBranch("SPDVertex.");
*spdv = *esdin->GetPrimaryVertexSPD();
}
- AliESDVertex *priv = dynamic_cast<AliESDVertex*>(objs->FindObject("PrimaryVertex"));
+ AliESDVertex *priv = dynamic_cast<AliESDVertex*>(objsin->FindObject("PrimaryVertex"));
if (priv) {
+ am->LoadBranch("PrimaryVertex.");
*priv = *esdin->GetPrimaryVertexTracks();
}
- AliESDCaloCells *ecells = dynamic_cast<AliESDCaloCells*>(objs->FindObject("EMCALCells"));
+ AliESDCaloCells *ecells = dynamic_cast<AliESDCaloCells*>(objsin->FindObject("EMCALCells"));
if (ecells) {
+ am->LoadBranch("EMCALCells.");
*ecells = *esdin->GetEMCALCells();
}
- AliESDCaloCells *pcells = dynamic_cast<AliESDCaloCells*>(objs->FindObject("PHOSCells"));
+ AliESDCaloCells *pcells = dynamic_cast<AliESDCaloCells*>(objsin->FindObject("PHOSCells"));
if (pcells) {
+ am->LoadBranch("PHOSCells.");
*pcells = *esdin->GetPHOSCells();
}
- AliESDCaloTrigger *etrig = dynamic_cast<AliESDCaloTrigger*>(objs->FindObject("EMCALTrigger"));
+ AliESDCaloTrigger *etrig = dynamic_cast<AliESDCaloTrigger*>(objsin->FindObject("EMCALTrigger"));
if (etrig) {
+ am->LoadBranch("EMCALTrigger.");
*etrig = *esdin->GetCaloTrigger("EMCAL");
}
- AliESDCaloTrigger *ptrig = dynamic_cast<AliESDCaloTrigger*>(objs->FindObject("PHOSTrigger"));
+ AliESDCaloTrigger *ptrig = dynamic_cast<AliESDCaloTrigger*>(objsin->FindObject("PHOSTrigger"));
if (ptrig) {
+ am->LoadBranch("PHOSTrigger.");
*ptrig = *esdin->GetCaloTrigger("PHOS");
}
- AliMultiplicity *mult = dynamic_cast<AliMultiplicity*>(objs->FindObject("AliMultiplicity"));
+ AliMultiplicity *mult = dynamic_cast<AliMultiplicity*>(objsin->FindObject("AliMultiplicity"));
if (mult) {
+ am->LoadBranch("AliMultiplicity.");
*mult = *esdin->GetMultiplicity();
}
- AliTOFHeader *tofh = dynamic_cast<AliTOFHeader*>(objs->FindObject("AliTOFHeader"));
+ AliTOFHeader *tofh = dynamic_cast<AliTOFHeader*>(objsin->FindObject("AliTOFHeader"));
if (tofh) {
+ am->LoadBranch("AliTOFHeader.");
*tofh = *esdin->GetTOFHeader();
}
- TClonesArray *spup = dynamic_cast<TClonesArray*>(objs->FindObject("SPDPileupVertices"));
+ TClonesArray *spup = dynamic_cast<TClonesArray*>(objsin->FindObject("SPDPileupVertices"));
if (spup) {
+ am->LoadBranch("SPDPileupVertices");
Int_t N = esdin->GetNumberOfPileupVerticesSPD();
for (Int_t i=0; i<N; ++i) {
const AliESDVertex *vtx = esdin->GetPileupVertexSPD(i);
fEvent->AddPileupVertexSPD(vtx);
}
}
- TClonesArray *tpup = dynamic_cast<TClonesArray*>(objs->FindObject("TrkPileupVertices"));
+ TClonesArray *tpup = dynamic_cast<TClonesArray*>(objsin->FindObject("TrkPileupVertices"));
if (tpup) {
+ am->LoadBranch("TrkPileupVertices");
Int_t N = esdin->GetNumberOfPileupVerticesTracks();
for (Int_t i=0; i<N; ++i) {
const AliESDVertex *vtx = esdin->GetPileupVertexTracks(i);
fEvent->AddPileupVertexTracks(vtx);
}
}
- TClonesArray *clus = dynamic_cast<TClonesArray*>(objs->FindObject("CaloClusters"));
+ TClonesArray *clus = dynamic_cast<TClonesArray*>(objsin->FindObject("CaloClusters"));
if (clus) {
+ am->LoadBranch("");
Int_t N = esdin->GetNumberOfCaloClusters();
for (Int_t i=0; i<N; ++i) {
AliESDCaloCluster *c = esdin->GetCaloCluster(i);
+ if (fPhosClusOnly && c->IsEMCAL())
+ continue;
if (c)
fEvent->AddCaloCluster(c);
}
}
+ TObjArray *namearr = fEmcNames.Tokenize(";");
+ if (namearr) {
+ for (Int_t i=0; i<namearr->GetEntries(); ++i) {
+ TString cname(namearr->At(i)->GetName());
+ if (cname.Length()<=0)
+ continue;
+ TClonesArray *arrin = dynamic_cast<TClonesArray*>(objsin->FindObject(cname));
+ TClonesArray *arrout = dynamic_cast<TClonesArray*>(objsout->FindObject(cname));
+ //AliFatal(Form("Can not find tracks with name %s", fTracks.Data()));
+ arrout->Delete();
+ const Int_t N = arrin->GetEntries();
+ for (Int_t iC=0, nC=0; iC<N; ++iC) {
+ AliESDCaloCluster *c = dynamic_cast<AliESDCaloCluster*>(arrin->At(iC));
+ if (!c)
+ continue;
+ new ((*arrout)[nC++]) AliESDCaloCluster(*c);
+ }
+ }
+ delete namearr;
+ }
if (fDoTracks) {
- const Int_t Ntracks = esdin->GetNumberOfTracks();
+ am->LoadBranch("Tracks");
+ TClonesArray *tracks = dynamic_cast<TClonesArray*>(objsin->FindObject(fTracks));
+ if (!tracks) {
+ AliFatal(Form("Can not find tracks with name %s", fTracks.Data()));
+ return;
+ }
+ const Int_t Ntracks = tracks->GetEntries();
Int_t nacc = 0;
for (Int_t iTracks = 0; iTracks < Ntracks; ++iTracks) {
- AliESDtrack *track = esdin->GetTrack(iTracks);
+ AliESDtrack *track = dynamic_cast<AliESDtrack*>(tracks->At(iTracks));
if (!track)
continue;
if (fCuts) {
if (!fCuts->IsSelected(track))
continue;
}
+ if (fDoMiniTracks) {
+ track->MakeMiniESDtrack();
+ }
fEvent->AddTrack(track);
++nacc;
}
if (fCuts)
- printf("selected %d out of %d \n", nacc, Ntracks);
+ AliInfo(Form("Selected %d out of %d \n", nacc, Ntracks));
}
fTree->Fill();
}
{
// Create output objects.
- fTree = new TTree("esdTree", "Tree with ESD objects");
+ fTree = new TTree("esdTree", "Tree with skimmed ESD objects");
fEvent = new AliESDEvent;
fEvent->AddObject(new AliESDHeader());
fEvent->AddObject(new AliESDRun());
ptrig->SetName("PHOSTrigger");
fEvent->AddObject(ptrig);
}
- if (fDoTracks) {
- TClonesArray *arr = new TClonesArray("AliESDtrack",0);
- arr->SetName("Tracks");
- fEvent->AddObject(arr);
- }
if (fDoMult) {
fEvent->AddObject(new AliMultiplicity());
}
arr->SetName("CaloClusters");
fEvent->AddObject(arr);
}
+ TObjArray *namearr = fEmcNames.Tokenize(";");
+ if (namearr) {
+ for (Int_t i=0; i<namearr->GetEntries(); ++i) {
+ TString cname(namearr->At(i)->GetName());
+ if (cname.Length()<=0)
+ continue;
+ TClonesArray *arr = new TClonesArray("AliESDCaloCluster",0);
+ arr->SetName(cname);
+ fEvent->AddObject(arr);
+ }
+ delete namearr;
+ }
+ if (fDoTracks) {
+ TClonesArray *arr = new TClonesArray("AliESDtrack",0);
+ arr->SetName("Tracks");
+ fEvent->AddObject(arr);
+ }
fEvent->GetStdContent();
fEvent->WriteToTree(fTree);
fTree->GetUserInfo()->Add(fEvent);
void UserExec(Option_t *opt);
void UserCreateOutputObjects();
- void SetDoZdc(Bool_t b) { fDoZDC = b; }
- void SetDoV0(Bool_t b) { fDoV0 = b; }
- void SetDoT0(Bool_t b) { fDoT0 = b; }
- void SetDoTpcV(Bool_t b) { fDoTPCv = b; }
- void SetDoSpdV(Bool_t b) { fDoSPDv = b; }
- void SetDoPriV(Bool_t b) { fDoPriv = b; }
- void SetDoEmC(Bool_t b) { fDoEmCs = b; }
- void SetDoPhC(Bool_t b) { fDoPCs = b; }
- void SetDoEmT(Bool_t b) { fDoEmT = b; }
- void SetDoPhT(Bool_t b) { fDoPT = b; }
- void SetDoTracks(Bool_t b) { fDoTracks = b; }
- void SetDoMult(Bool_t b) { fDoMult = b; }
- void SetDoTof(Bool_t b) { fDoTof = b; }
- void SetDoPileup(Bool_t b) { fDoPileup = b; }
- void SetDoClus(Bool_t b) { fDoClus = b; }
- void SetCuts(AliESDtrackCuts *c) { fCuts = c; }
+ void SetCuts(AliESDtrackCuts *c) { fCuts = c; }
+ void SetDoClus(Bool_t b) { fDoClus = b; }
+ void SetDoEmC(Bool_t b) { fDoEmCs = b; }
+ void SetDoEmT(Bool_t b) { fDoEmT = b; }
+ void SetDoMiniTracks(Bool_t b) { fDoMiniTracks = b; }
+ void SetDoMult(Bool_t b) { fDoMult = b; }
+ void SetDoPhC(Bool_t b) { fDoPCs = b; }
+ void SetDoPhT(Bool_t b) { fDoPT = b; }
+ void SetDoPileup(Bool_t b) { fDoPileup = b; }
+ void SetDoPriV(Bool_t b) { fDoPriv = b; }
+ void SetDoSpdV(Bool_t b) { fDoSPDv = b; }
+ void SetDoT0(Bool_t b) { fDoT0 = b; }
+ void SetDoTof(Bool_t b) { fDoTof = b; }
+ void SetDoTpcV(Bool_t b) { fDoTPCv = b; }
+ void SetDoTracks(Bool_t b) { fDoTracks = b; }
+ void SetDoV0(Bool_t b) { fDoV0 = b; }
+ void SetDoZdc(Bool_t b) { fDoZDC = b; }
+ void SetEmcNames(const char *n) { fEmcNames = n; }
+ void SetPhosClusOnly(Bool_t b) { fPhosClusOnly = b; }
+ void SetTracks(const char *n) { fTracks = n; }
protected:
- AliESDEvent *fEvent; //!esd event
- TTree *fTree; //!tree
- AliESDtrackCuts *fCuts; // track cuts
- Bool_t fDoZDC; // do zdc
- Bool_t fDoV0; // do vzero
- Bool_t fDoT0; // do tzero
- Bool_t fDoTPCv; // do tpc vertex
- Bool_t fDoSPDv; // do spd vertex
- Bool_t fDoPriv; // do primary vertex
- Bool_t fDoEmCs; // do emcal cells
- Bool_t fDoPCs; // do phos cells
- Bool_t fDoEmT; // do emcal trigger
- Bool_t fDoPT; // do phos trigger
- Bool_t fDoTracks; // do tracks
- Bool_t fDoMult; // do mult
- Bool_t fDoTof; // do TOF
- Bool_t fDoPileup; // do pileup
- Bool_t fDoClus; // do clusters
-
+ AliESDEvent *fEvent; //!esd event
+ TTree *fTree; //!tree
+ AliESDtrackCuts *fCuts; // track cuts
+ Bool_t fDoZDC; // do zdc
+ Bool_t fDoV0; // do vzero
+ Bool_t fDoT0; // do tzero
+ Bool_t fDoTPCv; // do tpc vertex
+ Bool_t fDoSPDv; // do spd vertex
+ Bool_t fDoPriv; // do primary vertex
+ Bool_t fDoEmCs; // do emcal cells
+ Bool_t fDoPCs; // do phos cells
+ Bool_t fDoEmT; // do emcal trigger
+ Bool_t fDoPT; // do phos trigger
+ Bool_t fDoTracks; // do tracks
+ Bool_t fDoMult; // do mult
+ Bool_t fDoTof; // do TOF
+ Bool_t fDoPileup; // do pileup
+ Bool_t fDoClus; // do clusters
+ TString fEmcNames; // name of clusters
+ Bool_t fDoMiniTracks; // strip down tracks
+ TString fTracks; // name of tracks (e.g. tracks propagated to EMCAL surface)
+ Bool_t fPhosClusOnly; // if true then only store PHOS clusters
+
private:
AliEsdSkimTask(const AliEsdSkimTask&); // not implemented
AliEsdSkimTask &operator=(const AliEsdSkimTask&); // not implemented
- ClassDef(AliEsdSkimTask, 1); // Esd trimming and skimming task
+ ClassDef(AliEsdSkimTask, 2); // Esd trimming and skimming task
};
#endif