]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskEmcalJetPatchTriggerQA.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / UserTasks / AliAnalysisTaskEmcalJetPatchTriggerQA.cxx
CommitLineData
1367fa32 1// ChristineQA task
2//
3// Author: J Mazer
4
5#include "AliAnalysisTaskEmcalJetPatchTriggerQA.h"
6
7#include <TCanvas.h>
8#include <TChain.h>
9#include <TClonesArray.h>
10#include <TH1F.h>
11#include <TH2F.h>
12#include <TH3F.h>
13#include <THnSparse.h>
14#include <TList.h>
15#include <TLorentzVector.h>
16#include <TParameter.h>
17#include <TParticle.h>
18#include <TTree.h>
19#include <TVector3.h>
20
21#include "AliAODEvent.h"
22#include "AliAnalysisManager.h"
23#include "AliAnalysisTask.h"
24#include "AliCentrality.h"
25#include "AliESDEvent.h"
26#include "AliESDInputHandler.h"
27#include "AliEmcalJet.h"
28#include "AliVCluster.h"
29#include "AliRhoParameter.h"
30#include "AliEmcalParticle.h"
31#include "AliLocalRhoParameter.h"
32#include "AliAnalysisTaskLocalRho.h"
33#include <AliInputEventHandler.h>
34#include <AliVEventHandler.h>
35
36ClassImp(AliAnalysisTaskEmcalJetPatchTriggerQA)
37
38//________________________________________________________________________
39AliAnalysisTaskEmcalJetPatchTriggerQA::AliAnalysisTaskEmcalJetPatchTriggerQA() :
40 AliAnalysisTaskEmcalJet("ChristineQA",kFALSE),
c11ba550 41 fPhimin(-10), fPhimax(10),
42 fEtamin(-0.9), fEtamax(0.9),
43 fAreacut(0.0),
1367fa32 44 fLocalRhoVal(0),
45 fHistNjetvsCent(0),
46 fhnJetTriggerQA(0x0)
47{
48 // Default constructor.
49 SetMakeGeneralHistograms(kTRUE);
50
51}
52
53//________________________________________________________________________
54AliAnalysisTaskEmcalJetPatchTriggerQA::AliAnalysisTaskEmcalJetPatchTriggerQA(const char *name) :
55 AliAnalysisTaskEmcalJet(name,kTRUE),
c11ba550 56 fPhimin(-10), fPhimax(10),
57 fEtamin(-0.9), fEtamax(0.9),
58 fAreacut(0.0),
1367fa32 59 fLocalRhoVal(0),
60 fHistNjetvsCent(0),
61 fhnJetTriggerQA(0x0)
62{
63
64 SetMakeGeneralHistograms(kTRUE);
65
66 // DefineInput(0,TChain::Class());
67 // DefineOutput(1, TList::Class());
68}
69
70//_______________________________________________________________________
71AliAnalysisTaskEmcalJetPatchTriggerQA::~AliAnalysisTaskEmcalJetPatchTriggerQA()
72{
73 // destructor
74 //
75 if (fOutput) {
76 delete fOutput;
77 fOutput = 0;
78 }
79}
80
81//________________________________________________________________________
82void AliAnalysisTaskEmcalJetPatchTriggerQA::UserCreateOutputObjects()
83{
84 if (! fCreateHisto)
85 return;
86 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
87
88 fHistNjetvsCent = new TH2F("NjetvsCent", "NjetvsCent", 100, 0.0, 100.0, 100, 0, 100);
89 fOutput->Add(fHistNjetvsCent);
90
91 UInt_t bitcode = 0; // bit codes, see GetDimParams() below
92 //bitcode = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7 | 1<<8 | 1<<9;
93 bitcode = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7 | 1<<8 ;
94 fhnJetTriggerQA = NewTHnSparseF("fhnJetTriggerQA", bitcode);
95 fhnJetTriggerQA->Sumw2();
96 fOutput->Add(fhnJetTriggerQA);
97
98 PostData(1, fOutput);
99}
100
101//________________________________________________________
102void AliAnalysisTaskEmcalJetPatchTriggerQA::ExecOnce()
103{
104 // Initialize the analysis
105 AliAnalysisTaskEmcalJet::ExecOnce();
106
107} // end of ExecOnce
108
109//________________________________________________________________________
110Bool_t AliAnalysisTaskEmcalJetPatchTriggerQA::Run()
111{
112 // TEST TEST TEST TEST for OBJECTS!!
113 if(!fLocalRho) {
114 AliWarning(Form("%s: Could not retrieve LocalRho object!", GetName()));
115 fLocalRho = GetLocalRhoFromEvent(fLocalRhoName);
116 }
117
c11ba550 118 // check to see if we have jet object
119 if (!fJets) return kTRUE;
1367fa32 120
121 // find NUMBER of jets
c11ba550 122 const Int_t Njets = fJets->GetEntries();
1367fa32 123 Int_t NjetAcc = 0;
124
125 // loop over jets in the event and make appropriate cuts
126 //cout<<"I at least get in the event and I have "<<Njets<<" jets"<<endl;
127 for (Int_t iJets = 0; iJets < Njets; ++iJets) {
128 AliEmcalJet *jet = static_cast<AliEmcalJet*>(fJets->At(iJets));
129 if (!jet) // see if we have a jet
130 continue;
c11ba550 131 if (!AcceptMyJet(jet))
1367fa32 132 continue;
c11ba550 133
134 //cout<<"jet pt "<<jet->Pt()<<" area "<<jet->Area()<<" maxtrackpt "<<jet->MaxTrackPt()<<endl;
1367fa32 135 //This somehow needs to be fixed but I'm not sure what it does yet. It seems the defaults are wacky.
c11ba550 136// if (! AcceptJet(jet)) // sees if jet is accepted
137// continue;
1367fa32 138 // jets.push_back(jet);
139
140 NjetAcc++;
1367fa32 141
142 // Initializations and Calculations
143 // Double_t jetphi = jet->Phi();
144 //Double_t jeteta = jet->Eta(); // ETA of jet
145
146 Double_t jetPtraw = jet->Pt(); // raw pT of jet
147 Double_t jetPtLocal = -500; // initialize corr jet pt LOCAL
148 Double_t jetPtGlobal = -500; // initialize corr jet pt GLOBAL
149 Double_t jetarea = -500; // initialize jet area
150 jetarea = jet->Area(); // jet area
151
c11ba550 152 Double_t dEP = -500; // initialize angle between jet and event plane
1367fa32 153 dEP = RelativeEPJET(jet->Phi(),fEPV0);
154
155 // get LOCAL rho from event and fill histo's
156 fRhoVal = fRho->GetVal();
157 fLocalRhoVal = fLocalRho->GetLocalVal(jet->Phi(), 0.2); // jet angle, then jet radius
158
159 jetPtLocal = jet->Pt() - jetarea*fLocalRhoVal; // corrected pT of jet from LOCAL rho value
160 jetPtGlobal = jet->Pt() - jetarea*fRhoVal; // corrected pT of jet from GLOBAL rho value
161
162 // need to update entries soon
163 //Double_t Entries[10] = {centbin, jetPtLocal, jetPtGlobal, jetPtraw, jet->Eta(), jet->Phi(), dEP, fLocalRhoVal, fRhoVal, fEPV0};
a010d0dc 164 Double_t Entries[9] = {fCent, jetPtLocal, jetPtGlobal, jetPtraw, jet->Phi(), dEP, fLocalRhoVal, fRhoVal, fEPV0};
1367fa32 165 fhnJetTriggerQA->Fill(Entries); // fill Sparse Histo with entries
166
167 // in plane and out of plane histo's
168 if( dEP>0 && dEP<=(TMath::Pi()/6) ){
169 // we are IN plane, lets fill some histo's
170 }else if( dEP>(TMath::Pi()/3) && dEP<=(TMath::Pi()/2) ){
171 // we are OUT of PLANE, lets fill some histo's
172 }
173
174 fHistNjetvsCent->Fill(fCent,NjetAcc);
175
1367fa32 176 } // LOOP over JETS in event
177
178 return kTRUE;
179}
180
181//________________________________________________________________________
182void AliAnalysisTaskEmcalJetPatchTriggerQA::Terminate(Option_t *)
183{
184
185} // end of terminate
186
187//________________________________________________________________________
188Int_t AliAnalysisTaskEmcalJetPatchTriggerQA::GetCentBin(Double_t cent) const
189{ // Get centrality bin.
190
191 Int_t centbin = -1;
192 if (cent>=0 && cent<10)
193 centbin = 0;
194 else if (cent>=10 && cent<20)
195 centbin = 1;
196 else if (cent>=20 && cent<30)
197 centbin = 2;
198 else if (cent>=30 && cent<40)
199 centbin = 3;
200 else if (cent>=40 && cent<50)
201 centbin = 4;
202 else if (cent>=50 && cent<90)
203 centbin = 5;
204 return centbin;
205}
206
207//_________________________________________________________________________
c11ba550 208Double_t AliAnalysisTaskEmcalJetPatchTriggerQA:: RelativeEPJET(Double_t jetAng, Double_t EPAng) const
1367fa32 209{ // function to calculate angle between jet and EP in the 1st quadrant (0,Pi/2)
210 Double_t dphi = (EPAng - jetAng);
211
212 // ran into trouble with a few dEP<-Pi so trying this...
213 if( dphi<-1*TMath::Pi() ){
214 dphi = dphi + 1*TMath::Pi();
215 }
216
217 if( (dphi>0) && (dphi<1*TMath::Pi()/2) ){
218 // Do nothing! we are in quadrant 1
219 }else if( (dphi>1*TMath::Pi()/2) && (dphi<1*TMath::Pi()) ){
220 dphi = 1*TMath::Pi() - dphi;
221 }else if( (dphi<0) && (dphi>-1*TMath::Pi()/2) ){
222 dphi = fabs(dphi);
223 }else if( (dphi<-1*TMath::Pi()/2) && (dphi>-1*TMath::Pi()) ){
224 dphi = dphi + 1*TMath::Pi();
225 }
226
227 // test
228 if( dphi < 0 || dphi > TMath::Pi()/2 )
229 AliWarning(Form("%s: dPHI not constrained from [0, Pi/2]", GetName()));
230
231 return dphi; // dphi in [0, Pi/2]
232}
233
234//______________________________________________________________________
235THnSparse* AliAnalysisTaskEmcalJetPatchTriggerQA::NewTHnSparseF(const char* name, UInt_t entries)
236{
237 // generate new THnSparseF, axes are defined in GetDimParams()
238 Int_t count = 0;
239 UInt_t tmp = entries;
240 while(tmp!=0){
241 count++;
242 tmp = tmp &~ -tmp; // clear lowest bit
243 }
244
245 TString hnTitle(name);
246 const Int_t dim = count;
247 Int_t nbins[dim];
248 Double_t xmin[dim];
249 Double_t xmax[dim];
250
251 Int_t i=0;
252 Int_t c=0;
253 while(c<dim && i<32){
254 if(entries&(1<<i)){
255
256 TString label("");
257 GetDimParams(i, label, nbins[c], xmin[c], xmax[c]);
258 hnTitle += Form(";%s",label.Data());
259 c++;
260 }
261
262 i++;
263 }
264 hnTitle += ";";
265
266 return new THnSparseF(name, hnTitle.Data(), dim, nbins, xmin, xmax);
267} // end of NewTHnSparseF
268
269void AliAnalysisTaskEmcalJetPatchTriggerQA::GetDimParams(Int_t iEntry, TString &label, Int_t &nbins, Double_t &xmin, Double_t &xmax)
270{
271 // stores label and binning of axis for THnSparse
272 const Double_t pi = TMath::Pi();
273
274 switch(iEntry){
275
276 case 0:
277 label = "V0 centrality (%)";
278 nbins = 20;
279 xmin = 0.;
280 xmax = 100.;
281 break;
282
283 case 1:
284 label = "Corrected jet p_{T}: Local #rho";
285 nbins = 500;
286 xmin = -250.;
287 xmax = 250.;
288 break;
289
290 case 2:
291 label = "Corrected jet p_{T}: Global #rho";
292 nbins = 500;
293 xmin = -250.;
294 xmax = 250.;
295 break;
296
297 case 3:
298 label = "Raw jet p_{T}";
299 nbins = 250;
300 xmin = 0;
301 xmax = 250.;
302 break;
303
304 case 4:
305 label = "Jet Phi";
306 nbins = 144;
307 xmin = 1.4;//-1.0*pi;
308 xmax = 3.4;//2.0*pi;
309 break;
310
311 case 5:
312 label = "Relative angle between jet and Reaction plane";
313 nbins = 72;
314 xmin = 0;
315 xmax = 0.5*pi;
316 break;
317
318 case 6:
319 label = "Local #rho value";
320 nbins = 120;
321 xmin = 0.0;
322 xmax = 300.0;
323 break;
324
325 case 7:
326 label = "Global #rho value";
327 nbins = 120;
328 xmin = 0.0;
329 xmax = 300.0;
330 break;
331
332 case 8:
333 label = "fEPV0 event plane";
334 nbins = 72;
335 xmin = -TMath::Pi()/2.0;
336 xmax = TMath::Pi()/2.0;
337 break;
338
339 } // end of switch
340} // end of getting dim-params
c11ba550 341
342//________________________________________________________________________
343Int_t AliAnalysisTaskEmcalJetPatchTriggerQA::AcceptMyJet(AliEmcalJet *jet) {
344 //applies all jet cuts except pt
345 if ((jet->Phi()<fPhimin)||(jet->Phi()>fPhimax)) return 0;
346 if ((jet->Eta()<fEtamin)||(jet->Eta()>fEtamax)) return 0;
347 if (jet->Area()<fAreacut) return 0;
348 // prevents 0 area jets from sneaking by when area cut == 0
349 if (jet->Area()==0) return 0;
350 //exclude jets with extremely high pt tracks which are likely misreconstructed
351 if(jet->MaxTrackPt()>100) return 0;
352
353 //passed all above cuts
354 return 1;
355}