8 #include <TClonesArray.h>
11 #include "AliAnalysisManager.h"
12 #include "AliCentrality.h"
13 #include "AliESDEvent.h"
14 #include "AliESDFMD.h"
15 #include "AliESDMuonTrack.h"
16 #include "AliESDtrackCuts.h"
17 #include "AliESDtrackCuts.h"
19 #include "AliEventplane.h"
20 #include "AliInputEventHandler.h"
21 #include "AliMultiplicity.h"
23 #include "AliVEventHandler.h"
28 fDoZDC(1), fDoV0(1), fDoT0(1), fDoTPCv(1), fDoSPDv(1), fDoPriv(1),
29 fDoEmCs(1), fDoPCs(0), fDoEmT(1), fDoPT(0), fDoTracks(0), fDoFmd(1),
30 fDoMult(1), fDoTof(0), fDoPileup(1), fDoClus(0), fDoMuonTracks(0), fEmcNames(
""),
31 fDoMiniTracks(0), fTracks(
"Tracks"), fPhosClusOnly(0), fEmcalClusOnly(0),
32 fDoSaveBytes(0), fDoCent(1), fDoRP(1), fRemoveCP(0), fResetCov(1),
33 fDoPicoTracks(0), fCheckCond(0)
40 fBranchNames =
"ESD:AliESDHeader.,AliESDRun.";
42 DefineOutput(1, TTree::Class());
58 TList* objsin = esdin->GetList();
62 Int_t mult = AliESDtrackCuts::GetReferenceMultiplicity(esdin, AliESDtrackCuts::kTrackletsITSTPC, 0.8);
67 AliESDHeader *header =
dynamic_cast<AliESDHeader*
>(objsout->FindObject(
"AliESDHeader"));
69 am->LoadBranch(
"AliESDHeader.");
71 *header = *esdin->GetHeader();
73 AliESDHeader *hin = esdin->GetHeader();
74 header->SetTriggerMask(hin->GetTriggerMask());
75 header->SetOrbitNumber(hin->GetOrbitNumber());
76 header->SetTimeStamp(hin->GetTimeStamp());
77 header->SetEventType(hin->GetEventType());
78 header->SetEventSpecie(hin->GetEventSpecie());
79 header->SetEventNumberInFile(hin->GetEventNumberInFile());
80 header->SetBunchCrossNumber(hin->GetBunchCrossNumber());
81 header->SetPeriodNumber(hin->GetPeriodNumber());
82 header->SetTriggerCluster(hin->GetTriggerCluster());
83 header->SetL0TriggerInputs(hin->GetL0TriggerInputs());
84 header->SetL1TriggerInputs(hin->GetL1TriggerInputs());
85 header->SetL2TriggerInputs(hin->GetL2TriggerInputs());
86 for (
Int_t i=0;i<24;++i) {
87 const char *name = hin->GetTriggerInputName(i,0);
89 header->SetActiveTriggerInputs(name,i);
91 for (
Int_t i=0;i<24;++i) {
92 const char *name = hin->GetTriggerInputName(i,1);
94 header->SetActiveTriggerInputs(name,i+24);
96 for (
Int_t i=0;i<12;++i) {
97 const char *name = hin->GetTriggerInputName(i,2);
99 header->SetActiveTriggerInputs(name,i+48);
102 header->SetUniqueID(((AliInputEventHandler*)(am->GetInputEventHandler()))->IsEventSelected());
103 if (am->GetInputEventHandler()) {
104 TTree *tree = am->GetInputEventHandler()->GetTree();
106 TFile *cfile = tree->GetCurrentFile();
108 TString cname(cfile->GetName());
109 header->SetTitle(cname);
114 AliESDRun *run =
dynamic_cast<AliESDRun*
>(objsout->FindObject(
"AliESDRun"));
116 am->LoadBranch(
"AliESDRun.");
117 *run = *esdin->GetESDRun();
119 AliCentrality *cent =
dynamic_cast<AliCentrality*
>(objsout->FindObject(
"Centrality"));
122 AliCentrality *centin = esdin->GetCentrality();
123 cent->SetQuality(centin->GetQuality());
124 cent->SetCentralityV0M(centin->GetCentralityPercentileUnchecked(
"V0M"));
125 cent->SetCentralityFMD(centin->GetCentralityPercentileUnchecked(
"FMD"));
126 cent->SetCentralityTRK(centin->GetCentralityPercentileUnchecked(
"TRK"));
127 cent->SetCentralityTKL(centin->GetCentralityPercentileUnchecked(
"TKL"));
128 cent->SetCentralityCL0(centin->GetCentralityPercentileUnchecked(
"CL0"));
129 cent->SetCentralityCL1(centin->GetCentralityPercentileUnchecked(
"CL1"));
130 cent->SetCentralityV0MvsFMD(centin->GetCentralityPercentileUnchecked(
"V0MvsFMD"));
131 cent->SetCentralityTKLvsV0M(centin->GetCentralityPercentileUnchecked(
"TKLvsV0M"));
132 cent->SetCentralityZEMvsZDC(centin->GetCentralityPercentileUnchecked(
"ZEMvsZDC"));
134 AliEventplane *ep =
dynamic_cast<AliEventplane*
>(objsout->FindObject(
"Eventplane"));
137 AliEventplane *epin = esdin->GetEventplane();
141 if (epin->GetQVector()) {
142 ep->SetQVector(
new TVector2(*epin->GetQVector()));
143 ep->SetEventplaneQ(epin->GetEventplane(
"Q"));
144 ep->SetQsub(
new TVector2(*epin->GetQsub1()),
new TVector2(*epin->GetQsub2()));
145 ep->SetQsubRes(epin->GetQsubRes());
150 AliESDZDC *zdc =
dynamic_cast<AliESDZDC*
>(objsout->FindObject(
"AliESDZDC"));
152 am->LoadBranch(
"AliESDZDC.");
153 *zdc = *esdin->GetESDZDC();
157 AliESDVZERO *v0 =
dynamic_cast<AliESDVZERO*
>(objsout->FindObject(
"AliESDVZERO"));
159 am->LoadBranch(
"AliESDVZERO.");
160 *v0 = *esdin->GetVZEROData();
164 AliESDTZERO *t0 =
dynamic_cast<AliESDTZERO*
>(objsout->FindObject(
"AliESDTZERO"));
166 am->LoadBranch(
"AliESDTZERO.");
167 *t0 = *esdin->GetESDTZERO();
171 AliESDVertex *tpcv =
dynamic_cast<AliESDVertex*
>(objsout->FindObject(
"TPCVertex"));
173 am->LoadBranch(
"TPCVertex.");
174 *tpcv = *esdin->GetPrimaryVertexTPC();
178 AliESDVertex *spdv =
dynamic_cast<AliESDVertex*
>(objsout->FindObject(
"SPDVertex"));
180 am->LoadBranch(
"SPDVertex.");
181 *spdv = *esdin->GetPrimaryVertexSPD();
185 AliESDVertex *priv =
dynamic_cast<AliESDVertex*
>(objsout->FindObject(
"PrimaryVertex"));
187 am->LoadBranch(
"PrimaryVertex.");
188 *priv = *esdin->GetPrimaryVertexTracks();
192 AliESDCaloCells *ecells =
dynamic_cast<AliESDCaloCells*
>(objsout->FindObject(
"EMCALCells"));
194 am->LoadBranch(
"EMCALCells.");
195 *ecells = *esdin->GetEMCALCells();
199 AliESDCaloCells *pcells =
dynamic_cast<AliESDCaloCells*
>(objsout->FindObject(
"PHOSCells"));
201 am->LoadBranch(
"PHOSCells.");
202 *pcells = *esdin->GetPHOSCells();
206 AliESDCaloTrigger *etrig =
dynamic_cast<AliESDCaloTrigger*
>(objsout->FindObject(
"EMCALTrigger"));
208 am->LoadBranch(
"EMCALTrigger.");
209 *etrig = *esdin->GetCaloTrigger(
"EMCAL");
213 AliESDCaloTrigger *ptrig =
dynamic_cast<AliESDCaloTrigger*
>(objsout->FindObject(
"PHOSTrigger"));
215 am->LoadBranch(
"PHOSTrigger.");
216 *ptrig = *esdin->GetCaloTrigger(
"PHOS");
222 am->LoadBranch(
"AliESDFMD.");
224 *fmd = *esdin->GetFMDData();
229 AliMultiplicity *mult =
dynamic_cast<AliMultiplicity*
>(objsout->FindObject(
"AliMultiplicity"));
231 am->LoadBranch(
"AliMultiplicity.");
233 *mult = *esdin->GetMultiplicity();
235 const AliMultiplicity *multin = esdin->GetMultiplicity();;
236 mult->SetFiredChips(0, multin->GetNumberOfFiredChips(0));
237 mult->SetFiredChips(1, multin->GetNumberOfFiredChips(1));
238 for (
Int_t i=0; i<6; ++i)
239 mult->SetITSClusters(i,multin->GetNumberOfITSClusters(i));
244 AliTOFHeader *tofh =
dynamic_cast<AliTOFHeader*
>(objsout->FindObject(
"AliTOFHeader"));
246 am->LoadBranch(
"AliTOFHeader.");
247 *tofh = *esdin->GetTOFHeader();
251 TClonesArray *spup =
dynamic_cast<TClonesArray*
>(objsout->FindObject(
"SPDPileupVertices"));
253 am->LoadBranch(
"SPDPileupVertices");
254 Int_t N = esdin->GetNumberOfPileupVerticesSPD();
255 for (
Int_t i=0; i<N; ++i) {
256 const AliESDVertex *vtx = esdin->GetPileupVertexSPD(i);
258 fEvent->AddPileupVertexSPD(vtx);
261 TClonesArray *tpup =
dynamic_cast<TClonesArray*
>(objsout->FindObject(
"TrkPileupVertices"));
263 am->LoadBranch(
"TrkPileupVertices");
264 Int_t N = esdin->GetNumberOfPileupVerticesTracks();
265 for (
Int_t i=0; i<N; ++i) {
266 const AliESDVertex *vtx = esdin->GetPileupVertexTracks(i);
268 fEvent->AddPileupVertexTracks(vtx);
273 TClonesArray *clus =
dynamic_cast<TClonesArray*
>(objsout->FindObject(
"CaloClusters"));
275 am->LoadBranch(
"CaloClusters");
276 Int_t N = esdin->GetNumberOfCaloClusters();
277 for (
Int_t i=0; i<N; ++i) {
278 AliESDCaloCluster *
c = esdin->GetCaloCluster(i);
285 fEvent->AddCaloCluster(c);
291 for (
Int_t i=0; i<namearr->GetEntries(); ++i) {
292 TString cname(namearr->At(i)->GetName());
293 if (cname.Length()<=0)
295 TClonesArray *arrin =
dynamic_cast<TClonesArray*
>(objsin->FindObject(cname));
297 AliFatal(Form(
"Can not find input clusters with name %s", cname.Data()));
301 TClonesArray *arrout =
dynamic_cast<TClonesArray*
>(objsout->FindObject(cname));
303 AliFatal(Form(
"Can not find output clusters with name %s", cname.Data()));
308 if (cname.Contains(
"FEE"))
310 const Int_t N = arrin->GetEntries();
311 for (
Int_t iC=0, nC=0; iC<N; ++iC) {
312 AliESDCaloCluster *
c =
dynamic_cast<AliESDCaloCluster*
>(arrin->At(iC));
317 AliESDCaloCluster *newCluster =
new ((*arrout)[nC]) AliESDCaloCluster(*c);
318 newCluster->SetID(nC);
326 am->LoadBranch(
"Tracks");
327 TClonesArray *tracksin =
dynamic_cast<TClonesArray*
>(objsin->FindObject(
fTracks));
329 AliFatal(Form(
"Can not find tracks with name %s",
fTracks.Data()));
334 trkoutname =
"PicoTracks";
335 TClonesArray *tracksout = 0;
336 tracksout =
dynamic_cast<TClonesArray*
>(objsout->FindObject(trkoutname));
338 AliFatal(Form(
"Can not find tracks with name %s", trkoutname.Data()));
342 TString classname(tracksin->GetClass()->GetName());
343 if (classname ==
"AliPicoTrack") {
345 AliFatal(Form(
"Need to enable fDoPicoTracks when reading AliPicoTracks"));
348 const Int_t Ntracks = tracksin->GetEntries();
349 for (
Int_t iTracks = 0, nacc = 0; iTracks < Ntracks; ++iTracks) {
357 const Int_t Ntracks = tracksin->GetEntries();
358 for (
Int_t iTracks = 0, nacc = 0; iTracks < Ntracks; ++iTracks) {
359 AliESDtrack *track =
dynamic_cast<AliESDtrack*
>(tracksin->At(iTracks));
363 if (!
fCuts->IsSelected(track))
370 if (newtrack.IsEMCAL()) {
374 new ((*tracksout)[nacc])
AliPicoTrack(newtrack.Pt(), newtrack.Eta(), newtrack.Phi(),
375 newtrack.Charge(), newtrack.GetLabel(), 0,
376 etaemc, phiemc, newtrack.IsEMCAL());
386 newtrack->SetID(nacc);
393 TClonesArray *muons =
dynamic_cast<TClonesArray*
>(objsout->FindObject(
"MuonTracks"));
395 am->LoadBranch(
"MuonTracks");
396 Int_t N = esdin->GetNumberOfMuonTracks();
397 for (
Int_t i=0; i<N; ++i) {
398 const AliESDMuonTrack *mt = esdin->GetMuonTrack(i);
399 new ((*muons)[i]) AliESDMuonTrack(*mt);
412 fTree =
new TTree(
"esdTree",
"Tree with skimmed ESD objects");
413 file->SetCompressionLevel(5);
414 fTree->SetDirectory(file);
415 fTree->SetAutoFlush(-10*1024*1024);
418 fEvent->CreateStdContent();
420 AliCentrality *cent =
new AliCentrality;
424 AliEventplane *ep =
new AliEventplane;
429 for (
Int_t i=0; i<namearr->GetEntries(); ++i) {
430 TString cname(namearr->At(i)->GetName());
431 if (cname.Length()<=0)
433 TClonesArray *arr =
new TClonesArray(
"AliESDCaloCluster",0);
441 TClonesArray *arr =
new TClonesArray(
"AliPicoTrack",0);
442 arr->SetName(
"PicoTracks");
446 fEvent->GetList()->Remove(obj);
447 TClonesArray *arr =
new TClonesArray(
"AliEsdTrackExt",0);
448 arr->SetName(
"Tracks");
Double_t GetEmcPhi() const
void MakeMiniTrack(Bool_t dall=0, Bool_t dcon=1, Bool_t dtrp=1, Bool_t dmap=1, Bool_t dits=1, Bool_t dtpc=1, Bool_t dtrd=1, Bool_t dtof=1, Bool_t dhmp=1)
AliEsdSkimTask(const char *opt=0)
Double_t GetEmcEta() const
TFile * file
TList with histograms for a given trigger.
void UserExec(Option_t *opt)
AliESDtrackCuts * fCuts
tree
void UserCreateOutputObjects()
TList * OpenFile(const char *fname)