AliPhysics  608b256 (608b256)
AliAodSkimTask.cxx
Go to the documentation of this file.
1 #include <Riostream.h>
2 #include <TChain.h>
3 #include <TFile.h>
4 #include <TGraph.h>
5 #include <TH1F.h>
6 #include <TKey.h>
7 #include <TList.h>
8 #include <TMath.h>
9 #include <TProfile.h>
10 #include <TSystem.h>
11 #include <AliAODEvent.h>
12 #include <AliAODHandler.h>
13 #include <AliAODInputHandler.h>
14 #include <AliAODMCHeader.h>
15 #include <AliAODMCParticle.h>
16 #include <AliAODVertex.h>
17 #include <AliAnalysisManager.h>
18 #include <AliLog.h>
19 #include "AliAodSkimTask.h"
20 #include "TObjectTable.h"
21 using namespace std;
22 ClassImp(AliAodSkimTask)
23 
24 AliAodSkimTask::AliAodSkimTask(const char* name) :
25  AliAnalysisTaskSE(name), fClusMinE(-1), fTrackMinPt(-1), fDoBothMinTrackAndClus(0), fCutMC(1), fYCutMC(0.7), fCutMinPt(0), fCutFilterBit(-1), fGammaBr(""),
26  fDoCopyHeader(1), fDoCopyVZERO(1), fDoCopyTZERO(1), fDoCopyVertices(1), fDoCopyTOF(1), fDoCopyTracklets(1), fDoCopyTracks(1), fDoRemoveTracks(0), fDoCleanTracks(0),
27  fDoRemCovMat(0), fDoRemPid(0), fDoCopyTrigger(1), fDoCopyPTrigger(0), fDoCopyCells(1), fDoCopyPCells(0), fDoCopyClusters(1), fDoCopyDiMuons(0), fDoCopyTrdTracks(0),
28  fDoCopyV0s(0), fDoCopyCascades(0), fDoCopyZDC(1), fDoCopyConv(0), fDoCopyMC(1), fDoCopyMCHeader(1), fDoVertWoRefs(0), fDoVertMain(0), fDoCleanTracklets(0),
29  fTrials(0), fPyxsec(0), fPytrials(0), fPypthardbin(0), fAOD(0), fAODMcHeader(0), fOutputList(0), fHevs(0), fHclus(0), fHtrack(0)
30 {
31  if (name) {
32  DefineInput(0, TChain::Class());
33  DefineOutput(1, TList::Class());
34  }
35 }
36 
38 {
39  if (fOutputList) {
40  delete fOutputList;
41  }
42  delete fHevs;
43  delete fHclus;
44  delete fHtrack;
45 }
46 
48 {
49  if (!fDoRemoveTracks)
50  return kTRUE;
51  //cout << "Keep tracks " << endl;
52  if (t->IsMuonGlobalTrack())
53  return kFALSE;
54  if (t->Pt()<fCutMinPt)
55  return kFALSE;
56  if (fCutFilterBit!=(UInt_t)-1) {
57  if (t->TestFilterBit(fCutFilterBit)==0)
58  return kFALSE;
59  }
60  return kTRUE;
61 }
62 
63 void AliAodSkimTask::CleanTrack(AliAODTrack *t)
64 {
65  if (!fDoCleanTracks)
66  return;
67  //cout << "Clean tracks " << endl;
68  t->SetRAtAbsorberEnd(0);
69  t->SetChi2MatchTrigger(0);
70  t->SetMuonClusterMap(0);
71  t->SetITSMuonClusterMap(0);
72  t->SetMUONtrigHitsMapTrg(0);
73  t->SetMUONtrigHitsMapTrk(0);
74  t->SetMFTClusterPattern(0);
75  t->SetMatchTrigger(0);
76  t->SetIsMuonGlobalTrack(0);
77  t->SetXYAtDCA(-999., -999.);
78  t->SetPxPyPzAtDCA(-999., -999., -999.);
79  if (fDoRemCovMat)
80  t->RemoveCovMatrix();
81  if (fDoRemPid) {
82  AliAODPid *pid = t->GetDetPid();
83  delete pid;
84  t->SetDetPID(0);
85  } else if (t->GetDetPid()) {
86  AliAODPid *pid = t->GetDetPid();
87  AliAODPid *nid = new AliAODPid;
88  nid->SetTPCsignal(pid->GetTPCsignal());
89  nid->SetTPCsignalN(pid->GetTPCsignalN());
90  nid->SetTPCmomentum(pid->GetTPCmomentum());
91  nid->SetTPCTgl(pid->GetTPCTgl());
92  /* Not used and getter not implemented
93  AliTPCdEdxInfo *dedx = new AliTPCdEdxInfo(pid->GetTPCdEdxInfo());
94  nid->SetTPCdEdxInfo(dedx); */
95  nid->SetTOFsignal(pid->GetTOFsignal());
96  Double_t val[5];
97  pid->GetTOFpidResolution(val);
98  nid->SetTOFpidResolution(val);
99  pid->GetIntegratedTimes(val,5);
100  nid->SetIntegratedTimes(val);
101  delete pid;
102  t->SetDetPID(nid);
103  }
104 }
105 
107 {
108  AliAnalysisManager *man = AliAnalysisManager::GetAnalysisManager();
109  AliAODHandler *oh = (AliAODHandler*)man->GetOutputEventHandler();
110  if (oh) {
111  TFile *fout = oh->GetTree()->GetCurrentFile();
112  fout->SetCompressionLevel(2);
113  }
114 
115  fOutputList = new TList;
116  fOutputList->SetOwner();
117  fHevs = new TH1F("hEvs","",2,-0.5,1.5);
118  fOutputList->Add(fHevs);
119  fHclus = new TH1F("hClus",";E (GeV)",200,0,100);
120  fOutputList->Add(fHclus);
121  fHtrack = new TH1F("hTrack",";p_{T} (GeV/c)",200,0,100);
122  fOutputList->Add(fHtrack);
123  PostData(1, fOutputList);
124 }
125 
127 {
128  fAOD = dynamic_cast<AliAODEvent*>(InputEvent());
129  if (!fAOD)
130  return;
131 
132  AliAnalysisManager *man = AliAnalysisManager::GetAnalysisManager();
133  AliAODHandler *oh = (AliAODHandler*)man->GetOutputEventHandler();
134  if (!oh) {
135  AliFatal(Form("%s: No output handler found", GetName()));
136  return;
137  }
138  oh->SetFillAOD(kFALSE);
139 
140  // Accept event only if an EMCal-cluster with a minimum energy of fClusMinE has been found in the event
141  Bool_t storeE = kFALSE;
142  if (fClusMinE>0) {
143  TClonesArray *cls = fAOD->GetCaloClusters();
144  for (Int_t i=0; i<cls->GetEntriesFast(); ++i) {
145  AliAODCaloCluster *clus = static_cast<AliAODCaloCluster*>(cls->At(i));
146  if (!clus->IsEMCAL())
147  continue;
148  Double_t e = clus->E();
149  fHclus->Fill(e);
150  if (e>fClusMinE) {
151  storeE = kTRUE;
152  }
153  }
154  } else {
155  storeE = kTRUE;
156  }
157 
158  // Accept event only if an track with a minimum pT of fTrackMinPt has been found in the event
159  Bool_t storePt = kFALSE;
160  if (fTrackMinPt > 0 ){
161  TClonesArray *tracks = fAOD->GetTracks();
162  for (Int_t i=0;i<tracks->GetEntries();++i) {
163  AliAODTrack *t = static_cast<AliAODTrack*>(tracks->At(i));
164  Double_t pt = t->Pt();
165  fHtrack->Fill(pt);
166  if (pt>fTrackMinPt) {
167  storePt = kTRUE;
168  }
169  }
170  } else {
171  storePt = kTRUE;
172  }
173 
174  Bool_t store = kFALSE;
175  if (fDoBothMinTrackAndClus && fClusMinE>0 && fTrackMinPt > 0){
176  // request that both conditions are full-filled for propagating the event
177  store = (storeE && storePt);
178  } else if (!fDoBothMinTrackAndClus && fClusMinE>0 && fTrackMinPt > 0){
179  // request that at least one of the conditions is fullfilled
180  store = (storeE || storePt);
181  } else if ( fClusMinE>0 ){
182  store = storeE;
183  } else if ( fTrackMinPt>0 ){
184  store = storePt;
185  } else {
186  store = kTRUE;
187  }
188 
189  if (!store) {
190  ++fTrials;
191  fHevs->Fill(0);
192  return;
193  }
194 
195  fHevs->Fill(1);
196 
197  oh->SetFillAOD(kTRUE);
198  AliAODEvent *eout = dynamic_cast<AliAODEvent*>(oh->GetAOD());
199  AliAODEvent *evin = dynamic_cast<AliAODEvent*>(InputEvent());
200  TTree *tout = oh->GetTree();
201  if (tout) {
202  TList *lout = tout->GetUserInfo();
203  if (lout->FindObject("alirootVersion")==0) {
204  TList *lin = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->GetUserInfo();
205  TString apver(gSystem->BaseName(gSystem->Getenv("ALICE_PHYSICS")));
206  lout->Add(new TObjString(Form("AodSkim: ver %s, tag %s with settings %s",GetVersion(),apver.Data(),Str())));
207  AliInfo(Form("%s: Set user info %s", GetName(), lout->At(0)->GetName()));
208  for (Int_t jj=0;jj<lin->GetEntries()-1;++jj) {
209  lout->Add(lin->At(jj)->Clone(lin->At(jj)->GetName()));
210  }
211  }
212  }
213 
214  if (fDoCopyHeader) {
215  AliAODHeader *out = (AliAODHeader*)eout->GetHeader();
216  AliAODHeader *in = (AliAODHeader*)evin->GetHeader();
217  *out = *in;
218  out->SetUniqueID(fTrials);
219  }
220 
221  if (fDoCopyVZERO) {
222  AliAODVZERO *out = eout->GetVZEROData();
223  AliAODVZERO *in = evin->GetVZEROData();
224  *out = *in;
225  }
226 
227  if (fDoCopyTZERO) {
228  AliAODTZERO *out = eout->GetTZEROData();
229  AliAODTZERO *in = evin->GetTZEROData();
230  *out = *in;
231  }
232 
233  if (fDoCopyVertices) {
234  TClonesArray *out = eout->GetVertices();
235  TClonesArray *in = evin->GetVertices();
236  if (out->GetEntries()>0) { // just checking if the deletion of previous event worked
237  AliFatal(Form("%s: Previous vertices not deleted. This should not happen!",GetName()));
238  }
239  out->AbsorbObjects(in);
240  Int_t marked=-1;
241  for (Int_t i=0; i<out->GetEntries(); ++i) {
242  AliAODVertex *v = static_cast<AliAODVertex*>(out->At(i));
243  Int_t nc = v->CountRealContributors();
244  Int_t nd = v->GetNDaughters();
245  if (fDoVertWoRefs) {
246  if (nc>0)
247  v->SetNContributors(nc);
248  else
249  v->SetNContributors(nd);
250  }
251  if (fDoVertMain) {
252  TString tmp(v->GetName());
253  if (!tmp.Contains("PrimaryVertex")&&!tmp.Contains("SPDVertex")&&!tmp.Contains("TPCVertex"))
254  continue;
255  marked=i;
256  break;
257  }
258  if (marked>0) {
259  out->RemoveRange(marked,out->GetEntries());
260  out->Compress();
261  }
262  }
263  }
264  if (fDoCopyTOF) {
265  AliTOFHeader *out = const_cast<AliTOFHeader*>(eout->GetTOFHeader());
266  const AliTOFHeader *in = evin->GetTOFHeader();
267  *out = *in;
268  }
269 
270  if (fDoCopyTracks) {
271  TClonesArray *out = eout->GetTracks();
272  TClonesArray *in = evin->GetTracks();
273  if (out->GetEntries()>0) { // just checking if the deletion of previous event worked
274  AliFatal(Form("%s: Previous tracks not deleted. This should not happen!",GetName()));
275  }
276  out->AbsorbObjects(in);
277  for (Int_t i=0;i<out->GetEntries();++i) {
278  AliAODTrack *t = static_cast<AliAODTrack*>(out->At(i));
279  if (KeepTrack(t)) {
280  CleanTrack(t);
281  if (fDoVertMain)
282  t->SetProdVertex(0);
283  } else {
284  t->~AliAODTrack();
285  new ((*out)[i]) AliAODTrack;
286  }
287  }
288  }
289 
290  if (fDoCopyTracklets) {
291  AliAODTracklets *out = eout->GetTracklets();
292  AliAODTracklets *in = evin->GetTracklets();
293  *out = *in;
294  if (fDoCleanTracklets) {
295  Int_t n=in->GetNumberOfTracklets();
296  out->SetTitle(Form("Ntracklets=%d",n));
297  out->DeleteContainer();
298  }
299  }
300 
301  if (fDoCopyTrigger) {
302  AliAODCaloTrigger *out = eout->GetCaloTrigger("EMCAL");
303  AliAODCaloTrigger *in = evin->GetCaloTrigger("EMCAL");
304  *out = *in;
305  }
306 
307  if (fDoCopyPTrigger) {
308  AliAODCaloTrigger *out = eout->GetCaloTrigger("PHOS");
309  AliAODCaloTrigger *in = evin->GetCaloTrigger("PHOS");
310  *out = *in;
311  }
312 
313  if (fDoCopyCells) {
314  AliAODCaloCells *out = eout->GetEMCALCells();
315  AliAODCaloCells *in = evin->GetEMCALCells();
316  *out = *in;
317  }
318 
319  if (fDoCopyPCells) {
320  AliAODCaloCells *out = eout->GetPHOSCells();
321  AliAODCaloCells *in = evin->GetPHOSCells();
322  *out = *in;
323  }
324 
325  if (fDoCopyClusters) {
326  TClonesArray *out = eout->GetCaloClusters();
327  TClonesArray *in = evin->GetCaloClusters();
328  if (out->GetEntries()>0) { // just checking if the deletion of previous event worked
329  AliFatal(Form("%s: Previous clusters not deleted. This should not happen!",GetName()));
330  }
331  out->AbsorbObjects(in);
332  }
333 
334  if (fDoCopyTrdTracks) {
335  TClonesArray *out = static_cast<TClonesArray*>(eout->FindListObject("trdTracks"));
336  TClonesArray *in = static_cast<TClonesArray*>(eout->FindListObject("trdTracks"));
337  if (out->GetEntries()>0) { // just checking if the deletion of previous event worked
338  AliFatal(Form("%s: Previous trdtracks not deleted. This should not happen!",GetName()));
339  }
340  out->AbsorbObjects(in);
341  }
342 
343  if (fDoCopyV0s) {
344  TClonesArray *out = eout->GetV0s();
345  TClonesArray *in = evin->GetV0s();
346  if (out->GetEntries()>0) { // just checking if the deletion of previous event worked
347  AliFatal(Form("%s: Previous v0s not deleted. This should not happen!",GetName()));
348  }
349  out->AbsorbObjects(in);
350  }
351 
352  if (fDoCopyCascades) {
353  TClonesArray *out = eout->GetCascades();
354  TClonesArray *in = evin->GetCascades();
355  if (out->GetEntries()>0) { // just checking if the deletion of previous event worked
356  AliFatal(Form("%s: Previous event not deleted. This should not happen!",GetName()));
357  }
358  out->AbsorbObjects(in);
359  }
360 
361  if (fDoCopyZDC) {
362  AliAODZDC *out = eout->GetZDCData();
363  AliAODZDC *in = evin->GetZDCData();
364  *out = *in;
365  }
366 
367  if (fDoCopyDiMuons) {
368  TClonesArray *out = eout->GetDimuons();
369  TClonesArray *in = evin->GetDimuons();
370  if (out->GetEntries()>0) { // just checking if the deletion of previous event worked
371  AliFatal(Form("%s: Previous dimuons not deleted. This should not happen!",GetName()));
372  }
373  out->AbsorbObjects(in);
374  }
375 
376  if (fDoCopyConv) {
377  TClonesArray *out = dynamic_cast<TClonesArray*>(eout->FindListObject(fGammaBr));
378  TClonesArray *in = dynamic_cast<TClonesArray*>(evin->FindListObject(fGammaBr));
379  if (!in) {
380  evin->GetList()->ls();
381  AliFatal(Form("%s: Could not find conversion branch with name %s!",GetName(), fGammaBr.Data()));
382  }
383  if (in && !out) {
384  out = new TClonesArray("AliAODConversionPhoton",2*in->GetEntries());
385  out->SetName(fGammaBr);
386  oh->AddBranch("TClonesArray", &out);
387  }
388  if (out->GetEntries()>0) { // just checking if the deletion of previous event worked
389  out->Delete();
390  }
391  out->AbsorbObjects(in);
392  }
393 
394  if (fDoCopyMC) {
395  TClonesArray *out = static_cast<TClonesArray*>(eout->FindListObject(AliAODMCParticle::StdBranchName()));
396  TClonesArray *in = static_cast<TClonesArray*>(evin->FindListObject(AliAODMCParticle::StdBranchName()));
397  if (in && !out) {
398  fgAODMCParticles = new TClonesArray("AliAODMCParticle",2*in->GetEntries());
399  fgAODMCParticles->SetName(AliAODMCParticle::StdBranchName());
400  oh->AddBranch("TClonesArray", &fgAODMCParticles);
401  out = static_cast<TClonesArray*>(eout->FindListObject(AliAODMCParticle::StdBranchName()));
402  }
403  if (in && out) {
404  if (out->GetEntries()>0) { // just checking if the deletion of previous event worked
405  AliFatal(Form("%s: Previous mcparticles not deleted. This should not happen!",GetName()));
406  }
407  out->AbsorbObjects(in);
408  if (fCutMC) {
409  for (Int_t i=0;i<out->GetEntriesFast();++i) {
410  AliAODMCParticle *mc = static_cast<AliAODMCParticle*>(in->At(i));
411  if ((mc==0)&&(i==0)) {
412  AliError(Form("%s: No MC info, skipping this event!",GetName()));
413  oh->SetFillAOD(kFALSE);
414  return;
415  }
416  if ((mc==0)||(TMath::Abs(mc->Y())>fYCutMC))
417  new ((*out)[i]) AliAODMCParticle;
418  }
419  }
420  }
421  }
422 
423  if (fDoCopyMCHeader) {
424  AliAODMCHeader *out = static_cast<AliAODMCHeader*>(eout->FindListObject(AliAODMCHeader::StdBranchName()));
425  AliAODMCHeader *in = static_cast<AliAODMCHeader*>(evin->FindListObject(AliAODMCHeader::StdBranchName()));
426  if (in && !out) {
427  fAODMcHeader = new AliAODMCHeader();
428  fAODMcHeader->SetName(AliAODMCHeader::StdBranchName());
429  oh->AddBranch("AliAODMCHeader",&fAODMcHeader);
430  out = static_cast<AliAODMCHeader*>(eout->FindListObject(AliAODMCHeader::StdBranchName()));
431  }
432  if (in && out) {
433  *out = *in;
434  if ((in->GetCrossSection()==0) && (fPyxsec>0)) {
435  out->SetCrossSection(fPyxsec);
436  out->SetTrials(fPytrials);
437  out->SetPtHard(fPypthardbin);
438  }
439  }
440  }
441 
442  if (gDebug>10) {
443  Int_t run = eout->GetRunNumber();
444  AliAODVertex *v=(AliAODVertex*)eout->GetVertices()->At(0);
445  Int_t vzn = v->GetNContributors();
446  Double_t vz = v->GetZ();
447  cout << "debug run " << run << " " << vzn << " " << vz << endl;
448  }
449 
450  fTrials = 0;
451  PostData(1, fOutputList);
452 }
453 
455 {
456  TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
457  if (!tree) {
458  AliError(Form("%s: No current tree!",GetName()));
459  return kFALSE;
460  }
461 
462  Float_t xsection = 0;
463  Float_t trials = 0;
464  Int_t pthardbin = 0;
465 
466  TFile *curfile = tree->GetCurrentFile();
467  if (!curfile) {
468  AliError(Form("%s: No current file!",GetName()));
469  return kFALSE;
470  }
471 
472  TChain *chain = dynamic_cast<TChain*>(tree);
473  if (chain) tree = chain->GetTree();
474  Int_t nevents = tree->GetEntriesFast();
475 
476  Int_t slevel = gErrorIgnoreLevel;
477  gErrorIgnoreLevel = kFatal;
478  Bool_t res = PythiaInfoFromFile(curfile->GetName(), xsection, trials, pthardbin);
479  gErrorIgnoreLevel=slevel;
480 
481  if (res) {
482  cout << "AliAodSkimTask " << GetName() << " found xsec info: " << xsection << " " << trials << " " << pthardbin << " " << nevents << endl;
483  fPyxsec = xsection;
484  fPytrials = trials;
485  fPypthardbin = pthardbin;
486  }
487 
488  return res;
489 }
490 
492 {
493  AliAnalysisManager *man = AliAnalysisManager::GetAnalysisManager();
494  if (man->GetAnalysisType()!=0)
495  return;
496  if (fHevs==0)
497  return;
498  Int_t norm = fHevs->GetEntries();
499  if (norm<1)
500  norm=1;
501  cout << "AliAodSkimTask " << GetName() << " terminated with accepted fraction of events: " << fHevs->GetBinContent(2)/norm
502  << " (" << fHevs->GetBinContent(2) << "/" << fHevs->GetEntries() << ")" << endl;
503 }
504 
505 Bool_t AliAodSkimTask::PythiaInfoFromFile(const char* currFile, Float_t &xsec, Float_t &trials, Int_t &pthard)
506 {
507  TString file(currFile);
508  xsec = 0;
509  trials = 1;
510 
511  if (file.Contains(".zip#")) {
512  Ssiz_t pos1 = file.Index("root_archive",12,0,TString::kExact);
513  Ssiz_t pos = file.Index("#",1,pos1,TString::kExact);
514  Ssiz_t pos2 = file.Index(".root",5,TString::kExact);
515  file.Replace(pos+1,pos2-pos1,"");
516  } else {
517  // not an archive take the basename....
518  file.ReplaceAll(gSystem->BaseName(file.Data()),"");
519  }
520  AliDebug(1,Form("File name: %s",file.Data()));
521 
522  // Get the pt hard bin
523  TString strPthard(file);
524 
525  strPthard.Remove(strPthard.Last('/'));
526  strPthard.Remove(strPthard.Last('/'));
527  if (strPthard.Contains("AOD")) strPthard.Remove(strPthard.Last('/'));
528  strPthard.Remove(0,strPthard.Last('/')+1);
529  if (strPthard.IsDec()) {
530  pthard = strPthard.Atoi();
531  }
532  else {
533  AliWarning(Form("Could not extract file number from path %s", strPthard.Data()));
534  pthard = -1;
535  }
536 
537  // problem that we cannot really test the existance of a file in a archive so we have to live with open error message from root
538  TFile *fxsec = TFile::Open(Form("%s%s",file.Data(),"pyxsec.root"));
539 
540  if (!fxsec) {
541  // next trial fetch the histgram file
542  fxsec = TFile::Open(Form("%s%s",file.Data(),"pyxsec_hists.root"));
543  if (!fxsec) {
544  // not a severe condition but inciate that we have no information
545  return kFALSE;
546  } else {
547  // find the tlist we want to be independtent of the name so use the Tkey
548  TKey* key = static_cast<TKey*>(fxsec->GetListOfKeys()->At(0));
549  if (!key) {
550  fxsec->Close();
551  return kFALSE;
552  }
553  TList *list = dynamic_cast<TList*>(key->ReadObj());
554  if (!list) {
555  fxsec->Close();
556  return kFALSE;
557  }
558  xsec = static_cast<TProfile*>(list->FindObject("h1Xsec"))->GetBinContent(1);
559  trials = static_cast<TH1F*>(list->FindObject("h1Trials"))->GetBinContent(1);
560  fxsec->Close();
561  }
562  } else { // no tree pyxsec.root
563  TTree *xtree = static_cast<TTree*>(fxsec->Get("Xsection"));
564  if (!xtree) {
565  fxsec->Close();
566  return kFALSE;
567  }
568  UInt_t ntrials = 0;
569  Double_t xsection = 0;
570  xtree->SetBranchAddress("xsection",&xsection);
571  xtree->SetBranchAddress("ntrials",&ntrials);
572  xtree->GetEntry(0);
573  trials = ntrials;
574  xsec = xsection;
575  fxsec->Close();
576  }
577  return kTRUE;
578 }
579 
580 const char *AliAodSkimTask::Str() const
581 {
582  return Form("mine%.2f_%dycut%.2f_%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d",
583  fClusMinE,
584  fCutMC,
585  fYCutMC,
586  fDoCopyHeader,
587  fDoCopyVZERO,
588  fDoCopyTZERO,
589  fDoCopyVertices,
590  fDoCopyTOF,
591  fDoCopyTracklets,
592  fDoCopyTracks,
593  fDoCopyTrigger,
594  fDoCopyPTrigger,
595  fDoCopyCells,
596  fDoCopyPCells,
597  fDoCopyClusters,
598  fDoCopyDiMuons,
599  fDoCopyTrdTracks,
600  fDoCopyV0s,
601  fDoCopyCascades,
602  fDoCopyZDC,
603  fDoCopyConv,
604  fDoCopyMC,
605  fDoCopyMCHeader);
606 }
607 
virtual Bool_t KeepTrack(AliAODTrack *t)
double Double_t
Definition: External.C:58
TSystem * gSystem
void Terminate(Option_t *option)
int Int_t
Definition: External.C:63
const char * Str() const
unsigned int UInt_t
Definition: External.C:33
float Float_t
Definition: External.C:68
void UserExec(Option_t *option)
virtual ~AliAodSkimTask()
Use to skim AOD files.
void UserCreateOutputObjects()
virtual void CleanTrack(AliAODTrack *t)
Bool_t PythiaInfoFromFile(const char *currFile, Float_t &xsec, Float_t &trials, Int_t &pthard)
TFile * file
TList with histograms for a given trigger.
Int_t nevents[nsamples]
const char Option_t
Definition: External.C:48
bool Bool_t
Definition: External.C:53
TFile * fout
input train file