2dfdbeb18a4c08bd95ab2803c50e2a1f3068b41b
[u/mrichter/AliRoot.git] / ANALYSIS / AliRunAnalysis.cxx
1 #include "AliRunAnalysis.h"
2 //________________________________
3 ///////////////////////////////////////////////////////////
4 //
5 // class AliRunAnalysis
6 //
7 //
8 //
9 // Piotr.Skowronski@cern.ch
10 //
11 ///////////////////////////////////////////////////////////
12
13 #include <stdlib.h>
14
15 #include <TString.h>
16 #include <TObjString.h>
17 #include <TClass.h>
18 #include <TFile.h>
19 #include <TKey.h>
20 #include <TObjArray.h>
21
22 #include <AliRun.h>
23 #include <AliRunLoader.h>
24 #include <AliStack.h>
25 #include <AliESDtrack.h>
26 #include <AliESD.h>
27
28
29 #include "AliEventCut.h"
30 #include "AliReader.h"
31 #include "AliVAODParticle.h"
32
33
34 ClassImp(AliRunAnalysis)
35 AliRunAnalysis::AliRunAnalysis():
36  TTask("RunAnalysis","Alice Analysis Manager")  ,
37  fReader(0x0),
38  fEventCut(0x0),
39  fCutOnSim(kFALSE),
40  fCutOnRec(kTRUE)
41 {
42   //ctor
43 }
44 /*********************************************************/
45
46 AliRunAnalysis::~AliRunAnalysis()
47 {
48   //dtor
49   delete fReader;
50   delete fEventCut;
51 }
52 /*********************************************************/
53
54 Int_t AliRunAnalysis::Run()
55 {
56  //makes analysis
57
58   if (fReader == 0x0)
59    {
60      Error("Run","Reader is not set");
61      return 1;
62    }
63   TDirectory* cwd = gDirectory; 
64  /******************************/ 
65  /*  Init Event                */ 
66  /******************************/ 
67  for (Int_t an = 0; an < fAnalysies.GetEntries(); an++)
68   {
69       AliAnalysis* analysis = (AliAnalysis*)fAnalysies.At(an);
70       analysis->Init();
71   }
72  
73  while (fReader->Next() == kFALSE)
74   {
75    AliAOD* eventsim = fReader->GetEventSim();
76    AliAOD* eventrec = fReader->GetEventRec();
77    
78       /******************************/ 
79       /*  Event Cut                 */ 
80       /******************************/ 
81       if ( Rejected(eventrec,eventsim) )
82        {
83          if (AliVAODParticle::GetDebug()) Info("Run","Event rejected by Event Cut");
84          continue; //Did not pass the 
85        }
86       /******************************/ 
87       /*  Process Event             */ 
88       /******************************/ 
89       for (Int_t an = 0; an < fAnalysies.GetEntries(); an++)
90        {
91            AliAnalysis* analysis = (AliAnalysis*)fAnalysies.At(an);
92            analysis->ProcessEvent(eventrec,eventsim);
93        }
94     
95   }//end of loop over events
96
97  /******************************/ 
98  /*  Finish Event              */ 
99  /******************************/ 
100  if (cwd) cwd->cd();
101  for (Int_t an = 0; an < fAnalysies.GetEntries(); an++)
102   {
103       AliAnalysis* analysis = (AliAnalysis*)fAnalysies.At(an);
104       analysis->Finish();
105   }
106
107  return 0;   
108 }
109 /*********************************************************/
110
111 void  AliRunAnalysis::Add(AliAnalysis* a)
112 {
113   //adds a to the list of analysis
114   fAnalysies.Add(a);
115 }
116 /*********************************************************/
117
118 void AliRunAnalysis::SetEventCut(AliEventCut* evcut)
119 {
120 //Sets event -  makes a private copy
121   delete fEventCut;
122   if (evcut) fEventCut = (AliEventCut*)evcut->Clone();
123   else fEventCut = 0x0;
124 }
125
126 /*********************************************************/
127
128 Bool_t AliRunAnalysis::Rejected(AliAOD* recevent, AliAOD* simevent)
129 {
130   //checks the event cut
131   if (fEventCut == 0x0) return kFALSE;
132   
133   if (fCutOnRec)
134     if (fEventCut->Rejected(recevent)) return kTRUE;
135     
136   if (fCutOnSim)
137     if (fEventCut->Rejected(simevent)) return kTRUE;
138   
139   return kFALSE;
140 }