2 // ******************************************
3 // This task computes several jet observables like
4 // the fraction of energy in inner and outer coronnas,
5 // jet-track correlations,triggered jet shapes and
6 // correlation strength distribution of particles inside jets.
7 // Author: lcunquei@cern.ch
8 // *******************************************
11 /**************************************************************************
12 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
14 * Author: The ALICE Off-line Project. *
15 * Contributors are mentioned in the code where appropriate. *
17 * Permission to use, copy, modify and distribute this software and its *
18 * documentation strictly for non-commercial purposes is hereby granted *
19 * without fee, provided that the above copyright notice appears in all *
20 * copies and that both the copyright notice and this permission notice *
21 * appear in the supporting documentation. The authors make no claims *
22 * about the suitability of this software for any purpose. It is *
23 * provided "as is" without express or implied warranty. *
24 **************************************************************************/
33 #include "THnSparse.h"
38 #include "AliAnalysisTask.h"
39 #include "AliAnalysisManager.h"
41 #include "AliVEvent.h"
42 #include "AliESDEvent.h"
43 #include "AliESDInputHandler.h"
44 #include "AliCentrality.h"
45 #include "AliAnalysisHelperJetTasks.h"
46 #include "AliInputEventHandler.h"
47 #include "AliAODJetEventBackground.h"
48 #include "AliAODMCParticle.h"
49 #include "AliAnalysisTaskFastEmbedding.h"
50 #include "AliAODEvent.h"
51 #include "AliAODHandler.h"
52 #include "AliAODJet.h"
54 #include "AliAnalysisTaskJetCore.h"
59 ClassImp(AliAnalysisTaskJetCore)
61 AliAnalysisTaskJetCore::AliAnalysisTaskJetCore() :
67 fBackgroundBranch(""),
70 fOfflineTrgMask(AliVEvent::kAny),
86 fApplySharedClusterCut(0),
87 fAngStructCloseTracks(0),
102 fTrackTypeRec(kTrackUndef),
115 fJetTriggerExcludeMask(AliAODJet::kHighTrackPtTriggered),
116 fJetPtFractionMin(0.5),
120 fRunAnaAzimuthalCorrelation(kFALSE),
125 fHistEvtSelection(0x0),
128 fh2JetCoreMethod1C10(0x0),
129 fh2JetCoreMethod2C10(0x0),
130 fh2JetCoreMethod1C20(0x0),
131 fh2JetCoreMethod2C20(0x0),
132 fh2JetCoreMethod1C30(0x0),
133 fh2JetCoreMethod2C30(0x0),
134 fh2JetCoreMethod1C60(0x0),
135 fh2JetCoreMethod2C60(0x0),
136 fh3JetTrackC3060(0x0),
138 fh2AngStructpt1C10(0x0),
139 fh2AngStructpt2C10(0x0),
140 fh2AngStructpt3C10(0x0),
141 fh2AngStructpt4C10(0x0),
142 fh2AngStructpt1C20(0x0),
143 fh2AngStructpt2C20(0x0),
144 fh2AngStructpt3C20(0x0),
145 fh2AngStructpt4C20(0x0),
146 fh2AngStructpt1C30(0x0),
147 fh2AngStructpt2C30(0x0),
148 fh2AngStructpt3C30(0x0),
149 fh2AngStructpt4C30(0x0),
150 fh2AngStructpt1C60(0x0),
151 fh2AngStructpt2C60(0x0),
152 fh2AngStructpt3C60(0x0),
153 fh2AngStructpt4C60(0x0),
157 fh2Ntriggers2C10(0x0),
158 fh2Ntriggers2C20(0x0),
160 fh3JetDensityA4(0x0),
171 // default Constructor
175 for(Int_t i=0; i<10; i++) {
176 for(Int_t j=0; j<6; j++) {
185 fJetBranchName[0] = "";
186 fJetBranchName[1] = "";
188 fListJets[0] = new TList;
189 fListJets[1] = new TList;
192 AliAnalysisTaskJetCore::AliAnalysisTaskJetCore(const char *name) :
193 AliAnalysisTaskSE(name),
198 fBackgroundBranch(""),
201 fOfflineTrgMask(AliVEvent::kAny),
208 fFilterMaskBestPt(0),
215 fNInputTracksMax(-1),
217 fApplySharedClusterCut(0),
218 fAngStructCloseTracks(0),
233 fTrackTypeRec(kTrackUndef),
246 fJetTriggerExcludeMask(AliAODJet::kHighTrackPtTriggered),
247 fJetPtFractionMin(0.5),
251 fRunAnaAzimuthalCorrelation(kFALSE),
256 fHistEvtSelection(0x0),
259 fh2JetCoreMethod1C10(0x0),
260 fh2JetCoreMethod2C10(0x0),
261 fh2JetCoreMethod1C20(0x0),
262 fh2JetCoreMethod2C20(0x0),
263 fh2JetCoreMethod1C30(0x0),
264 fh2JetCoreMethod2C30(0x0),
265 fh2JetCoreMethod1C60(0x0),
266 fh2JetCoreMethod2C60(0x0),
267 fh3JetTrackC3060(0x0),
269 fh2AngStructpt1C10(0x0),
270 fh2AngStructpt2C10(0x0),
271 fh2AngStructpt3C10(0x0),
272 fh2AngStructpt4C10(0x0),
273 fh2AngStructpt1C20(0x0),
274 fh2AngStructpt2C20(0x0),
275 fh2AngStructpt3C20(0x0),
276 fh2AngStructpt4C20(0x0),
277 fh2AngStructpt1C30(0x0),
278 fh2AngStructpt2C30(0x0),
279 fh2AngStructpt3C30(0x0),
280 fh2AngStructpt4C30(0x0),
281 fh2AngStructpt1C60(0x0),
282 fh2AngStructpt2C60(0x0),
283 fh2AngStructpt3C60(0x0),
284 fh2AngStructpt4C60(0x0),
288 fh2Ntriggers2C10(0x0),
289 fh2Ntriggers2C20(0x0),
291 fh3JetDensityA4(0x0),
305 for(Int_t i=0; i<10; i++) {
306 for(Int_t j=0; j<6; j++) {
313 fJetBranchName[0] = "";
314 fJetBranchName[1] = "";
316 fListJets[0] = new TList;
317 fListJets[1] = new TList;
319 DefineOutput(1, TList::Class());
322 AliAnalysisTaskJetCore::~AliAnalysisTaskJetCore()
328 void AliAnalysisTaskJetCore::SetBranchNames(const TString &branch1, const TString &branch2)
330 fJetBranchName[0] = branch1;
331 fJetBranchName[1] = branch2;
334 void AliAnalysisTaskJetCore::Init()
337 // check for jet branches
338 if(!strlen(fJetBranchName[0].Data()) || !strlen(fJetBranchName[1].Data())){
339 AliError("Jet branch name not set.");
344 void AliAnalysisTaskJetCore::UserCreateOutputObjects()
349 if(!fOutputList) fOutputList = new TList;
350 fOutputList->SetOwner(kTRUE);
352 Bool_t oldStatus = TH1::AddDirectoryStatus();
353 TH1::AddDirectory(kFALSE);
357 fRandom = new TRandom3(0);
362 fHistEvtSelection = new TH1I("fHistEvtSelection", "event selection", 6, -0.5, 5.5);
363 fHistEvtSelection->GetXaxis()->SetBinLabel(1,"ACCEPTED");
364 fHistEvtSelection->GetXaxis()->SetBinLabel(2,"events IN");
365 fHistEvtSelection->GetXaxis()->SetBinLabel(3,"event selection (rejected)");
366 fHistEvtSelection->GetXaxis()->SetBinLabel(4,"vertex cut (rejected)");
367 fHistEvtSelection->GetXaxis()->SetBinLabel(5,"centrality (rejected)");
368 fHistEvtSelection->GetXaxis()->SetBinLabel(6,"multiplicity (rejected)");
370 UInt_t entries = 0; // bit coded, see GetDimParams() below
371 entries = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 |1<<7;
372 fhnDeltaR = NewTHnSparseF("fhnDeltaR", entries);
374 //change binning in pTtrack
375 Double_t *xPt3 = new Double_t[10];
377 for(int i = 1; i<=9;i++){
378 if(xPt3[i-1]<2)xPt3[i] = xPt3[i-1] + 0.4; // 1 - 5
379 else if(xPt3[i-1]<11)xPt3[i] = xPt3[i-1] + 3; // 5 - 12
380 else xPt3[i] = xPt3[i-1] + 150.; // 18
382 fhnDeltaR->SetBinEdges(2,xPt3);
385 //change binning in HTI
386 Double_t *xPt4 = new Double_t[14];
388 for(int i = 1; i<=13;i++){
389 if(xPt4[i-1]<10)xPt4[i] = xPt4[i-1] + 1; // 1 - 10
390 else if(xPt4[i-1]<20)xPt4[i] = xPt4[i-1] + 5; // 10 - 12
391 else xPt4[i] = xPt4[i-1] + 30.; // 13
393 fhnDeltaR->SetBinEdges(6,xPt4);
403 UInt_t cifras = 0; // bit coded, see GetDimParams() below
404 cifras = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<7;
405 fhnMixedEvents = NewTHnSparseF("fhnMixedEvents", cifras);}
408 fh2JetCoreMethod1C10 = new TH2F("JetCoreMethod1C10","",150, 0., 150.,100, 0., 1.5);
409 fh2JetCoreMethod2C10 = new TH2F("JetCoreMethod2C10","",150, 0., 150.,100, 0., 1.5);
410 fh2JetCoreMethod1C20 = new TH2F("JetCoreMethod1C20","",150, 0., 150.,100, 0., 1.5);
411 fh2JetCoreMethod2C20 = new TH2F("JetCoreMethod2C20","",150, 0., 150.,100, 0., 1.5);
412 fh2JetCoreMethod1C30 = new TH2F("JetCoreMethod1C30","",150, 0., 150.,100, 0., 1.5);
413 fh2JetCoreMethod2C30 = new TH2F("JetCoreMethod2C30","",150, 0., 150.,100, 0., 1.5);
414 fh2JetCoreMethod1C60 = new TH2F("JetCoreMethod1C60","",150, 0., 150.,100, 0., 1.5);
415 fh2JetCoreMethod2C60 = new TH2F("JetCoreMethod2C60","",150, 0., 150.,100, 0., 1.5);}
417 fh3JetTrackC3060=new TH3F("JetTrackC3060","",50,0,50,150,0.,150.,35,0.,3.5);
418 fh3JetTrackC20=new TH3F("JetTrackC20","",50,0,50,150,0.,150.,35,0.,3.5);
419 if(fAngStructCloseTracks>0){
420 fh2AngStructpt1C10 = new TH2F("Ang struct pt1 C10","",15,0.,1.5,150,0.,10.);
421 fh2AngStructpt2C10 = new TH2F("Ang struct pt2 C10","",15,0.,1.5,150,0.,10.);
422 fh2AngStructpt3C10 = new TH2F("Ang struct pt3 C10","",15,0.,1.5,150,0.,10.);
423 fh2AngStructpt4C10 = new TH2F("Ang struct pt4 C10","",15,0.,1.5,150,0.,10.);
424 fh2AngStructpt1C20 = new TH2F("Ang struct pt1 C20","",15,0.,1.5,150,0.,10.);
425 fh2AngStructpt2C20 = new TH2F("Ang struct pt2 C20","",15,0.,1.5,150,0.,10.);
426 fh2AngStructpt3C20 = new TH2F("Ang struct pt3 C20","",15,0.,1.5,150,0.,10.);
427 fh2AngStructpt4C20 = new TH2F("Ang struct pt4 C20","",15,0.,1.5,150,0.,10.);
428 fh2AngStructpt1C30 = new TH2F("Ang struct pt1 C30","",15,0.,1.5,150,0.,10.);
429 fh2AngStructpt2C30 = new TH2F("Ang struct pt2 C30","",15,0.,1.5,150,0.,10.);
430 fh2AngStructpt3C30 = new TH2F("Ang struct pt3 C30","",15,0.,1.5,150,0.,10.);
431 fh2AngStructpt4C30 = new TH2F("Ang struct pt4 C30","",15,0.,1.5,150,0.,10.);
432 fh2AngStructpt1C60 = new TH2F("Ang struct pt1 C60","",15,0.,1.5,150,0.,10.);
433 fh2AngStructpt2C60 = new TH2F("Ang struct pt2 C60","",15,0.,1.5,150,0.,10.);
434 fh2AngStructpt3C60 = new TH2F("Ang struct pt3 C60","",15,0.,1.5,150,0.,10.);
435 fh2AngStructpt4C60 = new TH2F("Ang struct pt4 C60","",15,0.,1.5,150,0.,10.); }
438 fh1TrigRef=new TH1D("Trig Ref","",10,0.,10);
439 fh1TrigSig=new TH1D("Trig Sig","",10,0.,10);
440 fh2Ntriggers=new TH2F("# of triggers","",100,0.,100.,50,0.,50.);
441 fh2Ntriggers2C10=new TH2F("# of triggers2C10","",50,0.,50.,50,0.,50.);
442 fh2Ntriggers2C20=new TH2F("# of triggers2C20","",50,0.,50.,50,0.,50.);
443 fh3JetDensity=new TH3F("Jet density vs mutliplicity A>0.07","",100,0.,4000.,100,0.,5.,25,0.,50.);
444 fh3JetDensityA4=new TH3F("Jet density vs multiplicity A>0.4","",100,0.,4000.,100,0.,5.,25,0.,50.);
445 fh2RPJetsC10=new TH2F("RPJetC10","",35,0.,3.5,100,0.,100.);
446 fh2RPJetsC20=new TH2F("RPJetC20","",35,0.,3.5,100,0.,100.);
447 fh2RPTC10=new TH2F("RPTriggerC10","",35,0.,3.5,50,0.,50.);
448 fh2RPTC20=new TH2F("RPTriggerC20","",35,0.,3.5,50,0.,50.);
453 fOutputList->Add(fHistEvtSelection);
455 fOutputList->Add(fhnDeltaR);
457 fOutputList->Add(fhnMixedEvents);
463 fOutputList->Add(fh2JetCoreMethod1C10);
464 fOutputList->Add(fh2JetCoreMethod2C10);
465 fOutputList->Add(fh2JetCoreMethod1C20);
466 fOutputList->Add(fh2JetCoreMethod2C20);
467 fOutputList->Add(fh2JetCoreMethod1C30);
468 fOutputList->Add(fh2JetCoreMethod2C30);
469 fOutputList->Add(fh2JetCoreMethod1C60);
470 fOutputList->Add(fh2JetCoreMethod2C60);}
472 fOutputList->Add(fh3JetTrackC3060);
473 fOutputList->Add(fh3JetTrackC20);
479 if(fAngStructCloseTracks>0){
480 fOutputList->Add(fh2AngStructpt1C10);
481 fOutputList->Add(fh2AngStructpt2C10);
482 fOutputList->Add(fh2AngStructpt3C10);
483 fOutputList->Add(fh2AngStructpt4C10);
484 fOutputList->Add(fh2AngStructpt1C20);
485 fOutputList->Add(fh2AngStructpt2C20);
486 fOutputList->Add(fh2AngStructpt3C20);
487 fOutputList->Add(fh2AngStructpt4C20);
488 fOutputList->Add(fh2AngStructpt1C30);
489 fOutputList->Add(fh2AngStructpt2C30);
490 fOutputList->Add(fh2AngStructpt3C30);
491 fOutputList->Add(fh2AngStructpt4C30);
492 fOutputList->Add(fh2AngStructpt1C60);
493 fOutputList->Add(fh2AngStructpt2C60);
494 fOutputList->Add(fh2AngStructpt3C60);
495 fOutputList->Add(fh2AngStructpt4C60);}
500 fOutputList->Add(fh1TrigRef);
501 fOutputList->Add(fh1TrigSig);
502 fOutputList->Add(fh2Ntriggers);
503 fOutputList->Add(fh2Ntriggers2C10);
504 fOutputList->Add(fh2Ntriggers2C20);
505 fOutputList->Add(fh3JetDensity);
506 fOutputList->Add(fh3JetDensityA4);
507 fOutputList->Add(fh2RPJetsC10);
508 fOutputList->Add(fh2RPJetsC20);
509 fOutputList->Add(fh2RPTC10);
510 fOutputList->Add(fh2RPTC20);
512 const Int_t dimSpec = 5;
513 const Int_t nBinsSpec[dimSpec] = {100,6, 140, 50, fNRPBins};
514 const Double_t lowBinSpec[dimSpec] = {0,0,-80, 0, 0};
515 const Double_t hiBinSpec[dimSpec] = {100,1, 200, 50, fNRPBins};
516 fHJetSpec = new THnSparseF("fHJetSpec","Recoil jet spectrum",dimSpec,nBinsSpec,lowBinSpec,hiBinSpec);
518 //change binning in jet area
519 Double_t *xPt6 = new Double_t[7];
527 fHJetSpec->SetBinEdges(1,xPt6);
534 fOutputList->Add(fHJetSpec);
537 if(fRunAnaAzimuthalCorrelation)
539 fhTTPt = new TH2F("fhTTPt","Trigger track p_{T} vs centrality",10,0,100,100,0,100);
540 fOutputList->Add(fhTTPt);
542 const Int_t dimCor = 5;
543 const Int_t nBinsCor[dimCor] = {50, 200, 100, 8, 10};
544 const Double_t lowBinCor[dimCor] = {0, -50, -0.5*TMath::Pi(), 0, 0};
545 const Double_t hiBinCor[dimCor] = {50, 150, 1.5*TMath::Pi(), 0.8, 100};
546 fHJetPhiCorr = new THnSparseF("fHJetPhiCorr","TT p_{T} vs jet p_{T} vs dPhi vs area vs centrality",dimCor,nBinsCor,lowBinCor,hiBinCor);
547 fOutputList->Add(fHJetPhiCorr);
553 // =========== Switch on Sumw2 for all histos ===========
554 for (Int_t i=0; i<fOutputList->GetEntries(); ++i) {
555 TH1 *h1 = dynamic_cast<TH1*>(fOutputList->At(i));
560 THnSparse *hn = dynamic_cast<THnSparse*>(fOutputList->At(i));
565 TH1::AddDirectory(oldStatus);
567 PostData(1, fOutputList);
570 void AliAnalysisTaskJetCore::UserExec(Option_t *)
574 if(!strlen(fJetBranchName[0].Data()) || !strlen(fJetBranchName[1].Data())){
575 AliError("Jet branch name not set.");
579 fESD=dynamic_cast<AliESDEvent*>(InputEvent());
581 AliError("ESD not available");
582 fAODIn = dynamic_cast<AliAODEvent*>(InputEvent());
584 fAODOut = dynamic_cast<AliAODEvent*>(AODEvent());
586 static AliAODEvent* aod = 0;
587 // take all other information from the aod we take the tracks from
589 if(!fESD)aod = fAODIn;
594 if(fNonStdFile.Length()!=0){
595 // case that we have an AOD extension we need can fetch the jets from the extended output
596 AliAODHandler *aodH = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
597 fAODExtension = (aodH?aodH->GetExtension(fNonStdFile.Data()):0);
599 if(fDebug>1)Printf("AODExtension found for %s",fNonStdFile.Data());
603 // -- event selection --
604 fHistEvtSelection->Fill(1); // number of events before event selection
607 AliInputEventHandler* inputHandler = (AliInputEventHandler*)
608 ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
609 std::cout<<inputHandler->IsEventSelected()<<" "<<fOfflineTrgMask<<std::endl;
610 if(!(inputHandler->IsEventSelected() & fOfflineTrgMask)){
611 if(fDebug) Printf(" Trigger Selection: event REJECTED ... ");
612 fHistEvtSelection->Fill(2);
613 PostData(1, fOutputList);
619 if(fDebug) Printf("%s:%d No AOD",(char*)__FILE__,__LINE__);
620 fHistEvtSelection->Fill(3);
621 PostData(1, fOutputList);
623 AliAODVertex* primVtx = aod->GetPrimaryVertex();
626 if(fDebug) Printf("%s:%d No primVtx",(char*)__FILE__,__LINE__);
627 fHistEvtSelection->Fill(3);
628 PostData(1, fOutputList);
632 Int_t nTracksPrim = primVtx->GetNContributors();
633 if ((nTracksPrim < fMinContribVtx) ||
634 (primVtx->GetZ() < fVtxZMin) ||
635 (primVtx->GetZ() > fVtxZMax) ){
636 if(fDebug) Printf("%s:%d primary vertex z = %f: event REJECTED...",(char*)__FILE__,__LINE__,primVtx->GetZ());
637 fHistEvtSelection->Fill(3);
638 PostData(1, fOutputList);
642 // event class selection (from jet helper task)
643 Int_t eventClass = AliAnalysisHelperJetTasks::EventClass();
644 if(fDebug) Printf("Event class %d", eventClass);
645 if (eventClass < fEvtClassMin || eventClass > fEvtClassMax){
646 fHistEvtSelection->Fill(4);
647 PostData(1, fOutputList);
651 // centrality selection
652 AliCentrality *cent = 0x0;
653 Double_t centValue = 0.;
655 if(fESD) {cent = fESD->GetCentrality();
656 if(cent) centValue = cent->GetCentralityPercentile("V0M");}
657 else centValue=aod->GetHeader()->GetCentrality();
659 if(fDebug) printf("centrality: %f\n", centValue);
660 if (centValue < fCentMin || centValue > fCentMax){
661 fHistEvtSelection->Fill(4);
662 PostData(1, fOutputList);
667 fHistEvtSelection->Fill(0);
669 // -- end event selection --
672 AliAODJetEventBackground* externalBackground = 0;
673 if(fAODOut&&!externalBackground&&fBackgroundBranch.Length()){
674 externalBackground = (AliAODJetEventBackground*)(fAODOut->FindListObject(fBackgroundBranch.Data()));
675 if(!externalBackground)Printf("%s:%d Background branch not found %s",(char*)__FILE__,__LINE__,fBackgroundBranch.Data());;
677 if(fAODExtension&&!externalBackground&&fBackgroundBranch.Length()){
678 externalBackground = (AliAODJetEventBackground*)(fAODExtension->GetAOD()->FindListObject(fBackgroundBranch.Data()));
679 if(!externalBackground)Printf("%s:%d Background branch not found %s",(char*)__FILE__,__LINE__,fBackgroundBranch.Data());;
682 if(fAODIn&&!externalBackground&&fBackgroundBranch.Length()){
683 externalBackground = (AliAODJetEventBackground*)(fAODIn->FindListObject(fBackgroundBranch.Data()));
684 if(!externalBackground)Printf("%s:%d Background branch not found %s",(char*)__FILE__,__LINE__,fBackgroundBranch.Data());;
690 if(externalBackground)rho = externalBackground->GetBackground(0);}
692 if(externalBackground)rho = externalBackground->GetBackground(2);}
695 TClonesArray *aodJets[2];
697 if(fAODOut&&!aodJets[0]){
698 aodJets[0] = dynamic_cast<TClonesArray*>(fAODOut->FindListObject(fJetBranchName[0].Data()));
699 aodJets[1] = dynamic_cast<TClonesArray*>(fAODOut->FindListObject(fJetBranchName[1].Data())); }
700 if(fAODExtension && !aodJets[0]){
701 aodJets[0] = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fJetBranchName[0].Data()));
702 aodJets[1] = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fJetBranchName[1].Data())); }
703 if(fAODIn&&!aodJets[0]){
704 aodJets[0] = dynamic_cast<TClonesArray*>(fAODIn->FindListObject(fJetBranchName[0].Data()));
705 aodJets[1] = dynamic_cast<TClonesArray*>(fAODIn->FindListObject(fJetBranchName[1].Data())); }
714 Double_t dice=fRandom->Uniform(0,1);
715 if(dice>fFrac){ minT=fTTLowRef;
717 if(dice<=fFrac){minT=fTTLowSig;
722 if(fHardest==1 || fHardest==2) nT = GetListOfTracks(&ParticleList);
723 if(fHardest==0) nT=SelectTrigger(&ParticleList,minT,maxT,number);
725 PostData(1, fOutputList);
728 if(dice>fFrac) fh1TrigRef->Fill(number);
729 if(dice<=fFrac)fh1TrigSig->Fill(number);
731 for (Int_t iJetType = 0; iJetType < 2; iJetType++) {
732 fListJets[iJetType]->Clear();
733 if (!aodJets[iJetType]) continue;
734 if(fDebug) Printf("%s: %d jets",fJetBranchName[iJetType].Data(),aodJets[iJetType]->GetEntriesFast());
735 for (Int_t iJet = 0; iJet < aodJets[iJetType]->GetEntriesFast(); iJet++) {
736 AliAODJet *jet = dynamic_cast<AliAODJet*>((*aodJets[iJetType])[iJet]);
737 if (jet) fListJets[iJetType]->Add(jet);
739 // ptsub[iJet]=jet->Pt()-rho*jet->EffectiveAreaCharged();}
748 Double_t areasmall=0;
749 Double_t phismall=0.;
755 Int_t trigBBTrack=-1;
756 Int_t trigInTrack=-1;
757 fRPAngle = aod->GetHeader()->GetEventplane();
759 if(fHardest==0 || fHardest==1){
760 AliVParticle *partback = (AliVParticle*)ParticleList.At(nT);
762 PostData(1, fOutputList);
765 if(fSemigoodCorrect){
766 Double_t disthole=RelativePhi(partback->Phi(),fHolePos);
767 if(TMath::Abs(disthole)+fHoleWidth>TMath::Pi()-0.6){
768 PostData(1, fOutputList);
775 for(Int_t tt=0;tt<ParticleList.GetEntries();tt++){
776 if(fHardest==0||fHardest==1){if(tt!=nT) continue;}
777 AliVParticle *partback = (AliVParticle*)ParticleList.At(tt);
778 if(!partback) continue;
779 if(partback->Pt()<8) continue;
781 Double_t accep=2.*TMath::Pi()*1.8;
785 if(fSemigoodCorrect){
786 Double_t disthole=RelativePhi(partback->Phi(),fHolePos);
787 if(TMath::Abs(disthole)+fHoleWidth>TMath::Pi()-0.6) continue;}
791 fh2Ntriggers->Fill(centValue,partback->Pt());
792 Double_t phiBinT = RelativePhi(partback->Phi(),fRPAngle);
793 if(centValue<20.) fh2RPTC20->Fill(TMath::Abs(phiBinT),partback->Pt());
794 if(centValue<10.) fh2RPTC10->Fill(TMath::Abs(phiBinT),partback->Pt());
798 for(Int_t i=0; i<fListJets[0]->GetEntries(); ++i){
799 AliAODJet* jetbig = (AliAODJet*)(fListJets[0]->At(i));
800 etabig = jetbig->Eta();
801 phibig = jetbig->Phi();
802 ptbig = jetbig->Pt();
803 if(ptbig==0) continue;
804 Double_t phiBin = RelativePhi(phibig,fRPAngle);
805 areabig = jetbig->EffectiveAreaCharged();
806 Double_t ptcorr=ptbig-rho*areabig;
807 if((etabig<fJetEtaMin)||(etabig>fJetEtaMax)) continue;
808 if(areabig>=0.07) injet=injet+1;
809 if(areabig>=0.4) injet4=injet4+1;
810 Double_t dphi=RelativePhi(partback->Phi(),phibig);
813 Double_t etadif= partback->Eta()-etabig;
814 if(TMath::Abs(etadif)<=0.5){
816 if(centValue<20.) fh3JetTrackC20->Fill(partback->Pt(),ptcorr,TMath::Abs(dphi));
817 if(centValue>30. && centValue<60.) fh3JetTrackC3060->Fill(partback->Pt(),ptcorr,TMath::Abs(dphi));}}
819 if(centValue<20.) fh3JetTrackC20->Fill(partback->Pt(),ptcorr,TMath::Abs(dphi));
820 if(centValue>30. && centValue<60.) fh3JetTrackC3060->Fill(partback->Pt(),ptcorr,TMath::Abs(dphi));}
823 if(fFlagJetHadron==0){
824 if(fFlagPhiBkg==1) if((TMath::Abs(dphi)<TMath::Pi()/2.-0.1)||(TMath::Abs(dphi)>TMath::Pi()/2.+0.1)) continue;
825 if(fFlagPhiBkg==0) if(TMath::Abs(dphi)<TMath::Pi()-0.6) continue;
826 if(fFlagPhiBkg==2) if(TMath::Abs(dphi)<TMath::Pi()-0.7) continue;
827 if(fFlagPhiBkg==3) if(TMath::Abs(dphi)<TMath::Pi()-0.5) continue;}
829 if(fFlagJetHadron!=0) if(TMath::Abs(dphi)>0.4) continue;
832 if(centValue<10.) fh2RPJetsC10->Fill(TMath::Abs(phiBin), ptcorr);
833 if(centValue<20.) fh2RPJetsC20->Fill(TMath::Abs(phiBin), ptcorr);
834 Double_t dismin=100.;
839 Float_t phitt=partback->Phi();
840 if(phitt<0)phitt+=TMath::Pi()*2.;
841 Int_t phiBintt = GetPhiBin(phitt-fRPAngle);
843 Double_t fillspec[] = {centValue,jetbig->EffectiveAreaCharged(),ptcorr,partback->Pt(),phiBintt};
844 fHJetSpec->Fill(fillspec);
848 if(ptcorr<=0) continue;
850 AliAODTrack* leadtrack=0;
853 if(fFlagJetHadron==0){
854 TRefArray *genTrackList = jetbig->GetRefTracks();
855 Int_t nTracksGenJet = genTrackList->GetEntriesFast();
856 AliAODTrack* genTrack;
857 for(Int_t ir=0; ir<nTracksGenJet; ++ir){
858 genTrack = (AliAODTrack*)(genTrackList->At(ir));
859 if(genTrack->Pt()>ppt){ppt=genTrack->Pt();
861 leadtrack=(AliAODTrack*)(genTrackList->At(ippt));
862 if(!leadtrack) continue;
867 AliVParticle* leadtrackb=0;
868 if(fFlagJetHadron!=0){
869 Int_t nTb = GetHardestTrackBackToJet(jetbig);
870 leadtrackb = (AliVParticle*)ParticleList.At(nTb);
871 if(!leadtrackb) continue;
878 //store one trigger info
887 for(Int_t j=0; j<fListJets[1]->GetEntries(); ++j){
888 AliAODJet* jetsmall = (AliAODJet*)(fListJets[1]->At(j));
889 etasmall = jetsmall->Eta();
890 phismall = jetsmall->Phi();
891 ptsmall = jetsmall->Pt();
892 areasmall = jetsmall->EffectiveAreaCharged();
893 Double_t tmpDeltaR=(phismall-phibig)*(phismall-phibig)+(etasmall-etabig)*(etasmall-etabig);
894 tmpDeltaR=TMath::Sqrt(tmpDeltaR);
895 //Fraction in the jet core
896 if((ptsmall>ptmax)&&(tmpDeltaR<=fRadioFrac)){ptmax=ptsmall;
898 if(tmpDeltaR<=dismin){ dismin=tmpDeltaR;
899 index1=j;}} //en of loop over R=0.2 jets
900 //method1:most concentric jet=core
901 if(dismin<fMinDist){ AliAODJet* jetmethod1 = (AliAODJet*)(fListJets[1]->At(index1));
902 if(centValue<10) fh2JetCoreMethod1C10->Fill(ptcorr,jetmethod1->Pt()/ptbig);
903 if((centValue>20)&&(centValue<40)) fh2JetCoreMethod1C20->Fill(ptcorr,jetmethod1->Pt()/ptbig);
904 if((centValue>30)&&(centValue<60)) fh2JetCoreMethod1C30->Fill(ptcorr,jetmethod1->Pt()/ptbig);
905 if(centValue>60) fh2JetCoreMethod1C60->Fill(ptcorr,jetmethod1->Pt()/ptbig); }
906 //method2:hardest contained jet=core
908 AliAODJet* jetmethod2 = (AliAODJet*)(fListJets[1]->At(index2));
909 if(centValue<10) fh2JetCoreMethod2C10->Fill(ptcorr,jetmethod2->Pt()/ptbig);
910 if((centValue>20)&&(centValue<40)) fh2JetCoreMethod2C20->Fill(ptcorr,jetmethod2->Pt()/ptbig);
911 if((centValue>30)&&(centValue<60)) fh2JetCoreMethod2C30->Fill(ptcorr,jetmethod2->Pt()/ptbig);
912 if(centValue>60) fh2JetCoreMethod2C60->Fill(ptcorr,jetmethod2->Pt()/ptbig); }}
913 if(centValue<10&&leadtrack) fh2Ntriggers2C10->Fill(leadtrack->Pt(),partback->Pt());
914 if(centValue<20&&leadtrack) fh2Ntriggers2C20->Fill(leadtrack->Pt(),partback->Pt());
915 if(fDoEventMixing==0 && fFlagOnlyRecoil==0){
916 for(int it = 0;it<ParticleList.GetEntries();++it){
917 AliVParticle *part = (AliVParticle*)ParticleList.At(it);
918 Double_t deltaR = jetbig->DeltaR(part);
919 Double_t deltaEta = etabig-part->Eta();
921 Double_t deltaPhi=phibig-part->Phi();
922 if(deltaPhi<-0.5*TMath::Pi()) deltaPhi+=2.*TMath::Pi();
923 if(deltaPhi>3./2.*TMath::Pi()) deltaPhi-=2.*TMath::Pi();
925 if(fFlagJetHadron==0) pTcont=leadtrack->Pt();
926 if(fFlagJetHadron!=0) pTcont=leadtrackb->Pt();
927 Double_t jetEntries[8] = {centValue,ptcorr,part->Pt(),deltaR,deltaEta,deltaPhi,pTcont,partback->Pt()};
928 fhnDeltaR->Fill(jetEntries);}
934 //end of track loop, we only do it if EM is switched off
945 if(injet>0) fh3JetDensity->Fill(ParticleList.GetEntries(),injet/accep,partback->Pt());
946 if(injet4>0)fh3JetDensityA4->Fill(ParticleList.GetEntries(),injet4/accep,partback->Pt());
952 if(fDoEventMixing>0){
953 //check before if the trigger exists
954 // fTrigBuffer[i][0] = zvtx
955 // fTrigBuffer[i][1] = phi
956 // fTrigBuffer[i][2] = eta
957 // fTrigBuffer[i][3] = pt_jet
958 // fTrigBuffer[i][4] = pt_trig
959 // fTrigBuffer[i][5]= centrality
960 if(fTindex==10) fTindex=0;
961 if(fTrigBuffer[fTindex][3]>0){
962 if (TMath::Abs(fTrigBuffer[fTindex][0]-primVtx->GetZ()<2.)){
963 if (TMath::Abs(fTrigBuffer[fTindex][5]-centValue<5)){
965 for(int it = 0;it<nT;++it){
966 AliVParticle *part = (AliVParticle*)ParticleList.At(it);
967 Double_t DPhi = fTrigBuffer[fTindex][1] - part->Phi();
968 Double_t DEta = fTrigBuffer[fTindex][2] - part->Eta();
969 Double_t DR=TMath::Sqrt(DPhi*DPhi+DEta*DEta);
970 if(DPhi<-0.5*TMath::Pi()) DPhi+=2.*TMath::Pi();
971 if(DPhi>3./2.*TMath::Pi()) DPhi-=2.*TMath::Pi();
972 Double_t triggerEntries[7] = {centValue,fTrigBuffer[fTindex][3],part->Pt(),DR,DEta,DPhi,fTrigBuffer[fTindex][4]};
973 fhnMixedEvents->Fill(triggerEntries);
976 if(fNevents==10) fTindex=fTindex+1;
979 if(fTindex==10&&fNevents==10) fCountAgain=0;
981 // Copy the triggers from the current event into the buffer.
982 //again, only if the trigger exists:
985 AliAODJet* jetT = (AliAODJet*)(fListJets[0]->At(trigJet)); AliVParticle *partT = (AliVParticle*)ParticleList.At(trigBBTrack);
986 fTrigBuffer[fTrigBufferIndex][0] = primVtx->GetZ();
987 fTrigBuffer[fTrigBufferIndex][1] = jetT->Phi();
988 fTrigBuffer[fTrigBufferIndex][2] = jetT->Eta();
989 fTrigBuffer[fTrigBufferIndex][3] = jetT->Pt()-rho*jetT->EffectiveAreaCharged();
990 fTrigBuffer[fTrigBufferIndex][4] = partT->Pt();
991 fTrigBuffer[fTrigBufferIndex][5] = centValue;
993 if(fTrigBufferIndex==9) {fTrigBufferIndex=0;
1000 /////////////////////////////////////////////////////////////////////////////
1001 ////////////////////// Rongrong's analysis //////////////////////////////////
1002 if(fRunAnaAzimuthalCorrelation)
1004 fhTTPt->Fill(centValue,partback->Pt());
1005 for(Int_t ij=0; ij<fListJets[0]->GetEntries(); ij++)
1007 AliAODJet* jet = (AliAODJet*)(fListJets[0]->At(ij));
1008 Double_t jetPt = jet->Pt();
1009 Double_t jetEta = jet->Eta();
1010 Double_t jetPhi = jet->Phi();
1011 if(jetPt==0) continue;
1012 if((jetEta<fJetEtaMin)||(jetEta>fJetEtaMax)) continue;
1013 Double_t jetArea = jet->EffectiveAreaCharged();
1014 Double_t jetPtCorr=jetPt-rho*jetArea;
1015 Double_t dPhi=jetPhi-partback->Phi();
1016 if(dPhi>2*TMath::Pi()) dPhi -= 2*TMath::Pi();
1017 if(dPhi<-2*TMath::Pi()) dPhi += 2*TMath::Pi();
1018 if(dPhi<-0.5*TMath::Pi()) dPhi += 2*TMath::Pi();
1019 if(dPhi>1.5*TMath::Pi()) dPhi -= 2*TMath::Pi();
1021 Double_t fill[] = {partback->Pt(),jetPtCorr,dPhi,jetArea,centValue};
1022 fHJetPhiCorr->Fill(fill);
1025 /////////////////////////////////////////////////////////////////////////////
1026 /////////////////////////////////////////////////////////////////////////////
1029 //////////////////ANGULAR STRUCTURE//////////////////////////////////////
1031 //tracks up to R=0.8 distant from the jet axis
1032 // if(fAngStructCloseTracks==1){
1033 // TList CloseTrackList;
1034 // Int_t nn=GetListOfTracksCloseToJet(&CloseTrackList,jetbig);
1035 // Double_t difR=0.04;
1036 // for(Int_t l=0;l<15;l++){
1037 // Double_t rr=l*0.1+0.1;
1038 // for(int it = 0;it<nn;++it){
1039 // AliVParticle *part1 = (AliVParticle*)CloseTrackList.At(it);
1040 // for(int itu=it+1;itu<CloseTrackList.GetEntries();itu++){
1041 // AliVParticle *part2 = (AliVParticle*)CloseTrackList.At(itu);
1042 // Double_t ptm=part1->Pt();
1043 // Double_t ptn=part2->Pt();
1044 // Double_t Rnm = (part1->Eta()-part2->Eta())*(part1->Eta()-part2->Eta())+(part1->Phi()-part2->Phi())*(part1->Phi()-part2->Phi());
1045 // Rnm=TMath::Sqrt(Rnm);
1046 // Double_t deltag=(1./(TMath::Sqrt(2*TMath::Pi())*difR))*TMath::Exp(-1.*(rr-Rnm)*(rr-Rnm)/(2.*difR*difR));
1047 // Double_t stepf=0.5*(1.+TMath::Erf((rr-Rnm)/(TMath::Sqrt(2.)*difR)));
1048 // if((ptcorr<85.) && (ptcorr>=70.)){up1[l]=up1[l]+ptm*ptn*Rnm*Rnm*deltag;
1049 // down1[l]=down1[l]+ptm*ptn*Rnm*Rnm*stepf;}
1050 // if((ptcorr<100.) && (ptcorr>=85.)){up2[l]=up2[l]+ptm*ptn*Rnm*Rnm*deltag;
1051 // down2[l]=down2[l]+ptm*ptn*Rnm*Rnm*stepf;}
1052 // if((ptcorr<120.) && (ptcorr>=100.)){up3[l]=up3[l]+ptm*ptn*Rnm*Rnm*deltag;
1053 // down3[l]=down3[l]+ptm*ptn*Rnm*Rnm*stepf;}
1054 // if((ptcorr<140.) && (ptcorr>=120.)){up4[l]=up4[l]+ptm*ptn*Rnm*Rnm*deltag;
1055 // down4[l]=down4[l]+ptm*ptn*Rnm*Rnm*stepf;}}}}
1058 // //only jet constituents
1059 // if(fAngStructCloseTracks==2){
1061 // Double_t difR=0.04;
1062 // for(Int_t l=0;l<15;l++){
1063 // Double_t rr=l*0.1+0.1;
1066 // AliAODTrack* part1;
1067 // AliAODTrack* part2;
1069 // TRefArray *genTrackListb = jetbig->GetRefTracks();
1070 // Int_t nTracksGenJetb = genTrackListb->GetEntriesFast();
1074 // for(Int_t it=0; it<nTracksGenJetb; ++it){
1075 // part1 = (AliAODTrack*)(genTrackListb->At(it));
1076 // for(Int_t itu=0; itu<nTracksGenJetb; ++itu){
1077 // part2 = (AliAODTrack*)(genTrackListb->At(itu));
1078 // Double_t ptm=part1->Pt();
1079 // Double_t ptn=part2->Pt();
1080 // Double_t Rnm = (part1->Eta()-part2->Eta())*(part1->Eta()-part2->Eta())+(part1->Phi()-part2->Phi())*(part1->Phi()-part2->Phi());
1081 // Rnm=TMath::Sqrt(Rnm);
1082 // Double_t deltag=(1./(TMath::Sqrt(2*TMath::Pi())*difR))*TMath::Exp(-1.*(rr-Rnm)*(rr-Rnm)/(2.*difR*difR));
1083 // Double_t stepf=0.5*(1.+TMath::Erf((rr-Rnm)/(TMath::Sqrt(2.)*difR)));
1084 // if((ptcorr<85.) && (ptcorr>=70.)){up1[l]=up1[l]+ptm*ptn*Rnm*Rnm*deltag;
1085 // down1[l]=down1[l]+ptm*ptn*Rnm*Rnm*stepf;}
1086 // if((ptcorr<100.) && (ptcorr>=85.)){up2[l]=up2[l]+ptm*ptn*Rnm*Rnm*deltag;
1087 // down2[l]=down2[l]+ptm*ptn*Rnm*Rnm*stepf;}
1088 // if((ptcorr<120.) && (ptcorr>=100.)){up3[l]=up3[l]+ptm*ptn*Rnm*Rnm*deltag;
1089 // down3[l]=down3[l]+ptm*ptn*Rnm*Rnm*stepf;}
1090 // if((ptcorr<140.) && (ptcorr>=120.)){up4[l]=up4[l]+ptm*ptn*Rnm*Rnm*deltag;
1091 // down4[l]=down4[l]+ptm*ptn*Rnm*Rnm*stepf;}}}}}
1093 // //end loop over R=0.4 jets
1094 // if(fAngStructCloseTracks>0){
1095 // for(Int_t l=0;l<15;l++){
1096 // Double_t rr=l*0.1+0.1;
1098 // if(centValue<10.)fh2AngStructpt1C10->Fill(rr,rr*up1[l]/down1[l]);
1099 // if(centValue>20. && centValue<40.) fh2AngStructpt1C20->Fill(rr,rr*up1[l]/down1[l]);
1100 // if(centValue>30. && centValue<60.) fh2AngStructpt1C30->Fill(rr,rr*up1[l]/down1[l]);
1101 // if(centValue>60.) fh2AngStructpt1C60->Fill(rr,rr*up1[l]/down1[l]);}
1103 // if(centValue<10.) fh2AngStructpt2C10->Fill(rr,rr*up2[l]/down2[l]);
1104 // if(centValue>20. && centValue<40.) fh2AngStructpt2C20->Fill(rr,rr*up2[l]/down2[l]);
1105 // if(centValue>30. && centValue<60.) fh2AngStructpt2C30->Fill(rr,rr*up2[l]/down2[l]);
1106 // if(centValue>60.) fh2AngStructpt2C60->Fill(rr,rr*up2[l]/down2[l]);}
1108 // if(centValue<10.) fh2AngStructpt3C10->Fill(rr,rr*up3[l]/down3[l]);
1109 // if(centValue>20. && centValue<40.) fh2AngStructpt3C20->Fill(rr,rr*up3[l]/down3[l]);
1110 // if(centValue>30. && centValue<60.) fh2AngStructpt3C30->Fill(rr,rr*up3[l]/down3[l]);
1111 // if(centValue>60.) fh2AngStructpt3C60->Fill(rr,rr*up3[l]/down3[l]);}
1113 // if(centValue<10.) fh2AngStructpt4C10->Fill(rr,rr*up4[l]/down4[l]);
1114 // if(centValue>20. && centValue<40.) fh2AngStructpt4C20->Fill(rr,rr*up4[l]/down4[l]);
1115 // if(centValue>30. && centValue<60.) fh2AngStructpt4C30->Fill(rr,rr*up4[l]/down4[l]);
1116 // if(centValue>60.) fh2AngStructpt4C60->Fill(rr,rr*up4[l]/down4[l]);}}}
1124 PostData(1, fOutputList);
1127 void AliAnalysisTaskJetCore::Terminate(const Option_t *)
1129 // Draw result to the screen
1130 // Called once at the end of the query
1132 if (!GetOutputData(1))
1141 Int_t AliAnalysisTaskJetCore::GetListOfTracks(TList *list){
1144 AliAODEvent *aod = 0;
1146 if(!fESD)aod = fAODIn;
1156 for(int it = 0;it < aod->GetNumberOfTracks();++it){
1157 AliAODTrack *tr = aod->GetTrack(it);
1158 Bool_t bGood = false;
1159 if(fFilterType == 0)bGood = true;
1160 else if(fFilterType == 1)bGood = tr->IsHybridTPCConstrainedGlobal();
1161 else if(fFilterType == 2)bGood = tr->IsHybridGlobalConstrainedGlobal();
1162 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask)))continue;
1163 if(fRequireITSRefit==1){if((tr->GetStatus()&AliESDtrack::kITSrefit)==0)continue;}
1164 if(bGood==false) continue;
1165 if (fApplySharedClusterCut) {
1166 Double_t frac = Double_t(tr->GetTPCnclsS()) /Double_t(tr->GetTPCncls());
1167 if (frac > 0.4) continue;
1169 if(TMath::Abs(tr->Eta())>0.9)continue;
1170 if(tr->Pt()<0.15)continue;
1173 if(fFilterType==2 && fFilterMaskBestPt>0){// only set the trigger track index for good quality tracks
1174 if(tr->TestFilterBit(fFilterMaskBestPt)){
1190 // else if (type == kTrackAODMCCharged) {
1191 // TClonesArray *tca = dynamic_cast<TClonesArray*>(aod->FindListObject(AliAODMCParticle::StdBranchName()));
1192 // if(!tca)return iCount;
1193 // for(int it = 0;it < tca->GetEntriesFast();++it){
1194 // AliAODMCParticle *part = dynamic_cast<AliAODMCParticle*>(tca->At(it));
1195 // if(!part)continue;
1196 // if(part->Pt()<0.15)continue;
1197 // if(!part->IsPhysicalPrimary())continue;
1198 // if(part->Charge()==0)continue;
1199 // if(TMath::Abs(part->Eta())>0.9)continue;
1202 // if(part->Pt()>ptmax){ ptmax=part->Pt();
1203 // index=iCount-1;}}}
1210 Int_t AliAnalysisTaskJetCore::SelectTrigger(TList *list,Double_t minT,Double_t maxT,Int_t &number){
1212 AliAODEvent *aod = 0;
1213 if(!fESD)aod = fAODIn;
1217 Int_t triggers[100];
1218 for(Int_t cr=0;cr<100;cr++){triggers[cr]=-1;}
1220 for(int it = 0;it < aod->GetNumberOfTracks();++it){
1221 AliAODTrack *tr = aod->GetTrack(it);
1222 Bool_t bGood = false;
1223 if(fFilterType == 0)bGood = true;
1224 else if(fFilterType == 1)bGood = tr->IsHybridTPCConstrainedGlobal();
1225 else if(fFilterType == 2)bGood = tr->IsHybridGlobalConstrainedGlobal();
1226 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask)))continue;
1227 if(fRequireITSRefit==1){if((tr->GetStatus()&AliESDtrack::kITSrefit)==0)continue;}
1228 if(bGood==false) continue;
1229 if (fApplySharedClusterCut) {
1230 Double_t frac = Double_t(tr->GetTPCnclsS()) /Double_t(tr->GetTPCncls());
1231 if (frac > 0.4) continue;
1233 if(TMath::Abs(tr->Eta())>0.9)continue;
1234 if(tr->Pt()<0.15)continue;
1238 if(tr->Pt()>=minT && tr->Pt()<maxT){
1239 triggers[im]=iCount-1;
1246 if(im>0) rd=fRandom->Integer(im);
1272 Int_t AliAnalysisTaskJetCore::GetHardestTrackBackToJet(AliAODJet *jetbig){
1274 AliAODEvent *aod = 0;
1275 if(!fESD)aod = fAODIn;
1282 for(int it = 0;it < aod->GetNumberOfTracks();++it){
1283 AliAODTrack *tr = aod->GetTrack(it);
1284 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask)))continue;
1285 if(TMath::Abs(tr->Eta())>0.9)continue;
1286 if(tr->Pt()<0.15)continue;
1288 dphi=RelativePhi(tr->Phi(),jetbig->Phi());
1289 if(TMath::Abs(dphi)<TMath::Pi()-0.6) continue;
1290 if(tr->Pt()>ptmax){ ptmax=tr->Pt();
1306 Int_t AliAnalysisTaskJetCore::GetListOfTracksCloseToJet(TList *list,AliAODJet *jetbig){
1309 AliAODEvent *aod = 0;
1310 if(!fESD)aod = fAODIn;
1313 for(int it = 0;it < aod->GetNumberOfTracks();++it){
1314 AliAODTrack *tr = aod->GetTrack(it);
1315 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask)))continue;
1316 if(TMath::Abs(tr->Eta())>0.9)continue;
1317 if(tr->Pt()<0.15)continue;
1318 Double_t disR=jetbig->DeltaR(tr);
1319 if(disR>0.8) continue;
1321 //cout<<fAOD->GetNumberOfTracks()<<" "<<tr->Pt()<<endl;
1340 Int_t AliAnalysisTaskJetCore::GetNInputTracks()
1343 Int_t nInputTracks = 0;
1344 AliAODEvent *aod = 0;
1345 if(!fESD)aod = fAODIn;
1347 TString jbname(fJetBranchName[1]);
1348 //needs complete event, use jets without background subtraction
1349 for(Int_t i=1; i<=3; ++i){
1350 if(jbname.Contains(Form("B%d",i))) jbname.ReplaceAll(Form("B%d",i),"B0");
1352 // use only HI event
1353 if(jbname.Contains("AODextraonly")) jbname.ReplaceAll("AODextraonly","AOD");
1354 if(jbname.Contains("AODextra")) jbname.ReplaceAll("AODextra","AOD");
1356 if(fDebug) Printf("Multiplicity from jet branch %s", jbname.Data());
1357 TClonesArray *tmpAODjets = dynamic_cast<TClonesArray*>(aod->FindListObject(jbname.Data()));
1359 Printf("Jet branch %s not found", jbname.Data());
1360 Printf("AliAnalysisTaskJetCore::GetNInputTracks FAILED");
1364 for (Int_t iJet=0; iJet<tmpAODjets->GetEntriesFast(); iJet++){
1365 AliAODJet *jet = dynamic_cast<AliAODJet*>((*tmpAODjets)[iJet]);
1367 TRefArray *trackList = jet->GetRefTracks();
1368 Int_t nTracks = trackList->GetEntriesFast();
1369 nInputTracks += nTracks;
1370 if(fDebug) Printf("#jet%d: %d tracks", iJet, nTracks);
1372 if(fDebug) Printf("---> input tracks: %d", nInputTracks);
1374 return nInputTracks;
1379 Double_t AliAnalysisTaskJetCore::RelativePhi(Double_t mphi,Double_t vphi){
1381 if (vphi < -1*TMath::Pi()) vphi += (2*TMath::Pi());
1382 else if (vphi > TMath::Pi()) vphi -= (2*TMath::Pi());
1383 if (mphi < -1*TMath::Pi()) mphi += (2*TMath::Pi());
1384 else if (mphi > TMath::Pi()) mphi -= (2*TMath::Pi());
1385 double dphi = mphi-vphi;
1386 if (dphi < -1*TMath::Pi()) dphi += (2*TMath::Pi());
1387 else if (dphi > TMath::Pi()) dphi -= (2*TMath::Pi());
1388 return dphi;//dphi in [-Pi, Pi]
1391 Int_t AliAnalysisTaskJetCore::GetPhiBin(Double_t phi)
1394 if(!(TMath::Abs(phi)<=2*TMath::Pi())){AliError("phi w.r.t. RP out of defined range");return -1;}
1395 Double_t phiwrtrp=TMath::ACos(TMath::Abs(TMath::Cos(phi)));
1396 phibin=Int_t(fNRPBins*phiwrtrp/(0.5*TMath::Pi()));
1397 if(phibin<0||phibin>=fNRPBins){AliError("Phi Bin not defined");}
1404 THnSparse* AliAnalysisTaskJetCore::NewTHnSparseF(const char* name, UInt_t entries)
1406 // generate new THnSparseF, axes are defined in GetDimParams()
1409 UInt_t tmp = entries;
1412 tmp = tmp &~ -tmp; // clear lowest bit
1415 TString hnTitle(name);
1416 const Int_t dim = count;
1423 while(c<dim && i<32){
1427 GetDimParams(i, label, nbins[c], xmin[c], xmax[c]);
1428 hnTitle += Form(";%s",label.Data());
1436 return new THnSparseF(name, hnTitle.Data(), dim, nbins, xmin, xmax);
1439 void AliAnalysisTaskJetCore::GetDimParams(Int_t iEntry, TString &label, Int_t &nbins, Double_t &xmin, Double_t &xmax)
1441 // stores label and binning of axis for THnSparse
1443 const Double_t pi = TMath::Pi();
1448 label = "V0 centrality (%)";
1457 label = "corrected jet pt";
1500 label = "leading track";
1508 label = "trigger track";