]>
Commit | Line | Data |
---|---|---|
f3050824 | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
15 | ||
16 | /* $Id:$ */ | |
6ef5bfa4 | 17 | |
f3050824 | 18 | #include <TROOT.h> |
19 | #include <TSystem.h> | |
20 | #include <TChain.h> | |
21 | #include <TFile.h> | |
22 | #include <TList.h> | |
23 | #include <TH1I.h> | |
24 | #include <TH1F.h> | |
25 | #include <TH2F.h> | |
623ed0a0 | 26 | #include <TProfile.h> |
f3050824 | 27 | #include <TCanvas.h> |
28 | #include <TVector3.h> | |
29 | #include <TLorentzVector.h> | |
30 | #include <TMath.h> | |
6ef5bfa4 | 31 | #include <TTree.h> |
32 | #include <TBranch.h> | |
623ed0a0 | 33 | #include <TRandom.h> |
f3050824 | 34 | |
35 | #include "AliAnalysisTaskUE.h" | |
36 | #include "AliAnalysisManager.h" | |
37 | #include "AliMCEventHandler.h" | |
623ed0a0 | 38 | #include "AliMCEvent.h" |
f3050824 | 39 | #include "AliAODEvent.h" |
40 | #include "AliAODInputHandler.h" | |
41 | #include "AliAODHandler.h" | |
42 | #include "AliStack.h" | |
43 | #include "AliAODJet.h" | |
44 | #include "AliAODTrack.h" | |
623ed0a0 | 45 | #include "AliAODMCParticle.h" |
1c796df8 | 46 | #include "AliKFVertex.h" |
f3050824 | 47 | |
623ed0a0 | 48 | #include "AliGenPythiaEventHeader.h" |
49 | #include "AliAnalysisHelperJetTasks.h" | |
216601f0 | 50 | #include "AliInputEventHandler.h" |
623ed0a0 | 51 | #include "AliStack.h" |
f3050824 | 52 | #include "AliLog.h" |
53 | ||
02480db2 | 54 | //__________________________________________________________________ |
f3050824 | 55 | // Analysis class for Underlying Event studies |
56 | // | |
57 | // Look for correlations on the tranverse regions to | |
58 | // the leading charged jet | |
59 | // | |
02480db2 | 60 | // This class needs as input AOD with track and Jets. |
61 | // The output is a list of histograms | |
f3050824 | 62 | // |
63 | // AOD can be either connected to the InputEventHandler | |
64 | // for a chain of AOD files | |
65 | // or | |
66 | // to the OutputEventHandler | |
67 | // for a chain of ESD files, so this case class should be | |
68 | // in the train after the Jet finder | |
69 | // | |
70 | // Arian.Abrahantes.Quintana@cern.ch | |
71 | // Ernesto.Lopez.Torres@cern.ch | |
72 | // | |
73 | ||
74 | ||
75 | ClassImp( AliAnalysisTaskUE) | |
76 | ||
77 | //////////////////////////////////////////////////////////////////////// | |
78 | ||
79 | ||
80 | //____________________________________________________________________ | |
81 | AliAnalysisTaskUE:: AliAnalysisTaskUE(const char* name): | |
94ee88d4 | 82 | AliAnalysisTask(name,""), |
7fa8b2da | 83 | fTrigger(0), |
6b7d2b7e | 84 | fDebug(0), |
c4396fd4 | 85 | fDeltaAOD(kFALSE), |
86 | fDeltaAODBranch(""), | |
e1060f2b | 87 | fAODBranch("jets"), |
6b7d2b7e | 88 | fArrayJets(0x0), |
6ef5bfa4 | 89 | fAOD(0x0), |
90 | fAODjets(0x0), | |
91 | fListOfHistos(0x0), | |
92 | fBinsPtInHist(30), | |
93 | fMinJetPtInHist(0.), | |
baf36668 | 94 | fMaxJetPtInHist(300.), |
95 | fIsNorm2Area(kTRUE), | |
623ed0a0 | 96 | fUseMCParticleBranch(kFALSE), |
97 | fConstrainDistance(kTRUE), | |
98 | fMinDistance(0.2), | |
99 | fSimulateChJetPt(kFALSE), | |
100 | fUseAliStack(kTRUE), | |
94ee88d4 | 101 | fnTracksVertex(3), // QA tracks pointing to principal vertex (= 3 default) |
102 | fZVertex(5.), | |
6ef5bfa4 | 103 | fAnaType(1), |
104 | fRegionType(1), | |
105 | fConeRadius(0.7), | |
623ed0a0 | 106 | fConePosition(1), |
6ef5bfa4 | 107 | fAreaReg(1.5393), // Pi*0.7*0.7 |
108 | fUseChPartJet(kFALSE), | |
02480db2 | 109 | fUseChPartMaxPt(kFALSE), |
9d9a3c85 | 110 | fUseChargeHadrons(kFALSE), |
6ef5bfa4 | 111 | fUseSingleCharge(kFALSE), |
112 | fUsePositiveCharge(kTRUE), | |
113 | fOrdering(1), | |
114 | fFilterBit(0xFF), | |
115 | fJetsOnFly(kFALSE), | |
623ed0a0 | 116 | fChJetPtMin(5.0), |
6ef5bfa4 | 117 | fJet1EtaCut(0.2), |
118 | fJet2DeltaPhiCut(2.616), // 150 degrees | |
119 | fJet2RatioPtCut(0.8), | |
120 | fJet3PtCut(15.), | |
121 | fTrackPtCut(0.), | |
122 | fTrackEtaCut(0.9), | |
c4396fd4 | 123 | fAvgTrials(1), |
6ef5bfa4 | 124 | fhNJets(0x0), |
125 | fhEleadingPt(0x0), | |
126 | fhMinRegPtDist(0x0), | |
127 | fhRegionMultMin(0x0), | |
128 | fhMinRegAvePt(0x0), | |
129 | fhMinRegSumPt(0x0), | |
130 | fhMinRegMaxPtPart(0x0), | |
131 | fhMinRegSumPtvsMult(0x0), | |
de6f8090 | 132 | fhdNdEtaPhiDist(0x0), |
6ef5bfa4 | 133 | fhFullRegPartPtDistVsEt(0x0), |
134 | fhTransRegPartPtDistVsEt(0x0), | |
135 | fhRegionSumPtMaxVsEt(0x0), | |
136 | fhRegionMultMax(0x0), | |
137 | fhRegionMultMaxVsEt(0x0), | |
138 | fhRegionSumPtMinVsEt(0x0), //fhRegionMultMin(0x0), | |
e1060f2b | 139 | fhRegionMultMinVsEt(0x0), |
140 | fhRegionAveSumPtVsEt(0x0), | |
141 | fhRegionDiffSumPtVsEt(0x0), | |
6ef5bfa4 | 142 | fhRegionAvePartPtMaxVsEt(0x0), |
143 | fhRegionAvePartPtMinVsEt(0x0), | |
144 | fhRegionMaxPartPtMaxVsEt(0x0), | |
94ee88d4 | 145 | //fhRegForwardSumPtVsEt(0x0), |
146 | //fhRegForwardMultVsEt(0x0), | |
147 | //fhRegBackwardSumPtVsEt(0x0), | |
148 | //fhRegBackwardMultVsEt(0x0), | |
baf36668 | 149 | fhRegForwardMult(0x0), |
150 | fhRegForwardSumPtvsMult(0x0), | |
151 | fhRegBackwardMult(0x0), | |
152 | fhRegBackwardSumPtvsMult(0x0), | |
153 | fhRegForwardPartPtDistVsEt(0x0), | |
154 | fhRegBackwardPartPtDistVsEt(0x0), | |
155 | fhRegTransMult(0x0), | |
156 | fhRegTransSumPtVsMult(0x0), | |
5713f021 | 157 | fhMinRegSumPtJetPtBin(0x0), |
158 | fhMaxRegSumPtJetPtBin(0x0), | |
94ee88d4 | 159 | fhVertexMult(0x0), |
623ed0a0 | 160 | fh1Xsec(0x0), |
161 | fh1Trials(0x0), | |
6ef5bfa4 | 162 | fSettingsTree(0x0)//, fhValidRegion(0x0) |
f3050824 | 163 | { |
164 | // Default constructor | |
165 | // Define input and output slots here | |
166 | // Input slot #0 works with a TChain | |
167 | DefineInput(0, TChain::Class()); | |
168 | // Output slot #0 writes into a TList container | |
169 | DefineOutput(0, TList::Class()); | |
94ee88d4 | 170 | |
f3050824 | 171 | } |
172 | ||
623ed0a0 | 173 | //______________________________________________________________ |
174 | Bool_t AliAnalysisTaskUE::Notify() | |
175 | { | |
176 | // | |
177 | // Implemented Notify() to read the cross sections | |
178 | // and number of trials from pyxsec.root | |
519378fb | 179 | // Copy from AliAnalysisTaskJFSystematics |
856f9829 | 180 | fAvgTrials = 1; |
623ed0a0 | 181 | TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree(); |
519378fb | 182 | Float_t xsection = 0; |
183 | Float_t ftrials = 1; | |
623ed0a0 | 184 | if(tree){ |
185 | TFile *curfile = tree->GetCurrentFile(); | |
186 | if (!curfile) { | |
187 | Error("Notify","No current file"); | |
188 | return kFALSE; | |
189 | } | |
190 | if(!fh1Xsec||!fh1Trials){ | |
191 | Printf("%s%d No Histogram fh1Xsec",(char*)__FILE__,__LINE__); | |
192 | return kFALSE; | |
193 | } | |
c4396fd4 | 194 | AliAnalysisHelperJetTasks::PythiaInfoFromFile(curfile->GetName(),xsection,ftrials); |
623ed0a0 | 195 | fh1Xsec->Fill("<#sigma>",xsection); |
9d9a3c85 | 196 | |
c4396fd4 | 197 | // construct average trials |
198 | Float_t nEntries = (Float_t)tree->GetTree()->GetEntries(); | |
a221560c | 199 | if(ftrials>=nEntries && nEntries>0.)fAvgTrials = ftrials/nEntries; |
c4396fd4 | 200 | } |
201 | ||
623ed0a0 | 202 | return kTRUE; |
203 | } | |
204 | ||
f3050824 | 205 | //____________________________________________________________________ |
206 | void AliAnalysisTaskUE::ConnectInputData(Option_t* /*option*/) | |
207 | { | |
6ef5bfa4 | 208 | // Connect the input data |
f3050824 | 209 | |
6ef5bfa4 | 210 | // We need AOD with tracks and jets. |
211 | // Since AOD can be either connected to the InputEventHandler (input chain fron AOD files) | |
1e996f55 | 212 | // or to the OutputEventHandler ( AOD is create by a previus task in the train ) |
6ef5bfa4 | 213 | // we need to check where it is and get the pointer to AODEvent in the right way |
f3050824 | 214 | |
c4396fd4 | 215 | // Delta AODs are also implemented |
216 | ||
217 | ||
218 | if (fDebug > 1) AliInfo("ConnectInputData() "); | |
f3050824 | 219 | |
220 | TObject* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler(); | |
221 | ||
c4396fd4 | 222 | if( handler && handler->InheritsFrom("AliAODInputHandler") ) { // input AOD |
223 | fAOD = ((AliAODInputHandler*)handler)->GetEvent(); | |
224 | if (fDebug > 1) AliInfo(" ==== Tracks from AliAODInputHandler"); | |
02480db2 | 225 | // Case when jets are reconstructed on the fly from AOD tracks |
226 | // (the Jet Finder is using the AliJetAODReader) of InputEventHandler | |
227 | // and put in the OutputEventHandler AOD. Useful whe you want to reconstruct jets with | |
228 | // different parameters to default ones stored in the AOD or to use a different algorithm | |
229 | if( fJetsOnFly ) { | |
230 | handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler(); | |
231 | if( handler && handler->InheritsFrom("AliAODHandler") ) { | |
232 | fAODjets = ((AliAODHandler*)handler)->GetAOD(); | |
233 | if (fDebug > 1) AliInfo(" ==== Jets from AliAODHandler (on the fly)"); | |
234 | } | |
235 | } else { | |
236 | fAODjets = fAOD; | |
237 | if (fDebug > 1) AliInfo(" ==== Jets from AliAODInputHandler"); | |
238 | } | |
c4396fd4 | 239 | } else { //output AOD |
6ef5bfa4 | 240 | handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler(); |
241 | if( handler && handler->InheritsFrom("AliAODHandler") ) { | |
c4396fd4 | 242 | fAOD = ((AliAODHandler*)handler)->GetAOD(); |
6ef5bfa4 | 243 | fAODjets = fAOD; |
c4396fd4 | 244 | if (fDebug > 1) AliInfo(" ==== Tracks and Jets from AliAODHandler"); |
6ef5bfa4 | 245 | } else { |
246 | AliFatal("I can't get any AOD Event Handler"); | |
247 | return; | |
248 | } | |
249 | } | |
f3050824 | 250 | } |
251 | ||
252 | //____________________________________________________________________ | |
253 | void AliAnalysisTaskUE::CreateOutputObjects() | |
254 | { | |
6ef5bfa4 | 255 | // Create the output container |
256 | // | |
f3050824 | 257 | if (fDebug > 1) AliInfo("CreateOutPutData()"); |
258 | // | |
259 | // Histograms | |
1e996f55 | 260 | |
7fa8b2da | 261 | // OpenFile(0); |
f3050824 | 262 | CreateHistos(); |
94ee88d4 | 263 | fListOfHistos->SetOwner(kTRUE); |
264 | PostData(0,fListOfHistos); | |
1e996f55 | 265 | |
f3050824 | 266 | } |
267 | ||
f3050824 | 268 | //____________________________________________________________________ |
269 | void AliAnalysisTaskUE::Exec(Option_t */*option*/) | |
270 | { | |
1c796df8 | 271 | //Trigger selection ************************************************ |
94ee88d4 | 272 | /*AliInputEventHandler* inputHandler = (AliInputEventHandler*) |
216601f0 | 273 | ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler()); |
02480db2 | 274 | if (inputHandler->IsEventSelected()) { |
275 | if (fDebug > 1) AliInfo(" Trigger Selection: event ACCEPTED ... "); | |
276 | } else { | |
277 | if (fDebug > 1) AliInfo(" Trigger Selection: event REJECTED ... "); | |
278 | return; | |
279 | } | |
94ee88d4 | 280 | */ |
1c796df8 | 281 | //Event selection (vertex) ***************************************** |
94ee88d4 | 282 | |
283 | Int_t nVertex = fAOD->GetNumberOfVertices(); | |
284 | if( nVertex > 0 ) { // Only one vertex (reject pileup??) | |
285 | AliAODVertex* vertex = (AliAODVertex*)fAOD->GetPrimaryVertex(); | |
286 | TString tpcvertex("TPCVertex"); | |
287 | if (vertex->GetName() == tpcvertex){ | |
288 | if (fDebug > 1) AliInfo(Form("Primary vertex selection: %s event REJECTED ...",vertex->GetName())); | |
289 | return; | |
290 | } | |
291 | Int_t nTracksPrim = vertex->GetNContributors(); | |
292 | Double_t zVertex = vertex->GetZ(); | |
293 | if (fDebug > 1) AliInfo(Form(" Vertex in = %f with %d particles by %s data ...",zVertex,nTracksPrim,vertex->GetName())); | |
294 | // Select a quality vertex by number of tracks? | |
295 | if( nTracksPrim < fnTracksVertex || TMath::Abs(zVertex) > fZVertex ) { | |
296 | if (fDebug > 1) AliInfo(" Primary-vertex Selection: event REJECTED ..."); | |
297 | return; | |
298 | } | |
299 | if (fDebug > 1) AliInfo(" Primary-vertex Selection: event ACCEPTED..."); | |
300 | } else { | |
301 | if (fDebug > 1) AliInfo(" Primary-vertex Selection: event REJECTED ..."); | |
302 | return; | |
303 | } | |
304 | /*AliKFVertex primVtx(*(fAOD->GetPrimaryVertex())); | |
1c796df8 | 305 | Int_t nTracksPrim=primVtx.GetNContributors(); |
306 | if (fDebug > 1) AliInfo(Form(" Primary-vertex Selection: %d",nTracksPrim)); | |
307 | if(!nTracksPrim){ | |
02480db2 | 308 | if (fDebug > 1) AliInfo(" Primary-vertex Selection: event REJECTED ..."); |
309 | return; | |
310 | } | |
1c796df8 | 311 | if (fDebug > 1) AliInfo(" Primary-vertex Selection: event ACCEPTED ..."); |
94ee88d4 | 312 | */ |
6ef5bfa4 | 313 | // Execute analysis for current event |
314 | // | |
315 | if ( fDebug > 3 ) AliInfo( " Processing event..." ); | |
519378fb | 316 | // fetch the pythia header info and get the trials |
317 | AliMCEventHandler* mcHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()); | |
318 | Float_t nTrials = 1; | |
c4396fd4 | 319 | if (mcHandler) { |
320 | AliMCEvent* mcEvent = mcHandler->MCEvent(); | |
321 | if (mcEvent) { | |
322 | AliGenPythiaEventHeader* pythiaGenHeader = AliAnalysisHelperJetTasks::GetPythiaEventHeader(mcEvent); | |
323 | if(pythiaGenHeader){ | |
324 | nTrials = pythiaGenHeader->Trials(); | |
325 | } | |
519378fb | 326 | } |
327 | } | |
02480db2 | 328 | fh1Trials->Fill("#sum{ntrials}",fAvgTrials); |
329 | AnalyseUE(); | |
330 | ||
f3050824 | 331 | // Post the data |
332 | PostData(0, fListOfHistos); | |
333 | } | |
f3050824 | 334 | |
335 | //____________________________________________________________________ | |
336 | void AliAnalysisTaskUE::AnalyseUE() | |
337 | { | |
02480db2 | 338 | Double_t const kMyTolerance = 0.0000001; |
f3050824 | 339 | // |
340 | // Look for correlations on the tranverse regions to | |
341 | // the leading charged jet | |
342 | // | |
6ef5bfa4 | 343 | |
f3050824 | 344 | // ------------------------------------------------ |
345 | // Find Leading Jets 1,2,3 | |
346 | // (could be skipped if Jets are sort by Pt...) | |
347 | Double_t maxPtJet1 = 0.; | |
348 | Int_t index1 = -1; | |
349 | Double_t maxPtJet2 = 0.; // jet 2 need for back to back inclusive | |
350 | Int_t index2 = -1; | |
351 | Double_t maxPtJet3 = 0.; // jet 3 need for back to back exclusive | |
352 | Int_t index3 = -1; | |
6ef5bfa4 | 353 | TVector3 jetVect[3]; |
354 | Int_t nJets = 0; | |
355 | ||
c4396fd4 | 356 | |
02480db2 | 357 | if( !fUseChPartJet && fAnaType != 4 ) { |
6ef5bfa4 | 358 | |
359 | // Use AOD Jets | |
c4396fd4 | 360 | if(fDeltaAOD){ |
361 | if (fDebug > 1) AliInfo(" ==== Jets From Delta-AODs !"); | |
362 | if (fDebug > 1) AliInfo(Form(" ==== Reading Branch: %s ",fDeltaAODBranch.Data())); | |
02480db2 | 363 | fArrayJets = (TClonesArray*)fAODjets->GetList()->FindObject(fDeltaAODBranch.Data()); |
02480db2 | 364 | } else { |
e1060f2b | 365 | if (fDebug > 1) AliInfo(" ==== Read Standard-AODs !"); |
366 | if (fDebug > 1) AliInfo(Form(" ==== Reading Branch: %s ",fAODBranch.Data())); | |
94ee88d4 | 367 | fArrayJets = (TClonesArray*)fAODjets->GetList()->FindObject(fAODBranch.Data()); |
368 | } | |
369 | if (!fArrayJets){ | |
370 | AliFatal(" No jet-array! "); | |
371 | return; | |
c4396fd4 | 372 | } |
94ee88d4 | 373 | nJets=fArrayJets->GetEntries(); |
c4396fd4 | 374 | //printf("AOD %d jets \n", nJets); |
375 | ||
6ef5bfa4 | 376 | for( Int_t i=0; i<nJets; ++i ) { |
94ee88d4 | 377 | AliAODJet* jet = (AliAODJet*)fArrayJets->At(i); |
c4396fd4 | 378 | Double_t jetPt = jet->Pt();//*1.666; // FIXME Jet Pt Correction ?????!!! |
9d9a3c85 | 379 | |
6ef5bfa4 | 380 | if( jetPt > maxPtJet1 ) { |
02480db2 | 381 | maxPtJet3 = maxPtJet2; index3 = index2; |
382 | maxPtJet2 = maxPtJet1; index2 = index1; | |
383 | maxPtJet1 = jetPt; index1 = i; | |
6ef5bfa4 | 384 | } else if( jetPt > maxPtJet2 ) { |
02480db2 | 385 | maxPtJet3 = maxPtJet2; index3 = index2; |
386 | maxPtJet2 = jetPt; index2 = i; | |
6ef5bfa4 | 387 | } else if( jetPt > maxPtJet3 ) { |
02480db2 | 388 | maxPtJet3 = jetPt; index3 = i; |
6ef5bfa4 | 389 | } |
390 | } | |
9d9a3c85 | 391 | |
6ef5bfa4 | 392 | if( index1 != -1 ) { |
94ee88d4 | 393 | AliAODJet *jet =(AliAODJet*) fArrayJets->At(index1); |
7f80aa7b | 394 | if(jet)jetVect[0].SetXYZ(jet->Px(), jet->Py(), jet->Pz()); |
6ef5bfa4 | 395 | } |
396 | if( index2 != -1 ) { | |
94ee88d4 | 397 | AliAODJet* jet= (AliAODJet*) fArrayJets->At(index2); |
7f80aa7b | 398 | if(jet)jetVect[1].SetXYZ(jet->Px(), jet->Py(), jet->Pz()); |
6ef5bfa4 | 399 | } |
400 | if( index3 != -1 ) { | |
94ee88d4 | 401 | AliAODJet* jet = (AliAODJet*) fArrayJets->At(index3); |
7f80aa7b | 402 | if(jet)jetVect[2].SetXYZ(jet->Px(), jet->Py(), jet->Pz()); |
6ef5bfa4 | 403 | } |
404 | ||
02480db2 | 405 | } |
406 | ||
407 | if( fUseChPartJet ) { | |
408 | ||
6ef5bfa4 | 409 | // Use "Charged Particle Jets" |
410 | TObjArray* jets = FindChargedParticleJets(); | |
411 | if( jets ) { | |
412 | nJets = jets->GetEntriesFast(); | |
413 | if( nJets > 0 ) { | |
02480db2 | 414 | index1 = 0; |
415 | AliAODJet* jet = (AliAODJet*)jets->At(0); | |
416 | maxPtJet1 = jet->Pt(); | |
417 | jetVect[0].SetXYZ(jet->Px(), jet->Py(), jet->Pz()); | |
6ef5bfa4 | 418 | } |
419 | if( nJets > 1 ) { | |
02480db2 | 420 | index2 = 1; |
421 | AliAODJet* jet = (AliAODJet*)jets->At(1); | |
9d9a3c85 | 422 | maxPtJet2 = jet->Pt(); |
02480db2 | 423 | jetVect[1].SetXYZ(jet->Px(), jet->Py(), jet->Pz()); |
6ef5bfa4 | 424 | } |
425 | if( nJets > 2 ) { | |
02480db2 | 426 | index3 = 2; |
427 | AliAODJet* jet = (AliAODJet*)jets->At(2); | |
9d9a3c85 | 428 | maxPtJet3 = jet->Pt(); |
02480db2 | 429 | jetVect[2].SetXYZ(jet->Px(), jet->Py(), jet->Pz()); |
6ef5bfa4 | 430 | } |
431 | ||
432 | jets->Delete(); | |
433 | delete jets; | |
02480db2 | 434 | if (fDebug > 1) AliInfo(" ==== Jets Created in OUR class !: CDF algorithm "); |
f3050824 | 435 | } |
436 | } | |
c4396fd4 | 437 | |
02480db2 | 438 | |
439 | if( fAnaType == 4 ) { | |
440 | ||
441 | // Use "Max Pt Charge Particle" | |
442 | TObjArray* tracks = SortChargedParticles(); | |
443 | if( tracks ) { | |
444 | nJets = tracks->GetEntriesFast(); | |
445 | if( nJets > 0 ) { | |
446 | index1 = 0; | |
447 | AliAODTrack* jet = (AliAODTrack*)tracks->At(0); | |
448 | maxPtJet1 = jet->Pt(); | |
449 | jetVect[0].SetXYZ(jet->Px(), jet->Py(), jet->Pz()); | |
450 | } | |
451 | tracks->Clear(); | |
452 | delete tracks; | |
453 | } | |
454 | } | |
455 | ||
456 | ||
457 | fhNJets->Fill(nJets); | |
f3050824 | 458 | |
6ef5bfa4 | 459 | if( fDebug > 1 ) { |
460 | if( index1 < 0 ) { | |
461 | AliInfo("\n Skipping Event, not jet found..."); | |
462 | return; | |
463 | } else | |
464 | AliInfo(Form("\n Pt Leading Jet = %6.1f eta=%5.3f ", maxPtJet1, jetVect[0].Eta() )); | |
465 | } | |
466 | ||
f3050824 | 467 | |
468 | // ---------------------------------------------- | |
6ef5bfa4 | 469 | // Cut events by jets topology |
f3050824 | 470 | // fAnaType: |
6ef5bfa4 | 471 | // 1 = inclusive, |
f3050824 | 472 | // - Jet1 |eta| < fJet1EtaCut |
473 | // 2 = back to back inclusive | |
474 | // - fulfill case 1 | |
475 | // - |Jet1.Phi - Jet2.Phi| > fJet2DeltaPhiCut | |
476 | // - Jet2.Pt/Jet1Pt > fJet2RatioPtCut | |
6ef5bfa4 | 477 | // 3 = back to back exclusive |
f3050824 | 478 | // - fulfill case 2 |
479 | // - Jet3.Pt < fJet3PtCut | |
480 | ||
6ef5bfa4 | 481 | if( index1 < 0 || TMath::Abs(jetVect[0].Eta()) > fJet1EtaCut) { |
482 | if( fDebug > 1 ) AliInfo("\n Skipping Event...Jet1 |eta| > fJet1EtaCut"); | |
f3050824 | 483 | return; |
484 | } | |
f3050824 | 485 | // back to back inclusive |
02480db2 | 486 | if( fAnaType > 1 && fAnaType < 4 && index2 == -1 ) { |
6ef5bfa4 | 487 | if( fDebug > 1 ) AliInfo("\n Skipping Event... no second Jet found"); |
488 | return; | |
489 | } | |
02480db2 | 490 | if( fAnaType > 1 && fAnaType < 4 && index2 > -1 ) { |
f3050824 | 491 | if( TMath::Abs(jetVect[0].DeltaPhi(jetVect[1])) < fJet2DeltaPhiCut || |
6ef5bfa4 | 492 | maxPtJet2/maxPtJet1 < fJet2RatioPtCut ) { |
493 | if( fDebug > 1 ) AliInfo("\n Skipping Event... |Jet1.Phi - Jet2.Phi| < fJet2DeltaPhiCut"); | |
494 | return; | |
f3050824 | 495 | } |
f3050824 | 496 | } |
f3050824 | 497 | // back to back exclusive |
02480db2 | 498 | if( fAnaType > 2 && fAnaType < 4 && index3 > -1 ) { |
6ef5bfa4 | 499 | if( maxPtJet3 > fJet3PtCut ) { |
500 | if( fDebug > 1 ) AliInfo("\n Skipping Event... Jet3.Pt > fJet3PtCut "); | |
f3050824 | 501 | return; |
502 | } | |
f3050824 | 503 | } |
f3050824 | 504 | |
623ed0a0 | 505 | //fhEleadingPt->Fill( maxPtJet1 ); |
baf36668 | 506 | |
f3050824 | 507 | // ---------------------------------------------- |
508 | // Find max and min regions | |
509 | Double_t sumPtRegionPosit = 0.; | |
510 | Double_t sumPtRegionNegat = 0.; | |
baf36668 | 511 | Double_t sumPtRegionForward = 0; |
512 | Double_t sumPtRegionBackward = 0; | |
f3050824 | 513 | Double_t maxPartPtRegion = 0.; |
514 | Int_t nTrackRegionPosit = 0; | |
515 | Int_t nTrackRegionNegat = 0; | |
baf36668 | 516 | Int_t nTrackRegionForward = 0; |
517 | Int_t nTrackRegionBackward = 0; | |
9d9a3c85 | 518 | static Double_t const kPI = TMath::Pi(); |
519 | static Double_t const kTWOPI = 2.*kPI; | |
520 | static Double_t const k270rad = 270.*kPI/180.; | |
baf36668 | 521 | static Double_t const k120rad = 120.*kPI/180.; |
522 | ||
523 | //Area for Normalization Purpose at Display histos | |
524 | // Forward and backward | |
525 | Double_t normArea = 1.; | |
526 | // Transverse | |
527 | if (fIsNorm2Area) { | |
528 | SetRegionArea(jetVect); | |
529 | normArea = 2.*fTrackEtaCut*k120rad ; | |
530 | } else fAreaReg = 1.; | |
f3050824 | 531 | |
623ed0a0 | 532 | if (!fUseMCParticleBranch){ |
94ee88d4 | 533 | AliAODVertex* vertex = (AliAODVertex*)fAOD->GetPrimaryVertex(); |
534 | fhVertexMult->Fill( vertex->GetNContributors() ); | |
535 | ||
623ed0a0 | 536 | fhEleadingPt->Fill( maxPtJet1 ); |
537 | Int_t nTracks = fAOD->GetNTracks(); | |
02480db2 | 538 | if (fDebug > 1) AliInfo(Form(" ==== AOD tracks = %d \n ",nTracks)); |
6ef5bfa4 | 539 | |
623ed0a0 | 540 | for (Int_t ipart=0; ipart<nTracks; ++ipart) { |
541 | ||
542 | AliAODTrack* part = fAOD->GetTrack( ipart ); | |
02480db2 | 543 | if (fDebug > 1) AliInfo(Form(" ==== AOD track = %d pt = %f charge = %d \n ",ipart,part->Pt(),part->Charge())); |
623ed0a0 | 544 | if ( !part->TestFilterBit(fFilterBit) ) continue; // track cut selection |
545 | if (!part->IsPrimaryCandidate()) continue; // reject whatever is not linked to collision point | |
546 | // PID Selection: Reject everything but hadrons | |
547 | Bool_t isHadron = part->GetMostProbablePID()==AliAODTrack::kPion || | |
548 | part->GetMostProbablePID()==AliAODTrack::kKaon || | |
549 | part->GetMostProbablePID()==AliAODTrack::kProton; | |
9d9a3c85 | 550 | if ( fUseChargeHadrons && !isHadron ) continue; |
623ed0a0 | 551 | |
552 | if ( !part->Charge() ) continue; //Only charged | |
553 | if ( fUseSingleCharge ) { // Charge selection | |
554 | if ( fUsePositiveCharge && part->Charge() < 0.) continue; // keep Positives | |
555 | if ( !fUsePositiveCharge && part->Charge() > 0.) continue; // keep Negatives | |
556 | } | |
557 | ||
558 | if ( part->Pt() < fTrackPtCut ) continue; | |
559 | if( TMath::Abs(part->Eta()) > fTrackEtaCut ) continue; | |
560 | ||
561 | TVector3 partVect(part->Px(), part->Py(), part->Pz()); | |
02480db2 | 562 | Bool_t isFlagPart = kTRUE; |
623ed0a0 | 563 | Double_t deltaPhi = jetVect[0].DeltaPhi(partVect)+k270rad; |
9d9a3c85 | 564 | if( deltaPhi > kTWOPI ) deltaPhi-= kTWOPI; |
02480db2 | 565 | if (fAnaType != 4 ) fhdNdEtaPhiDist->Fill( deltaPhi, maxPtJet1 ); |
566 | else if (TMath::Abs(deltaPhi-k270rad) >= kMyTolerance && TMath::Abs(jetVect[0].Eta()-partVect.Eta()) >= kMyTolerance){ | |
567 | fhdNdEtaPhiDist->Fill( deltaPhi, maxPtJet1 ); | |
568 | isFlagPart = kFALSE; | |
569 | } | |
623ed0a0 | 570 | |
571 | fhFullRegPartPtDistVsEt->Fill( part->Pt(), maxPtJet1 ); | |
572 | ||
573 | Int_t region = IsTrackInsideRegion( jetVect, &partVect ); | |
574 | ||
baf36668 | 575 | if (region == 1) { |
623ed0a0 | 576 | if( maxPartPtRegion < part->Pt() ) maxPartPtRegion = part->Pt(); |
577 | sumPtRegionPosit += part->Pt(); | |
578 | nTrackRegionPosit++; | |
579 | fhTransRegPartPtDistVsEt->Fill( part->Pt(), maxPtJet1 ); | |
580 | } | |
baf36668 | 581 | if (region == -1) { |
623ed0a0 | 582 | if( maxPartPtRegion < part->Pt() ) maxPartPtRegion = part->Pt(); |
583 | sumPtRegionNegat += part->Pt(); | |
584 | nTrackRegionNegat++; | |
585 | fhTransRegPartPtDistVsEt->Fill( part->Pt(), maxPtJet1 ); | |
586 | } | |
baf36668 | 587 | if (region == 2){ //forward |
588 | sumPtRegionForward += part->Pt(); | |
589 | nTrackRegionForward++; | |
590 | fhRegForwardPartPtDistVsEt->Fill( part->Pt(), maxPtJet1 ); | |
591 | } | |
592 | if (region == -2){ //backward | |
593 | sumPtRegionBackward += part->Pt(); | |
594 | nTrackRegionBackward++; | |
595 | fhRegBackwardPartPtDistVsEt->Fill( part->Pt(), maxPtJet1 ); | |
596 | } | |
623ed0a0 | 597 | }//end loop AOD tracks |
598 | } | |
599 | else { | |
6ef5bfa4 | 600 | |
623ed0a0 | 601 | // this is the part we only use when we have MC information |
602 | // More than a test for values of it also resumes the reconstruction efficiency of jets | |
603 | // As commented bellow if available for the data, we try to pair reconstructed jets with simulated ones | |
604 | // afterwards we kept angular variables of MC jet to perform UE analysis over MC particles | |
605 | // TODO: Handle Multiple jet environment. 06/2009 just suited for inclusive jet condition ( fAnaType = 1 ) | |
6ef5bfa4 | 606 | |
623ed0a0 | 607 | AliMCEventHandler* mcHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()); |
608 | if (!mcHandler) { | |
609 | Printf("ERROR: Could not retrieve MC event handler"); | |
610 | return; | |
611 | } | |
612 | ||
613 | AliMCEvent* mcEvent = mcHandler->MCEvent(); | |
614 | if (!mcEvent) { | |
615 | Printf("ERROR: Could not retrieve MC event"); | |
616 | return; | |
617 | } | |
618 | AliGenPythiaEventHeader* pythiaGenHeader = AliAnalysisHelperJetTasks::GetPythiaEventHeader(mcEvent); | |
619 | if(!pythiaGenHeader){ | |
620 | return; | |
621 | } | |
f3050824 | 622 | |
623ed0a0 | 623 | //Get Jets from MC header |
624 | Int_t nPythiaGenJets = pythiaGenHeader->NTriggerJets(); | |
625 | AliAODJet pythiaGenJets[4]; | |
626 | TVector3 jetVectnew[4]; | |
627 | Int_t iCount = 0; | |
628 | for(int ip = 0;ip < nPythiaGenJets;++ip){ | |
629 | if (iCount>3) break; | |
630 | Float_t p[4]; | |
631 | pythiaGenHeader->TriggerJet(ip,p); | |
632 | TVector3 tempVect(p[0],p[1],p[2]); | |
633 | if ( TMath::Abs(tempVect.Eta())>fJet1EtaCut ) continue; | |
634 | pythiaGenJets[iCount].SetPxPyPzE(p[0],p[1],p[2],p[3]); | |
635 | jetVectnew[iCount].SetXYZ(pythiaGenJets[iCount].Px(), pythiaGenJets[iCount].Py(), pythiaGenJets[iCount].Pz()); | |
636 | iCount++; | |
637 | } | |
6ef5bfa4 | 638 | |
623ed0a0 | 639 | if (!iCount) return;// no jet in eta acceptance |
f3050824 | 640 | |
623ed0a0 | 641 | //Search the index of the nearest MC jet to the leading jet reconstructed from the input data |
642 | Int_t index = 0; | |
643 | if (fConstrainDistance){ | |
644 | Float_t deltaR = 0.; | |
645 | Float_t dRTemp = 0.; | |
646 | for (Int_t i=0; i<iCount; i++){ | |
647 | if (!i) { | |
648 | dRTemp = jetVectnew[i].DeltaR(jetVect[0]); | |
649 | index = i; | |
650 | } | |
651 | deltaR = jetVectnew[i].DeltaR(jetVect[0]); | |
652 | if (deltaR < dRTemp){ | |
653 | index = i; | |
654 | dRTemp = deltaR; | |
655 | } | |
656 | } | |
657 | ||
658 | if (jetVectnew[index].DeltaR(jetVect[0]) > fMinDistance) return; | |
659 | } | |
660 | //Let's add some taste to jet and simulate pt of charged alone | |
661 | //eta and phi are kept as original | |
662 | //Play a Normal Distribution | |
663 | Float_t random = 1.; | |
664 | if (fSimulateChJetPt){ | |
665 | while(1){ | |
666 | random = gRandom->Gaus(0.6,0.25); | |
667 | if (random > 0. && random < 1. && | |
668 | (random * jetVectnew[index].Pt()>6.)) break; | |
669 | } | |
f3050824 | 670 | } |
623ed0a0 | 671 | |
672 | //Set new Pt & Fill histogram accordingly | |
673 | maxPtJet1 = random * jetVectnew[index].Pt(); | |
674 | ||
675 | ||
676 | fhEleadingPt->Fill( maxPtJet1 ); | |
677 | ||
678 | if (fUseAliStack){//Try Stack Information to perform UE analysis | |
679 | ||
680 | AliStack* mcStack = mcEvent->Stack();//Load Stack | |
681 | Int_t nTracksMC = mcStack->GetNtrack(); | |
682 | for (Int_t iTracks = 0; iTracks < nTracksMC; iTracks++) { | |
683 | //Cuts | |
684 | if(!(mcStack->IsPhysicalPrimary(iTracks))) continue; | |
685 | ||
686 | TParticle* mctrk = mcStack->Particle(iTracks); | |
687 | ||
688 | Double_t charge = mctrk->GetPDG()->Charge(); | |
689 | if (charge == 0) continue; | |
690 | ||
691 | if ( fUseSingleCharge ) { // Charge selection | |
692 | if ( fUsePositiveCharge && charge < 0.) continue; // keep Positives | |
693 | if ( !fUsePositiveCharge && charge > 0.) continue; // keep Negatives | |
694 | } | |
695 | ||
696 | //Kinematics cuts on particle | |
697 | if ((mctrk->Pt() < fTrackPtCut) || (TMath::Abs(mctrk->Eta()) > fTrackEtaCut )) continue; | |
698 | ||
699 | Bool_t isHadron = TMath::Abs(mctrk->GetPdgCode())==211 || | |
700 | TMath::Abs(mctrk->GetPdgCode())==2212 || | |
701 | TMath::Abs(mctrk->GetPdgCode())==321; | |
702 | ||
9d9a3c85 | 703 | if ( fUseChargeHadrons && !isHadron ) continue; |
623ed0a0 | 704 | |
705 | TVector3 partVect(mctrk->Px(), mctrk->Py(), mctrk->Pz()); | |
706 | ||
707 | Double_t deltaPhi = jetVectnew[index].DeltaPhi(partVect)+k270rad; | |
708 | if( deltaPhi > 2.*TMath::Pi() ) deltaPhi-= 2.*TMath::Pi(); | |
9d9a3c85 | 709 | fhdNdEtaPhiDist->Fill( deltaPhi, maxPtJet1 ); |
623ed0a0 | 710 | |
711 | fhFullRegPartPtDistVsEt->Fill( mctrk->Pt(), maxPtJet1 ); | |
712 | ||
713 | //We are not interested on stack organization but don't loose track of info | |
714 | TVector3 tempVector = jetVectnew[0]; | |
715 | jetVectnew[0] = jetVectnew[index]; | |
716 | jetVectnew[index] = tempVector; | |
717 | ||
718 | Int_t region = IsTrackInsideRegion( jetVectnew, &partVect ); | |
719 | ||
baf36668 | 720 | if (region == 1) { |
623ed0a0 | 721 | if( maxPartPtRegion < mctrk->Pt() ) maxPartPtRegion = mctrk->Pt(); |
722 | sumPtRegionPosit += mctrk->Pt(); | |
723 | nTrackRegionPosit++; | |
724 | fhTransRegPartPtDistVsEt->Fill( mctrk->Pt(), maxPtJet1 ); | |
725 | } | |
baf36668 | 726 | if (region == -1) { |
623ed0a0 | 727 | if( maxPartPtRegion < mctrk->Pt() ) maxPartPtRegion = mctrk->Pt(); |
728 | sumPtRegionNegat += mctrk->Pt(); | |
729 | nTrackRegionNegat++; | |
730 | fhTransRegPartPtDistVsEt->Fill( mctrk->Pt(), maxPtJet1 ); | |
731 | } | |
baf36668 | 732 | if (region == 2){ //forward |
733 | sumPtRegionForward += mctrk->Pt(); | |
734 | nTrackRegionForward++; | |
735 | fhRegForwardPartPtDistVsEt->Fill( mctrk->Pt(), maxPtJet1 ); | |
736 | } | |
737 | if (region == -2){ //backward | |
738 | sumPtRegionBackward += mctrk->Pt(); | |
739 | nTrackRegionBackward++; | |
740 | fhRegBackwardPartPtDistVsEt->Fill( mctrk->Pt(), maxPtJet1 ); | |
741 | } | |
742 | ||
623ed0a0 | 743 | } // end loop stack Particles |
744 | ||
745 | }else{//Try mc Particle | |
746 | ||
747 | TClonesArray* farray = (TClonesArray*)fAOD->FindListObject("mcparticles"); | |
748 | ||
749 | Int_t ntrks = farray->GetEntries(); | |
750 | if (fDebug>1) AliInfo(Form("In UE MC analysis tracks %d \n",ntrks)); | |
751 | for(Int_t i =0 ; i < ntrks; i++){ | |
752 | AliAODMCParticle* mctrk = (AliAODMCParticle*)farray->At(i); | |
753 | //Cuts | |
754 | if (!(mctrk->IsPhysicalPrimary())) continue; | |
755 | //if (!(mctrk->IsPrimary())) continue; | |
756 | ||
757 | if (mctrk->Charge() == 0 || mctrk->Charge()==-99) continue; | |
758 | ||
759 | if (mctrk->Pt() < fTrackPtCut ) continue; | |
760 | if( TMath::Abs(mctrk->Eta()) > fTrackEtaCut ) continue; | |
761 | ||
762 | Bool_t isHadron = TMath::Abs(mctrk->GetPdgCode())==211 || | |
763 | TMath::Abs(mctrk->GetPdgCode())==2212 || | |
764 | TMath::Abs(mctrk->GetPdgCode())==321; | |
765 | ||
9d9a3c85 | 766 | if ( fUseChargeHadrons && !isHadron ) continue; |
623ed0a0 | 767 | |
768 | TVector3 partVect(mctrk->Px(), mctrk->Py(), mctrk->Pz()); | |
769 | ||
770 | Double_t deltaPhi = jetVectnew[index].DeltaPhi(partVect)+k270rad; | |
771 | if( deltaPhi > 2.*TMath::Pi() ) deltaPhi-= 2.*TMath::Pi(); | |
9d9a3c85 | 772 | fhdNdEtaPhiDist->Fill( deltaPhi, maxPtJet1 ); |
623ed0a0 | 773 | |
774 | fhFullRegPartPtDistVsEt->Fill( mctrk->Pt(), maxPtJet1 ); | |
775 | ||
776 | //We are not interested on stack organization but don't loose track of info | |
777 | TVector3 tempVector = jetVectnew[0]; | |
778 | jetVectnew[0] = jetVectnew[index]; | |
779 | jetVectnew[index] = tempVector; | |
780 | ||
781 | Int_t region = IsTrackInsideRegion( jetVectnew, &partVect ); | |
782 | ||
baf36668 | 783 | if (region == 1) { //right |
623ed0a0 | 784 | if( maxPartPtRegion < mctrk->Pt() ) maxPartPtRegion = mctrk->Pt(); |
785 | sumPtRegionPosit += mctrk->Pt(); | |
786 | nTrackRegionPosit++; | |
787 | fhTransRegPartPtDistVsEt->Fill( mctrk->Pt(), maxPtJet1 ); | |
788 | } | |
baf36668 | 789 | if (region == -1) { //left |
623ed0a0 | 790 | if( maxPartPtRegion < mctrk->Pt() ) maxPartPtRegion = mctrk->Pt(); |
791 | sumPtRegionNegat += mctrk->Pt(); | |
792 | nTrackRegionNegat++; | |
793 | fhTransRegPartPtDistVsEt->Fill( mctrk->Pt(), maxPtJet1 ); | |
794 | } | |
baf36668 | 795 | if (region == 2){ //forward |
796 | sumPtRegionForward += mctrk->Pt(); | |
797 | nTrackRegionForward++; | |
798 | fhRegForwardPartPtDistVsEt->Fill( mctrk->Pt(), maxPtJet1 ); | |
799 | } | |
800 | if (region == -2){ //backward | |
801 | sumPtRegionBackward += mctrk->Pt(); | |
802 | nTrackRegionBackward++; | |
803 | fhRegBackwardPartPtDistVsEt->Fill( mctrk->Pt(), maxPtJet1 ); | |
804 | } | |
623ed0a0 | 805 | |
806 | }//end loop AliAODMCParticle tracks | |
f3050824 | 807 | } |
808 | } | |
02480db2 | 809 | |
810 | Double_t avePosRegion = (nTrackRegionPosit) ? sumPtRegionPosit/nTrackRegionPosit : 0.; | |
811 | Double_t aveNegRegion = (nTrackRegionNegat) ? sumPtRegionNegat/nTrackRegionNegat : 0.; | |
812 | if( avePosRegion > aveNegRegion ) { | |
813 | FillAvePartPtRegion( maxPtJet1, avePosRegion/fAreaReg, aveNegRegion/fAreaReg ); | |
814 | } else { | |
815 | FillAvePartPtRegion( maxPtJet1, aveNegRegion/fAreaReg, avePosRegion/fAreaReg ); | |
816 | } | |
817 | ||
f3050824 | 818 | //How quantities will be sorted before Fill Min and Max Histogram |
819 | // 1=Plots will be CDF-like | |
820 | // 2=Plots will be Marchesini-like | |
02480db2 | 821 | // 3=Minimum zone is selected as the one having lowest pt per track |
6ef5bfa4 | 822 | if( fOrdering == 1 ) { |
823 | if( sumPtRegionPosit > sumPtRegionNegat ) { | |
824 | FillSumPtRegion( maxPtJet1, sumPtRegionPosit/fAreaReg, sumPtRegionNegat/fAreaReg ); | |
f3050824 | 825 | } else { |
6ef5bfa4 | 826 | FillSumPtRegion( maxPtJet1, sumPtRegionNegat/fAreaReg, sumPtRegionPosit/fAreaReg ); |
f3050824 | 827 | } |
828 | if (nTrackRegionPosit > nTrackRegionNegat ) { | |
6ef5bfa4 | 829 | FillMultRegion( maxPtJet1, nTrackRegionPosit/fAreaReg, nTrackRegionNegat/fAreaReg, sumPtRegionNegat/fAreaReg ); |
f3050824 | 830 | } else { |
6ef5bfa4 | 831 | FillMultRegion( maxPtJet1, nTrackRegionNegat/fAreaReg, nTrackRegionPosit/fAreaReg, sumPtRegionPosit/fAreaReg ); |
f3050824 | 832 | } |
6ef5bfa4 | 833 | } else if( fOrdering == 2 ) { |
f3050824 | 834 | if (sumPtRegionPosit > sumPtRegionNegat) { |
6ef5bfa4 | 835 | FillSumPtRegion( maxPtJet1, sumPtRegionPosit/fAreaReg, sumPtRegionNegat/fAreaReg ); |
836 | FillMultRegion( maxPtJet1, nTrackRegionPosit/fAreaReg, nTrackRegionNegat/fAreaReg, sumPtRegionNegat/fAreaReg ); | |
f3050824 | 837 | } else { |
6ef5bfa4 | 838 | FillSumPtRegion( maxPtJet1, sumPtRegionNegat/fAreaReg, sumPtRegionPosit/fAreaReg ); |
839 | FillMultRegion( maxPtJet1, nTrackRegionNegat/fAreaReg, nTrackRegionPosit/fAreaReg, sumPtRegionPosit/fAreaReg ); | |
f3050824 | 840 | } |
02480db2 | 841 | } else if( fOrdering == 3 ){ |
842 | if (avePosRegion > aveNegRegion) { | |
843 | FillSumPtRegion( maxPtJet1, sumPtRegionPosit/fAreaReg, sumPtRegionNegat/fAreaReg ); | |
844 | FillMultRegion( maxPtJet1, nTrackRegionPosit/fAreaReg, nTrackRegionNegat/fAreaReg, sumPtRegionNegat/fAreaReg ); | |
845 | }else{ | |
846 | FillSumPtRegion( maxPtJet1, sumPtRegionNegat/fAreaReg, sumPtRegionPosit/fAreaReg ); | |
847 | FillMultRegion( maxPtJet1, nTrackRegionNegat/fAreaReg, nTrackRegionPosit/fAreaReg, sumPtRegionPosit/fAreaReg ); | |
848 | } | |
f3050824 | 849 | } |
f3050824 | 850 | fhRegionMaxPartPtMaxVsEt->Fill(maxPtJet1, maxPartPtRegion ); |
6ef5bfa4 | 851 | |
852 | // Compute pedestal like magnitudes | |
853 | fhRegionDiffSumPtVsEt->Fill(maxPtJet1, TMath::Abs(sumPtRegionPosit-sumPtRegionNegat)/(2.0*fAreaReg)); | |
854 | fhRegionAveSumPtVsEt->Fill(maxPtJet1, (sumPtRegionPosit+sumPtRegionNegat)/(2.0*fAreaReg)); | |
baf36668 | 855 | // Transverse as a whole |
94ee88d4 | 856 | fhRegTransMult->Fill( maxPtJet1, nTrackRegionPosit + nTrackRegionNegat, (nTrackRegionPosit + nTrackRegionNegat)/(2.0*fAreaReg)); |
857 | fhRegTransSumPtVsMult->Fill(maxPtJet1, nTrackRegionPosit + nTrackRegionNegat , (sumPtRegionNegat + sumPtRegionPosit)/(2.0*fAreaReg) ); | |
baf36668 | 858 | |
859 | // Fill Histograms for Forward and away side w.r.t. leading jet direction | |
860 | // Pt dependence | |
94ee88d4 | 861 | //fhRegForwardSumPtVsEt->Fill( maxPtJet1, sumPtRegionForward/normArea ); |
862 | //fhRegForwardMultVsEt->Fill( maxPtJet1, nTrackRegionForward/normArea ); | |
863 | //fhRegBackwardSumPtVsEt->Fill( maxPtJet1, sumPtRegionBackward/normArea ); | |
864 | //fhRegBackwardMultVsEt->Fill( maxPtJet1, nTrackRegionBackward/normArea ); | |
baf36668 | 865 | // Multiplicity dependence |
94ee88d4 | 866 | fhRegForwardMult->Fill(maxPtJet1, nTrackRegionForward, nTrackRegionForward/normArea); |
867 | fhRegForwardSumPtvsMult->Fill(maxPtJet1, nTrackRegionForward,sumPtRegionForward/normArea); | |
868 | fhRegBackwardMult->Fill(maxPtJet1, nTrackRegionBackward, nTrackRegionBackward/normArea ); | |
869 | fhRegBackwardSumPtvsMult->Fill(maxPtJet1, nTrackRegionBackward,sumPtRegionBackward/normArea); | |
6ef5bfa4 | 870 | |
f3050824 | 871 | } |
872 | ||
f3050824 | 873 | //____________________________________________________________________ |
874 | void AliAnalysisTaskUE::FillSumPtRegion( Double_t leadingE, Double_t ptMax, Double_t ptMin ) | |
875 | { | |
6ef5bfa4 | 876 | // Fill sumPt of control regions |
877 | ||
878 | // Max cone | |
879 | fhRegionSumPtMaxVsEt->Fill( leadingE, ptMax ); | |
880 | // Min cone | |
881 | fhRegionSumPtMinVsEt->Fill( leadingE, ptMin ); | |
882 | // MAke distributions for UE comparison with MB data | |
883 | fhMinRegSumPt->Fill(ptMin); | |
5713f021 | 884 | fhMinRegSumPtJetPtBin->Fill(leadingE, ptMin); |
885 | fhMaxRegSumPtJetPtBin->Fill(leadingE, ptMax); | |
f3050824 | 886 | } |
887 | ||
888 | //____________________________________________________________________ | |
889 | void AliAnalysisTaskUE::FillAvePartPtRegion( Double_t leadingE, Double_t ptMax, Double_t ptMin ) | |
890 | { | |
6ef5bfa4 | 891 | // Fill average particle Pt of control regions |
892 | ||
893 | // Max cone | |
894 | fhRegionAvePartPtMaxVsEt->Fill( leadingE, ptMax ); | |
895 | // Min cone | |
896 | fhRegionAvePartPtMinVsEt->Fill( leadingE, ptMin ); | |
897 | // MAke distributions for UE comparison with MB data | |
898 | fhMinRegAvePt->Fill(ptMin); | |
f3050824 | 899 | } |
900 | ||
901 | //____________________________________________________________________ | |
902 | void AliAnalysisTaskUE::FillMultRegion( Double_t leadingE, Double_t nTrackPtmax, Double_t nTrackPtmin, Double_t ptMin ) | |
903 | { | |
6ef5bfa4 | 904 | // Fill Nch multiplicity of control regions |
905 | ||
906 | // Max cone | |
907 | fhRegionMultMaxVsEt->Fill( leadingE, nTrackPtmax ); | |
908 | fhRegionMultMax->Fill( nTrackPtmax ); | |
909 | // Min cone | |
910 | fhRegionMultMinVsEt->Fill( leadingE, nTrackPtmin ); | |
911 | fhRegionMultMin->Fill( nTrackPtmin ); | |
912 | // MAke distributions for UE comparison with MB data | |
913 | fhMinRegSumPtvsMult->Fill(nTrackPtmin,ptMin); | |
f3050824 | 914 | } |
915 | ||
916 | //____________________________________________________________________ | |
917 | Int_t AliAnalysisTaskUE::IsTrackInsideRegion(TVector3 *jetVect, TVector3 *partVect) | |
918 | { | |
919 | // return de region in delta phi | |
920 | // -1 negative delta phi | |
921 | // 1 positive delta phi | |
922 | // 0 outside region | |
923 | static const Double_t k60rad = 60.*TMath::Pi()/180.; | |
924 | static const Double_t k120rad = 120.*TMath::Pi()/180.; | |
925 | ||
926 | Int_t region = 0; | |
927 | if( fRegionType == 1 ) { | |
928 | if( TMath::Abs(partVect->Eta()) > fTrackEtaCut ) return 0; | |
929 | // transverse regions | |
baf36668 | 930 | if (jetVect[0].DeltaPhi(*partVect) < -k60rad && jetVect[0].DeltaPhi(*partVect) > -k120rad ) region = -1; //left |
931 | if (jetVect[0].DeltaPhi(*partVect) > k60rad && jetVect[0].DeltaPhi(*partVect) < k120rad ) region = 1; //right | |
932 | if (TMath::Abs(jetVect[0].DeltaPhi(*partVect)) < k60rad ) region = 2; //forward | |
933 | if (TMath::Abs(jetVect[0].DeltaPhi(*partVect)) > k120rad ) region = -2; //backward | |
6ef5bfa4 | 934 | |
f3050824 | 935 | } else if( fRegionType == 2 ) { |
936 | // Cone regions | |
937 | Double_t deltaR = 0.; | |
938 | ||
939 | TVector3 positVect,negatVect; | |
623ed0a0 | 940 | if (fConePosition==1){ |
941 | positVect.SetMagThetaPhi(1, 2.*atan(exp(-jetVect[0].Eta())), jetVect[0].Phi()+TMath::PiOver2()); | |
942 | negatVect.SetMagThetaPhi(1, 2.*atan(exp(-jetVect[0].Eta())), jetVect[0].Phi()-TMath::PiOver2()); | |
943 | }else if (fConePosition==2){ | |
944 | if(fAnaType<2) AliFatal("Prevent error in Analysis type there might be only 1 jet. To avoid overflow better Correct UE config"); | |
945 | positVect.SetMagThetaPhi(1, 2.*atan(exp(-(jetVect[0].Eta()+jetVect[1].Eta())/2.)), jetVect[0].Phi()+TMath::PiOver2()); | |
946 | negatVect.SetMagThetaPhi(1, 2.*atan(exp(-(jetVect[0].Eta()+jetVect[1].Eta())/2.)), jetVect[0].Phi()-TMath::PiOver2()); | |
947 | }else if (fConePosition==3){ | |
948 | if(fAnaType<2) AliFatal("Prevent error in Analysis type there might be only 1 jet. To avoid overflow better Correct UE config"); | |
949 | Double_t weightEta = jetVect[0].Eta() * jetVect[0].Pt()/(jetVect[0].Pt() + jetVect[1].Pt()) + | |
950 | jetVect[1].Eta() * jetVect[1].Pt()/(jetVect[0].Pt() + jetVect[1].Pt()); | |
951 | //Double_t weightEta = jetVect[0].Eta() * jetVect[0].Mag()/(jetVect[0].Mag() + jetVect[1].Mag()) + | |
952 | // jetVect[1].Eta() * jetVect[1].Mag()/(jetVect[0].Mag() + jetVect[1].Mag()); | |
953 | positVect.SetMagThetaPhi(1, 2.*atan(exp(-weightEta)), jetVect[0].Phi()+TMath::PiOver2()); | |
954 | negatVect.SetMagThetaPhi(1, 2.*atan(exp(-weightEta)), jetVect[0].Phi()-TMath::PiOver2()); | |
955 | } | |
f3050824 | 956 | if (TMath::Abs(positVect.DeltaPhi(*partVect)) < fConeRadius ) { |
6ef5bfa4 | 957 | region = 1; |
958 | deltaR = positVect.DrEtaPhi(*partVect); | |
f3050824 | 959 | } else if (TMath::Abs(negatVect.DeltaPhi(*partVect)) < fConeRadius) { |
6ef5bfa4 | 960 | region = -1; |
961 | deltaR = negatVect.DrEtaPhi(*partVect); | |
f3050824 | 962 | } |
963 | ||
964 | if (deltaR > fConeRadius) region = 0; | |
6ef5bfa4 | 965 | |
f3050824 | 966 | } else |
967 | AliError("Unknow region type"); | |
6ef5bfa4 | 968 | |
f3050824 | 969 | // For debug (to be removed) |
baf36668 | 970 | if( fDebug > 5 && region != 0 ) AliInfo(Form("Delta Phi = %3.2f region = %d \n", jetVect[0].DeltaPhi(*partVect), region)); //fhValidRegion->Fill( partVect->Eta()-jetVect[0].Eta(), jetVect[0].DeltaPhi(*partVect) ); |
f3050824 | 971 | |
972 | return region; | |
973 | } | |
974 | ||
02480db2 | 975 | //____________________________________________________________________ |
976 | TObjArray* AliAnalysisTaskUE::SortChargedParticles() | |
977 | { | |
978 | // return an array with all charged particles ordered according to their pT . | |
979 | Int_t nTracks = fAOD->GetNTracks(); | |
980 | if( !nTracks ) return 0; | |
981 | TObjArray* tracks = new TObjArray(nTracks); | |
982 | ||
983 | for (Int_t ipart=0; ipart<nTracks; ++ipart) { | |
984 | AliAODTrack* part = fAOD->GetTrack( ipart ); | |
985 | if( !part->TestFilterBit( fFilterBit ) ) continue; // track cut selection | |
986 | if( !part->Charge() ) continue; | |
987 | if( part->Pt() < fTrackPtCut ) continue; | |
988 | tracks->AddLast( part ); | |
989 | } | |
990 | QSortTracks( *tracks, 0, tracks->GetEntriesFast() ); | |
991 | ||
992 | nTracks = tracks->GetEntriesFast(); | |
993 | if( !nTracks ) return 0; | |
994 | ||
995 | return tracks; | |
996 | } | |
6ef5bfa4 | 997 | |
998 | //____________________________________________________________________ | |
999 | TObjArray* AliAnalysisTaskUE::FindChargedParticleJets() | |
1000 | { | |
1001 | // Return a TObjArray of "charged particle jets" | |
1002 | // | |
02480db2 | 1003 | // Charged particle jet definition from reference: |
6ef5bfa4 | 1004 | // |
1005 | // "Charged jet evolution and the underlying event | |
1006 | // in proton-antiproton collisions at 1.8 TeV" | |
1007 | // PHYSICAL REVIEW D 65 092002, CDF Collaboration | |
1008 | // | |
02480db2 | 1009 | // We defined "jets" as circular regions in eta-phi space with |
1010 | // radius defined by R = sqrt( (eta-eta0)^2 +(phi-phi0)^2 ). | |
6ef5bfa4 | 1011 | // Our jet algorithm is as follows: |
1012 | // 1- Order all charged particles according to their pT . | |
1013 | // 2- Start with the highest pT particle and include in the jet all | |
1014 | // particles within the radius R=0.7 considering each particle | |
1015 | // in the order of decreasing pT and recalculating the centroid | |
1016 | // of the jet after each new particle is added to the jet . | |
1017 | // 3- Go to the next highest pT particle not already included in | |
1018 | // a jet and add to the jet all particles not already included in | |
1019 | // a jet within R=0.7. | |
1020 | // 4- Continue until all particles are in a jet. | |
02480db2 | 1021 | // We defined the transverse momentum of the jet to be |
6ef5bfa4 | 1022 | // the scalar pT sum of all the particles within the jet, where pT |
1023 | // is measured with respect to the beam axis | |
1024 | ||
1025 | // 1 - Order all charged particles according to their pT . | |
1026 | Int_t nTracks = fAOD->GetNTracks(); | |
1027 | if( !nTracks ) return 0; | |
1028 | TObjArray tracks(nTracks); | |
1029 | ||
1030 | for (Int_t ipart=0; ipart<nTracks; ++ipart) { | |
1031 | AliAODTrack* part = fAOD->GetTrack( ipart ); | |
1032 | if( !part->TestFilterBit(fFilterBit) ) continue; // track cut selection | |
1033 | if( !part->Charge() ) continue; | |
1034 | if( part->Pt() < fTrackPtCut ) continue; | |
1035 | tracks.AddLast(part); | |
1036 | } | |
1037 | QSortTracks( tracks, 0, tracks.GetEntriesFast() ); | |
1038 | ||
1039 | nTracks = tracks.GetEntriesFast(); | |
1040 | if( !nTracks ) return 0; | |
9d9a3c85 | 1041 | |
6ef5bfa4 | 1042 | TObjArray *jets = new TObjArray(nTracks); |
1043 | TIter itrack(&tracks); | |
1044 | while( nTracks ) { | |
1045 | // 2- Start with the highest pT particle ... | |
1046 | Float_t px,py,pz,pt; | |
1047 | AliAODTrack* track = (AliAODTrack*)itrack.Next(); | |
1048 | if( !track ) continue; | |
1049 | px = track->Px(); | |
1050 | py = track->Py(); | |
1051 | pz = track->Pz(); | |
1052 | pt = track->Pt(); // Use the energy member to store Pt | |
1053 | jets->AddLast( new TLorentzVector(px, py, pz, pt) ); | |
1054 | tracks.Remove( track ); | |
1055 | TLorentzVector* jet = (TLorentzVector*)jets->Last(); | |
9d9a3c85 | 1056 | jet->SetPtEtaPhiE( 1., jet->Eta(), jet->Phi(), pt ); |
6ef5bfa4 | 1057 | // 3- Go to the next highest pT particle not already included... |
1058 | AliAODTrack* track1; | |
9d9a3c85 | 1059 | Double_t fPt = jet->E(); |
6ef5bfa4 | 1060 | while ( (track1 = (AliAODTrack*)(itrack.Next())) ) { |
9d9a3c85 | 1061 | Double_t tphi = track1->Phi(); // here Phi is from 0 <-> 2Pi |
1062 | if (tphi > TMath::Pi()) tphi -= 2. * TMath::Pi(); // convert to -Pi <-> Pi | |
1063 | Double_t dphi = TVector2::Phi_mpi_pi(jet->Phi()-tphi); | |
6ef5bfa4 | 1064 | Double_t r = TMath::Sqrt( (jet->Eta()-track1->Eta())*(jet->Eta()-track1->Eta()) + |
1065 | dphi*dphi ); | |
1066 | if( r < fConeRadius ) { | |
9d9a3c85 | 1067 | fPt = jet->E()+track1->Pt(); // Scalar sum of Pt |
6ef5bfa4 | 1068 | // recalculating the centroid |
623ed0a0 | 1069 | Double_t eta = jet->Eta()*jet->E()/fPt + track1->Eta()*track1->Pt()/fPt; |
9d9a3c85 | 1070 | Double_t phi = jet->Phi()*jet->E()/fPt + tphi*track1->Pt()/fPt; |
de6f8090 | 1071 | jet->SetPtEtaPhiE( 1., eta, phi, fPt ); |
6ef5bfa4 | 1072 | tracks.Remove( track1 ); |
1073 | } | |
1074 | } | |
94ee88d4 | 1075 | |
6ef5bfa4 | 1076 | tracks.Compress(); |
1077 | nTracks = tracks.GetEntries(); | |
1078 | // 4- Continue until all particles are in a jet. | |
1079 | itrack.Reset(); | |
1080 | } // end while nTracks | |
94ee88d4 | 1081 | |
6ef5bfa4 | 1082 | // Convert to AODjets.... |
1083 | Int_t njets = jets->GetEntriesFast(); | |
1084 | TObjArray* aodjets = new TObjArray(njets); | |
1085 | aodjets->SetOwner(kTRUE); | |
1086 | for(Int_t ijet=0; ijet<njets; ++ijet) { | |
1087 | TLorentzVector* jet = (TLorentzVector*)jets->At(ijet); | |
623ed0a0 | 1088 | if (jet->E() < fChJetPtMin) continue; |
6ef5bfa4 | 1089 | Float_t px, py,pz,en; // convert to 4-vector |
1090 | px = jet->E() * TMath::Cos(jet->Phi()); // Pt * cos(phi) | |
1091 | py = jet->E() * TMath::Sin(jet->Phi()); // Pt * sin(phi) | |
1092 | pz = jet->E() / TMath::Tan(2.0 * TMath::ATan(TMath::Exp(-jet->Eta()))); | |
1093 | en = TMath::Sqrt(px * px + py * py + pz * pz); | |
9d9a3c85 | 1094 | |
6ef5bfa4 | 1095 | aodjets->AddLast( new AliAODJet(px, py, pz, en) ); |
1096 | } | |
5cb0f438 | 1097 | jets->Delete(); |
1098 | delete jets; | |
94ee88d4 | 1099 | |
6ef5bfa4 | 1100 | // Order jets according to their pT . |
1101 | QSortTracks( *aodjets, 0, aodjets->GetEntriesFast() ); | |
1102 | ||
1103 | // debug | |
1104 | if (fDebug>3) AliInfo(Form(" %d Charged jets found\n",njets)); | |
1105 | ||
1106 | return aodjets; | |
1107 | } | |
1108 | ||
1109 | //____________________________________________________________________ | |
1110 | void AliAnalysisTaskUE::QSortTracks(TObjArray &a, Int_t first, Int_t last) | |
1111 | { | |
1112 | // Sort array of TObjArray of tracks by Pt using a quicksort algorithm. | |
1113 | ||
1114 | static TObject *tmp; | |
1115 | static int i; // "static" to save stack space | |
1116 | int j; | |
1117 | ||
1118 | while (last - first > 1) { | |
1119 | i = first; | |
1120 | j = last; | |
1121 | for (;;) { | |
1122 | while (++i < last && ((AliVParticle*)a[i])->Pt() > ((AliVParticle*)a[first])->Pt() ) | |
1123 | ; | |
1124 | while (--j > first && ((AliVParticle*)a[j])->Pt() < ((AliVParticle*)a[first])->Pt() ) | |
1125 | ; | |
1126 | if (i >= j) | |
1127 | break; | |
1128 | ||
1129 | tmp = a[i]; | |
1130 | a[i] = a[j]; | |
1131 | a[j] = tmp; | |
1132 | } | |
1133 | if (j == first) { | |
1134 | ++first; | |
1135 | continue; | |
1136 | } | |
1137 | tmp = a[first]; | |
1138 | a[first] = a[j]; | |
1139 | a[j] = tmp; | |
1140 | if (j - first < last - (j + 1)) { | |
1141 | QSortTracks(a, first, j); | |
1142 | first = j + 1; // QSortTracks(j + 1, last); | |
1143 | } else { | |
1144 | QSortTracks(a, j + 1, last); | |
1145 | last = j; // QSortTracks(first, j); | |
1146 | } | |
1147 | } | |
1148 | } | |
1149 | ||
1150 | //____________________________________________________________________ | |
1151 | void AliAnalysisTaskUE::SetRegionArea(TVector3 *jetVect) | |
1152 | { | |
1153 | Double_t fAreaCorrFactor=0.; | |
1154 | Double_t deltaEta = 0.; | |
1155 | if (fRegionType==1) fAreaReg = 2.*fTrackEtaCut*60.*TMath::Pi()/180.; | |
1156 | else if (fRegionType==2){ | |
1157 | deltaEta = 0.9-TMath::Abs(jetVect[0].Eta()); | |
1158 | if (deltaEta>fConeRadius) fAreaReg = TMath::Pi()*fConeRadius*fConeRadius; | |
1159 | else{ | |
1160 | fAreaCorrFactor = fConeRadius*fConeRadius*TMath::ACos(deltaEta/fConeRadius) - | |
1161 | (deltaEta*fConeRadius)*TMath::Sqrt( 1. - deltaEta*deltaEta/(fConeRadius*fConeRadius)); | |
1162 | fAreaReg=TMath::Pi()*fConeRadius*fConeRadius-fAreaCorrFactor; | |
1163 | } | |
1164 | }else AliWarning("Unknown Rgion Type"); | |
623ed0a0 | 1165 | if (fDebug>10) AliInfo(Form("\n dEta=%5.3f Angle =%5.3f Region Area = %5.3f Corr Factor=%5.4f \n",deltaEta,TMath::ACos(deltaEta/fConeRadius),fAreaReg,fAreaCorrFactor)); |
6ef5bfa4 | 1166 | } |
1167 | ||
f3050824 | 1168 | //____________________________________________________________________ |
1169 | void AliAnalysisTaskUE::CreateHistos() | |
1170 | { | |
1171 | fListOfHistos = new TList(); | |
1172 | ||
1173 | ||
9d9a3c85 | 1174 | fhNJets = new TH1F("fhNJets", "n Jet", 20, 0, 20); |
f3050824 | 1175 | fhNJets->SetXTitle("# of jets"); |
1176 | fhNJets->Sumw2(); | |
f3050824 | 1177 | fListOfHistos->Add( fhNJets ); // At(0) |
1178 | ||
1179 | fhEleadingPt = new TH1F("hEleadingPt", "Leading Jet P_{T}", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist); | |
1180 | fhEleadingPt->SetXTitle("P_{T} (GeV/c)"); | |
1181 | fhEleadingPt->SetYTitle("dN/dP_{T}"); | |
1182 | fhEleadingPt->Sumw2(); | |
1183 | fListOfHistos->Add( fhEleadingPt ); // At(1) | |
1184 | ||
1185 | fhMinRegPtDist = new TH1F("hMinRegPtDist", "P_{T} distribution in Min zone", 50,0.,20.); | |
1186 | fhMinRegPtDist->SetXTitle("P_{T} (GeV/c)"); | |
1187 | fhMinRegPtDist->SetYTitle("dN/dP_{T}"); | |
1188 | fhMinRegPtDist->Sumw2(); | |
1189 | fListOfHistos->Add( fhMinRegPtDist ); // At(2) | |
1190 | ||
1191 | fhRegionMultMin = new TH1F("hRegionMultMin", "N_{ch}^{90, min}", 21, -0.5, 20.5); | |
1192 | fhRegionMultMin->SetXTitle("N_{ch tracks}"); | |
1193 | fhRegionMultMin->Sumw2(); | |
1194 | fListOfHistos->Add( fhRegionMultMin ); // At(3) | |
1195 | ||
1196 | fhMinRegAvePt = new TH1F("hMinRegAvePt", "#LTp_{T}#GT", 50, 0., 20.); | |
1197 | fhMinRegAvePt->SetXTitle("P_{T} (GeV/c)"); | |
1198 | fhMinRegAvePt->Sumw2(); | |
1199 | fListOfHistos->Add( fhMinRegAvePt ); // At(4) | |
1200 | ||
1201 | fhMinRegSumPt = new TH1F("hMinRegSumPt", "#Sigma p_{T} ", 50, 0., 20.); | |
1202 | fhMinRegSumPt->SetYTitle("Ed^{3}N_{tracks}/dp^{3} (c^{3}/GeV^{2})"); | |
1203 | fhMinRegSumPt->SetXTitle("#Sigma p_{T} (GeV/c)"); | |
1204 | fhMinRegSumPt->Sumw2(); | |
1205 | fListOfHistos->Add( fhMinRegSumPt ); // At(5) | |
6ef5bfa4 | 1206 | |
f3050824 | 1207 | fhMinRegMaxPtPart = new TH1F("hMinRegMaxPtPart", "max(p_{T})|_{event} ", 50, 0., 20.); |
1208 | fhMinRegMaxPtPart->SetYTitle("Ed^{3}N_{tracks}/dp^{3} (c^{3}/GeV^{2})"); | |
1209 | fhMinRegMaxPtPart->SetXTitle("p_{T} (GeV/c)"); | |
1210 | fhMinRegMaxPtPart->Sumw2(); | |
1211 | fListOfHistos->Add( fhMinRegMaxPtPart ); // At(6) | |
1212 | ||
1213 | fhMinRegSumPtvsMult = new TH1F("hMinRegSumPtvsMult", "#Sigma p_{T} vs. Multiplicity ", 21, -0.5, 20.5); | |
1214 | fhMinRegSumPtvsMult->SetYTitle("#Sigma p_{T} (GeV/c)"); | |
1215 | fhMinRegSumPtvsMult->SetXTitle("N_{charge}"); | |
1216 | fhMinRegSumPtvsMult->Sumw2(); | |
1217 | fListOfHistos->Add( fhMinRegSumPtvsMult ); // At(7); | |
6ef5bfa4 | 1218 | |
9d9a3c85 | 1219 | fhdNdEtaPhiDist = new TH2F("hdNdEtaPhiDist", Form("Charge particle density |#eta|<%3.1f vs #Delta#phi", fTrackEtaCut), |
1220 | 62, 0., 2.*TMath::Pi(), fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist); | |
de6f8090 | 1221 | fhdNdEtaPhiDist->SetXTitle("#Delta#phi"); |
9d9a3c85 | 1222 | fhdNdEtaPhiDist->SetYTitle("Leading Jet P_{T}"); |
de6f8090 | 1223 | fhdNdEtaPhiDist->Sumw2(); |
1224 | fListOfHistos->Add( fhdNdEtaPhiDist ); // At(8) | |
6ef5bfa4 | 1225 | |
f3050824 | 1226 | // Can be use to get part pt distribution for differente Jet Pt bins |
9d9a3c85 | 1227 | fhFullRegPartPtDistVsEt = new TH2F("hFullRegPartPtDistVsEt", Form( "dN/dP_{T} |#eta|<%3.1f vs Leading Jet P_{T}", fTrackEtaCut), |
27d185bd | 1228 | 200,0.,100., fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist); |
f3050824 | 1229 | fhFullRegPartPtDistVsEt->SetYTitle("Leading Jet P_{T}"); |
1230 | fhFullRegPartPtDistVsEt->SetXTitle("p_{T}"); | |
1231 | fhFullRegPartPtDistVsEt->Sumw2(); | |
1232 | fListOfHistos->Add( fhFullRegPartPtDistVsEt ); // At(9) | |
6ef5bfa4 | 1233 | |
1234 | // Can be use to get part pt distribution for differente Jet Pt bins | |
9d9a3c85 | 1235 | fhTransRegPartPtDistVsEt = new TH2F("hTransRegPartPtDistVsEt", Form( "dN/dP_{T} in tranvese regions |#eta|<%3.1f vs Leading Jet P_{T}", fTrackEtaCut), |
27d185bd | 1236 | 200,0.,100., fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist); |
f3050824 | 1237 | fhTransRegPartPtDistVsEt->SetYTitle("Leading Jet P_{T}"); |
1238 | fhTransRegPartPtDistVsEt->SetXTitle("p_{T}"); | |
1239 | fhTransRegPartPtDistVsEt->Sumw2(); | |
1240 | fListOfHistos->Add( fhTransRegPartPtDistVsEt ); // At(10) | |
1241 | ||
1242 | ||
1243 | fhRegionSumPtMaxVsEt = new TH1F("hRegionSumPtMaxVsEt", "P_{T}^{90, max} vs Leading Jet P_{T}", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist); | |
1244 | fhRegionSumPtMaxVsEt->SetXTitle("P_{T} (GeV/c)"); | |
1245 | fhRegionSumPtMaxVsEt->Sumw2(); | |
1246 | fListOfHistos->Add( fhRegionSumPtMaxVsEt ); // At(11) | |
6ef5bfa4 | 1247 | |
f3050824 | 1248 | fhRegionSumPtMinVsEt = new TH1F("hRegionSumPtMinVsEt", "P_{T}^{90, min} vs Leading Jet P_{T}", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist); |
1249 | fhRegionSumPtMinVsEt->SetXTitle("P_{T} (GeV/c)"); | |
1250 | fhRegionSumPtMinVsEt->Sumw2(); | |
1251 | fListOfHistos->Add( fhRegionSumPtMinVsEt ); // At(12) | |
1252 | ||
1253 | fhRegionMultMax = new TH1I("hRegionMultMax", "N_{ch}^{90, max}", 21, -0.5, 20.5); | |
1254 | fhRegionMultMax->SetXTitle("N_{ch tracks}"); | |
1255 | fhRegionMultMax->Sumw2(); | |
1256 | fListOfHistos->Add( fhRegionMultMax ); // At(13) | |
6ef5bfa4 | 1257 | |
f3050824 | 1258 | fhRegionMultMaxVsEt = new TH1F("hRegionMultMaxVsEt", "N_{ch}^{90, max} vs Leading Jet P_{T}", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist); |
1259 | fhRegionMultMaxVsEt->SetXTitle("E (GeV hRegionAveSumPtVsEt/c)"); | |
1260 | fhRegionMultMaxVsEt->Sumw2(); | |
1261 | fListOfHistos->Add( fhRegionMultMaxVsEt ); // At(14) | |
6ef5bfa4 | 1262 | |
f3050824 | 1263 | fhRegionMultMinVsEt = new TH1F("hRegionMultMinVsEt", "N_{ch}^{90, min} vs Leading Jet P_{T}", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist); |
1264 | fhRegionMultMinVsEt->SetXTitle("E (GeV/c)"); | |
1265 | fhRegionMultMinVsEt->Sumw2(); | |
1266 | fListOfHistos->Add( fhRegionMultMinVsEt ); // At(15) | |
6ef5bfa4 | 1267 | |
f3050824 | 1268 | fhRegionAveSumPtVsEt = new TH1F("hRegionAveSumPtVsEt", "(P_{T}^{90, max} + P_{T}^{90, min})/2 vs Leading Jet P_{T}", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist); |
1269 | fhRegionAveSumPtVsEt->SetXTitle("P_{T} (GeV/c)"); | |
1270 | fhRegionAveSumPtVsEt->Sumw2(); | |
1271 | fListOfHistos->Add( fhRegionAveSumPtVsEt ); // At(16) | |
6ef5bfa4 | 1272 | |
f3050824 | 1273 | fhRegionDiffSumPtVsEt= new TH1F("hRegionPtDiffVsEt", "(P_{T}^{90, max} - P_{T}^{90, min}) vs Leading Jet P_{T}", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist); |
1274 | fhRegionDiffSumPtVsEt->SetXTitle("P_{T} (GeV/c)"); | |
1275 | fhRegionDiffSumPtVsEt->Sumw2(); | |
1276 | fListOfHistos->Add( fhRegionDiffSumPtVsEt ); // At(17) | |
1277 | ||
1278 | fhRegionAvePartPtMaxVsEt = new TH1F("hRegionAvePartPtMaxVsEt", "#LTp_{T}#GT^{90, max} vs Leading Jet P_{T}", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist); | |
1279 | fhRegionAvePartPtMaxVsEt->SetXTitle("P_{T} (GeV/c)"); | |
1280 | fhRegionAvePartPtMaxVsEt->Sumw2(); | |
1281 | fListOfHistos->Add( fhRegionAvePartPtMaxVsEt ); // At(18) | |
6ef5bfa4 | 1282 | |
f3050824 | 1283 | fhRegionAvePartPtMinVsEt = new TH1F("hRegionAvePartPtMinVsEt", "#LTp_{T}#GT^{90, min} vs Leading Jet P_{T}", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist); |
1284 | fhRegionAvePartPtMinVsEt->SetXTitle("P_{T} (GeV/c)"); | |
1285 | fhRegionAvePartPtMinVsEt->Sumw2(); | |
1286 | fListOfHistos->Add( fhRegionAvePartPtMinVsEt ); // At(19) | |
6ef5bfa4 | 1287 | |
f3050824 | 1288 | fhRegionMaxPartPtMaxVsEt = new TH1F("hRegionMaxPartPtMaxVsEt", "max(p_{T})^{90} vs Leading Jet P_{T}", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist); |
1289 | fhRegionMaxPartPtMaxVsEt->SetXTitle("P_{T} (GeV/c)"); | |
1290 | fhRegionMaxPartPtMaxVsEt->Sumw2(); | |
1291 | fListOfHistos->Add( fhRegionMaxPartPtMaxVsEt ); // At(20) | |
94ee88d4 | 1292 | /* |
baf36668 | 1293 | fhRegForwardSumPtVsEt = new TH1F("hRegForwardSumPtVsEt", "Forward #sum{p_{T}} vs Leading Jet P_{T}", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist); |
1294 | fhRegForwardSumPtVsEt->SetXTitle("P_{T} (GeV/c)"); | |
1295 | fhRegForwardSumPtVsEt->Sumw2(); | |
1296 | fListOfHistos->Add( fhRegForwardSumPtVsEt ); // At(21) | |
1297 | ||
1298 | fhRegForwardMultVsEt = new TH1F("hRegForwardMultVsEt", "Forward #sum{N_{ch}} vs Leading Jet P_{T}", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist); | |
1299 | fhRegForwardMultVsEt->SetXTitle("P_{T} (GeV/c)"); | |
1300 | fhRegForwardMultVsEt->Sumw2(); | |
1301 | fListOfHistos->Add( fhRegForwardMultVsEt ); // At(22) | |
1302 | ||
1303 | fhRegBackwardSumPtVsEt = new TH1F("hRegBackwardSumPtVsEt", "Backward #sum{p_{T}} vs Leading Jet P_{T}", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist); | |
1304 | fhRegBackwardSumPtVsEt->SetXTitle("P_{T} (GeV/c)"); | |
1305 | fhRegBackwardSumPtVsEt->Sumw2(); | |
1306 | fListOfHistos->Add( fhRegBackwardSumPtVsEt ); // At(23) | |
1307 | ||
1308 | fhRegBackwardMultVsEt = new TH1F("hRegBackwardMultVsEt", "Backward #sum{N_{ch}} vs Leading Jet P_{T}", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist); | |
1309 | fhRegBackwardMultVsEt->SetXTitle("P_{T} (GeV/c)"); | |
1310 | fhRegBackwardMultVsEt->Sumw2(); | |
1311 | fListOfHistos->Add( fhRegBackwardMultVsEt ); // At(24) | |
94ee88d4 | 1312 | */ |
baf36668 | 1313 | fhRegForwardMult = new TH2F("hRegForwardMult", "N_{ch}^{forward}", |
1314 | fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist, 21, -0.5, 20.5); | |
1315 | fhRegForwardMult->SetXTitle("N_{ch tracks}"); | |
1316 | fhRegForwardMult->Sumw2(); | |
1317 | fListOfHistos->Add( fhRegForwardMult ); // At(25) | |
1318 | ||
1319 | fhRegForwardSumPtvsMult = new TH2F("hRegForwardSumPtvsMult", "Forward #Sigma p_{T} vs. Multiplicity ", | |
1320 | fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist, 21, -0.5, 20.5); | |
1321 | fhRegForwardSumPtvsMult->SetYTitle("#Sigma p_{T} (GeV/c)"); | |
1322 | fhRegForwardSumPtvsMult->SetXTitle("N_{charge}"); | |
1323 | fhRegForwardSumPtvsMult->Sumw2(); | |
1324 | fListOfHistos->Add( fhRegForwardSumPtvsMult ); // At(26); | |
1325 | ||
1326 | fhRegBackwardMult = new TH2F("hRegBackwardMult", "N_{ch}^{backward}", | |
1327 | fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist, 21, -0.5, 20.5); | |
1328 | fhRegBackwardMult->SetXTitle("N_{ch tracks}"); | |
1329 | fhRegBackwardMult->Sumw2(); | |
1330 | fListOfHistos->Add( fhRegBackwardMult ); // At(27) | |
1331 | ||
1332 | fhRegBackwardSumPtvsMult = new TH2F("hRegBackwardSumPtvsMult", "Backward #Sigma p_{T} vs. Multiplicity ", | |
1333 | fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist, 21, -0.5, 20.5); | |
1334 | fhRegBackwardSumPtvsMult->SetYTitle("#Sigma p_{T} (GeV/c)"); | |
1335 | fhRegBackwardSumPtvsMult->SetXTitle("N_{charge}"); | |
1336 | fhRegBackwardSumPtvsMult->Sumw2(); | |
1337 | fListOfHistos->Add( fhRegBackwardSumPtvsMult ); // At(28); | |
1338 | ||
1339 | fhRegForwardPartPtDistVsEt = new TH2F("hRegForwardPartPtDistVsEt", Form( "dN/dP_{T} |#eta|<%3.1f vs Leading Jet P_{T}", fTrackEtaCut), | |
27d185bd | 1340 | 200,0.,100., fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist); |
baf36668 | 1341 | fhRegForwardPartPtDistVsEt->SetYTitle("Leading Jet P_{T}"); |
1342 | fhRegForwardPartPtDistVsEt->SetXTitle("p_{T}"); | |
1343 | fhRegForwardPartPtDistVsEt->Sumw2(); | |
1344 | fListOfHistos->Add( fhRegForwardPartPtDistVsEt ); // At(29) | |
1345 | ||
1346 | fhRegBackwardPartPtDistVsEt = new TH2F("hRegBackwardPartPtDistVsEt", Form( "dN/dP_{T} |#eta|<%3.1f vs Leading Jet P_{T}", fTrackEtaCut), | |
27d185bd | 1347 | 200,0.,100., fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist); |
baf36668 | 1348 | fhRegBackwardPartPtDistVsEt->SetYTitle("Leading Jet P_{T}"); |
1349 | fhRegBackwardPartPtDistVsEt->SetXTitle("p_{T}"); | |
1350 | fhRegBackwardPartPtDistVsEt->Sumw2(); | |
1351 | fListOfHistos->Add( fhRegBackwardPartPtDistVsEt ); // At(30) | |
1352 | ||
1353 | fhRegTransMult = new TH2F("hRegTransMult", "N_{ch}^{transv}", | |
1354 | fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist, 21, -0.5, 20.5); | |
1355 | fhRegTransMult->SetXTitle("N_{ch tracks}"); | |
1356 | fhRegTransMult->Sumw2(); | |
1357 | fListOfHistos->Add( fhRegTransMult ); // At(31) | |
1358 | ||
1359 | fhRegTransSumPtVsMult = new TH2F("hRegTransSumPtVsMult", "Transverse #Sigma p_{T} vs. Multiplicity ", | |
1360 | fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist, 21, -0.5, 20.5); | |
1361 | fhRegTransSumPtVsMult->SetYTitle("#Sigma p_{T} (GeV/c)"); | |
1362 | fhRegTransSumPtVsMult->SetXTitle("N_{charge}"); | |
1363 | fhRegTransSumPtVsMult->Sumw2(); | |
1364 | fListOfHistos->Add( fhRegTransSumPtVsMult ); // At(32); | |
1365 | ||
5713f021 | 1366 | fhMinRegSumPtJetPtBin = new TH2F("hMinRegSumPtJetPtBin", "Transverse Min Reg #Sigma p_{T} per jet Pt Bin", |
1367 | fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist, 50, 0., 20.); | |
1368 | fhMinRegSumPtJetPtBin->SetXTitle("Leading Jet P_{T}"); | |
1369 | fhMinRegSumPtJetPtBin->Sumw2(); | |
1370 | fListOfHistos->Add( fhMinRegSumPtJetPtBin ); // At(33) | |
1371 | ||
1372 | fhMaxRegSumPtJetPtBin = new TH2F("hMaxRegSumPtJetPtBin", "Transverse Max Reg #Sigma p_{T} per jet Pt Bin", | |
1373 | fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist, 50, 0., 20.); | |
1374 | fhMaxRegSumPtJetPtBin->SetXTitle("Leading Jet P_{T}"); | |
1375 | fhMaxRegSumPtJetPtBin->Sumw2(); | |
1376 | fListOfHistos->Add( fhMaxRegSumPtJetPtBin ); // At(34) | |
1377 | ||
94ee88d4 | 1378 | fhVertexMult = new TH1F("hVertexMult", "Multiplicity in Main Vertex", 81, -0.5 , 80.5); |
1379 | fhVertexMult->SetXTitle("Main Vertex Multiplicity"); | |
1380 | fhVertexMult->Sumw2(); | |
1381 | fListOfHistos->Add( fhVertexMult ); //At(35) | |
1382 | ||
623ed0a0 | 1383 | fh1Xsec = new TProfile("fh1Xsec","xsec from pyxsec.root",1,0,1); |
1384 | fh1Xsec->GetXaxis()->SetBinLabel(1,"<#sigma>"); | |
1385 | fh1Xsec->Sumw2(); | |
94ee88d4 | 1386 | fListOfHistos->Add( fh1Xsec ); //At(36) |
623ed0a0 | 1387 | |
1388 | fh1Trials = new TH1F("fh1Trials","trials from pyxsec.root",1,0,1); | |
1389 | fh1Trials->GetXaxis()->SetBinLabel(1,"#sum{ntrials}"); | |
1390 | fh1Trials->Sumw2(); | |
94ee88d4 | 1391 | fListOfHistos->Add( fh1Trials ); //At(37) |
1e996f55 | 1392 | |
6ef5bfa4 | 1393 | fSettingsTree = new TTree("UEAnalysisSettings","Analysis Settings in UE estimation"); |
5c1827c4 | 1394 | fSettingsTree->Branch("fFilterBit", &fFilterBit,"FilterBit/I"); |
1c796df8 | 1395 | fSettingsTree->Branch("fTrigger", &fTrigger,"TriggerFlag/I"); |
1e996f55 | 1396 | fSettingsTree->Branch("fConeRadius", &fConeRadius,"Rad/D"); |
1397 | fSettingsTree->Branch("fJet1EtaCut", &fJet1EtaCut, "LeadJetEtaCut/D"); | |
1398 | fSettingsTree->Branch("fJet2DeltaPhiCut", &fJet2DeltaPhiCut, "DeltaPhi/D"); | |
1399 | fSettingsTree->Branch("fJet2RatioPtCut", &fJet2RatioPtCut, "Jet2Ratio/D"); | |
1400 | fSettingsTree->Branch("fJet3PtCut", &fJet3PtCut, "Jet3PtCut/D"); | |
1401 | fSettingsTree->Branch("fTrackPtCut", &fTrackPtCut, "TrackPtCut/D"); | |
1402 | fSettingsTree->Branch("fTrackEtaCut", &fTrackEtaCut, "TrackEtaCut/D"); | |
1403 | fSettingsTree->Branch("fAnaType", &fAnaType, "Ana/I"); | |
1404 | fSettingsTree->Branch("fRegionType", &fRegionType,"Reg/I"); | |
1405 | fSettingsTree->Branch("fOrdering", &fOrdering,"OrderMeth/I"); | |
1406 | fSettingsTree->Branch("fUseChPartJet", &fUseChPartJet,"UseChPart/O"); | |
9d9a3c85 | 1407 | fSettingsTree->Branch("fUseChargeHadrons", &fUseChargeHadrons,"UseChHadrons/O"); |
1e996f55 | 1408 | fSettingsTree->Branch("fUseSingleCharge", &fUseSingleCharge,"UseSingleCh/O"); |
1409 | fSettingsTree->Branch("fUsePositiveCharge", &fUsePositiveCharge,"UsePositiveCh/O"); | |
1410 | fSettingsTree->Fill(); | |
1411 | ||
1412 | ||
94ee88d4 | 1413 | fListOfHistos->Add( fSettingsTree ); // At(38) |
6ef5bfa4 | 1414 | |
1415 | /* | |
1416 | // For debug region selection | |
1417 | fhValidRegion = new TH2F("hValidRegion", "dN/d#eta/d#phi", | |
1418 | 20, -2.,2., 62, -TMath::Pi(), TMath::Pi()); | |
1419 | fhValidRegion->SetYTitle("#Delta#phi"); | |
1420 | fhValidRegion->Sumw2(); | |
1421 | fListOfHistos->Add( fhValidRegion ); // At(15) | |
1422 | */ | |
f3050824 | 1423 | } |
f3050824 | 1424 | |
e1060f2b | 1425 | |
1426 | ||
6ef5bfa4 | 1427 | //____________________________________________________________________ |
1428 | void AliAnalysisTaskUE::Terminate(Option_t */*option*/) | |
1429 | { | |
1430 | // Terminate analysis | |
1431 | // | |
1432 | ||
1433 | //Save Analysis Settings | |
1e996f55 | 1434 | // WriteSettings(); |
6ef5bfa4 | 1435 | |
1436 | // Normalize histos to region area TODO: | |
1437 | // Normalization done at Analysis, taking into account | |
1438 | // area variations on per-event basis (cone case) | |
5713f021 | 1439 | |
1440 | //HIGH WARNING!!!!!: DO NOT SCALE ANY OF THE ORIGINAL HISTOGRAMS | |
1441 | //MAKE A COPY, DRAW IT, And later sacale that copy. CAF Issue!!!!! | |
6ef5bfa4 | 1442 | |
1443 | // Draw some Test plot to the screen | |
1444 | if (!gROOT->IsBatch()) { | |
1445 | ||
1446 | // Update pointers reading them from the output slot | |
1447 | fListOfHistos = dynamic_cast<TList*> (GetOutputData(0)); | |
1448 | if( !fListOfHistos ) { | |
1449 | AliError("Histogram List is not available"); | |
1450 | return; | |
1451 | } | |
9d9a3c85 | 1452 | fhNJets = (TH1F*)fListOfHistos->At(0); |
6ef5bfa4 | 1453 | fhEleadingPt = (TH1F*)fListOfHistos->At(1); |
9d9a3c85 | 1454 | fhdNdEtaPhiDist = (TH2F*)fListOfHistos->At(8); |
6ef5bfa4 | 1455 | fhRegionSumPtMaxVsEt = (TH1F*)fListOfHistos->At(11); |
1456 | fhRegionSumPtMinVsEt = (TH1F*)fListOfHistos->At(12); | |
1457 | fhRegionMultMaxVsEt = (TH1F*)fListOfHistos->At(14); | |
1458 | fhRegionMultMinVsEt = (TH1F*)fListOfHistos->At(15); | |
1459 | fhRegionAveSumPtVsEt = (TH1F*)fListOfHistos->At(16); | |
94ee88d4 | 1460 | //fhRegForwardSumPtVsEt = (TH1F*)fListOfHistos->At(21); |
1461 | //fhRegBackwardSumPtVsEt = (TH1F*)fListOfHistos->At(23); | |
6ef5bfa4 | 1462 | |
623ed0a0 | 1463 | //fhValidRegion = (TH2F*)fListOfHistos->At(21); |
1464 | ||
6ef5bfa4 | 1465 | // Canvas |
623ed0a0 | 1466 | TCanvas* c1 = new TCanvas("c1",Form("sumPt dist (%s)", GetTitle()),60,60,1100,700); |
6ef5bfa4 | 1467 | c1->Divide(2,2); |
1468 | c1->cd(1); | |
1469 | TH1F *h1r = new TH1F("hRegionEtvsSumPtMax" , "", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist); | |
1470 | h1r->Divide(fhRegionSumPtMaxVsEt,fhEleadingPt,1,1); | |
1471 | //h1r->Scale( areafactor ); | |
1472 | h1r->SetMarkerStyle(20); | |
1473 | h1r->SetXTitle("P_{T} of Leading Jet (GeV/c)"); | |
1474 | h1r->SetYTitle("P_{T}^{90, max}"); | |
1475 | h1r->DrawCopy("p"); | |
1476 | ||
1477 | c1->cd(2); | |
1478 | ||
1479 | TH1F *h2r = new TH1F("hRegionEtvsSumPtMin" , "", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist); | |
1480 | h2r->Divide(fhRegionSumPtMinVsEt,fhEleadingPt,1,1); | |
1481 | //h2r->Scale( areafactor ); | |
1482 | h2r->SetMarkerStyle(20); | |
1483 | h2r->SetXTitle("P_{T} of Leading Jet (GeV/c)"); | |
1484 | h2r->SetYTitle("P_{T}^{90, min}"); | |
1485 | h2r->DrawCopy("p"); | |
1486 | ||
1487 | c1->cd(3); | |
1488 | TH1F *h4r = new TH1F("hRegionEtvsDiffPt" , "", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist); | |
94ee88d4 | 1489 | //TH1F *h41r = new TH1F("hRegForwvsDiffPt" , "", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist); |
1490 | //TH1F *h42r = new TH1F("hRegBackvsDiffPt" , "", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist); | |
1491 | //h41r->Divide(fhRegForwardSumPtVsEt,fhEleadingPt,1,1); | |
1492 | //h42r->Divide(fhRegBackwardSumPtVsEt,fhEleadingPt,1,1); | |
6ef5bfa4 | 1493 | h4r->Divide(fhRegionAveSumPtVsEt,fhEleadingPt,1,1); |
baf36668 | 1494 | //h4r->Scale(2.); // make average |
6ef5bfa4 | 1495 | //h4r->Scale( areafactor ); |
1496 | h4r->SetYTitle("#DeltaP_{T}^{90}"); | |
1497 | h4r->SetXTitle("P_{T} of Leading Jet (GeV/c)"); | |
1498 | h4r->SetMarkerStyle(20); | |
1499 | h4r->DrawCopy("p"); | |
94ee88d4 | 1500 | /*h41r->SetXTitle("P_{T} of Leading Jet (GeV/c)"); |
baf36668 | 1501 | h41r->SetMarkerStyle(22); |
1502 | h41r->DrawCopy("p same"); | |
1503 | h42r->SetXTitle("P_{T} of Leading Jet (GeV/c)"); | |
1504 | h42r->SetMarkerStyle(23); | |
1505 | h42r->SetMarkerColor(kRed); | |
1506 | h42r->DrawCopy("p same"); | |
94ee88d4 | 1507 | */ |
6ef5bfa4 | 1508 | c1->cd(4); |
1509 | TH1F *h5r = new TH1F("hRegionMultMaxVsEtleading", "", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist); | |
1510 | TH1F *h6r = new TH1F("hRegionMultMinVsEtleading", "", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist); | |
1511 | ||
1512 | h5r->Divide(fhRegionMultMaxVsEt,fhEleadingPt,1,1); | |
1513 | h6r->Divide(fhRegionMultMinVsEt,fhEleadingPt,1,1); | |
1514 | //h5r->Scale( areafactor ); | |
1515 | //h6r->Scale( areafactor ); | |
1516 | h5r->SetYTitle("N_{Tracks}^{90}"); | |
1517 | h5r->SetXTitle("P_{T} of Leading Jet (GeV/c)"); | |
1518 | h5r->SetMarkerStyle(20); | |
1519 | h5r->DrawCopy("p"); | |
1520 | h6r->SetMarkerStyle(21); | |
1521 | h6r->SetMarkerColor(2); | |
1522 | h6r->SetYTitle("N_{Tracks}^{90}"); | |
1523 | h6r->SetXTitle("P_{T} of Leading Jet (GeV/c)"); | |
1524 | h6r->DrawCopy("p same"); | |
1525 | c1->Update(); | |
1526 | ||
623ed0a0 | 1527 | //Get Normalization |
1528 | fh1Xsec = (TProfile*)fListOfHistos->At(21); | |
1529 | fh1Trials = (TH1F*)fListOfHistos->At(22); | |
1530 | ||
1531 | Double_t xsec = fh1Xsec->GetBinContent(1); | |
1532 | Double_t ntrials = fh1Trials->GetBinContent(1); | |
1533 | Double_t normFactor = xsec/ntrials; | |
6b7d2b7e | 1534 | if(fDebug > 1)Printf("xSec %f nTrials %f Norm %f \n",xsec,ntrials,normFactor); |
623ed0a0 | 1535 | |
1536 | ||
5713f021 | 1537 | |
6ef5bfa4 | 1538 | TCanvas* c2 = new TCanvas("c2","Jet Pt dist",160,160,1200,800); |
5713f021 | 1539 | TH1 * copy = 0; |
6ef5bfa4 | 1540 | c2->Divide(2,2); |
1541 | c2->cd(1); | |
1542 | fhEleadingPt->SetMarkerStyle(20); | |
1543 | fhEleadingPt->SetMarkerColor(2); | |
5713f021 | 1544 | //if( normFactor > 0.) fhEleadingPt->Scale(normFactor); |
623ed0a0 | 1545 | //fhEleadingPt->Draw("p"); |
5713f021 | 1546 | copy = fhEleadingPt->DrawCopy("p"); |
1547 | if( normFactor > 0.) copy->Scale(normFactor); | |
6ef5bfa4 | 1548 | gPad->SetLogy(); |
1549 | ||
1550 | c2->cd(2); | |
9d9a3c85 | 1551 | Int_t xbin1 = fhdNdEtaPhiDist->GetYaxis()->FindFixBin(fMinJetPtInHist); |
1552 | Int_t xbin2 = fhdNdEtaPhiDist->GetYaxis()->FindFixBin(fMaxJetPtInHist); | |
1553 | TH1D* dNdEtaPhiDistAllJets = fhdNdEtaPhiDist->ProjectionX("dNdEtaPhiDistAllJets",xbin1,xbin2); | |
1554 | dNdEtaPhiDistAllJets->SetMarkerStyle(20); | |
1555 | dNdEtaPhiDistAllJets->SetMarkerColor(2); | |
1556 | dNdEtaPhiDistAllJets->DrawCopy("p"); | |
6ef5bfa4 | 1557 | gPad->SetLogy(); |
1558 | ||
1559 | c2->cd(3); | |
1560 | fhNJets->DrawCopy(); | |
1561 | ||
623ed0a0 | 1562 | //c2->cd(4); |
1563 | //fhValidRegion->DrawCopy("p"); | |
1564 | ||
6ef5bfa4 | 1565 | //fhTransRegPartPtDist = (TH1F*)fListOfHistos->At(2); |
1566 | fhRegionMultMin = (TH1F*)fListOfHistos->At(3); | |
1567 | fhMinRegAvePt = (TH1F*)fListOfHistos->At(4); | |
1568 | fhMinRegSumPt = (TH1F*)fListOfHistos->At(5); | |
1569 | //fhMinRegMaxPtPart = (TH1F*)fListOfHistos->At(6); | |
1570 | fhMinRegSumPtvsMult = (TH1F*)fListOfHistos->At(7); | |
1571 | ||
baf36668 | 1572 | |
6ef5bfa4 | 1573 | // Canvas |
623ed0a0 | 1574 | TCanvas* c3 = new TCanvas("c3"," pT dist",160,160,1200,800); |
6ef5bfa4 | 1575 | c3->Divide(2,2); |
1576 | c3->cd(1); | |
1577 | /*fhTransRegPartPtDist->SetMarkerStyle(20); | |
1578 | fhTransRegPartPtDist->SetMarkerColor(2); | |
1579 | fhTransRegPartPtDist->Scale(areafactor/fhTransRegPartPtDist->GetEntries()); | |
1580 | fhTransRegPartPtDist->DrawCopy("p"); | |
1581 | gPad->SetLogy(); | |
1582 | */ | |
1583 | c3->cd(2); | |
1584 | fhMinRegSumPt->SetMarkerStyle(20); | |
1585 | fhMinRegSumPt->SetMarkerColor(2); | |
1586 | //fhMinRegSumPt->Scale(areafactor); | |
1587 | fhMinRegSumPt->DrawCopy("p"); | |
1588 | gPad->SetLogy(); | |
1589 | ||
1590 | c3->cd(3); | |
1591 | fhMinRegAvePt->SetMarkerStyle(20); | |
1592 | fhMinRegAvePt->SetMarkerColor(2); | |
1593 | //fhMinRegAvePt->Scale(areafactor); | |
1594 | fhMinRegAvePt->DrawCopy("p"); | |
1595 | gPad->SetLogy(); | |
1596 | ||
1597 | c3->cd(4); | |
1598 | ||
1599 | TH1F *h7r = new TH1F("hRegionMultMinVsMult", "", 21, -0.5, 20.5); | |
1600 | ||
1601 | h7r->Divide(fhMinRegSumPtvsMult,fhRegionMultMin,1,1); | |
1602 | ||
1603 | h7r->SetMarkerStyle(20); | |
1604 | h7r->SetMarkerColor(2); | |
1605 | h7r->DrawCopy("p"); | |
1606 | ||
1607 | c3->Update(); | |
1608 | ||
1609 | ||
1610 | /* c2->cd(3); | |
1611 | fhValidRegion->SetMarkerStyle(20); | |
1612 | fhValidRegion->SetMarkerColor(2); | |
1613 | fhValidRegion->DrawCopy("p"); | |
1614 | */ | |
1615 | c2->Update(); | |
1616 | } else { | |
1617 | AliInfo(" Batch mode, not histograms will be shown..."); | |
1618 | } | |
1619 | ||
1620 | if( fDebug > 1 ) | |
1621 | AliInfo("End analysis"); | |
1622 | ||
1623 | } | |
f3050824 | 1624 | |
6ef5bfa4 | 1625 | void AliAnalysisTaskUE::WriteSettings() |
1e996f55 | 1626 | { |
6ef5bfa4 | 1627 | if (fDebug>5){ |
1628 | AliInfo(" All Analysis Settings in Saved Tree"); | |
1629 | fSettingsTree->Scan(); | |
1630 | } | |
1631 | } |