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(""),
71 fOfflineTrgMask(AliVEvent::kAny),
86 fAngStructCloseTracks(0),
95 fTrackTypeRec(kTrackUndef),
105 fJetTriggerExcludeMask(AliAODJet::kHighTrackPtTriggered),
106 fJetPtFractionMin(0.5),
114 fHistEvtSelection(0x0),
117 fh2JetCoreMethod1C10(0x0),
118 fh2JetCoreMethod2C10(0x0),
119 fh2JetCoreMethod1C20(0x0),
120 fh2JetCoreMethod2C20(0x0),
121 fh2JetCoreMethod1C30(0x0),
122 fh2JetCoreMethod2C30(0x0),
123 fh2JetCoreMethod1C60(0x0),
124 fh2JetCoreMethod2C60(0x0),
125 fh3JetTrackC3060(0x0),
127 fh2AngStructpt1C10(0x0),
128 fh2AngStructpt2C10(0x0),
129 fh2AngStructpt3C10(0x0),
130 fh2AngStructpt4C10(0x0),
131 fh2AngStructpt1C20(0x0),
132 fh2AngStructpt2C20(0x0),
133 fh2AngStructpt3C20(0x0),
134 fh2AngStructpt4C20(0x0),
135 fh2AngStructpt1C30(0x0),
136 fh2AngStructpt2C30(0x0),
137 fh2AngStructpt3C30(0x0),
138 fh2AngStructpt4C30(0x0),
139 fh2AngStructpt1C60(0x0),
140 fh2AngStructpt2C60(0x0),
141 fh2AngStructpt3C60(0x0),
142 fh2AngStructpt4C60(0x0),
144 fh2Ntriggers2C10(0x0),
145 fh2Ntriggers2C20(0x0),
147 fh3JetDensityA4(0x0),
152 fh3spectriggeredC10(0x0),
153 fh3spectriggeredC20(0x0),
154 fh3spectriggeredC3060(0x0)
158 // default Constructor
162 for(Int_t i=0; i<10; i++) {
163 for(Int_t j=0; j<6; j++) {
172 fJetBranchName[0] = "";
173 fJetBranchName[1] = "";
175 fListJets[0] = new TList;
176 fListJets[1] = new TList;
179 AliAnalysisTaskJetCore::AliAnalysisTaskJetCore(const char *name) :
180 AliAnalysisTaskSE(name),
185 fBackgroundBranch(""),
189 fOfflineTrgMask(AliVEvent::kAny),
196 fFilterMaskBestPt(0),
203 fNInputTracksMax(-1),
204 fAngStructCloseTracks(0),
213 fTrackTypeRec(kTrackUndef),
223 fJetTriggerExcludeMask(AliAODJet::kHighTrackPtTriggered),
224 fJetPtFractionMin(0.5),
232 fHistEvtSelection(0x0),
235 fh2JetCoreMethod1C10(0x0),
236 fh2JetCoreMethod2C10(0x0),
237 fh2JetCoreMethod1C20(0x0),
238 fh2JetCoreMethod2C20(0x0),
239 fh2JetCoreMethod1C30(0x0),
240 fh2JetCoreMethod2C30(0x0),
241 fh2JetCoreMethod1C60(0x0),
242 fh2JetCoreMethod2C60(0x0),
243 fh3JetTrackC3060(0x0),
245 fh2AngStructpt1C10(0x0),
246 fh2AngStructpt2C10(0x0),
247 fh2AngStructpt3C10(0x0),
248 fh2AngStructpt4C10(0x0),
249 fh2AngStructpt1C20(0x0),
250 fh2AngStructpt2C20(0x0),
251 fh2AngStructpt3C20(0x0),
252 fh2AngStructpt4C20(0x0),
253 fh2AngStructpt1C30(0x0),
254 fh2AngStructpt2C30(0x0),
255 fh2AngStructpt3C30(0x0),
256 fh2AngStructpt4C30(0x0),
257 fh2AngStructpt1C60(0x0),
258 fh2AngStructpt2C60(0x0),
259 fh2AngStructpt3C60(0x0),
260 fh2AngStructpt4C60(0x0),
262 fh2Ntriggers2C10(0x0),
263 fh2Ntriggers2C20(0x0),
265 fh3JetDensityA4(0x0),
270 fh3spectriggeredC10(0x0),
271 fh3spectriggeredC20(0x0),
272 fh3spectriggeredC3060(0x0)
278 for(Int_t i=0; i<10; i++) {
279 for(Int_t j=0; j<6; j++) {
286 fJetBranchName[0] = "";
287 fJetBranchName[1] = "";
289 fListJets[0] = new TList;
290 fListJets[1] = new TList;
292 DefineOutput(1, TList::Class());
295 AliAnalysisTaskJetCore::~AliAnalysisTaskJetCore()
301 void AliAnalysisTaskJetCore::SetBranchNames(const TString &branch1, const TString &branch2)
303 fJetBranchName[0] = branch1;
304 fJetBranchName[1] = branch2;
307 void AliAnalysisTaskJetCore::Init()
310 // check for jet branches
311 if(!strlen(fJetBranchName[0].Data()) || !strlen(fJetBranchName[1].Data())){
312 AliError("Jet branch name not set.");
317 void AliAnalysisTaskJetCore::UserCreateOutputObjects()
322 if(!fOutputList) fOutputList = new TList;
323 fOutputList->SetOwner(kTRUE);
325 Bool_t oldStatus = TH1::AddDirectoryStatus();
326 TH1::AddDirectory(kFALSE);
329 fHistEvtSelection = new TH1I("fHistEvtSelection", "event selection", 6, -0.5, 5.5);
330 fHistEvtSelection->GetXaxis()->SetBinLabel(1,"ACCEPTED");
331 fHistEvtSelection->GetXaxis()->SetBinLabel(2,"events IN");
332 fHistEvtSelection->GetXaxis()->SetBinLabel(3,"event selection (rejected)");
333 fHistEvtSelection->GetXaxis()->SetBinLabel(4,"vertex cut (rejected)");
334 fHistEvtSelection->GetXaxis()->SetBinLabel(5,"centrality (rejected)");
335 fHistEvtSelection->GetXaxis()->SetBinLabel(6,"multiplicity (rejected)");
337 UInt_t entries = 0; // bit coded, see GetDimParams() below
338 entries = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 |1<<7;
339 fhnDeltaR = NewTHnSparseF("fhnDeltaR", entries);
341 //change binning in pTtrack
342 Double_t *xPt3 = new Double_t[10];
344 for(int i = 1; i<=9;i++){
345 if(xPt3[i-1]<2)xPt3[i] = xPt3[i-1] + 0.4; // 1 - 5
346 else if(xPt3[i-1]<11)xPt3[i] = xPt3[i-1] + 3; // 5 - 12
347 else xPt3[i] = xPt3[i-1] + 150.; // 18
349 fhnDeltaR->SetBinEdges(2,xPt3);
352 //change binning in HTI
353 Double_t *xPt4 = new Double_t[14];
355 for(int i = 1; i<=13;i++){
356 if(xPt4[i-1]<10)xPt4[i] = xPt4[i-1] + 1; // 1 - 10
357 else if(xPt4[i-1]<20)xPt4[i] = xPt4[i-1] + 5; // 10 - 12
358 else xPt4[i] = xPt4[i-1] + 30.; // 13
360 fhnDeltaR->SetBinEdges(6,xPt4);
370 UInt_t cifras = 0; // bit coded, see GetDimParams() below
371 cifras = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<7;
372 fhnMixedEvents = NewTHnSparseF("fhnMixedEvents", cifras);}
375 fh2JetCoreMethod1C10 = new TH2F("JetCoreMethod1C10","",150, 0., 150.,100, 0., 1.5);
376 fh2JetCoreMethod2C10 = new TH2F("JetCoreMethod2C10","",150, 0., 150.,100, 0., 1.5);
377 fh2JetCoreMethod1C20 = new TH2F("JetCoreMethod1C20","",150, 0., 150.,100, 0., 1.5);
378 fh2JetCoreMethod2C20 = new TH2F("JetCoreMethod2C20","",150, 0., 150.,100, 0., 1.5);
379 fh2JetCoreMethod1C30 = new TH2F("JetCoreMethod1C30","",150, 0., 150.,100, 0., 1.5);
380 fh2JetCoreMethod2C30 = new TH2F("JetCoreMethod2C30","",150, 0., 150.,100, 0., 1.5);
381 fh2JetCoreMethod1C60 = new TH2F("JetCoreMethod1C60","",150, 0., 150.,100, 0., 1.5);
382 fh2JetCoreMethod2C60 = new TH2F("JetCoreMethod2C60","",150, 0., 150.,100, 0., 1.5);}
384 fh3JetTrackC3060=new TH3F("JetTrackC3060","",50,0,50,150,0.,150.,35,0.,3.5);
385 fh3JetTrackC20=new TH3F("JetTrackC20","",50,0,50,150,0.,150.,35,0.,3.5);
386 if(fAngStructCloseTracks>0){
387 fh2AngStructpt1C10 = new TH2F("Ang struct pt1 C10","",15,0.,1.5,150,0.,10.);
388 fh2AngStructpt2C10 = new TH2F("Ang struct pt2 C10","",15,0.,1.5,150,0.,10.);
389 fh2AngStructpt3C10 = new TH2F("Ang struct pt3 C10","",15,0.,1.5,150,0.,10.);
390 fh2AngStructpt4C10 = new TH2F("Ang struct pt4 C10","",15,0.,1.5,150,0.,10.);
391 fh2AngStructpt1C20 = new TH2F("Ang struct pt1 C20","",15,0.,1.5,150,0.,10.);
392 fh2AngStructpt2C20 = new TH2F("Ang struct pt2 C20","",15,0.,1.5,150,0.,10.);
393 fh2AngStructpt3C20 = new TH2F("Ang struct pt3 C20","",15,0.,1.5,150,0.,10.);
394 fh2AngStructpt4C20 = new TH2F("Ang struct pt4 C20","",15,0.,1.5,150,0.,10.);
395 fh2AngStructpt1C30 = new TH2F("Ang struct pt1 C30","",15,0.,1.5,150,0.,10.);
396 fh2AngStructpt2C30 = new TH2F("Ang struct pt2 C30","",15,0.,1.5,150,0.,10.);
397 fh2AngStructpt3C30 = new TH2F("Ang struct pt3 C30","",15,0.,1.5,150,0.,10.);
398 fh2AngStructpt4C30 = new TH2F("Ang struct pt4 C30","",15,0.,1.5,150,0.,10.);
399 fh2AngStructpt1C60 = new TH2F("Ang struct pt1 C60","",15,0.,1.5,150,0.,10.);
400 fh2AngStructpt2C60 = new TH2F("Ang struct pt2 C60","",15,0.,1.5,150,0.,10.);
401 fh2AngStructpt3C60 = new TH2F("Ang struct pt3 C60","",15,0.,1.5,150,0.,10.);
402 fh2AngStructpt4C60 = new TH2F("Ang struct pt4 C60","",15,0.,1.5,150,0.,10.); }
406 fh2Ntriggers=new TH2F("# of triggers","",10,0.,100.,50,0.,50.);
407 fh2Ntriggers2C10=new TH2F("# of triggers2C10","",50,0.,50.,50,0.,50.);
408 fh2Ntriggers2C20=new TH2F("# of triggers2C20","",50,0.,50.,50,0.,50.);
409 fh3JetDensity=new TH3F("Jet density vs mutliplicity A>0.4","",100,0.,4000.,100,0.,5.,10,0.,50.);
410 fh3JetDensityA4=new TH3F("Jet density vs multiplicity A>0.4","",100,0.,4000.,100,0.,5.,10,0.,50.);
411 fh2RPJetsC10=new TH2F("RPJetC10","",35,0.,3.5,100,0.,100.);
412 fh2RPJetsC20=new TH2F("RPJetC20","",35,0.,3.5,100,0.,100.);
413 fh2RPTC10=new TH2F("RPTriggerC10","",35,0.,3.5,50,0.,50.);
414 fh2RPTC20=new TH2F("RPTriggerC20","",35,0.,3.5,50,0.,50.);
415 fh3spectriggeredC10 = new TH3F("Triggered spectrumC10","",100,0.,1.,140,-80.,200.,50,0.,50.);
416 fh3spectriggeredC20 = new TH3F("Triggered spectrumC20","",100,0.,1.,140,-80.,200.,50,0.,50.);
417 fh3spectriggeredC3060 = new TH3F("Triggered spectrumC3060","",100,0.,1.,140,-80.,200.,10,0.,50.);
421 fOutputList->Add(fHistEvtSelection);
423 fOutputList->Add(fhnDeltaR);
425 fOutputList->Add(fhnMixedEvents);
431 fOutputList->Add(fh2JetCoreMethod1C10);
432 fOutputList->Add(fh2JetCoreMethod2C10);
433 fOutputList->Add(fh2JetCoreMethod1C20);
434 fOutputList->Add(fh2JetCoreMethod2C20);
435 fOutputList->Add(fh2JetCoreMethod1C30);
436 fOutputList->Add(fh2JetCoreMethod2C30);
437 fOutputList->Add(fh2JetCoreMethod1C60);
438 fOutputList->Add(fh2JetCoreMethod2C60);}
440 fOutputList->Add(fh3JetTrackC3060);
441 fOutputList->Add(fh3JetTrackC20);
447 if(fAngStructCloseTracks>0){
448 fOutputList->Add(fh2AngStructpt1C10);
449 fOutputList->Add(fh2AngStructpt2C10);
450 fOutputList->Add(fh2AngStructpt3C10);
451 fOutputList->Add(fh2AngStructpt4C10);
452 fOutputList->Add(fh2AngStructpt1C20);
453 fOutputList->Add(fh2AngStructpt2C20);
454 fOutputList->Add(fh2AngStructpt3C20);
455 fOutputList->Add(fh2AngStructpt4C20);
456 fOutputList->Add(fh2AngStructpt1C30);
457 fOutputList->Add(fh2AngStructpt2C30);
458 fOutputList->Add(fh2AngStructpt3C30);
459 fOutputList->Add(fh2AngStructpt4C30);
460 fOutputList->Add(fh2AngStructpt1C60);
461 fOutputList->Add(fh2AngStructpt2C60);
462 fOutputList->Add(fh2AngStructpt3C60);
463 fOutputList->Add(fh2AngStructpt4C60);}
469 fOutputList->Add(fh2Ntriggers);
470 fOutputList->Add(fh2Ntriggers2C10);
471 fOutputList->Add(fh2Ntriggers2C20);
472 fOutputList->Add(fh3JetDensity);
473 fOutputList->Add(fh3JetDensityA4);
474 fOutputList->Add(fh2RPJetsC10);
475 fOutputList->Add(fh2RPJetsC20);
476 fOutputList->Add(fh2RPTC10);
477 fOutputList->Add(fh2RPTC20);
478 fOutputList->Add(fh3spectriggeredC10);
479 fOutputList->Add(fh3spectriggeredC20);
480 fOutputList->Add(fh3spectriggeredC3060);
483 // =========== Switch on Sumw2 for all histos ===========
484 for (Int_t i=0; i<fOutputList->GetEntries(); ++i) {
485 TH1 *h1 = dynamic_cast<TH1*>(fOutputList->At(i));
490 THnSparse *hn = dynamic_cast<THnSparse*>(fOutputList->At(i));
495 TH1::AddDirectory(oldStatus);
497 PostData(1, fOutputList);
500 void AliAnalysisTaskJetCore::UserExec(Option_t *)
504 if(!strlen(fJetBranchName[0].Data()) || !strlen(fJetBranchName[1].Data())){
505 AliError("Jet branch name not set.");
509 fESD=dynamic_cast<AliESDEvent*>(InputEvent());
511 AliError("ESD not available");
512 fAODIn = dynamic_cast<AliAODEvent*>(InputEvent());
514 fAODOut = dynamic_cast<AliAODEvent*>(AODEvent());
516 static AliAODEvent* aod = 0;
517 // take all other information from the aod we take the tracks from
519 if(!fESD)aod = fAODIn;
524 if(fNonStdFile.Length()!=0){
525 // case that we have an AOD extension we need can fetch the jets from the extended output
526 AliAODHandler *aodH = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
527 fAODExtension = (aodH?aodH->GetExtension(fNonStdFile.Data()):0);
529 if(fDebug>1)Printf("AODExtension found for %s",fNonStdFile.Data());
533 // -- event selection --
534 fHistEvtSelection->Fill(1); // number of events before event selection
537 AliInputEventHandler* inputHandler = (AliInputEventHandler*)
538 ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
539 std::cout<<inputHandler->IsEventSelected()<<" "<<fOfflineTrgMask<<std::endl;
540 if(!(inputHandler->IsEventSelected() & fOfflineTrgMask)){
541 if(fDebug) Printf(" Trigger Selection: event REJECTED ... ");
542 fHistEvtSelection->Fill(2);
543 PostData(1, fOutputList);
549 if(fDebug) Printf("%s:%d No AOD",(char*)__FILE__,__LINE__);
550 fHistEvtSelection->Fill(3);
551 PostData(1, fOutputList);
553 AliAODVertex* primVtx = aod->GetPrimaryVertex();
556 if(fDebug) Printf("%s:%d No primVtx",(char*)__FILE__,__LINE__);
557 fHistEvtSelection->Fill(3);
558 PostData(1, fOutputList);
562 Int_t nTracksPrim = primVtx->GetNContributors();
563 if ((nTracksPrim < fMinContribVtx) ||
564 (primVtx->GetZ() < fVtxZMin) ||
565 (primVtx->GetZ() > fVtxZMax) ){
566 if(fDebug) Printf("%s:%d primary vertex z = %f: event REJECTED...",(char*)__FILE__,__LINE__,primVtx->GetZ());
567 fHistEvtSelection->Fill(3);
568 PostData(1, fOutputList);
572 // event class selection (from jet helper task)
573 Int_t eventClass = AliAnalysisHelperJetTasks::EventClass();
574 if(fDebug) Printf("Event class %d", eventClass);
575 if (eventClass < fEvtClassMin || eventClass > fEvtClassMax){
576 fHistEvtSelection->Fill(4);
577 PostData(1, fOutputList);
581 // centrality selection
582 AliCentrality *cent = 0x0;
583 Double_t centValue = 0.;
585 if(fESD) {cent = fESD->GetCentrality();
586 if(cent) centValue = cent->GetCentralityPercentile("V0M");}
587 else centValue=aod->GetHeader()->GetCentrality();
589 if(fDebug) printf("centrality: %f\n", centValue);
590 if (centValue < fCentMin || centValue > fCentMax){
591 fHistEvtSelection->Fill(4);
592 PostData(1, fOutputList);
597 fHistEvtSelection->Fill(0);
599 // -- end event selection --
602 AliAODJetEventBackground* externalBackground = 0;
603 if(fAODOut&&!externalBackground&&fBackgroundBranch.Length()){
604 externalBackground = (AliAODJetEventBackground*)(fAODOut->FindListObject(fBackgroundBranch.Data()));
605 if(!externalBackground)Printf("%s:%d Background branch not found %s",(char*)__FILE__,__LINE__,fBackgroundBranch.Data());;
607 if(fAODExtension&&!externalBackground&&fBackgroundBranch.Length()){
608 externalBackground = (AliAODJetEventBackground*)(fAODExtension->GetAOD()->FindListObject(fBackgroundBranch.Data()));
609 if(!externalBackground)Printf("%s:%d Background branch not found %s",(char*)__FILE__,__LINE__,fBackgroundBranch.Data());;
612 if(fAODIn&&!externalBackground&&fBackgroundBranch.Length()){
613 externalBackground = (AliAODJetEventBackground*)(fAODIn->FindListObject(fBackgroundBranch.Data()));
614 if(!externalBackground)Printf("%s:%d Background branch not found %s",(char*)__FILE__,__LINE__,fBackgroundBranch.Data());;
620 if(externalBackground)rho = externalBackground->GetBackground(0);}
622 if(externalBackground)rho = externalBackground->GetBackground(2);}
624 if(externalBackground)rho = externalBackground->GetBackground(3);}
627 TClonesArray *aodJets[2];
629 if(fAODOut&&!aodJets[0]){
630 aodJets[0] = dynamic_cast<TClonesArray*>(fAODOut->FindListObject(fJetBranchName[0].Data()));
631 aodJets[1] = dynamic_cast<TClonesArray*>(fAODOut->FindListObject(fJetBranchName[1].Data())); }
632 if(fAODExtension && !aodJets[0]){
633 aodJets[0] = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fJetBranchName[0].Data()));
634 aodJets[1] = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fJetBranchName[1].Data())); }
635 if(fAODIn&&!aodJets[0]){
636 aodJets[0] = dynamic_cast<TClonesArray*>(fAODIn->FindListObject(fJetBranchName[0].Data()));
637 aodJets[1] = dynamic_cast<TClonesArray*>(fAODIn->FindListObject(fJetBranchName[1].Data())); }
640 //Double_t ptsub[aodJets[0]->GetEntriesFast()];
641 //Int_t inord[aodJets[0]->GetEntriesFast()];
642 //for(Int_t n=0;n<aodJets[0]->GetEntriesFast();n++){
647 Int_t nT = GetListOfTracks(&ParticleList);
648 for (Int_t iJetType = 0; iJetType < 2; iJetType++) {
649 fListJets[iJetType]->Clear();
650 if (!aodJets[iJetType]) continue;
651 if(fDebug) Printf("%s: %d jets",fJetBranchName[iJetType].Data(),aodJets[iJetType]->GetEntriesFast());
652 for (Int_t iJet = 0; iJet < aodJets[iJetType]->GetEntriesFast(); iJet++) {
653 AliAODJet *jet = dynamic_cast<AliAODJet*>((*aodJets[iJetType])[iJet]);
654 if (jet) fListJets[iJetType]->Add(jet);
656 // ptsub[iJet]=jet->Pt()-rho*jet->EffectiveAreaCharged();}
665 Double_t areasmall=0;
666 Double_t phismall=0.;
672 Int_t trigBBTrack=-1;
673 Int_t trigInTrack=-1;
674 fRPAngle = aod->GetHeader()->GetEventplane();
676 AliVParticle *partback = (AliVParticle*)ParticleList.At(nT);
678 PostData(1, fOutputList);
682 //for(Int_t tt=0;tt<ParticleList.GetEntries();tt++){
683 //if(fFlagOnlyHardest!=0){if(tt!=nT) continue;}
684 //AliVParticle *partback = (AliVParticle*)ParticleList.At(tt);
686 fh2Ntriggers->Fill(centValue,partback->Pt());
687 Double_t phiBinT = RelativePhi(partback->Phi(),fRPAngle);
688 if(centValue<20.) fh2RPTC20->Fill(TMath::Abs(phiBinT),partback->Pt());
689 if(centValue<10.) fh2RPTC10->Fill(TMath::Abs(phiBinT),partback->Pt());
690 Double_t accep=2.*TMath::Pi()*1.8;
694 for(Int_t i=0; i<fListJets[0]->GetEntries(); ++i){
695 AliAODJet* jetbig = (AliAODJet*)(fListJets[0]->At(i));
696 etabig = jetbig->Eta();
697 phibig = jetbig->Phi();
698 ptbig = jetbig->Pt();
699 if(ptbig==0) continue;
700 Double_t phiBin = RelativePhi(phibig,fRPAngle);
701 areabig = jetbig->EffectiveAreaCharged();
702 Double_t ptcorr=ptbig-rho*areabig;
703 if((etabig<fJetEtaMin)||(etabig>fJetEtaMax)) continue;
704 if(areabig>=0.07) injet=injet+1;
705 if(areabig>=0.4) injet4=injet4+1;
706 Double_t dphi=RelativePhi(partback->Phi(),phibig);
709 Double_t etadif= partback->Eta()-etabig;
710 if(TMath::Abs(etadif)<=0.5){
712 if(centValue<20.) fh3JetTrackC20->Fill(partback->Pt(),ptcorr,TMath::Abs(dphi));
713 if(centValue>30. && centValue<60.) fh3JetTrackC3060->Fill(partback->Pt(),ptcorr,TMath::Abs(dphi));}}
715 if(centValue<20.) fh3JetTrackC20->Fill(partback->Pt(),ptcorr,TMath::Abs(dphi));
716 if(centValue>30. && centValue<60.) fh3JetTrackC3060->Fill(partback->Pt(),ptcorr,TMath::Abs(dphi));}
719 if(fFlagJetHadron==0){
720 if(fFlagPhiBkg!=0) if((TMath::Abs(dphi)<TMath::Pi()/2.-0.1)||(TMath::Abs(dphi)>TMath::Pi()/2.+0.1)) continue;
721 if(fFlagPhiBkg==0) if(TMath::Abs(dphi)<TMath::Pi()-0.6) continue;}
723 if(fFlagJetHadron!=0) if(TMath::Abs(dphi)>0.4) continue;
726 if(centValue<10.) fh2RPJetsC10->Fill(TMath::Abs(phiBin), ptcorr);
727 if(centValue<20.) fh2RPJetsC20->Fill(TMath::Abs(phiBin), ptcorr);
728 Double_t dismin=100.;
733 if(centValue<10.) fh3spectriggeredC10->Fill(jetbig->EffectiveAreaCharged(),ptcorr,partback->Pt());
734 if(centValue<20.) fh3spectriggeredC20->Fill(jetbig->EffectiveAreaCharged(),ptcorr,partback->Pt());
735 if(centValue>30. && centValue<60.) fh3spectriggeredC3060->Fill(jetbig->EffectiveAreaCharged(),ptcorr,partback->Pt());
737 if(ptcorr<=0) continue;
739 AliAODTrack* leadtrack=0;
742 if(fFlagJetHadron==0){
743 TRefArray *genTrackList = jetbig->GetRefTracks();
744 Int_t nTracksGenJet = genTrackList->GetEntriesFast();
745 AliAODTrack* genTrack;
746 for(Int_t ir=0; ir<nTracksGenJet; ++ir){
747 genTrack = (AliAODTrack*)(genTrackList->At(ir));
748 if(genTrack->Pt()>ppt){ppt=genTrack->Pt();
750 leadtrack=(AliAODTrack*)(genTrackList->At(ippt));
751 if(!leadtrack) continue;}
753 AliVParticle* leadtrackb=0;
754 if(fFlagJetHadron!=0){
755 Int_t nTb = GetHardestTrackBackToJet(jetbig);
756 leadtrackb = (AliVParticle*)ParticleList.At(nTb);
757 if(!leadtrackb) continue;
764 //store one trigger info
773 for(Int_t j=0; j<fListJets[1]->GetEntries(); ++j){
774 AliAODJet* jetsmall = (AliAODJet*)(fListJets[1]->At(j));
775 etasmall = jetsmall->Eta();
776 phismall = jetsmall->Phi();
777 ptsmall = jetsmall->Pt();
778 areasmall = jetsmall->EffectiveAreaCharged();
779 Double_t tmpDeltaR=(phismall-phibig)*(phismall-phibig)+(etasmall-etabig)*(etasmall-etabig);
780 tmpDeltaR=TMath::Sqrt(tmpDeltaR);
781 //Fraction in the jet core
782 if((ptsmall>ptmax)&&(tmpDeltaR<=fRadioFrac)){ptmax=ptsmall;
784 if(tmpDeltaR<=dismin){ dismin=tmpDeltaR;
785 index1=j;}} //en of loop over R=0.2 jets
786 //method1:most concentric jet=core
787 if(dismin<fMinDist){ AliAODJet* jetmethod1 = (AliAODJet*)(fListJets[1]->At(index1));
788 if(centValue<10) fh2JetCoreMethod1C10->Fill(ptcorr,jetmethod1->Pt()/ptbig);
789 if((centValue>20)&&(centValue<40)) fh2JetCoreMethod1C20->Fill(ptcorr,jetmethod1->Pt()/ptbig);
790 if((centValue>30)&&(centValue<60)) fh2JetCoreMethod1C30->Fill(ptcorr,jetmethod1->Pt()/ptbig);
791 if(centValue>60) fh2JetCoreMethod1C60->Fill(ptcorr,jetmethod1->Pt()/ptbig); }
792 //method2:hardest contained jet=core
794 AliAODJet* jetmethod2 = (AliAODJet*)(fListJets[1]->At(index2));
795 if(centValue<10) fh2JetCoreMethod2C10->Fill(ptcorr,jetmethod2->Pt()/ptbig);
796 if((centValue>20)&&(centValue<40)) fh2JetCoreMethod2C20->Fill(ptcorr,jetmethod2->Pt()/ptbig);
797 if((centValue>30)&&(centValue<60)) fh2JetCoreMethod2C30->Fill(ptcorr,jetmethod2->Pt()/ptbig);
798 if(centValue>60) fh2JetCoreMethod2C60->Fill(ptcorr,jetmethod2->Pt()/ptbig); }}
799 if(centValue<10) fh2Ntriggers2C10->Fill(leadtrack->Pt(),partback->Pt());
800 if(centValue<20) fh2Ntriggers2C20->Fill(leadtrack->Pt(),partback->Pt());
801 if(fDoEventMixing==0 && fFlagOnlyRecoil==0){
802 for(int it = 0;it<ParticleList.GetEntries();++it){
803 AliVParticle *part = (AliVParticle*)ParticleList.At(it);
804 Double_t deltaR = jetbig->DeltaR(part);
805 Double_t deltaEta = etabig-part->Eta();
807 Double_t deltaPhi=phibig-part->Phi();
808 if(deltaPhi<-0.5*TMath::Pi()) deltaPhi+=2.*TMath::Pi();
809 if(deltaPhi>3./2.*TMath::Pi()) deltaPhi-=2.*TMath::Pi();
811 if(fFlagJetHadron==0) pTcont=leadtrack->Pt();
812 if(fFlagJetHadron!=0) pTcont=leadtrackb->Pt();
813 Double_t jetEntries[8] = {centValue,ptcorr,part->Pt(),deltaR,deltaEta,deltaPhi,pTcont,partback->Pt()};
814 fhnDeltaR->Fill(jetEntries);}
820 //end of track loop, we only do it if EM is switched off
831 if(injet>0) fh3JetDensity->Fill(ParticleList.GetEntries(),injet/accep,partback->Pt());
832 if(injet4>0)fh3JetDensityA4->Fill(ParticleList.GetEntries(),injet4/accep,partback->Pt());
838 if(fDoEventMixing>0){
839 //check before if the trigger exists
840 // fTrigBuffer[i][0] = zvtx
841 // fTrigBuffer[i][1] = phi
842 // fTrigBuffer[i][2] = eta
843 // fTrigBuffer[i][3] = pt_jet
844 // fTrigBuffer[i][4] = pt_trig
845 // fTrigBuffer[i][5]= centrality
846 if(fTindex==10) fTindex=0;
847 if(fTrigBuffer[fTindex][3]>0){
848 if (TMath::Abs(fTrigBuffer[fTindex][0]-primVtx->GetZ()<2.)){
849 if (TMath::Abs(fTrigBuffer[fTindex][5]-centValue<5)){
851 for(int it = 0;it<nT;++it){
852 AliVParticle *part = (AliVParticle*)ParticleList.At(it);
853 Double_t DPhi = fTrigBuffer[fTindex][1] - part->Phi();
854 Double_t DEta = fTrigBuffer[fTindex][2] - part->Eta();
855 Double_t DR=TMath::Sqrt(DPhi*DPhi+DEta*DEta);
856 if(DPhi<-0.5*TMath::Pi()) DPhi+=2.*TMath::Pi();
857 if(DPhi>3./2.*TMath::Pi()) DPhi-=2.*TMath::Pi();
858 Double_t triggerEntries[7] = {centValue,fTrigBuffer[fTindex][3],part->Pt(),DR,DEta,DPhi,fTrigBuffer[fTindex][4]};
859 fhnMixedEvents->Fill(triggerEntries);
862 if(fNevents==10) fTindex=fTindex+1;
865 if(fTindex==10&&fNevents==10) fCountAgain=0;
867 // Copy the triggers from the current event into the buffer.
868 //again, only if the trigger exists:
871 AliAODJet* jetT = (AliAODJet*)(fListJets[0]->At(trigJet)); AliVParticle *partT = (AliVParticle*)ParticleList.At(trigBBTrack);
872 fTrigBuffer[fTrigBufferIndex][0] = primVtx->GetZ();
873 fTrigBuffer[fTrigBufferIndex][1] = jetT->Phi();
874 fTrigBuffer[fTrigBufferIndex][2] = jetT->Eta();
875 fTrigBuffer[fTrigBufferIndex][3] = jetT->Pt()-rho*jetT->EffectiveAreaCharged();
876 fTrigBuffer[fTrigBufferIndex][4] = partT->Pt();
877 fTrigBuffer[fTrigBufferIndex][5] = centValue;
879 if(fTrigBufferIndex==9) {fTrigBufferIndex=0;
888 //////////////////ANGULAR STRUCTURE//////////////////////////////////////
890 //tracks up to R=0.8 distant from the jet axis
891 // if(fAngStructCloseTracks==1){
892 // TList CloseTrackList;
893 // Int_t nn=GetListOfTracksCloseToJet(&CloseTrackList,jetbig);
894 // Double_t difR=0.04;
895 // for(Int_t l=0;l<15;l++){
896 // Double_t rr=l*0.1+0.1;
897 // for(int it = 0;it<nn;++it){
898 // AliVParticle *part1 = (AliVParticle*)CloseTrackList.At(it);
899 // for(int itu=it+1;itu<CloseTrackList.GetEntries();itu++){
900 // AliVParticle *part2 = (AliVParticle*)CloseTrackList.At(itu);
901 // Double_t ptm=part1->Pt();
902 // Double_t ptn=part2->Pt();
903 // Double_t Rnm = (part1->Eta()-part2->Eta())*(part1->Eta()-part2->Eta())+(part1->Phi()-part2->Phi())*(part1->Phi()-part2->Phi());
904 // Rnm=TMath::Sqrt(Rnm);
905 // Double_t deltag=(1./(TMath::Sqrt(2*TMath::Pi())*difR))*TMath::Exp(-1.*(rr-Rnm)*(rr-Rnm)/(2.*difR*difR));
906 // Double_t stepf=0.5*(1.+TMath::Erf((rr-Rnm)/(TMath::Sqrt(2.)*difR)));
907 // if((ptcorr<85.) && (ptcorr>=70.)){up1[l]=up1[l]+ptm*ptn*Rnm*Rnm*deltag;
908 // down1[l]=down1[l]+ptm*ptn*Rnm*Rnm*stepf;}
909 // if((ptcorr<100.) && (ptcorr>=85.)){up2[l]=up2[l]+ptm*ptn*Rnm*Rnm*deltag;
910 // down2[l]=down2[l]+ptm*ptn*Rnm*Rnm*stepf;}
911 // if((ptcorr<120.) && (ptcorr>=100.)){up3[l]=up3[l]+ptm*ptn*Rnm*Rnm*deltag;
912 // down3[l]=down3[l]+ptm*ptn*Rnm*Rnm*stepf;}
913 // if((ptcorr<140.) && (ptcorr>=120.)){up4[l]=up4[l]+ptm*ptn*Rnm*Rnm*deltag;
914 // down4[l]=down4[l]+ptm*ptn*Rnm*Rnm*stepf;}}}}
917 // //only jet constituents
918 // if(fAngStructCloseTracks==2){
920 // Double_t difR=0.04;
921 // for(Int_t l=0;l<15;l++){
922 // Double_t rr=l*0.1+0.1;
925 // AliAODTrack* part1;
926 // AliAODTrack* part2;
928 // TRefArray *genTrackListb = jetbig->GetRefTracks();
929 // Int_t nTracksGenJetb = genTrackListb->GetEntriesFast();
933 // for(Int_t it=0; it<nTracksGenJetb; ++it){
934 // part1 = (AliAODTrack*)(genTrackListb->At(it));
935 // for(Int_t itu=0; itu<nTracksGenJetb; ++itu){
936 // part2 = (AliAODTrack*)(genTrackListb->At(itu));
937 // Double_t ptm=part1->Pt();
938 // Double_t ptn=part2->Pt();
939 // Double_t Rnm = (part1->Eta()-part2->Eta())*(part1->Eta()-part2->Eta())+(part1->Phi()-part2->Phi())*(part1->Phi()-part2->Phi());
940 // Rnm=TMath::Sqrt(Rnm);
941 // Double_t deltag=(1./(TMath::Sqrt(2*TMath::Pi())*difR))*TMath::Exp(-1.*(rr-Rnm)*(rr-Rnm)/(2.*difR*difR));
942 // Double_t stepf=0.5*(1.+TMath::Erf((rr-Rnm)/(TMath::Sqrt(2.)*difR)));
943 // if((ptcorr<85.) && (ptcorr>=70.)){up1[l]=up1[l]+ptm*ptn*Rnm*Rnm*deltag;
944 // down1[l]=down1[l]+ptm*ptn*Rnm*Rnm*stepf;}
945 // if((ptcorr<100.) && (ptcorr>=85.)){up2[l]=up2[l]+ptm*ptn*Rnm*Rnm*deltag;
946 // down2[l]=down2[l]+ptm*ptn*Rnm*Rnm*stepf;}
947 // if((ptcorr<120.) && (ptcorr>=100.)){up3[l]=up3[l]+ptm*ptn*Rnm*Rnm*deltag;
948 // down3[l]=down3[l]+ptm*ptn*Rnm*Rnm*stepf;}
949 // if((ptcorr<140.) && (ptcorr>=120.)){up4[l]=up4[l]+ptm*ptn*Rnm*Rnm*deltag;
950 // down4[l]=down4[l]+ptm*ptn*Rnm*Rnm*stepf;}}}}}
952 // //end loop over R=0.4 jets
953 // if(fAngStructCloseTracks>0){
954 // for(Int_t l=0;l<15;l++){
955 // Double_t rr=l*0.1+0.1;
957 // if(centValue<10.)fh2AngStructpt1C10->Fill(rr,rr*up1[l]/down1[l]);
958 // if(centValue>20. && centValue<40.) fh2AngStructpt1C20->Fill(rr,rr*up1[l]/down1[l]);
959 // if(centValue>30. && centValue<60.) fh2AngStructpt1C30->Fill(rr,rr*up1[l]/down1[l]);
960 // if(centValue>60.) fh2AngStructpt1C60->Fill(rr,rr*up1[l]/down1[l]);}
962 // if(centValue<10.) fh2AngStructpt2C10->Fill(rr,rr*up2[l]/down2[l]);
963 // if(centValue>20. && centValue<40.) fh2AngStructpt2C20->Fill(rr,rr*up2[l]/down2[l]);
964 // if(centValue>30. && centValue<60.) fh2AngStructpt2C30->Fill(rr,rr*up2[l]/down2[l]);
965 // if(centValue>60.) fh2AngStructpt2C60->Fill(rr,rr*up2[l]/down2[l]);}
967 // if(centValue<10.) fh2AngStructpt3C10->Fill(rr,rr*up3[l]/down3[l]);
968 // if(centValue>20. && centValue<40.) fh2AngStructpt3C20->Fill(rr,rr*up3[l]/down3[l]);
969 // if(centValue>30. && centValue<60.) fh2AngStructpt3C30->Fill(rr,rr*up3[l]/down3[l]);
970 // if(centValue>60.) fh2AngStructpt3C60->Fill(rr,rr*up3[l]/down3[l]);}
972 // if(centValue<10.) fh2AngStructpt4C10->Fill(rr,rr*up4[l]/down4[l]);
973 // if(centValue>20. && centValue<40.) fh2AngStructpt4C20->Fill(rr,rr*up4[l]/down4[l]);
974 // if(centValue>30. && centValue<60.) fh2AngStructpt4C30->Fill(rr,rr*up4[l]/down4[l]);
975 // if(centValue>60.) fh2AngStructpt4C60->Fill(rr,rr*up4[l]/down4[l]);}}}
983 PostData(1, fOutputList);
986 void AliAnalysisTaskJetCore::Terminate(const Option_t *)
988 // Draw result to the screen
989 // Called once at the end of the query
991 if (!GetOutputData(1))
1000 Int_t AliAnalysisTaskJetCore::GetListOfTracks(TList *list){
1003 AliAODEvent *aod = 0;
1005 if(!fESD)aod = fAODIn;
1012 for(int it = 0;it < aod->GetNumberOfTracks();++it){
1013 AliAODTrack *tr = aod->GetTrack(it);
1014 Bool_t bGood = false;
1015 if(fFilterType == 0)bGood = true;
1016 else if(fFilterType == 1)bGood = tr->IsHybridTPCConstrainedGlobal();
1017 else if(fFilterType == 2)bGood = tr->IsHybridGlobalConstrainedGlobal();
1018 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask)))continue;
1019 if(bGood==false) continue;
1020 if(TMath::Abs(tr->Eta())>0.9)continue;
1021 if(tr->Pt()<0.15)continue;
1024 if(fFilterType==2 && fFilterMaskBestPt>0){// only set the trigger track index for good quality tracks
1025 if(tr->TestFilterBit(fFilterMaskBestPt)){
1041 // else if (type == kTrackAODMCCharged) {
1042 // TClonesArray *tca = dynamic_cast<TClonesArray*>(aod->FindListObject(AliAODMCParticle::StdBranchName()));
1043 // if(!tca)return iCount;
1044 // for(int it = 0;it < tca->GetEntriesFast();++it){
1045 // AliAODMCParticle *part = dynamic_cast<AliAODMCParticle*>(tca->At(it));
1046 // if(!part)continue;
1047 // if(part->Pt()<0.15)continue;
1048 // if(!part->IsPhysicalPrimary())continue;
1049 // if(part->Charge()==0)continue;
1050 // if(TMath::Abs(part->Eta())>0.9)continue;
1053 // if(part->Pt()>ptmax){ ptmax=part->Pt();
1054 // index=iCount-1;}}}
1059 Int_t AliAnalysisTaskJetCore::GetHardestTrackBackToJet(AliAODJet *jetbig){
1061 AliAODEvent *aod = 0;
1062 if(!fESD)aod = fAODIn;
1069 for(int it = 0;it < aod->GetNumberOfTracks();++it){
1070 AliAODTrack *tr = aod->GetTrack(it);
1071 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask)))continue;
1072 if(TMath::Abs(tr->Eta())>0.9)continue;
1073 if(tr->Pt()<0.15)continue;
1075 dphi=RelativePhi(tr->Phi(),jetbig->Phi());
1076 if(TMath::Abs(dphi)<TMath::Pi()-0.6) continue;
1077 if(tr->Pt()>ptmax){ ptmax=tr->Pt();
1093 Int_t AliAnalysisTaskJetCore::GetListOfTracksCloseToJet(TList *list,AliAODJet *jetbig){
1096 AliAODEvent *aod = 0;
1097 if(!fESD)aod = fAODIn;
1100 for(int it = 0;it < aod->GetNumberOfTracks();++it){
1101 AliAODTrack *tr = aod->GetTrack(it);
1102 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask)))continue;
1103 if(TMath::Abs(tr->Eta())>0.9)continue;
1104 if(tr->Pt()<0.15)continue;
1105 Double_t disR=jetbig->DeltaR(tr);
1106 if(disR>0.8) continue;
1108 //cout<<fAOD->GetNumberOfTracks()<<" "<<tr->Pt()<<endl;
1127 Int_t AliAnalysisTaskJetCore::GetNInputTracks()
1130 Int_t nInputTracks = 0;
1131 AliAODEvent *aod = 0;
1132 if(!fESD)aod = fAODIn;
1134 TString jbname(fJetBranchName[1]);
1135 //needs complete event, use jets without background subtraction
1136 for(Int_t i=1; i<=3; ++i){
1137 if(jbname.Contains(Form("B%d",i))) jbname.ReplaceAll(Form("B%d",i),"B0");
1139 // use only HI event
1140 if(jbname.Contains("AODextraonly")) jbname.ReplaceAll("AODextraonly","AOD");
1141 if(jbname.Contains("AODextra")) jbname.ReplaceAll("AODextra","AOD");
1143 if(fDebug) Printf("Multiplicity from jet branch %s", jbname.Data());
1144 TClonesArray *tmpAODjets = dynamic_cast<TClonesArray*>(aod->FindListObject(jbname.Data()));
1146 Printf("Jet branch %s not found", jbname.Data());
1147 Printf("AliAnalysisTaskJetCore::GetNInputTracks FAILED");
1151 for (Int_t iJet=0; iJet<tmpAODjets->GetEntriesFast(); iJet++){
1152 AliAODJet *jet = dynamic_cast<AliAODJet*>((*tmpAODjets)[iJet]);
1154 TRefArray *trackList = jet->GetRefTracks();
1155 Int_t nTracks = trackList->GetEntriesFast();
1156 nInputTracks += nTracks;
1157 if(fDebug) Printf("#jet%d: %d tracks", iJet, nTracks);
1159 if(fDebug) Printf("---> input tracks: %d", nInputTracks);
1161 return nInputTracks;
1166 Double_t AliAnalysisTaskJetCore::RelativePhi(Double_t mphi,Double_t vphi){
1168 if (vphi < -1*TMath::Pi()) vphi += (2*TMath::Pi());
1169 else if (vphi > TMath::Pi()) vphi -= (2*TMath::Pi());
1170 if (mphi < -1*TMath::Pi()) mphi += (2*TMath::Pi());
1171 else if (mphi > TMath::Pi()) mphi -= (2*TMath::Pi());
1172 double dphi = mphi-vphi;
1173 if (dphi < -1*TMath::Pi()) dphi += (2*TMath::Pi());
1174 else if (dphi > TMath::Pi()) dphi -= (2*TMath::Pi());
1175 return dphi;//dphi in [-Pi, Pi]
1178 Int_t AliAnalysisTaskJetCore::GetPhiBin(Double_t phi)
1181 if(!(TMath::Abs(phi)<=2*TMath::Pi())){AliError("phi w.r.t. RP out of defined range");return -1;}
1182 Double_t phiwrtrp=TMath::ACos(TMath::Abs(TMath::Cos(phi)));
1183 phibin=Int_t(fNRPBins*phiwrtrp/(0.5*TMath::Pi()));
1184 if(phibin<0||phibin>=fNRPBins){AliError("Phi Bin not defined");}
1191 THnSparse* AliAnalysisTaskJetCore::NewTHnSparseF(const char* name, UInt_t entries)
1193 // generate new THnSparseF, axes are defined in GetDimParams()
1196 UInt_t tmp = entries;
1199 tmp = tmp &~ -tmp; // clear lowest bit
1202 TString hnTitle(name);
1203 const Int_t dim = count;
1210 while(c<dim && i<32){
1214 GetDimParams(i, label, nbins[c], xmin[c], xmax[c]);
1215 hnTitle += Form(";%s",label.Data());
1223 return new THnSparseF(name, hnTitle.Data(), dim, nbins, xmin, xmax);
1226 void AliAnalysisTaskJetCore::GetDimParams(Int_t iEntry, TString &label, Int_t &nbins, Double_t &xmin, Double_t &xmax)
1228 // stores label and binning of axis for THnSparse
1230 const Double_t pi = TMath::Pi();
1235 label = "V0 centrality (%)";
1244 label = "corrected jet pt";
1287 label = "leading track";
1295 label = "trigger track";