]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG/FLOW/Tasks/AliAnalysisTaskQAPmdflow.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWG / FLOW / Tasks / AliAnalysisTaskQAPmdflow.cxx
1 #include "TMath.h"
2 #include "TH1D.h"
3 #include "TH2D.h"
4 #include "TSeqCollection.h"
5 #include "TObjArray.h"
6 #include "TObjArray.h"
7 #include "TChain.h"
8 #include "TMCProcess.h"
9 #include "TLorentzVector.h"
10 #include "TDirectory.h"
11 #include "TROOT.h"
12 #include "TNtuple.h"
13
14 #include "AliLog.h"
15 #include "AliVParticle.h"
16 #include "AliMCParticle.h"
17 #include "AliStack.h"
18 #include "AliVEvent.h"
19 #include "AliESDEvent.h"
20 #include "AliMCEvent.h"
21 #include "AliESDVZERO.h"
22 #include "AliESDZDC.h"
23 #include "AliESDtrack.h"
24 #include "AliFlowTrackCuts.h"
25 #include "AliFlowEventCuts.h"
26 #include "AliMultiplicity.h"
27 #include "AliESDtrackCuts.h"
28 #include "AliVertex.h"
29 #include "AliFlowEventSimple.h"
30 #include "AliFlowEvent.h"
31 #include "AliFlowVector.h"
32 #include "AliESDPmdTrack.h"
33 #include "AliAnalysisTaskSE.h"
34 #include "AliAnalysisManager.h"
35 #include "AliInputEventHandler.h"
36
37 #include "AliAnalysisTaskQAPmdflow.h"
38
39 ClassImp(AliAnalysisTaskQAPmdflow)
40
41 //________________________________________________________________________
42 AliAnalysisTaskQAPmdflow::AliAnalysisTaskQAPmdflow()
43   : AliAnalysisTaskSE(),
44     fOutput(NULL),
45     fEventCuts(NULL),
46     fRPTrackCuts(NULL),
47     fPOITrackCuts(NULL)
48 {
49   // Default constructor
50 }
51
52 //________________________________________________________________________
53 AliAnalysisTaskQAPmdflow::AliAnalysisTaskQAPmdflow(const char* name)
54   : AliAnalysisTaskSE(name),
55     fOutput(NULL),
56     fEventCuts(NULL),
57     fRPTrackCuts(NULL),
58     fPOITrackCuts(NULL)
59 {
60   // Constructor
61   DefineOutput(1, TObjArray::Class());
62 }
63
64 //________________________________________________________________________
65 void AliAnalysisTaskQAPmdflow::UserCreateOutputObjects()
66 {
67   // Called once at the beginning
68   fOutput=new TObjArray();
69   
70   //define histograms
71   TH1F* histB = new TH1F("PMD ADC cutB","PMD ADC cutB",500,0,10000);
72   fOutput->Add(histB); 
73
74   TH1F* histA = new TH1F("PMD ADC cutA","PMD ADC cutA",500,0,10000);
75   fOutput->Add(histA); 
76
77   TH1F* histCelB = new TH1F("PMD ncell CutB", "PMD ncell CutB",100,0,100);
78   fOutput->Add(histCelB); 
79   TH1F* histCelA = new TH1F("PMD ncell CutA", "PMD ncell CutA",100,0,100);
80   fOutput->Add(histCelA);
81   
82   //post data here as it doesn't change anyway (the pointer to list anyway)
83
84   PostData(1, fOutput);
85 }
86
87 //________________________________________________________________________
88 void AliAnalysisTaskQAPmdflow::UserExec(Option_t *)
89 {
90   //get teh input data
91   AliESDEvent* event = dynamic_cast<AliESDEvent*>(InputEvent());
92   if (!event)
93     {
94       AliFatal("no ESD event");
95       return;
96     }
97
98   fRPTrackCuts->SetEvent(event);
99
100   AliFlowTrackCuts::trackParameterType sourceRP = fRPTrackCuts->GetParamType();
101   AliFlowTrackCuts::trackParameterType sourcePOI = fPOITrackCuts->GetParamType();
102   Bool_t PmdTrRp = kFALSE;
103   Bool_t PmdTrPoi = kFALSE;
104   
105   if(sourcePOI == 4) PmdTrPoi = kTRUE;
106   if(sourceRP  == 4) PmdTrRp = kTRUE;
107   if((!PmdTrPoi) && (!PmdTrRp))
108     {
109       printf("Error : PMD track is not used as POI or RP");
110       return;
111     }
112   
113   TH1F* hPmdAdcB = static_cast<TH1F*>(fOutput->At(0));
114   TH1F* hPmdAdcA = static_cast<TH1F*>(fOutput->At(1));
115   TH1F* hPmdNcelB = static_cast<TH1F*>(fOutput->At(2));
116   TH1F* hPmdNcelA = static_cast<TH1F*>(fOutput->At(3));
117   
118   //Bool_t passevent = fEventCuts->IsSelected(event);
119   //Bool_t isSelectedEventSelection = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMB);
120
121   Int_t ntracks = 0;
122   
123   if(PmdTrRp) ntracks = fRPTrackCuts->GetNumberOfInputObjects();
124   if(PmdTrPoi) ntracks = fPOITrackCuts->GetNumberOfInputObjects();
125     
126   for (Int_t i=0; i < ntracks; i++)
127     {
128       Bool_t pass = kFALSE;
129       TObject* obj = 0x0;
130       if(PmdTrPoi){
131         obj = fPOITrackCuts->GetInputObject(i);
132         if (!obj) continue;
133         pass = fPOITrackCuts->IsSelected(obj,i);
134       }
135       
136       if(PmdTrRp){
137         obj = fRPTrackCuts->GetInputObject(i);
138         if (!obj) continue;
139         pass = fRPTrackCuts->IsSelected(obj,i);
140       }
141       AliESDPmdTrack* trackpmd = dynamic_cast<AliESDPmdTrack*>(obj);
142       if (trackpmd)
143         {
144           Int_t   det   = trackpmd->GetDetector();
145           Float_t adc   = trackpmd->GetClusterADC(); 
146           Float_t ncel  = trackpmd->GetClusterCells(); 
147           if(det == 0){
148           hPmdAdcB->Fill(adc); if(pass) hPmdAdcA->Fill(adc);
149           hPmdNcelB->Fill(ncel); if(pass) hPmdNcelA->Fill(ncel); 
150           }
151         }
152     }
153 }
154
155 //________________________________________________________________________
156 void AliAnalysisTaskQAPmdflow::Terminate(Option_t *)
157 {
158   //terminate
159   
160 }
161
162 //________________________________________________________________________
163 AliAnalysisTaskQAPmdflow::~AliAnalysisTaskQAPmdflow()
164 {
165   //dtor
166   delete fRPTrackCuts;
167   delete fPOITrackCuts;
168   delete fEventCuts;
169 }
170