AliPhysics  master (3d17d9d)
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), fTrackMaxPt(-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  if(fTrackMaxPt > 0 && fTrackMaxPt < pt){
170  storePt = kFALSE;
171  }
172  }
173  } else {
174  storePt = kTRUE;
175  }
176 
177 
178  Bool_t store = kFALSE;
179  if (fDoBothMinTrackAndClus && fClusMinE>0 && fTrackMinPt > 0){
180  // request that both conditions are full-filled for propagating the event
181  store = (storeE && storePt);
182  } else if (!fDoBothMinTrackAndClus && fClusMinE>0 && fTrackMinPt > 0){
183  // request that at least one of the conditions is fullfilled
184  store = (storeE || storePt);
185  } else if ( fClusMinE>0 ){
186  store = storeE;
187  } else if ( fTrackMinPt>0 ){
188  store = storePt;
189  } else {
190  store = kTRUE;
191  }
192 
193  if (!store) {
194  ++fTrials;
195  fHevs->Fill(0);
196  return;
197  }
198 
199  fHevs->Fill(1);
200 
201  oh->SetFillAOD(kTRUE);
202  AliAODEvent *eout = dynamic_cast<AliAODEvent*>(oh->GetAOD());
203  AliAODEvent *evin = dynamic_cast<AliAODEvent*>(InputEvent());
204  TTree *tout = oh->GetTree();
205  if (tout) {
206  TList *lout = tout->GetUserInfo();
207  if (lout->FindObject("alirootVersion")==0) {
208  TList *lin = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->GetUserInfo();
209  TString apver(gSystem->BaseName(gSystem->Getenv("ALICE_PHYSICS")));
210  lout->Add(new TObjString(Form("AodSkim: ver %s, tag %s with settings %s",GetVersion(),apver.Data(),Str())));
211  AliInfo(Form("%s: Set user info %s", GetName(), lout->At(0)->GetName()));
212  for (Int_t jj=0;jj<lin->GetEntries()-1;++jj) {
213  lout->Add(lin->At(jj)->Clone(lin->At(jj)->GetName()));
214  }
215  }
216  }
217 
218  if (fDoCopyHeader) {
219  AliAODHeader *out = (AliAODHeader*)eout->GetHeader();
220  AliAODHeader *in = (AliAODHeader*)evin->GetHeader();
221  *out = *in;
222  out->SetUniqueID(fTrials);
223  }
224 
225  if (fDoCopyVZERO) {
226  AliAODVZERO *out = eout->GetVZEROData();
227  AliAODVZERO *in = evin->GetVZEROData();
228  *out = *in;
229  }
230 
231  if (fDoCopyTZERO) {
232  AliAODTZERO *out = eout->GetTZEROData();
233  AliAODTZERO *in = evin->GetTZEROData();
234  *out = *in;
235  }
236 
237  if (fDoCopyVertices) {
238  TClonesArray *out = eout->GetVertices();
239  TClonesArray *in = evin->GetVertices();
240  if (out->GetEntries()>0) { // just checking if the deletion of previous event worked
241  AliFatal(Form("%s: Previous vertices not deleted. This should not happen!",GetName()));
242  }
243  out->AbsorbObjects(in);
244  Int_t marked=-1;
245  for (Int_t i=0; i<out->GetEntries(); ++i) {
246  AliAODVertex *v = static_cast<AliAODVertex*>(out->At(i));
247  Int_t nc = v->CountRealContributors();
248  Int_t nd = v->GetNDaughters();
249  if (fDoVertWoRefs) {
250  if (nc>0)
251  v->SetNContributors(nc);
252  else
253  v->SetNContributors(nd);
254  }
255  if (fDoVertMain) {
256  TString tmp(v->GetName());
257  if (!tmp.Contains("PrimaryVertex")&&!tmp.Contains("SPDVertex")&&!tmp.Contains("TPCVertex"))
258  continue;
259  marked=i;
260  break;
261  }
262  if (marked>0) {
263  out->RemoveRange(marked,out->GetEntries());
264  out->Compress();
265  }
266  }
267  }
268  if (fDoCopyTOF) {
269  AliTOFHeader *out = const_cast<AliTOFHeader*>(eout->GetTOFHeader());
270  const AliTOFHeader *in = evin->GetTOFHeader();
271  *out = *in;
272  }
273 
274  if (fDoCopyTracks) {
275  TClonesArray *out = eout->GetTracks();
276  TClonesArray *in = evin->GetTracks();
277  if (out->GetEntries()>0) { // just checking if the deletion of previous event worked
278  AliFatal(Form("%s: Previous tracks not deleted. This should not happen!",GetName()));
279  }
280  out->AbsorbObjects(in);
281  for (Int_t i=0;i<out->GetEntries();++i) {
282  AliAODTrack *t = static_cast<AliAODTrack*>(out->At(i));
283  if (KeepTrack(t)) {
284  CleanTrack(t);
285  if (fDoVertMain)
286  t->SetProdVertex(0);
287  } else {
288  t->~AliAODTrack();
289  new ((*out)[i]) AliAODTrack;
290  }
291  }
292  }
293 
294  if (fDoCopyTracklets) {
295  AliAODTracklets *out = eout->GetTracklets();
296  AliAODTracklets *in = evin->GetTracklets();
297  *out = *in;
298  if (fDoCleanTracklets) {
299  Int_t n=in->GetNumberOfTracklets();
300  out->SetTitle(Form("Ntracklets=%d",n));
301  out->DeleteContainer();
302  }
303  }
304 
305  if (fDoCopyTrigger) {
306  AliAODCaloTrigger *out = eout->GetCaloTrigger("EMCAL");
307  AliAODCaloTrigger *in = evin->GetCaloTrigger("EMCAL");
308  *out = *in;
309  }
310 
311  if (fDoCopyPTrigger) {
312  AliAODCaloTrigger *out = eout->GetCaloTrigger("PHOS");
313  AliAODCaloTrigger *in = evin->GetCaloTrigger("PHOS");
314  *out = *in;
315  }
316 
317  if (fDoCopyCells) {
318  AliAODCaloCells *out = eout->GetEMCALCells();
319  AliAODCaloCells *in = evin->GetEMCALCells();
320  *out = *in;
321  }
322 
323  if (fDoCopyPCells) {
324  AliAODCaloCells *out = eout->GetPHOSCells();
325  AliAODCaloCells *in = evin->GetPHOSCells();
326  *out = *in;
327  }
328 
329  if (fDoCopyClusters) {
330  TClonesArray *out = eout->GetCaloClusters();
331  TClonesArray *in = evin->GetCaloClusters();
332  if (out->GetEntries()>0) { // just checking if the deletion of previous event worked
333  AliFatal(Form("%s: Previous clusters not deleted. This should not happen!",GetName()));
334  }
335  out->AbsorbObjects(in);
336  }
337 
338  if (fDoCopyTrdTracks) {
339  TClonesArray *out = static_cast<TClonesArray*>(eout->FindListObject("trdTracks"));
340  TClonesArray *in = static_cast<TClonesArray*>(eout->FindListObject("trdTracks"));
341  if (out->GetEntries()>0) { // just checking if the deletion of previous event worked
342  AliFatal(Form("%s: Previous trdtracks not deleted. This should not happen!",GetName()));
343  }
344  out->AbsorbObjects(in);
345  }
346 
347  if (fDoCopyV0s) {
348  TClonesArray *out = eout->GetV0s();
349  TClonesArray *in = evin->GetV0s();
350  if (out->GetEntries()>0) { // just checking if the deletion of previous event worked
351  AliFatal(Form("%s: Previous v0s not deleted. This should not happen!",GetName()));
352  }
353  out->AbsorbObjects(in);
354  }
355 
356  if (fDoCopyCascades) {
357  TClonesArray *out = eout->GetCascades();
358  TClonesArray *in = evin->GetCascades();
359  if (out->GetEntries()>0) { // just checking if the deletion of previous event worked
360  AliFatal(Form("%s: Previous event not deleted. This should not happen!",GetName()));
361  }
362  out->AbsorbObjects(in);
363  }
364 
365  if (fDoCopyZDC) {
366  AliAODZDC *out = eout->GetZDCData();
367  AliAODZDC *in = evin->GetZDCData();
368  *out = *in;
369  }
370 
371  if (fDoCopyDiMuons) {
372  TClonesArray *out = eout->GetDimuons();
373  TClonesArray *in = evin->GetDimuons();
374  if (out->GetEntries()>0) { // just checking if the deletion of previous event worked
375  AliFatal(Form("%s: Previous dimuons not deleted. This should not happen!",GetName()));
376  }
377  out->AbsorbObjects(in);
378  }
379 
380  if (fDoCopyConv) {
381  TClonesArray *out = dynamic_cast<TClonesArray*>(eout->FindListObject(fGammaBr));
382  TClonesArray *in = dynamic_cast<TClonesArray*>(evin->FindListObject(fGammaBr));
383  if (!in) {
384  evin->GetList()->ls();
385  AliFatal(Form("%s: Could not find conversion branch with name %s!",GetName(), fGammaBr.Data()));
386  }
387  if (in && !out) {
388  out = new TClonesArray("AliAODConversionPhoton",2*in->GetEntries());
389  out->SetName(fGammaBr);
390  oh->AddBranch("TClonesArray", &out);
391  }
392  if (out->GetEntries()>0) { // just checking if the deletion of previous event worked
393  out->Delete();
394  }
395  out->AbsorbObjects(in);
396  }
397 
398  if (fDoCopyMC) {
399  TClonesArray *out = static_cast<TClonesArray*>(eout->FindListObject(AliAODMCParticle::StdBranchName()));
400  TClonesArray *in = static_cast<TClonesArray*>(evin->FindListObject(AliAODMCParticle::StdBranchName()));
401  if (in && !out) {
402  fgAODMCParticles = new TClonesArray("AliAODMCParticle",2*in->GetEntries());
403  fgAODMCParticles->SetName(AliAODMCParticle::StdBranchName());
404  oh->AddBranch("TClonesArray", &fgAODMCParticles);
405  out = static_cast<TClonesArray*>(eout->FindListObject(AliAODMCParticle::StdBranchName()));
406  }
407  if (in && out) {
408  if (out->GetEntries()>0) { // just checking if the deletion of previous event worked
409  AliFatal(Form("%s: Previous mcparticles not deleted. This should not happen!",GetName()));
410  }
411  out->AbsorbObjects(in);
412  if (fCutMC) {
413  for (Int_t i=0;i<out->GetEntriesFast();++i) {
414  AliAODMCParticle *mc = static_cast<AliAODMCParticle*>(in->At(i));
415  if ((mc==0)&&(i==0)) {
416  AliError(Form("%s: No MC info, skipping this event!",GetName()));
417  oh->SetFillAOD(kFALSE);
418  return;
419  }
420  if ((mc==0)||(TMath::Abs(mc->Y())>fYCutMC))
421  new ((*out)[i]) AliAODMCParticle;
422  }
423  }
424  }
425  }
426 
427  if (fDoCopyMCHeader) {
428  AliAODMCHeader *out = static_cast<AliAODMCHeader*>(eout->FindListObject(AliAODMCHeader::StdBranchName()));
429  AliAODMCHeader *in = static_cast<AliAODMCHeader*>(evin->FindListObject(AliAODMCHeader::StdBranchName()));
430  if (in && !out) {
431  fAODMcHeader = new AliAODMCHeader();
432  fAODMcHeader->SetName(AliAODMCHeader::StdBranchName());
433  oh->AddBranch("AliAODMCHeader",&fAODMcHeader);
434  out = static_cast<AliAODMCHeader*>(eout->FindListObject(AliAODMCHeader::StdBranchName()));
435  }
436  if (in && out) {
437  *out = *in;
438  if ((in->GetCrossSection()==0) && (fPyxsec>0)) {
439  out->SetCrossSection(fPyxsec);
440  out->SetTrials(fPytrials);
441  out->SetPtHard(fPypthardbin);
442  }
443  }
444  }
445 
446  if (gDebug>10) {
447  Int_t run = eout->GetRunNumber();
448  AliAODVertex *v=(AliAODVertex*)eout->GetVertices()->At(0);
449  Int_t vzn = v->GetNContributors();
450  Double_t vz = v->GetZ();
451  cout << "debug run " << run << " " << vzn << " " << vz << endl;
452  }
453 
454  fTrials = 0;
455  PostData(1, fOutputList);
456 }
457 
459 {
460  TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
461  if (!tree) {
462  AliError(Form("%s: No current tree!",GetName()));
463  return kFALSE;
464  }
465 
466  Float_t xsection = 0;
467  Float_t trials = 0;
468  Int_t pthardbin = 0;
469 
470  TFile *curfile = tree->GetCurrentFile();
471  if (!curfile) {
472  AliError(Form("%s: No current file!",GetName()));
473  return kFALSE;
474  }
475 
476  TChain *chain = dynamic_cast<TChain*>(tree);
477  if (chain) tree = chain->GetTree();
478  Int_t nevents = tree->GetEntriesFast();
479 
480  Int_t slevel = gErrorIgnoreLevel;
481  gErrorIgnoreLevel = kFatal;
482  Bool_t res = PythiaInfoFromFile(curfile->GetName(), xsection, trials, pthardbin);
483  gErrorIgnoreLevel=slevel;
484 
485  if (res) {
486  cout << "AliAodSkimTask " << GetName() << " found xsec info: " << xsection << " " << trials << " " << pthardbin << " " << nevents << endl;
487  fPyxsec = xsection;
488  fPytrials = trials;
489  fPypthardbin = pthardbin;
490  }
491 
492  return res;
493 }
494 
496 {
497  AliAnalysisManager *man = AliAnalysisManager::GetAnalysisManager();
498  if (man->GetAnalysisType()!=0)
499  return;
500  if (fHevs==0)
501  return;
502  Int_t norm = fHevs->GetEntries();
503  if (norm<1)
504  norm=1;
505  cout << "AliAodSkimTask " << GetName() << " terminated with accepted fraction of events: " << fHevs->GetBinContent(2)/norm
506  << " (" << fHevs->GetBinContent(2) << "/" << fHevs->GetEntries() << ")" << endl;
507 }
508 
509 Bool_t AliAodSkimTask::PythiaInfoFromFile(const char* currFile, Float_t &xsec, Float_t &trials, Int_t &pthard)
510 {
511  TString file(currFile);
512  xsec = 0;
513  trials = 1;
514 
515  if (file.Contains(".zip#")) {
516  Ssiz_t pos1 = file.Index("root_archive",12,0,TString::kExact);
517  Ssiz_t pos = file.Index("#",1,pos1,TString::kExact);
518  Ssiz_t pos2 = file.Index(".root",5,TString::kExact);
519  file.Replace(pos+1,pos2-pos1,"");
520  } else {
521  // not an archive take the basename....
522  file.ReplaceAll(gSystem->BaseName(file.Data()),"");
523  }
524  AliDebug(1,Form("File name: %s",file.Data()));
525 
526  // Get the pt hard bin
527  TString strPthard(file);
528 
529  strPthard.Remove(strPthard.Last('/'));
530  strPthard.Remove(strPthard.Last('/'));
531  if (strPthard.Contains("AOD")) strPthard.Remove(strPthard.Last('/'));
532  strPthard.Remove(0,strPthard.Last('/')+1);
533  if (strPthard.IsDec()) {
534  pthard = strPthard.Atoi();
535  }
536  else {
537  AliWarning(Form("Could not extract file number from path %s", strPthard.Data()));
538  pthard = -1;
539  }
540 
541  // 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
542  TFile *fxsec = TFile::Open(Form("%s%s",file.Data(),"pyxsec.root"));
543 
544  if (!fxsec) {
545  // next trial fetch the histgram file
546  fxsec = TFile::Open(Form("%s%s",file.Data(),"pyxsec_hists.root"));
547  if (!fxsec) {
548  // not a severe condition but inciate that we have no information
549  return kFALSE;
550  } else {
551  // find the tlist we want to be independtent of the name so use the Tkey
552  TKey* key = static_cast<TKey*>(fxsec->GetListOfKeys()->At(0));
553  if (!key) {
554  fxsec->Close();
555  return kFALSE;
556  }
557  TList *list = dynamic_cast<TList*>(key->ReadObj());
558  if (!list) {
559  fxsec->Close();
560  return kFALSE;
561  }
562  xsec = static_cast<TProfile*>(list->FindObject("h1Xsec"))->GetBinContent(1);
563  trials = static_cast<TH1F*>(list->FindObject("h1Trials"))->GetBinContent(1);
564  fxsec->Close();
565  }
566  } else { // no tree pyxsec.root
567  TTree *xtree = static_cast<TTree*>(fxsec->Get("Xsection"));
568  if (!xtree) {
569  fxsec->Close();
570  return kFALSE;
571  }
572  UInt_t ntrials = 0;
573  Double_t xsection = 0;
574  xtree->SetBranchAddress("xsection",&xsection);
575  xtree->SetBranchAddress("ntrials",&ntrials);
576  xtree->GetEntry(0);
577  trials = ntrials;
578  xsec = xsection;
579  fxsec->Close();
580  }
581  return kTRUE;
582 }
583 
584 const char *AliAodSkimTask::Str() const
585 {
586  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",
587  fClusMinE,
588  fCutMC,
589  fYCutMC,
590  fDoCopyHeader,
591  fDoCopyVZERO,
592  fDoCopyTZERO,
593  fDoCopyVertices,
594  fDoCopyTOF,
595  fDoCopyTracklets,
596  fDoCopyTracks,
597  fDoCopyTrigger,
598  fDoCopyPTrigger,
599  fDoCopyCells,
600  fDoCopyPCells,
601  fDoCopyClusters,
602  fDoCopyDiMuons,
603  fDoCopyTrdTracks,
604  fDoCopyV0s,
605  fDoCopyCascades,
606  fDoCopyZDC,
607  fDoCopyConv,
608  fDoCopyMC,
609  fDoCopyMCHeader);
610 }
611 
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
TTree * tree