1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
28 #include <TLorentzVector.h>
31 #include "AliAnalysisTaskUE.h"
32 #include "AliAnalysisManager.h"
33 #include "AliMCEventHandler.h"
34 #include "AliAODEvent.h"
35 #include "AliAODInputHandler.h"
36 #include "AliAODHandler.h"
38 #include "AliAODJet.h"
39 #include "AliAODTrack.h"
44 // Analysis class for Underlying Event studies
46 // Look for correlations on the tranverse regions to
47 // the leading charged jet
49 // This class needs as input AOD with track and Jets
50 // the output is a list of histograms
52 // AOD can be either connected to the InputEventHandler
53 // for a chain of AOD files
55 // to the OutputEventHandler
56 // for a chain of ESD files, so this case class should be
57 // in the train after the Jet finder
59 // Arian.Abrahantes.Quintana@cern.ch
60 // Ernesto.Lopez.Torres@cern.ch
64 ClassImp( AliAnalysisTaskUE)
66 ////////////////////////////////////////////////////////////////////////
69 //____________________________________________________________________
70 AliAnalysisTaskUE:: AliAnalysisTaskUE(const char* name):
71 AliAnalysisTask(name, ""),
77 fMaxJetPtInHist(300.),
83 fJet2DeltaPhiCut(2.616), // 150 degrees
94 fhMinRegMaxPtPart(0x0),
95 fhMinRegSumPtvsMult(0x0),
96 fhdNdEta_PhiDist(0x0),
97 fhFullRegPartPtDistVsEt(0x0),
98 fhTransRegPartPtDistVsEt(0x0),
99 fhRegionSumPtMaxVsEt(0x0),
100 fhRegionMultMax(0x0),
101 fhRegionMultMaxVsEt(0x0),
102 fhRegionSumPtMinVsEt(0x0), //fhRegionMultMin(0x0),
103 fhRegionMultMinVsEt(0x0),
104 fhRegionAveSumPtVsEt(0x0),
105 fhRegionDiffSumPtVsEt(0x0),
106 fhRegionAvePartPtMaxVsEt(0x0),
107 fhRegionAvePartPtMinVsEt(0x0),
108 fhRegionMaxPartPtMaxVsEt(0x0)//, fhValidRegion(0x0)
110 // Default constructor
111 // Define input and output slots here
112 // Input slot #0 works with a TChain
113 DefineInput(0, TChain::Class());
114 // Output slot #0 writes into a TList container
115 DefineOutput(0, TList::Class());
119 //____________________________________________________________________
120 void AliAnalysisTaskUE::ConnectInputData(Option_t* /*option*/)
122 // Connect the input data
124 // We need AOD with tracks and jets.
125 // Since AOD can be either connected to the InputEventHandler or to the OutputEventHandler
126 // we need to check where it is and get the pointer to AODEvent in the right way
128 if (fDebug > 1) AliInfo("ConnectInputData() \n");
131 TObject* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
133 if( handler && handler->InheritsFrom("AliAODInputHandler") ) {
134 fAOD = ((AliAODInputHandler*)handler)->GetEvent();
136 handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
137 if( handler && handler->InheritsFrom("AliAODHandler") ) {
138 fAOD = ((AliAODHandler*)handler)->GetAOD();
140 AliFatal("I can't get any AOD Event Handler");
145 //____________________________________________________________________
146 void AliAnalysisTaskUE::CreateOutputObjects()
148 // Create the output container
150 if (fDebug > 1) AliInfo("CreateOutPutData()");
154 fListOfHistos->SetOwner(kTRUE);
159 //____________________________________________________________________
160 void AliAnalysisTaskUE::Exec(Option_t */*option*/)
162 // Execute analysis for current event
166 PostData(0, fListOfHistos);
170 //____________________________________________________________________
171 void AliAnalysisTaskUE::Terminate(Option_t */*option*/)
173 // Terminate analysis
176 // Normalize histos to region area TODO:
177 Double_t areafactor = 1.;
178 if( fRegionType == 1 ) {
179 areafactor = 1./ (fTrackEtaCut *2. * TMath::Pi()*2.);
181 areafactor = 1./ ( fConeRadius * fConeRadius * TMath::Pi() );
184 // Draw some Test plot to the screen
185 if (!gROOT->IsBatch()) {
187 // Update pointers reading them from the output slot
188 fListOfHistos = dynamic_cast<TList*> (GetOutputData(0));
189 if( !fListOfHistos ) {
190 AliError("Histogram List is not available");
193 fhEleadingPt = (TH1F*)fListOfHistos->At(1);
194 fhdNdEta_PhiDist = (TH1F*)fListOfHistos->At(8);
195 fhRegionSumPtMaxVsEt = (TH1F*)fListOfHistos->At(11);
196 fhRegionSumPtMinVsEt = (TH1F*)fListOfHistos->At(12);
197 fhRegionMultMaxVsEt = (TH1F*)fListOfHistos->At(14);
198 fhRegionMultMinVsEt = (TH1F*)fListOfHistos->At(15);
199 fhRegionAveSumPtVsEt = (TH1F*)fListOfHistos->At(16);
201 fhNJets = (TH1F*)fListOfHistos->At(0);
204 TCanvas* c1 = new TCanvas("c1",Form("sumPt dist (%s)", GetTitle()),60,60,1200,800);
207 TH1F *h1r = new TH1F("hRegionEtvsSumPtMax" , "", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist);
208 h1r->Divide(fhRegionSumPtMaxVsEt,fhEleadingPt,1,1);
209 h1r->Scale( areafactor );
210 h1r->SetMarkerStyle(20);
211 h1r->SetXTitle("P_{T} of Leading Jet (GeV/c)");
212 h1r->SetYTitle("P_{T}^{90, max}");
217 TH1F *h2r = new TH1F("hRegionEtvsSumPtMin" , "", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist);
218 h2r->Divide(fhRegionSumPtMinVsEt,fhEleadingPt,1,1);
219 h2r->Scale( areafactor );
220 h2r->SetMarkerStyle(20);
221 h2r->SetXTitle("P_{T} of Leading Jet (GeV/c)");
222 h2r->SetYTitle("P_{T}^{90, min}");
226 TH1F *h4r = new TH1F("hRegionEtvsDiffPt" , "", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist);
227 h4r->Divide(fhRegionAveSumPtVsEt,fhEleadingPt,1,1);
228 h4r->Scale(2.); // make average
229 h4r->Scale( areafactor );
230 h4r->SetYTitle("#DeltaP_{T}^{90}");
231 h4r->SetXTitle("P_{T} of Leading Jet (GeV/c)");
232 h4r->SetMarkerStyle(20);
236 TH1F *h5r = new TH1F("hRegionMultMaxVsEtleading", "", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist);
237 TH1F *h6r = new TH1F("hRegionMultMinVsEtleading", "", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist);
239 h5r->Divide(fhRegionMultMaxVsEt,fhEleadingPt,1,1);
240 h6r->Divide(fhRegionMultMinVsEt,fhEleadingPt,1,1);
241 h5r->Scale( areafactor );
242 h6r->Scale( areafactor );
243 h5r->SetYTitle("N_{Tracks}^{90}");
244 h5r->SetXTitle("P_{T} of Leading Jet (GeV/c)");
245 h5r->SetMarkerStyle(20);
247 h6r->SetMarkerStyle(21);
248 h6r->SetMarkerColor(2);
249 h6r->SetYTitle("N_{Tracks}^{90}");
250 h6r->SetXTitle("P_{T} of Leading Jet (GeV/c)");
251 h6r->DrawCopy("p same");
254 TCanvas* c2 = new TCanvas("c2","Jet Pt dist",160,160,1200,800);
257 fhEleadingPt->SetMarkerStyle(20);
258 fhEleadingPt->SetMarkerColor(2);
259 fhEleadingPt->DrawCopy("p");
263 fhdNdEta_PhiDist->SetMarkerStyle(20);
264 fhdNdEta_PhiDist->SetMarkerColor(2);
265 fhdNdEta_PhiDist->DrawCopy("p");
271 //fhTransRegPartPtDist = (TH1F*)fListOfHistos->At(2);
272 fhRegionMultMin = (TH1F*)fListOfHistos->At(3);
273 fhMinRegAvePt = (TH1F*)fListOfHistos->At(4);
274 fhMinRegSumPt = (TH1F*)fListOfHistos->At(5);
275 //fhMinRegMaxPtPart = (TH1F*)fListOfHistos->At(6);
276 fhMinRegSumPtvsMult = (TH1F*)fListOfHistos->At(7);
279 TCanvas* c3 = new TCanvas("c3"," p_{T} dist",160,160,1200,800);
282 /*fhTransRegPartPtDist->SetMarkerStyle(20);
283 fhTransRegPartPtDist->SetMarkerColor(2);
284 fhTransRegPartPtDist->Scale(areafactor/fhTransRegPartPtDist->GetEntries());
285 fhTransRegPartPtDist->DrawCopy("p");
289 fhMinRegSumPt->SetMarkerStyle(20);
290 fhMinRegSumPt->SetMarkerColor(2);
291 fhMinRegSumPt->Scale(areafactor);
292 fhMinRegSumPt->DrawCopy("p");
296 fhMinRegAvePt->SetMarkerStyle(20);
297 fhMinRegAvePt->SetMarkerColor(2);
298 fhMinRegAvePt->Scale(areafactor);
299 fhMinRegAvePt->DrawCopy("p");
304 TH1F *h7r = new TH1F("hRegionMultMinVsMult", "", 21, -0.5, 20.5);
306 h7r->Divide(fhMinRegSumPtvsMult,fhRegionMultMin,1,1);
308 h7r->SetMarkerStyle(20);
309 h7r->SetMarkerColor(2);
316 fhValidRegion->SetMarkerStyle(20);
317 fhValidRegion->SetMarkerColor(2);
318 fhValidRegion->DrawCopy("p");
322 AliInfo(" Batch mode, not histograms will shown...");
326 AliInfo("End analysis");
331 //____________________________________________________________________
332 void AliAnalysisTaskUE::AnalyseUE()
335 // Look for correlations on the tranverse regions to
336 // the leading charged jet
338 // ------------------------------------------------
339 // Find Leading Jets 1,2,3
340 // (could be skipped if Jets are sort by Pt...)
341 Double_t maxPtJet1 = 0.;
343 Double_t maxPtJet2 = 0.; // jet 2 need for back to back inclusive
345 Double_t maxPtJet3 = 0.; // jet 3 need for back to back exclusive
347 Int_t nJets = fAOD->GetNJets();
348 for( Int_t i=0; i<nJets; ++i ) {
349 AliAODJet* jet = fAOD->GetJet(i);
350 if( jet->Pt() > maxPtJet1 ) {
351 maxPtJet3 = maxPtJet2; index3 = index2;
352 maxPtJet2 = maxPtJet1; index2 = index1;
353 maxPtJet1 = jet->Pt(); index1 = i;
354 } else if( jet->Pt() > maxPtJet2 ) {
355 maxPtJet3 = maxPtJet2; index3 = index2;
356 maxPtJet2 = jet->Pt(); index2 = i;
357 } else if( jet->Pt() > maxPtJet3 ) {
358 maxPtJet3 = jet->Pt(); index3 = i;
363 AliInfo("\nSkipping Event, not jet found...");
366 AliInfo(Form("\nPt Leading Jet = %6.1f eta=%5.1f ", maxPtJet1, fAOD->GetJet(index1)->Eta() ));
368 fhNJets->Fill(nJets);
372 // ----------------------------------------------
373 // Cut events by jets topology
376 // - Jet1 |eta| < fJet1EtaCut
377 // 2 = back to back inclusive
379 // - |Jet1.Phi - Jet2.Phi| > fJet2DeltaPhiCut
380 // - Jet2.Pt/Jet1Pt > fJet2RatioPtCut
381 // 3 = back to back exclusive
383 // - Jet3.Pt < fJet3PtCut
385 Bool_t isInclusive = kFALSE;
387 if( TMath::Abs(fAOD->GetJet(index1)->Eta()) > fJet1EtaCut) {
388 if( fDebug > 1 ) AliInfo("Skipping Event...Jet1 |eta| > fJet1EtaCut");
392 jetVect[0].SetXYZ(fAOD->GetJet(index1)->Px(),
393 fAOD->GetJet(index1)->Py(),
394 fAOD->GetJet(index1)->Pz());
395 // back to back inclusive
396 Bool_t isB2Binclusive = kFALSE;
397 if( fAnaType > 1 && index2 > 0 && isInclusive) {
398 jetVect[1].SetXYZ(fAOD->GetJet(index2)->Px(),
399 fAOD->GetJet(index2)->Py(),
400 fAOD->GetJet(index2)->Pz());
401 if( TMath::Abs(jetVect[0].DeltaPhi(jetVect[1])) < fJet2DeltaPhiCut ||
402 maxPtJet2/maxPtJet1 < fJet2RatioPtCut ) {
403 if( fDebug > 1 ) AliInfo("Skipping Event... |Jet1.Phi - Jet2.Phi| < fJet2DeltaPhiCut");
406 isB2Binclusive = kTRUE;
408 if (isInclusive && !isB2Binclusive && fAnaType>1) return;
409 // back to back exclusive
410 Bool_t isB2Bexclusive = kFALSE;
411 if( fAnaType > 2 && index3 > 0 && isB2Binclusive) {
412 if( fAOD->GetJet(index3)->Pt() > fJet3PtCut ) {
413 if( fDebug > 1 ) AliInfo("Skipping Event... Jet3.Pt > fJet3PtCut ");
416 isB2Bexclusive = kTRUE;
418 if (isB2Binclusive && !isB2Bexclusive && fAnaType>2) return;
420 AliInfo(Form("njets = %d",nJets));
421 fhEleadingPt->Fill( maxPtJet1 );
423 // ----------------------------------------------
424 // Find max and min regions
425 Double_t sumPtRegionPosit = 0.;
426 Double_t sumPtRegionNegat = 0.;
427 Double_t maxPartPtRegion = 0.;
428 Int_t nTrackRegionPosit = 0;
429 Int_t nTrackRegionNegat = 0;
430 static const Double_t k270rad = 270.*TMath::Pi()/180.;
432 Int_t nTracks = fAOD->GetNTracks();
433 for (Int_t ipart=0; ipart<nTracks; ++ipart) {
434 AliAODTrack* part = fAOD->GetTrack( ipart );
436 if ( !part->Charge() ) continue;
437 if ( part->Pt() < fTrackPtCut ) continue;
439 TVector3 partVect(part->Px(), part->Py(), part->Pz());
441 Double_t deltaPhi = jetVect[0].DeltaPhi(partVect)+k270rad;
442 if( deltaPhi > 2.*TMath::Pi() ) deltaPhi-= 2.*TMath::Pi();
443 fhdNdEta_PhiDist->Fill( deltaPhi );
444 fhFullRegPartPtDistVsEt->Fill( part->Pt(), maxPtJet1 );
446 Int_t region = IsTrackInsideRegion( jetVect, &partVect );
449 if( maxPartPtRegion < part->Pt() ) maxPartPtRegion = part->Pt();
450 sumPtRegionPosit += part->Pt();
452 fhTransRegPartPtDistVsEt->Fill( part->Pt(), maxPtJet1 );
455 if( maxPartPtRegion < part->Pt() ) maxPartPtRegion = part->Pt();
456 sumPtRegionNegat += part->Pt();
458 fhTransRegPartPtDistVsEt->Fill( part->Pt(), maxPtJet1 );
462 //How quantities will be sorted before Fill Min and Max Histogram
463 // 1=Plots will be CDF-like
464 // 2=Plots will be Marchesini-like
466 if (sumPtRegionPosit > sumPtRegionNegat) {
467 FillSumPtRegion( maxPtJet1, sumPtRegionPosit, sumPtRegionNegat );
469 FillSumPtRegion( maxPtJet1, sumPtRegionNegat, sumPtRegionPosit );
471 if (nTrackRegionPosit > nTrackRegionNegat ) {
472 FillMultRegion( maxPtJet1, nTrackRegionPosit, nTrackRegionNegat, sumPtRegionNegat );
474 FillMultRegion( maxPtJet1, nTrackRegionNegat, nTrackRegionPosit, sumPtRegionPosit );
476 } else if (fOrdering==2) {
477 if (sumPtRegionPosit > sumPtRegionNegat) {
478 FillSumPtRegion( maxPtJet1, sumPtRegionPosit, sumPtRegionNegat );
479 FillMultRegion( maxPtJet1, nTrackRegionPosit, nTrackRegionNegat, sumPtRegionNegat );
481 FillSumPtRegion( maxPtJet1, sumPtRegionNegat, sumPtRegionPosit );
482 FillMultRegion( maxPtJet1, nTrackRegionNegat, nTrackRegionPosit, sumPtRegionPosit );
486 Double_t avePosRegion = (nTrackRegionPosit) ? sumPtRegionPosit/nTrackRegionPosit : 0.;
487 Double_t aveNegRegion = (nTrackRegionNegat) ? sumPtRegionNegat/nTrackRegionNegat : 0.;
488 if (avePosRegion > aveNegRegion) {
489 FillAvePartPtRegion( maxPtJet1, avePosRegion, aveNegRegion );
491 FillAvePartPtRegion( maxPtJet1, aveNegRegion, avePosRegion );
494 fhRegionMaxPartPtMaxVsEt->Fill(maxPtJet1, maxPartPtRegion );
496 // Compute pedestal like magnitude
497 fhRegionDiffSumPtVsEt->Fill(maxPtJet1, TMath::Abs(sumPtRegionPosit-sumPtRegionNegat)/2.0);
498 fhRegionAveSumPtVsEt->Fill(maxPtJet1, (sumPtRegionPosit+sumPtRegionNegat)/2.0);
503 //____________________________________________________________________
504 void AliAnalysisTaskUE::FillSumPtRegion( Double_t leadingE, Double_t ptMax, Double_t ptMin )
506 // Fill sumPt of control regions
509 fhRegionSumPtMaxVsEt->Fill( leadingE, ptMax );
511 fhRegionSumPtMinVsEt->Fill( leadingE, ptMin );
512 // MAke distributions for UE comparison with MB data
513 fhMinRegSumPt->Fill(ptMin);
516 //____________________________________________________________________
517 void AliAnalysisTaskUE::FillAvePartPtRegion( Double_t leadingE, Double_t ptMax, Double_t ptMin )
519 // Fill average particle Pt of control regions
522 fhRegionAvePartPtMaxVsEt->Fill( leadingE, ptMax );
524 fhRegionAvePartPtMinVsEt->Fill( leadingE, ptMin );
525 // MAke distributions for UE comparison with MB data
526 fhMinRegAvePt->Fill(ptMin);
529 //____________________________________________________________________
530 void AliAnalysisTaskUE::FillMultRegion( Double_t leadingE, Double_t nTrackPtmax, Double_t nTrackPtmin, Double_t ptMin )
532 // Fill Nch multiplicity of control regions
535 fhRegionMultMaxVsEt->Fill( leadingE, nTrackPtmax );
536 fhRegionMultMax->Fill( nTrackPtmax );
538 fhRegionMultMinVsEt->Fill( leadingE, nTrackPtmin );
539 fhRegionMultMin->Fill( nTrackPtmin );
540 // MAke distributions for UE comparison with MB data
541 fhMinRegSumPtvsMult->Fill(nTrackPtmin,ptMin);
545 //____________________________________________________________________
546 Int_t AliAnalysisTaskUE::IsTrackInsideRegion(TVector3 *jetVect, TVector3 *partVect)
548 // return de region in delta phi
549 // -1 negative delta phi
550 // 1 positive delta phi
552 static const Double_t k60rad = 60.*TMath::Pi()/180.;
553 static const Double_t k120rad = 120.*TMath::Pi()/180.;
556 if( fRegionType == 1 ) {
557 if( TMath::Abs(partVect->Eta()) > fTrackEtaCut ) return 0;
558 // transverse regions
559 if (jetVect[0].DeltaPhi(*partVect) < -k60rad && jetVect[0].DeltaPhi(*partVect) > -k120rad ) region = -1;
560 if (jetVect[0].DeltaPhi(*partVect) > k60rad && jetVect[0].DeltaPhi(*partVect) < k120rad ) region = 1;
562 } else if( fRegionType == 2 ) {
564 Double_t deltaR = 0.;
566 TVector3 positVect,negatVect;
567 positVect.SetMagThetaPhi(1, 2.*atan(exp(-jetVect[0].Eta())), jetVect[0].Phi()+TMath::PiOver2());
568 negatVect.SetMagThetaPhi(1, 2.*atan(exp(-jetVect[0].Eta())), jetVect[0].Phi()-TMath::PiOver2());
570 if (TMath::Abs(positVect.DeltaPhi(*partVect)) < fConeRadius ) {
572 deltaR = positVect.DrEtaPhi(*partVect);
573 } else if (TMath::Abs(negatVect.DeltaPhi(*partVect)) < fConeRadius) {
575 deltaR = negatVect.DrEtaPhi(*partVect);
578 if (deltaR > fConeRadius) region = 0;
581 AliError("Unknow region type");
583 // For debug (to be removed)
584 //if( region != 0 ) fhValidRegion->Fill( partVect->Eta()-jetVect[0].Eta(), jetVect[0].DeltaPhi(*partVect) );
589 //____________________________________________________________________
590 void AliAnalysisTaskUE::CreateHistos()
592 fListOfHistos = new TList();
595 fhNJets = new TH1F("fhNJets", "n Jet", 10, 0, 10);
596 fhNJets->SetXTitle("# of jets");
599 fListOfHistos->Add( fhNJets ); // At(0)
601 fhEleadingPt = new TH1F("hEleadingPt", "Leading Jet P_{T}", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist);
602 fhEleadingPt->SetXTitle("P_{T} (GeV/c)");
603 fhEleadingPt->SetYTitle("dN/dP_{T}");
604 fhEleadingPt->Sumw2();
605 fListOfHistos->Add( fhEleadingPt ); // At(1)
607 fhMinRegPtDist = new TH1F("hMinRegPtDist", "P_{T} distribution in Min zone", 50,0.,20.);
608 fhMinRegPtDist->SetXTitle("P_{T} (GeV/c)");
609 fhMinRegPtDist->SetYTitle("dN/dP_{T}");
610 fhMinRegPtDist->Sumw2();
611 fListOfHistos->Add( fhMinRegPtDist ); // At(2)
613 fhRegionMultMin = new TH1F("hRegionMultMin", "N_{ch}^{90, min}", 21, -0.5, 20.5);
614 fhRegionMultMin->SetXTitle("N_{ch tracks}");
615 fhRegionMultMin->Sumw2();
616 fListOfHistos->Add( fhRegionMultMin ); // At(3)
618 fhMinRegAvePt = new TH1F("hMinRegAvePt", "#LTp_{T}#GT", 50, 0., 20.);
619 fhMinRegAvePt->SetXTitle("P_{T} (GeV/c)");
620 fhMinRegAvePt->Sumw2();
621 fListOfHistos->Add( fhMinRegAvePt ); // At(4)
623 fhMinRegSumPt = new TH1F("hMinRegSumPt", "#Sigma p_{T} ", 50, 0., 20.);
624 fhMinRegSumPt->SetYTitle("Ed^{3}N_{tracks}/dp^{3} (c^{3}/GeV^{2})");
625 fhMinRegSumPt->SetXTitle("#Sigma p_{T} (GeV/c)");
626 fhMinRegSumPt->Sumw2();
627 fListOfHistos->Add( fhMinRegSumPt ); // At(5)
629 fhMinRegMaxPtPart = new TH1F("hMinRegMaxPtPart", "max(p_{T})|_{event} ", 50, 0., 20.);
630 fhMinRegMaxPtPart->SetYTitle("Ed^{3}N_{tracks}/dp^{3} (c^{3}/GeV^{2})");
631 fhMinRegMaxPtPart->SetXTitle("p_{T} (GeV/c)");
632 fhMinRegMaxPtPart->Sumw2();
633 fListOfHistos->Add( fhMinRegMaxPtPart ); // At(6)
635 fhMinRegSumPtvsMult = new TH1F("hMinRegSumPtvsMult", "#Sigma p_{T} vs. Multiplicity ", 21, -0.5, 20.5);
636 fhMinRegSumPtvsMult->SetYTitle("#Sigma p_{T} (GeV/c)");
637 fhMinRegSumPtvsMult->SetXTitle("N_{charge}");
638 fhMinRegSumPtvsMult->Sumw2();
639 fListOfHistos->Add( fhMinRegSumPtvsMult ); // At(7);
641 fhdNdEta_PhiDist = new TH1F("hdNdEta_PhiDist", "Charge particle density |#eta|< 1 vs #Delta#phi", 120, 0., 2.*TMath::Pi());
642 fhdNdEta_PhiDist->SetXTitle("#Delta#phi");
643 fhdNdEta_PhiDist->SetYTitle("dN_{ch}/d#etad#phi");
644 fhdNdEta_PhiDist->Sumw2();
645 fListOfHistos->Add( fhdNdEta_PhiDist ); // At(8)
647 // Can be use to get part pt distribution for differente Jet Pt bins
648 fhFullRegPartPtDistVsEt = new TH2F("hFullRegPartPtDistVsEt", "dN/dP_{T} |#eta|<1 vs Leading Jet P_{T}",
649 50,0.,50., fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist);
650 fhFullRegPartPtDistVsEt->SetYTitle("Leading Jet P_{T}");
651 fhFullRegPartPtDistVsEt->SetXTitle("p_{T}");
652 fhFullRegPartPtDistVsEt->Sumw2();
653 fListOfHistos->Add( fhFullRegPartPtDistVsEt ); // At(9)
655 // Can be use to get part pt distribution for differente Jet Pt bins
656 fhTransRegPartPtDistVsEt = new TH2F("hTransRegPartPtDistVsEt", "dN/dP_{T} in tranvese regions |#eta|<1 vs Leading Jet P_{T}",
657 50,0.,50., fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist);
658 fhTransRegPartPtDistVsEt->SetYTitle("Leading Jet P_{T}");
659 fhTransRegPartPtDistVsEt->SetXTitle("p_{T}");
660 fhTransRegPartPtDistVsEt->Sumw2();
661 fListOfHistos->Add( fhTransRegPartPtDistVsEt ); // At(10)
664 fhRegionSumPtMaxVsEt = new TH1F("hRegionSumPtMaxVsEt", "P_{T}^{90, max} vs Leading Jet P_{T}", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist);
665 fhRegionSumPtMaxVsEt->SetXTitle("P_{T} (GeV/c)");
666 fhRegionSumPtMaxVsEt->Sumw2();
667 fListOfHistos->Add( fhRegionSumPtMaxVsEt ); // At(11)
669 fhRegionSumPtMinVsEt = new TH1F("hRegionSumPtMinVsEt", "P_{T}^{90, min} vs Leading Jet P_{T}", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist);
670 fhRegionSumPtMinVsEt->SetXTitle("P_{T} (GeV/c)");
671 fhRegionSumPtMinVsEt->Sumw2();
672 fListOfHistos->Add( fhRegionSumPtMinVsEt ); // At(12)
674 fhRegionMultMax = new TH1I("hRegionMultMax", "N_{ch}^{90, max}", 21, -0.5, 20.5);
675 fhRegionMultMax->SetXTitle("N_{ch tracks}");
676 fhRegionMultMax->Sumw2();
677 fListOfHistos->Add( fhRegionMultMax ); // At(13)
679 fhRegionMultMaxVsEt = new TH1F("hRegionMultMaxVsEt", "N_{ch}^{90, max} vs Leading Jet P_{T}", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist);
680 fhRegionMultMaxVsEt->SetXTitle("E (GeV hRegionAveSumPtVsEt/c)");
681 fhRegionMultMaxVsEt->Sumw2();
682 fListOfHistos->Add( fhRegionMultMaxVsEt ); // At(14)
684 fhRegionMultMinVsEt = new TH1F("hRegionMultMinVsEt", "N_{ch}^{90, min} vs Leading Jet P_{T}", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist);
685 fhRegionMultMinVsEt->SetXTitle("E (GeV/c)");
686 fhRegionMultMinVsEt->Sumw2();
687 fListOfHistos->Add( fhRegionMultMinVsEt ); // At(15)
689 fhRegionAveSumPtVsEt = new TH1F("hRegionAveSumPtVsEt", "(P_{T}^{90, max} + P_{T}^{90, min})/2 vs Leading Jet P_{T}", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist);
690 fhRegionAveSumPtVsEt->SetXTitle("P_{T} (GeV/c)");
691 fhRegionAveSumPtVsEt->Sumw2();
692 fListOfHistos->Add( fhRegionAveSumPtVsEt ); // At(16)
694 fhRegionDiffSumPtVsEt= new TH1F("hRegionPtDiffVsEt", "(P_{T}^{90, max} - P_{T}^{90, min}) vs Leading Jet P_{T}", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist);
695 fhRegionDiffSumPtVsEt->SetXTitle("P_{T} (GeV/c)");
696 fhRegionDiffSumPtVsEt->Sumw2();
697 fListOfHistos->Add( fhRegionDiffSumPtVsEt ); // At(17)
699 fhRegionAvePartPtMaxVsEt = new TH1F("hRegionAvePartPtMaxVsEt", "#LTp_{T}#GT^{90, max} vs Leading Jet P_{T}", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist);
700 fhRegionAvePartPtMaxVsEt->SetXTitle("P_{T} (GeV/c)");
701 fhRegionAvePartPtMaxVsEt->Sumw2();
702 fListOfHistos->Add( fhRegionAvePartPtMaxVsEt ); // At(18)
704 fhRegionAvePartPtMinVsEt = new TH1F("hRegionAvePartPtMinVsEt", "#LTp_{T}#GT^{90, min} vs Leading Jet P_{T}", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist);
705 fhRegionAvePartPtMinVsEt->SetXTitle("P_{T} (GeV/c)");
706 fhRegionAvePartPtMinVsEt->Sumw2();
707 fListOfHistos->Add( fhRegionAvePartPtMinVsEt ); // At(19)
709 fhRegionMaxPartPtMaxVsEt = new TH1F("hRegionMaxPartPtMaxVsEt", "max(p_{T})^{90} vs Leading Jet P_{T}", fBinsPtInHist, fMinJetPtInHist, fMaxJetPtInHist);
710 fhRegionMaxPartPtMaxVsEt->SetXTitle("P_{T} (GeV/c)");
711 fhRegionMaxPartPtMaxVsEt->Sumw2();
712 fListOfHistos->Add( fhRegionMaxPartPtMaxVsEt ); // At(20)
715 // For debug region selection
716 fhValidRegion = new TH2F("hValidRegion", "dN/d#eta/d#phi",
717 20, -2.,2., 62, -TMath::Pi(), TMath::Pi());
718 fhValidRegion->SetYTitle("#Delta#phi");
719 fhValidRegion->Sumw2();
720 fListOfHistos->Add( fhValidRegion ); // At(15)