14 #include <TProfile2D.h> 15 #include <THnSparse.h> 19 #include <TClonesArray.h> 24 #include "AliAODEvent.h" 25 #include "AliAODInputHandler.h" 26 #include "AliAnalysisManager.h" 27 #include "AliAnalysisTask.h" 28 #include "AliCentrality.h" 30 #include "AliESDEvent.h" 31 #include "AliESDInputHandler.h" 32 #include "AliESDtrackCuts.h" 33 #include "AliVParticle.h" 34 #include "AliInputEventHandler.h" 35 #include "AliEMCALGeometry.h" 37 #include "TGeoManager.h" 38 #include "AliMCEvent.h" 39 #include "AliMCParticle.h" 41 #include "AliGenEventHeader.h" 42 #include "AliGenPythiaEventHeader.h" 43 #include "TGeoGlobalMagField.h" 45 #include "AliAODJet.h" 63 fVerbosity(0), fEDSFileCounter(0), fNTracksPerChunk(0), fRejectPileup(kFALSE), fRejectExoticTrigger(kTRUE),
64 fAnaType(0), fPeriod(
"lhc11a"), fESD(0), fAOD(0), fMC(0), fStack(0), fTrackArray(0x0), fClusterArray(0x0), fMcPartArray(0x0),
65 fIsMC(kFALSE), fPhySelForMC(kFALSE), fChargedMC(kFALSE), fXsecScale(0.),
66 fCentrality(99), fZVtxMax(10),
67 fTriggerType(-1), fCheckTriggerMask(kTRUE), fIsTPCOnlyVtx(kFALSE),
68 fIsExoticEvent3GeV(kFALSE), fIsExoticEvent5GeV(kFALSE), fIsEventTriggerBit(kFALSE), fOfflineTrigger(kFALSE), fTriggerMask(0x0),
69 fGeom(0x0), fRecoUtil(0x0),
70 fEsdTrackCuts(0x0), fHybridTrackCuts1(0x0), fHybridTrackCuts2(0x0),fTrackCutsType(0), fKinCutType(0), fTrkEtaMax(0.9),
71 fdEdxMin(73), fdEdxMax(90), fEoverPMin(0.8), fEoverPMax(1.2),
72 fMatchType(0), fRejectExoticCluster(kTRUE), fRemoveBadChannel(kFALSE), fUseGoodSM(kFALSE),
73 fStudySubEInHC(kFALSE), fStudyMcOverSubE(kFALSE),
74 fElectronRejection(kFALSE), fHadronicCorrection(kFALSE), fFractionHC(0.), fHCLowerPtCutMIP(1e4), fClusterEResolution(0x0),
75 fJetNEFMin(0.01), fJetNEFMax(0.98),
76 fSpotGoodJet(kFALSE), fFindChargedOnlyJet(kFALSE), fFindNeutralOnlyJet(kFALSE),
77 fCheckTrkEffCorr(kFALSE), fTrkEffCorrCutZ(0.3), fRandomGen(0x0), fRunUE(0), fCheckTPCOnlyVtx(0), fRunSecondaries(0),
78 fSysJetTrigEff(kFALSE), fVaryJetTrigEff(0),
79 fSysTrkPtRes(kFALSE), fVaryTrkPtRes(0), fSysTrkEff(kFALSE), fVaryTrkEff(0.),
80 fSysTrkClsMth(kFALSE), fCutdEta(0.05), fCutdPhi(0.05),
81 fSysNonLinearity(kFALSE), fNonLinear(0x0), fSysClusterEScale(kFALSE), fVaryClusterEScale(0), fSysClusterERes(kFALSE), fVaryClusterERes(0),
83 fNonStdBranch(
""), fNonStdFile(
""), fAlgorithm(
"aKt"), fRadius(
"0.4"), fRecombinationScheme(5),
84 fConstrainChInEMCal(kFALSE), fRejectNK(kFALSE), fRejectWD(kFALSE), fSmearMC(kFALSE), fTrkPtResData(0x0),
85 fOutputList(0x0), fSaveQAHistos(kTRUE), fhJetEventCount(0x0), fhJetEventStat(0x0), fhEventStatTPCVtx(0x0), fhChunkQA(0x0)
91 DefineInput(0, TChain::Class());
92 DefineOutput(1, TList::Class());
94 for(
Int_t i=0; i<2; i++)
106 for(
Int_t k=0; k<2; k++)
115 for(
Int_t j=0; j<5; j++)
119 for(
Int_t k=0; k<2; k++)
146 for(
Int_t k=0; k<2; k++)
161 for(
Int_t k=0; k<2; k++)
163 for(
Int_t l=0; l<2; l++)
172 for(
Int_t i=0; i<2; i++)
187 for(
Int_t s=0; s<3; s++)
189 for(
Int_t a=0; a<2; a++)
204 for(
Int_t j=0; j<3; j++)
209 for(
Int_t i=0; i<10; i++)
248 DefineInput(0, TChain::Class());
249 DefineOutput(1, TList::Class());
251 for(
Int_t i=0; i<2; i++)
263 for(
Int_t k=0; k<2; k++)
272 for(
Int_t j=0; j<5; j++)
276 for(
Int_t k=0; k<2; k++)
303 for(
Int_t k=0; k<2; k++)
318 for(
Int_t k=0; k<2; k++)
320 for(
Int_t l=0; l<2; l++)
329 for(
Int_t i=0; i<2; i++)
344 for(
Int_t s=0; s<3; s++)
346 for(
Int_t a=0; a<2; a++)
361 for(
Int_t j=0; j<3; j++)
366 for(
Int_t i=0; i<10; i++)
383 for(
Int_t s=0; s<3; s++)
385 for(
Int_t a=0; a<2; a++)
400 for(
Int_t i=0; i<3; i++)
405 for(
Int_t i=0; i<10; i++)
412 for(
Int_t j=0; j<2; j++)
453 const Int_t nTrkPtBins = 100;
454 const Float_t lowTrkPtBin=0, upTrkPtBin=100.;
458 for(
Int_t i=0; i<nbins+1; i++)
465 fhJetEventStat =
new TH1F(
"fhJetEventStat",
"Event statistics for jet analysis",12,0,12);
480 fhJetEventCount =
new TH1F(
"fhJetEventCount",
"Event statistics for jet analysis",12,0,12);
495 fhEventStatTPCVtx =
new TH1F(
"fhEventStatTPCVtx",
"Event statistics for TPC only vertex",9,0,9);
508 fhChunkQA =
new TH1F(
"fhChunkQA",
"# of hybrid tracks per chunk",200,0,200);
511 const Int_t dim1 = 3;
512 Int_t nBins1[dim1] = {200,50,110};
514 Double_t upBin1[dim1] = {200,0.5,1.1};
516 const Int_t dim2 = 3;
517 Int_t nBins2[dim2] = {200,50,50};
519 Double_t upBin2[dim2] = {200,0.5,50};
521 const char* triggerName[3] = {
"MB",
"EMC",
"MC"};
522 const char* triggerTitle[3] = {
"MB",
"EMCal-trigger",
"MC true"};
523 const char* fraction[5] = {
"MIP",
"30",
"50",
"70",
"100"};
524 const char* exotic[2] = {
"3GeV",
"5GeV"};
525 const char* vertexType[2] = {
"All MB",
"MB with vertex"};
526 const char *vertexName[2] = {
"All",
"Vertex"};
527 const char *clusterizerName[2] = {
"before",
"after"};
528 const char *UEName[2] = {
"charged",
"charged_neutral"};
529 const char *UETitle[2] = {
"charged",
"charged+neutral"};
530 const char *UEEventName[2] = {
"LeadingJet",
"Back-To-Back"};
534 for(
Int_t i=0; i<2; i++)
536 fhNTrials[i] =
new TH1F(Form(
"MC_%s_fhNTrials",triggerName[i]),Form(
"MC-%s: # of trials",triggerName[i]),1,0,1);
539 fVertexGenZ[i] =
new TH1F(Form(
"%s_fVertexGenZ",vertexName[i]),Form(
"Distribution of vertex z (%s); z (cm)",vertexType[i]),60,-30,30);
544 for(
Int_t i=0; i<3; i++)
546 if(!
fIsMC && i==2)
continue;
552 fEventZ[i] =
new TH1F(Form(
"%s_fEventZ",triggerName[i]),Form(
"%s: Distribution of vertex z; z (cm)",triggerTitle[i]),60,-30,30);
558 if(!
fRadius.Contains(
"0.4") && r==0)
continue;
559 if(!
fRadius.Contains(
"0.2") && r==1)
continue;
560 if(!
fRadius.Contains(
"0.3") && r==2)
continue;
562 fJetCount[i][r] =
new TH1F(Form(
"%s_fJetCount_%1.1f",triggerName[i],
kRadius[r]),Form(
"%s: jet p_{T} in EMCal (R=%1.1f,Z<0.98);p_{T}^{jet} (GeV/c)",triggerTitle[i],
kRadius[r]),nbins,xbins);
565 fhNeutralPtInJet[i][r] =
new TH2F(Form(
"%s_fhNeutralPtInJet_%1.1f",triggerName[i],
kRadius[r]),Form(
"%s: p_{T} of neutral constituents vs jet p_{T} in EMCal(R=%1.1f,Z<0.98);p_{T}^{jet} (GeV/c); p_{T} (GeV/c)",triggerTitle[i],
kRadius[r]),nbins,xbins,nTrkPtBins*10,lowTrkPtBin,upTrkPtBin);
568 fhTrigNeuPtInJet[i][r] =
new TH2F(Form(
"%s_fhTrigNeuPtInJet_%1.1f",triggerName[i],
kRadius[r]),Form(
"%s: p_{T} of triggered neutral constituents vs jet p_{T} in EMCal(R=%1.1f,Z<0.98);p_{T}^{jet} (GeV/c); p_{T} (GeV/c)",triggerTitle[i],
kRadius[r]),nbins,xbins,nTrkPtBins*10,lowTrkPtBin,upTrkPtBin);
571 fhChargedPtInJet[i][r] =
new TH2F(Form(
"%s_fhChargedPtInJet_%1.1f",triggerName[i],
kRadius[r]),Form(
"%s: p_{T} of charged constituents vs jet p_{T} in EMCal (R=%1.1f,Z<0.98);p_{T}^{jet} (GeV/c); p_{T} (GeV/c)",triggerTitle[i],
kRadius[r]),nbins,xbins,nTrkPtBins*10,lowTrkPtBin,upTrkPtBin);
574 fhLeadNePtInJet[i][r] =
new TH2F(Form(
"%s_fhLeadNePtInJet_%1.1f",triggerName[i],
kRadius[r]),Form(
"%s: p_{T} of leading neutral constituent vs jet p_{T} in EMCal(R=%1.1f,Z<0.98);p_{T}^{jet} (GeV/c); p_{T}^{ne} (GeV/c)",triggerTitle[i],
kRadius[r]),nbins,xbins,100,0,100);
577 fhLeadChPtInJet[i][r] =
new TH2F(Form(
"%s_fhLeadChPtInJet_%1.1f",triggerName[i],
kRadius[r]),Form(
"%s: p_{T} of leading charged constituent vs jet p_{T} in EMCal(R=%1.1f,Z<0.98);p_{T}^{jet} (GeV/c); p_{T}^{ch} (GeV/c)",triggerTitle[i],
kRadius[r]),nbins,xbins,100,0,100);
580 fhJetPtVsZ[i][r] =
new TH3F(Form(
"%s_fhJetPtVsZ_%1.1f",triggerName[i],
kRadius[r]),Form(
"%s: jet p_{T} vs Z_{h} vs constituent type in EMCal (R=%1.1f);p_{T}^{jet} (GeV/c); Z_{h};constituent type",triggerTitle[i],
kRadius[r]),200,0,200,110,-0.05,1.05,4,0,4);
583 fJetEnergyFraction[i][r] =
new THnSparseF(Form(
"%s_fJetEnergyFraction_%1.1f",triggerName[i],
kRadius[r]),Form(
"%s: Jet p_{T} vs radius vs energy fraction in EMCal (R=%1.1f,Z<0.98); p_{T};R;Fraction",triggerName[i],
kRadius[r]),dim1,nBins1,lowBin1,upBin1);
586 fJetNPartFraction[i][r] =
new THnSparseF(Form(
"%s_fJetNPartFraction_%1.1f",triggerName[i],
kRadius[r]),Form(
"%s: Jet p_{T} vs radius vs NPart in EMCal (R=%1.1f,Z<0.98); p_{T};R;NPart",triggerName[i],
kRadius[r]),dim2,nBins2,lowBin2,upBin2);
591 fhJetPtInExoticEvent[i][r] =
new TH1F(Form(
"EMC_fhJetPtInExoticEvent_%1.1f_%s",
kRadius[r],exotic[i]),Form(
"EMC: jet p_{T} in events with exotic cluster > %s (R=%1.1f,Z<0.98);p_{T}^{jet} (GeV/c)",exotic[i],
kRadius[r]),nbins,xbins);
594 fRelTrkCon[i][r] =
new TH3F(Form(
"%s_fRelTrkCon_%1.1f",triggerName[i],
kRadius[r]),Form(
"%s: jet p_{T} vs (sum p_{T}^{ch})/p_{T}^{jet} vs track class in EMCal (R=%1.1f,Z<0.98);p_{T}^{jet} (GeV/c); (sum p_{T}^{ch})/p_{T}^{jet}; track class",triggerTitle[i],
kRadius[r]),200,0,200,110,-0.05,1.05,3,0,3);
597 fhFcrossVsZleading[i][r] =
new TH3F(Form(
"%s_fhFcrossVsZleading_%1.1f",triggerName[i],
kRadius[r]),Form(
"%s: jet p_{T} vs F_{cross} vs Z_{leading}^{ne} in EMCal (R=%1.1f,Z<0.98);p_{T}^{jet} (GeV/c);F_{cross};Z_{leading}^{ne}",triggerTitle[i],
kRadius[r]),200,0,200,55,-0.05,1.05,55,-0.05,1.05);
600 fhChLeadZVsJetPt[i][r] =
new TH2F(Form(
"%s_fhChLeadZVsJetPt_%1.1f",triggerName[i],
kRadius[r]),Form(
"%s: Z of leading charged constituent vs jet p_{T} in EMCal(R=%1.1f,Z<0.98);p_{T}^{jet} (GeV/c); Z_{leading}^{ch}",triggerTitle[i],
kRadius[r]),nbins,xbins,100,0,1);
603 fhJetPtWithTrkThres[i][r] =
new TH2F(Form(
"%s_fhJetPtWithTrkThres_%1.1f",triggerName[i],
kRadius[r]),Form(
"%s: p_{T} of jets containing tracks above certain threshold (15,25,40 GeV/c) (EMCal, R=%1.1f,Z<0.98);Threshold type;p_{T}^{jet} (GeV/c)",triggerTitle[i],
kRadius[r]),3,0,3,nbins,xbins);
606 fhJetPtWithClsThres[i][r] =
new TH2F(Form(
"%s_fhJetPtWithClsThres_%1.1f",triggerName[i],
kRadius[r]),Form(
"%s: p_{T} of jets containing clusters above certain threshold (15,25,40 GeV) (EMCal, R=%1.1f,Z<0.98);Threshold type;p_{T}^{jet} (GeV/c)",triggerTitle[i],
kRadius[r]),3,0,3,nbins,xbins);
609 fhJetPtVsLowPtCons[i][r][0] =
new TH2F(Form(
"%s_fhJetPtVsLowPtCons_150-300MeV_%1.1f",triggerName[i],
kRadius[r]),Form(
"%s: energy carried by constituents in 150-300MeV (EMCal, R=%1.1f,Z<0.98);p_{T}^{jet} (GeV/c);p_{T,em}^{low} (GeV/c)",triggerTitle[i],
kRadius[r]),nbins,xbins,100,0,1);
612 fhJetPtVsLowPtCons[i][r][1] =
new TH2F(Form(
"%s_fhJetPtVsLowPtCons_300-500MeV_%1.1f",triggerName[i],
kRadius[r]),Form(
"%s: energy carried by constituents in 300-500MeV (EMCal, R=%1.1f,Z<0.98);p_{T}^{jet} (GeV/c);p_{T,em}^{low} (GeV/c)",triggerTitle[i],
kRadius[r]),nbins,xbins,100,0,1);
617 fhJetInTPCOnlyVtx[i][r] =
new TH3F(Form(
"%s_fhJetInTPCOnlyVtx_%1.1f",triggerName[i],
kRadius[r]),Form(
"%s: jet pt in events with only TPC vertex (Full, R=%1.1f);p_{T}^{jet} (GeV/c);#phi;#eta",triggerTitle[i],
kRadius[r]),20,0,100,36,0,360,20,-1,1);
623 for(
Int_t k=0; k<5; k++)
625 fhSubClsEVsJetPt[i][r][k] =
new TH2F(Form(
"%s_fhSubClsEVsJetPt_%s_%1.1f",triggerName[i],fraction[k],
kRadius[r]),Form(
"%s: relative %s%% subtracted cluster Et vs jet pt (R=%1.1f);jet p_{T} (GeV/c);E_{t}^{sub}/p_{T,jet}",triggerTitle[i],fraction[k],
kRadius[r]),nbins,xbins,50,0,0.5);
628 fhHCTrkPtClean[i][r][k] =
new TH2F(Form(
"%s_fhHCTrkPtClean_%s_%1.1f",triggerName[i],fraction[k],
kRadius[r]),Form(
"%s: sum of track p_{T} that are cleanly subtracted vs jet pt (%s%%, R=%1.1f);jet p_{T} (GeV/c);#sum(p_{T,trk}^{clean})/p_{T,jet}",triggerTitle[i],fraction[k],
kRadius[r]),nbins,xbins,100,-0.005,0.995);
631 fhHCTrkPtAmbig[i][r][k] =
new TH2F(Form(
"%s_fhHCTrkPtAmbig_%s_%1.1f",triggerName[i],fraction[k],
kRadius[r]),Form(
"%s: sum of track p_{T} that are ambiguously subtracted vs jet pt (%s%%, R=%1.1f);jet p_{T} (GeV/c);#sum(p_{T,trk}^{ambig})/p_{T,jet}",triggerTitle[i],fraction[k],
kRadius[r]),nbins,xbins,100,-0.005,0.995);
639 fhNMatchedTrack[i] =
new TH1F(Form(
"%s_fhNMatchedTrack",triggerName[i]),Form(
"%s: # of matched tracks per cluster; N_{mth}",triggerTitle[i]),5,0,5);
642 for(
Int_t j=0; j<4; j++)
644 fhSubEVsTrkPt[i][j] =
new TH2F(Form(
"%s_fhSubEVsTrkPt_%s",triggerName[i],fraction[j+1]),Form(
"%s: fractional subtracted energy (%s%% HC);#sum(p_{ch,T}^{mth}) (GeV/c);E_{sub}/#sum(P_{ch}^{mth})",triggerTitle[i],fraction[j+1]),50,0,50,110,0,1.1);
652 for(
Int_t k=0; k<2; k++)
654 for(
Int_t l=0; l<2; l++)
656 fhUEJetPtNorm[i][k][l] =
new TH1F(Form(
"%s_fhUEJetPtNorm_%s_%s",triggerName[i],UEName[k],UEEventName[l]),Form(
"%s: leading jet p_{T} in TPC (%s in %s event);p_{T,jet}^{ch} (GeV/c)",triggerTitle[i],UETitle[k], UEEventName[l]),nbins,xbins);
659 fhUEJetPtVsSumPt[i][k][l] =
new TH2F(Form(
"%s_fhUEJetPtVsSumPt_%s_%s",triggerName[i],UEName[k],UEEventName[l]),Form(
"%s: leading jet p_{T} vs underlying event contribution (R=0.4,%s in %s event);p_{T,jet}^{ch} (GeV/c);p_{T,UE}^{ch} (GeV/c)",triggerTitle[i],UETitle[k], UEEventName[l]),nbins,xbins,500,0,50);
662 fhUEJetPtVsConsPt[i][k][l] =
new TH2F(Form(
"%s_fhUEJetPtVsConsPt_%s_%s",triggerName[i],UEName[k],UEEventName[l]),Form(
"%s: leading jet p_{T} vs constituent pt in UE (R=0.4,%s in %s event);p_{T,jet}^{ch} (GeV/c);p_{T,cons}^{ch} (GeV/c)",triggerTitle[i],UETitle[k], UEEventName[l]),nbins,xbins,500,0,50);
670 fhClsE[i] =
new TH1F(Form(
"%s_fhClsE",triggerName[i]),Form(
"%s: cluster E;E (GeV)",triggerTitle[i]),1000,0,100);
676 for(
Int_t k=0; k<2; k++)
678 fhSysClusterE[i][k] =
new TH1F(Form(
"%s_fhSysClusterE_%sHC",triggerName[i],clusterizerName[k]),Form(
"%s: cluster E %s hadronic correction;E (GeV)",triggerTitle[i],clusterizerName[k]),100,0,100);
681 fhSysNCellVsClsE[i][k] =
new TH2F(Form(
"%s_fhSysNCellVsClsE_%sHC",triggerName[i],clusterizerName[k]),Form(
"%s: NCell vs cluster E %s hadronic correction;E (GeV);NCell",triggerTitle[i],clusterizerName[k]),100,0,100,50,0,50);
694 if(!
fRadius.Contains(
"0.4") && r==0)
continue;
695 if(!
fRadius.Contains(
"0.2") && r==1)
continue;
696 if(!
fRadius.Contains(
"0.3") && r==2)
continue;
697 for(
Int_t i=0; i<5; i++)
699 fHCOverSubE[r][i] =
new TH2F(Form(
"%s_HC_over_sub_e_%s_%1.1f",triggerName[2],fraction[i],
kRadius[r]),Form(
"%s: oversubtracted neutral Et by %s%% HC (R=%1.1f);particle jet p_{T} (GeV/c);#DeltaE_{t} (GeV)",triggerName[2],fraction[i],
kRadius[r]),nbins,xbins,200,-49.75,50.25);
701 fHCOverSubEFrac[r][i] =
new TH2F(Form(
"%s_HC_over_sub_e_frac_%s_%1.1f",triggerName[2],fraction[i],
kRadius[r]),Form(
"%s: relative oversubtracted neutral Et fraction by %s%% HC (R=%1.1f);jet p_{T} (GeV/c);#DeltaE_{t}/p_{T}^{jet}",triggerName[2],fraction[i],
kRadius[r]),nbins,xbins,200,-0.995,1.005);
708 for(
Int_t i=0; i<2; i++)
710 for(
Int_t r=0; r<3; r++)
712 fhNKFracVsJetPt[i][r] =
new TH2F(Form(
"%s_fhNKFracVsJetPt_%1.1f_EtaCut%1.1f",triggerName[2],
kRadius[r],i*0.5+0.5),Form(
"%s: energy fraction carried by n,k^{0}_{L} vs jet p_{T} (R=%1.1f,|#eta|<%1.1f);p_{T,jet} (GeV/c);fraction",triggerName[2],
kRadius[r],i*0.5+0.5),nbins,xbins,200,0,1);
715 fhWeakFracVsJetPt[i][r] =
new TH2F(Form(
"%s_fhWeakFracVsJetPt_%1.1f_EtaCut%1.1f",triggerName[2],
kRadius[r],i*0.5+0.5),Form(
"%s: energy fraction carried by k^{0}_{S},hyperon vs jet p_{T} (R=%1.1f,|#eta|<%1.1f);p_{T,jet} (GeV/c);fraction",triggerName[2],
kRadius[r],i*0.5+0.5),nbins,xbins,200,0,1);
718 fhJetResponseNK[i][r] =
new TH2F(Form(
"%s_fhJetResponseNK_%1.1f_EtaCut%1.1f",triggerName[2],
kRadius[r],i*0.5+0.5),Form(
"%s: jet response due to missing n and k^{0}_{L} (R=%1.1f,|#eta|<%1.1f);p_{T,jet}^{gen} (GeV/c);p_{T,jet}^{rec} (GeV/c)",triggerName[2],
kRadius[r],i*0.5+0.5),nbins,xbins,nbins,xbins);
721 fhJetResponseWP[i][r] =
new TH2F(Form(
"%s_fhJetResponseWP_%1.1f_EtaCut%1.1f",triggerName[2],
kRadius[r],i*0.5+0.5),Form(
"%s: jet response due to k^{0}_{S}, #Lambda and hyperon (R=%1.1f,|#eta|<%1.1f);p_{T,jet}^{gen} (GeV/c);p_{T,jet}^{rec} (GeV/c)",triggerName[2],
kRadius[r],i*0.5+0.5),nbins,xbins,nbins,xbins);
724 fhJetResolutionNK[i][r] =
new TH2F(Form(
"%s_fhJetResolutionNK_%1.1f_EtaCut%1.1f",triggerName[2],
kRadius[r],i*0.5+0.5),Form(
"%s: jet response due to missing n and k^{0}_{L}: (p_{T,jet}^{rec}-p_{T,jet}^{gen})/p_{T,jet}^{rec} vs p_{T,jet}^{rec} (R=%1.1f,|#eta|<%1.1f);p_{T,jet}^{rec} (GeV/c);#Deltap_{T}/p_{T}",triggerName[2],
kRadius[r],i*0.5+0.5),nbins,xbins,200,-0.995,1.005);
727 fhJetResolutionWP[i][r] =
new TH2F(Form(
"%s_fhJetResolutionWP_%1.1f_EtaCut%1.1f",triggerName[2],
kRadius[r],i*0.5+0.5),Form(
"%s: jet response due to k^{0}_{S}, #Lambda and hyperon: (p_{T,jet}^{rec}-p_{T,jet}^{gen})/p_{T,jet}^{rec} vs p_{T,jet}^{rec} (R=%1.1f,|#eta|<%1.1f);p_{T,jet}^{rec} (GeV/c);#Deltap_{T}/p_{T}",triggerName[2],
kRadius[r],i*0.5+0.5),nbins,xbins,200,-0.995,1.005);
730 fhJetResponseNKSM[i][r] =
new TH2F(Form(
"%s_fhJetResponseNKSM_%1.1f_EtaCut%1.1f",triggerName[2],
kRadius[r],i*0.5+0.5),Form(
"%s: jet response due to missing n and k^{0}_{L} via matching (R=%1.1f,|#eta|<%1.1f);p_{T,jet}^{gen} (GeV/c);p_{T,jet}^{rec} (GeV/c)",triggerName[2],
kRadius[r],i*0.5+0.5),nbins,xbins,nbins,xbins);
733 fhJetResponseWPSM[i][r] =
new TH2F(Form(
"%s_fhJetResponseWPSM_%1.1f_EtaCut%1.1f",triggerName[2],
kRadius[r],i*0.5+0.5),Form(
"%s: jet response due to k^{0}_{S}, #Lambda and hyperon via matching(R=%1.1f,|#eta|<%1.1f);p_{T,jet}^{gen} (GeV/c);p_{T,jet}^{rec} (GeV/c)",triggerName[2],
kRadius[r],i*0.5+0.5),nbins,xbins,nbins,xbins);
736 fhJetResolutionNKSM[i][r] =
new TH3F(Form(
"%s_fhJetResolutionNKSM_%1.1f_EtaCut%1.1f",triggerName[2],
kRadius[r],i*0.5+0.5),Form(
"%s: jet resolution due to missing n and k^{0}_{L} via matching (R=%1.1f,|#eta|<%1.1f);p_{T,jet}^{rec} (GeV/c);#Deltap_{T,jet}/p_{T,jet}^{rec};dR",triggerName[2],
kRadius[r],i*0.5+0.5),220,0,220,200,-0.995,1.005,100,0,1);
739 fhJetResolutionWPSM[i][r] =
new TH3F(Form(
"%s_fhJetResolutionWPSM_%1.1f_EtaCut%1.1f",triggerName[2],
kRadius[r],i*0.5+0.5),Form(
"%s: jet resolution due tok^{0}_{S}, #Lambda and hyperon via matching (R=%1.1f,|#eta|<%1.1f);p_{T,jet}^{rec} (GeV/c);#Deltap_{T,jet}/p_{T,jet}^{rec};dR",triggerName[2],
kRadius[r],i*0.5+0.5),220,0,220,200,-0.995,1.005,100,0,1);
746 printf(
"\n=======================================\n");
747 printf(
"===== Jet task configuration ==========\n");
751 const char* species[3] = {
"in",
"ch",
"ne"};
752 const char* algorithm[2] = {
"akt",
"kt"};
753 const char* radii[
kNRadii] = {
"04",
"02",
"03"};
754 for(
Int_t s=0; s<3; s++)
758 for(
Int_t a=0; a<2; a++)
760 if(!
fAlgorithm.Contains(
"aKt") && a==0)
continue;
761 if(!
fAlgorithm.Contains(
"kt") && a==1)
continue;
764 if(!
fRadius.Contains(
"0.4") && r==0)
continue;
765 if(!
fRadius.Contains(
"0.2") && r==1)
continue;
766 if(!
fRadius.Contains(
"0.3") && r==2)
continue;
769 fJetTCA[s][a][r] =
new TClonesArray(
"AliAODJet",0);
770 fJetTCA[s][a][r]->SetName(Form(
"Jet_%s_%s_%s_%s",species[s],algorithm[a],radii[r],
fNonStdBranch.Data()));
772 printf(
"Add branch: Jet_%s_%s_%s_%s\n",species[s],algorithm[a],radii[r],
fNonStdBranch.Data());
776 if(a==0) fDetJetFinder[s][a][r]->SetAlgorithm(fastjet::antikt_algorithm);
777 if(a==1) fDetJetFinder[s][a][r]->SetAlgorithm(fastjet::kt_algorithm);
779 fDetJetFinder[s][a][r]->SetR(
kRadius[r]);
780 fDetJetFinder[s][a][r]->SetMaxRap(0.9);
781 fDetJetFinder[s][a][r]->Clear();
792 printf(
"Add branch: Jet_mc_truth_in_akt_%s_%s\n",radii[r],
fNonStdBranch.Data());
796 fTrueJetFinder[r]->SetAlgorithm(fastjet::antikt_algorithm);
797 fTrueJetFinder[r]->SetR(
kRadius[r]);
798 fTrueJetFinder[r]->SetMaxRap(0.9);
800 fTrueJetFinder[r]->Clear();
811 TFile f (
"/project/projectdirs/alice/marr/Analysis/2.76Jet/CorrectionFunctions/TrkEffFit.root",
"read");
812 for(
Int_t i=0; i<3; i++)
814 fTrkEffFunc[i] =
new TF1(*((TF1*)f.Get(Form(
"Trk_eff_fit_%d",i+1))));
818 if(
fPeriod.CompareTo(
"lhc11a",TString::kIgnoreCase)==0 ||
fPeriod.CompareTo(
"lhc11aJet",TString::kIgnoreCase)==0)
820 TFile f1 (
"/project/projectdirs/alice/marr/Analysis/2.76Jet/CorrectionFunctions/TrkEffSampling.root",
"read");
821 for(
Int_t j=0; j<2; j++)
824 if(
fPeriod.CompareTo(
"lhc11aJet",TString::kIgnoreCase)==0) tmp = 2;
840 const char *secondaryName[3] = {
"k0S",
"lamda",
"hyperon"};
841 TFile f2 (
"/project/projectdirs/alice/marr/Analysis/2.76Jet/CorrectionFunctions/SecondaryResponse.root",
"read");
842 for(
Int_t j=0; j<3; j++)
850 TString name =
"TriggerCurve.root";
851 if(
fAnaType==0) name =
"/project/projectdirs/alice/marr/Analysis/2.76Jet/CorrectionFunctions/TriggerCurve.root";
852 TFile f (name.Data(),
"read");
856 for(
Int_t i=0; i<10; i++)
858 fTriggerEfficiency[i] =
new TF1(*((TF1*)f.Get(Form(
"lhc11a_TriggerEfficiency_SM%d_fit",i))));
868 fGeom = AliEMCALGeometry::GetInstance(
"EMCAL_COMPLETEV1");
871 AliError(
"No EMCal geometry is available!");
886 for(
Int_t ieta=0; ieta<36; ieta++)
887 for(
Int_t iphi=0; iphi<8; iphi++)
896 fNonLinear =
new TF1(
"TB_oldBest",
"([0])*(1./(1.+[1]*exp(-x/[2]))*1./(1.+[3]*exp((x-[4])/[5])))*1/([6])",0.1,110.);
897 fNonLinear->SetParameters(0.99078, 0.161499, 0.655166, 0.134101, 163.282, 23.6904, 0.978);
915 for(
Int_t i=0; i<nObj; i++)
918 if (obj->IsA()->InheritsFrom(
"THnSparse" ))
920 THnSparseF *hn = (THnSparseF*)obj;
938 if(
fVerbosity>10) printf(
"[i] Booking histograms \n");
956 printf(
"ERROR: Could not retrieve MC event");
960 TParticle *particle =
fStack->Particle(0);
963 vtxTrueZ = particle->Vz();
964 if(
fVerbosity>10) printf(
"Generated vertex coordinate: (x,y,z) = (%4.2f, %4.2f, %4.2f)\n", particle->Vx(), particle->Vy(), particle->Vz());
971 AliError(
"fESD is not available");
984 UInt_t trigger = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
985 if (trigger==0)
return;
989 if (trigger & AliVEvent::kFastOnly)
return;
990 if(
fPeriod.CompareTo(
"lhc11a",TString::kIgnoreCase)==0)
996 else if (
fPeriod.CompareTo(
"lhc11c",TString::kIgnoreCase)==0 ||
fPeriod.CompareTo(
"lhc11d",TString::kIgnoreCase)==0)
1010 else if (trigger & AliVEvent::kAnyINT)
fTriggerType = 0;
1022 if(
fVerbosity>10) printf(
"Error: worng trigger type %s\n",(fESD->GetFiredTriggerClasses()).
Data());
1047 const AliESDVertex* vtx = fESD->GetPrimaryVertex();
1053 if( TMath::Abs(zVertex) >
fZVtxMax )
return;
1059 if(!
fIsMC && fTriggerType==1)
1077 if(
fAnaType==0) AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()->SetFillAOD(kTRUE);
1080 for(
Int_t s=0; s<3; s++)
1082 for(
Int_t a=0; a<2; a++)
1098 if(
fVerbosity>5) printf(
"# of jets after clear: %d\n",
fJetTCA[0][0][0]->GetEntries());
1111 for(
Int_t s=0; s<3; s++)
1113 for(
Int_t a=0; a<2; a++)
1122 if(s==0 && a==0 &&
fNonStdBranch.Contains(
"Baseline",TString::kIgnoreCase))
1154 if(s==1) isNe = kFALSE;
1155 if(s==2) isCh = kFALSE;
1160 Int_t countTracks = 0;
1162 for(
Int_t it=0; it<ntracks; it++)
1164 AliESDtrack *t = (AliESDtrack*)
fTrackArray->At(it);
1169 if(s==1 &&
fRunUE && pt<1)
continue;
1178 if(
fVerbosity>10) printf(
"%d: m_{ch}=%f\n",it+1,t->P()*t->P()-t->Px()*t->Px()-t->Py()*t->Py()-t->Pz()*t->Pz());
1180 if(
fVerbosity>5) printf(
"[i] # of tracks filled: %d\n",countTracks);
1186 fESD->GetVertex()->GetXYZ(vertex) ;
1187 TLorentzVector gamma;
1189 Int_t countClusters = 0;
1191 for (
Int_t ic = 0; ic < nclusters; ic++)
1193 AliESDCaloCluster * cl = (AliESDCaloCluster *)
fClusterArray->At(ic);
1195 cl->GetMomentum(gamma, vertex);
1201 if(
fVerbosity>5) printf(
"[i] # of clusters filled: %d\n",countClusters);
1216 Int_t radiusIndex = 0;
1217 TString arrayName = fJetArray->GetName();
1218 if(arrayName.Contains(
"_02_")) radiusIndex = 1;
1219 if(arrayName.Contains(
"_03_")) radiusIndex = 2;
1221 if(
fVerbosity>5 && radiusIndex==0) printf(
"[i] # of jets in %s : %d\n",fJetArray->GetName(),(
Int_t)jetsIncl.size());
1224 for(
UInt_t ij=0; ij<jetsIncl.size(); ij++)
1226 if(
fVerbosity>10) printf(
"fastjet: eta=%f, phi=%f\n",jetsIncl[ij].eta(),jetsIncl[ij].phi()*TMath::RadToDeg());
1227 if(!
IsGoodJet(jetsIncl[ij],0))
continue;
1229 AliAODJet tmpJet (jetsIncl[ij].px(), jetsIncl[ij].py(), jetsIncl[ij].pz(), jetsIncl[ij].E());
1230 jet =
new ((*fJetArray)[jetCount]) AliAODJet(tmpJet);
1232 if(
fVerbosity>10 && radiusIndex==0) printf(
"AOD jet: ij=%d, pt=%f, eta=%f, phi=%f\n",ij, jet->Pt(), jet->Eta(),jet->Phi()*TMath::RadToDeg());
1234 jet->GetRefTracks()->Clear();
1236 Double_t totE=0, totPt=0, totChPt=0, leadChPt=0, neE=0, totNePt=0, leadNePt=0, leadPt=0;
1237 Double_t leadTrkType=0, nChPart = 0, nNePart = 0;
1238 Bool_t isHighPtTrigger = kFALSE, isTriggering = kFALSE, isHyperTrack = kFALSE;
1239 Int_t leadIndex = -1;
1240 for(
UInt_t ic=0; ic<constituents.size(); ic++)
1242 if(
fVerbosity>10 && radiusIndex==0) printf(
"ic=%d: user_index=%d, E=%f\n",ic,constituents[ic].user_index(),constituents[ic].E());
1243 if(constituents[ic].user_index()<0)
1246 totNePt += constituents[ic].perp();
1247 if(constituents[ic].perp()>leadNePt)
1248 leadNePt = constituents[ic].perp();
1250 neE += constituents[ic].E();
1252 isHighPtTrigger = kTRUE;
1255 AliESDCaloCluster *cluster = (AliESDCaloCluster *)
fClusterArray->At(constituents[ic].user_index()*(-1)-1);
1256 if(cluster->Chi2()>0.5) isTriggering = kTRUE;
1261 totChPt += constituents[ic].perp();
1263 if(constituents[ic].perp()>leadChPt)
1265 leadChPt = constituents[ic].perp();
1268 AliESDtrack *track = (AliESDtrack*)
fTrackArray->At(constituents[ic].user_index()-1);
1269 leadTrkType = track->GetTRDQuality();
1270 if(track->GetIntegratedLength()>500) isHyperTrack = kTRUE;
1274 isHighPtTrigger = kTRUE;
1277 part.SetMomentum(constituents[ic].px(),constituents[ic].py(),constituents[ic].pz(),constituents[ic].E());
1278 jet->AddTrack(&part);
1279 totE += constituents[ic].E();
1280 totPt += constituents[ic].perp();
1281 if(constituents[ic].perp()>leadPt)
1283 leadPt = constituents[ic].perp();
1288 if(isHighPtTrigger) jet->SetTrigger(AliAODJet::kHighTrackPtTriggered);
1289 if(
fTriggerType==1) jet->SetTrigger(AliAODJet::kEMCALTriggered);
1296 if(jetsIncl[ij].E()>0) jet->SetNEF(neE/jetsIncl[ij].E());
1297 jet->SetPtLeading(leadPt);
1298 jet->SetPtSubtracted(leadTrkType,0);
1300 Double_t effAErrCh = 0, effAErrNe = leadTrkType;
1301 Double_t chBgEnergy = 10, neBgEnergy = nNePart;
1305 if(
fIsMC && constituents[leadIndex].user_index()>0)
1307 AliESDtrack *track = (AliESDtrack*)
fTrackArray->At(constituents[leadIndex].user_index()-1);
1309 Int_t ipart = track->GetLabel();
1310 if(ipart>-1 && ipart<fMC->GetNumberOfTracks())
1312 AliVParticle* vParticle =
fMC->GetTrack(ipart);
1316 chBgEnergy = (truePt-pt)/truePt;
1322 jet->SetEffArea(leadPt, jetFinder->
GetJetArea(ij),effAErrCh,effAErrNe);
1323 jet->SetBgEnergy(chBgEnergy,neBgEnergy);
1324 if(
fVerbosity>10 && isTruth) cout<<jet->ErrorEffectiveAreaCharged()<<
" "<<jet->ErrorEffectiveAreaNeutral()<<endl;
1325 if(
fVerbosity>10) cout<<
"jet pt="<<jetsIncl[ij].perp()<<
", nef="<<jet->GetNEF()<<
", trk eff corr="<<chBgEnergy<<endl;
1328 printf(
"# of ref tracks: %d = %d, and nef=%f\n",jet->GetRefTracks()->GetEntries(), (
Int_t)constituents.size(), jet->GetNEF());
1333 if(jetsIncl[ij].perp()>100)
1335 printf(
"\n\n--- HAHAHA: High pt jets ---\n");
1336 printf(
"File: %s, event = %d, pt=%f\n",CurrentFileName(),(
Int_t)Entry(),jetsIncl[ij].perp());
1337 printf(
"%s , pt < %f\n", fJetArray->GetName(),
fTrkPtMax[1]);
1338 printf(
"Jet: E=%f, eta=%f, phi=%f, # of constituents=%d, nef=%f\n",jetsIncl[ij].E(),jetsIncl[ij].eta(), jetsIncl[ij].phi()*TMath::RadToDeg(), (
Int_t)constituents.size(),jet->GetNEF());
1339 for(
UInt_t ic=0; ic<constituents.size(); ic++)
1341 if(constituents[ic].user_index()<0)
1343 AliESDCaloCluster *cluster = (AliESDCaloCluster *)
fClusterArray->At(constituents[ic].user_index()*(-1)-1);
1344 printf(
"id = %d, cluster with pt = %f, ncell = %d\n",ic,constituents[ic].perp(), cluster->GetNCells());
1348 AliESDtrack *track = (AliESDtrack*)
fTrackArray->At(constituents[ic].user_index()-1);
1349 printf(
"id = %d, track with pt = %f, track class = %d, originalPt = %f\n",ic,constituents[ic].perp(),(
Int_t)track->GetTRDQuality(), track->GetIntegratedLength());
1353 printf(
"==============================\n\n");
1358 if(
fVerbosity>5) printf(
"%s has %d jets\n",fJetArray->GetName(), fJetArray->GetEntries());
1379 if(jet.perp()<1)
return kFALSE;
1380 if(TMath::Abs(jet.eta())>(0.7-rad))
return kFALSE;
1381 if(jet.phi() < (80*TMath::DegToRad()+rad) || jet.phi() > (180*TMath::DegToRad()-rad) )
return kFALSE;
1393 Int_t npart =
fMC->GetNumberOfTracks();
1395 Int_t countPart = 0;
1396 for(
Int_t ipart=0; ipart<npart; ipart++)
1398 AliVParticle* vParticle =
fMC->GetTrack(ipart);
1401 Int_t pdgCode = vParticle->PdgCode();
1402 if(
fRejectNK && (pdgCode==130 || pdgCode==2112) )
continue;
1404 if(
fRejectWD && (pdgCode==310 || pdgCode==3112 || pdgCode==3122 || pdgCode==3222 || pdgCode==3312 || pdgCode==3322 || pdgCode==3334))
continue;
1406 if(
fChargedMC && vParticle->Charge()==0 )
continue;
1409 if(vParticle->Charge()==0) { index=-1; }
1415 printf(
"Input particle: ipart=%d, pdg=%d, species=%s, charge=%d, E=%4.3f\n",(ipart+1)*index,pdgCode,vParticle->GetName(), vParticle->Charge(),vParticle->P());
1427 for(
Int_t i=0; i<2; i++)
1446 fESD->GetVertex()->GetXYZ(vertex) ;
1447 TLorentzVector gamma;
1453 for(
Int_t i=0; i<nBins; i++)
1461 for(
UInt_t ij=0; ij<jetsIncl.size(); ij++)
1465 fhJetInTPCOnlyVtx[type][r]->Fill(jetsIncl[ij].perp(),jetsIncl[ij].phi()*TMath::RadToDeg(),jetsIncl[ij].eta());
1468 Float_t jetEta = jetsIncl[ij].eta();
1469 Float_t jetPhi = jetsIncl[ij].phi();
1470 Float_t jetE = jetsIncl[ij].E();
1471 Float_t jetPt = jetsIncl[ij].perp();
1474 Double_t neE=0, leadingZ = 0, maxPt = 0;
1475 Int_t constituentType = -1, leadingIndex = 0;
1476 for(
UInt_t ic=0; ic<constituents.size(); ic++)
1478 if(constituents[ic].perp()>maxPt)
1480 maxPt = constituents[ic].perp();
1481 leadingIndex = constituents[ic].user_index();
1484 if(constituents[ic].user_index()<0)
1486 neE += constituents[ic].E();
1487 constituentType = 3;
1491 if(type==2) constituentType = 0;
1494 AliESDtrack *track = (AliESDtrack*)
fTrackArray->At(constituents[ic].user_index()-1);
1495 constituentType = (
Int_t)track->GetTRDQuality();
1498 Double_t cz =
GetZ(constituents[ic].px(),constituents[ic].py(),constituents[ic].pz(),jetsIncl[ij].px(),jetsIncl[ij].py(),jetsIncl[ij].pz());
1499 fhJetPtVsZ[type][r]->Fill(jetPt,cz, constituentType);
1500 if(cz>leadingZ) leadingZ = cz;
1503 if(type<2 && leadingIndex<0)
1505 AliESDCaloCluster *cluster = (AliESDCaloCluster *)
fClusterArray->At(leadingIndex*(-1)-1);
1509 if(leadingZ > 0.98)
continue;
1517 for(
Int_t i=0; i<nBins; i++) { eFraction[i] = 0.; nPart[i] = 0;}
1520 Double_t subTrkPtClean[5] = {0,0,0,0,0};
1521 Double_t subTrkPtAmbig[5] = {0,0,0,0,0};
1522 Double_t fraction[5] = {270,0.3,0.5,0.7,1};
1524 Int_t leadChIndex = -1;
1525 for(
UInt_t ic=0; ic<constituents.size(); ic++)
1527 Float_t partEta = constituents[ic].eta();
1528 Float_t partPhi = constituents[ic].phi();
1529 Float_t partE = constituents[ic].E();
1530 Float_t partPt = constituents[ic].perp();
1532 if(constituents[ic].user_index()<0)
1539 AliESDCaloCluster *cluster = (AliESDCaloCluster *)
fClusterArray->At(constituents[ic].user_index()*(-1)-1);
1544 cluster->GetMomentum(gamma, vertex);
1545 Double_t sinTheta = TMath::Sqrt(1-TMath::Power(gamma.CosTheta(),2));
1547 Double_t subEtmp = cluster->GetDispersion();
1548 Double_t mipETmp = cluster->GetEmcCpvDistance();
1549 mcSubE += cluster->GetDistanceToBadChannel()*sinTheta;
1550 subClsE[0] += ((mipETmp>clsE)?clsE:mipETmp)*sinTheta;
1551 for(
Int_t j=1; j<5; j++)
1553 subClsE[j] += ((fraction[j]*subEtmp>clsE)?clsE:fraction[j]*subEtmp)*sinTheta;
1560 if(partPt>leadChPt) {leadChPt = partPt;leadChIndex=ic;}
1562 chPt += constituents[ic].perp();
1565 AliESDtrack *track = (AliESDtrack*)
fTrackArray->At(constituents[ic].user_index()-1);
1566 Int_t trkType = (
Int_t)track->GetTRDQuality();
1567 totTrkPt[trkType] += partPt;
1568 Int_t clusterIndex = track->GetEMCALcluster();
1569 Int_t clusterPos = -1;
1573 AliESDCaloCluster *cluster = (AliESDCaloCluster*)
fClusterArray->At(j);
1574 if( clusterIndex == cluster->GetID() )
1583 AliESDCaloCluster *cluster = (AliESDCaloCluster*)
fClusterArray->At(clusterPos);
1584 Double_t subEtmp = cluster->GetDispersion();
1585 Double_t mipETmp = cluster->GetEmcCpvDistance();
1586 for(
Int_t k=0; k<5; k++)
1590 if(mipETmp>cluster->E()) subTrkPtClean[k] += partPt;
1591 else subTrkPtAmbig[k] += partPt;
1595 if(fraction[k]*subEtmp>cluster->E()) subTrkPtClean[k] += partPt;
1596 else subTrkPtAmbig[k] += partPt;
1603 Float_t dR = TMath::Sqrt( (partEta-jetEta)*(partEta-jetEta) + (partPhi-jetPhi)*(partPhi-jetPhi) );
1604 for(
Int_t i=0; i<nBins; i++)
1606 if( dR < radiusCut[i] )
1608 eFraction[i] += partE;
1616 if(type<2 && leadChIndex>-1)
1618 Double_t cz =
GetZ(constituents[leadChIndex].px(),constituents[leadChIndex].py(),constituents[leadChIndex].pz(),jetsIncl[ij].px(),jetsIncl[ij].py(),jetsIncl[ij].pz());
1624 for(
Int_t i=0; i<5; i++)
1628 fhSubClsEVsJetPt[type][r][i]->Fill(jetPt-subClsE[4],subClsE[i]/(jetPt-subClsE[4]));
1629 fhHCTrkPtClean[type][r][i]->Fill(jetPt-subClsE[4],subTrkPtClean[i]/(jetPt-subClsE[4]));
1630 fhHCTrkPtAmbig[type][r][i]->Fill(jetPt-subClsE[4],subTrkPtAmbig[i]/(jetPt-subClsE[4]));
1634 fHCOverSubE[r][i]->Fill(jetPt-subClsE[4],subClsE[i]-mcSubE);
1635 fHCOverSubEFrac[r][i]->Fill(jetPt-subClsE[4],(subClsE[i]-mcSubE)/(jetPt-subClsE[4]));
1639 if(type<2 && chPt>0)
1641 for(
Int_t i=0; i<3; i++)
1643 fRelTrkCon[type][r]->Fill(jetPt,totTrkPt[i]/chPt,i);
1648 for(
Int_t ibin=0; ibin<nBins; ibin++)
1650 Double_t fill1[3] = {jetPt,radiusCut[ibin]-0.005,eFraction[ibin]/jetE};
1652 Double_t fill2[3] = {jetPt,radiusCut[ibin]-0.005,
static_cast<Double_t>(nPart[ibin])};
1660 Int_t okCh[3] = {0,0,0};
1661 Int_t okNe[3] = {0,0,0};
1663 for(
UInt_t ic=0; ic<constituents.size(); ic++)
1665 Float_t partPt = constituents[ic].perp();
1667 if(partPt<0.3) lowPt[0] += partPt;
1668 else if(partPt<0.5) lowPt[1] += partPt;
1670 if(constituents[ic].user_index()>0)
1672 for(
Int_t it=0; it<3; it++)
1674 if(partPt>thres[it]) okCh[it] = 1;
1679 for(
Int_t icl=0; icl<3; icl++)
1681 if(partPt>thres[icl]) okNe[icl] = 1;
1685 for(
Int_t i=0; i<3; i++)
1705 for(
UInt_t ij=0; ij<jetsIncl.size(); ij++)
1707 Float_t jetEta = jetsIncl[ij].eta();
1708 Float_t jetPt = jetsIncl[ij].perp();
1709 if(TMath::Abs(jetEta)>0.5*etaCut+0.5 || jetPt<1)
continue;
1711 Double_t dNKPt = 0, dWPPt = 0, weakPt=0, nkPt=0;
1713 for(
UInt_t ic=0; ic<constituents.size(); ic++)
1715 Int_t ipart = TMath::Abs(constituents[ic].user_index())-1;
1716 AliMCParticle* mcParticle = (AliMCParticle*)
fMC->GetTrack(ipart);
1717 if(!mcParticle)
continue;
1719 if(pdg==310 || (pdg<=3400 && pdg>=3100)) weakPt += mcParticle->Pt();
1720 if(pdg==130 || pdg==2112) nkPt += mcParticle->Pt();
1723 if(pdg==310) type=0;
1724 else if (pdg==3122) type=1;
1725 else if (pdg<=3400 && pdg>=3100) type=2;
1732 dWPPt += pro*mcParticle->Pt() - mcParticle->Pt();
1737 if(pdg==130 || pdg==2112) dNKPt -= mcParticle->Pt();
1743 Double_t jetNewWPPt = jetPt + dWPPt;
1747 Double_t jetNewNKPt = jetPt + dNKPt;
1763 if(type!=0 && type!=1)
return;
1768 Int_t npart =
fMC->GetNumberOfTracks();
1770 for(
Int_t ipart=0; ipart<npart; ipart++)
1772 AliVParticle* vParticle =
fMC->GetTrack(ipart);
1774 Int_t pdgCode = vParticle->PdgCode();
1776 if( type==0 && (pdgCode==130 || pdgCode==2112) )
continue;
1779 if(pdgCode==310) pType=0;
1780 else if (pdgCode==3122) pType=1;
1781 else if (pdgCode<=3400 && pdgCode>=3100) pType=2;
1788 pt = pro * vParticle->Pt();
1793 if(vParticle->Charge()==0) { index=-1; }
1794 fj.
AddInputVector(vParticle->Px()*pt/vParticle->Pt(), vParticle->Py()*pt/vParticle->Pt(), vParticle->Pz(), vParticle->P(), (ipart+1)*index);
1799 std::vector<fastjet::PseudoJet> jets_incl_mc_std = jetFinder->
GetInclusiveJets();
1801 for(
UInt_t ij=0; ij<jets_incl_mc.size(); ij++)
1803 Float_t jetEta = jets_incl_mc[ij].eta();
1804 Float_t jetPt = jets_incl_mc[ij].perp();
1805 if(TMath::Abs(jetEta)>0.5*etaCut+0.5 || jetPt<5)
continue;
1810 Double_t jetPtStd = jets_incl_mc_std[index].perp();
1811 Double_t dR = TMath::Sqrt(dEta*dEta+dPhi*dPhi);
1832 Double_t leadpt=0, leadPhi = -999, leadEta = -999;
1833 Int_t leadIndex = -1;
1834 for(
UInt_t ij=0; ij<jetsIncl.size(); ij++)
1836 Double_t jetEta = jetsIncl[ij].eta();
1837 Double_t jetPt = jetsIncl[ij].perp();
1838 Double_t jetPhi = jetsIncl[ij].phi();
1847 if(leadpt<1 || TMath::Abs(leadEta)>0.5 )
return;
1849 Int_t backIndex = -1;
1850 Bool_t isBackToBack = kFALSE;
1851 for(
UInt_t ij=0; ij<jetsIncl.size(); ij++)
1853 Double_t dPhi = TMath::Abs(jetsIncl[ij].phi()-leadPhi);
1854 if(dPhi >
kPI) dPhi = 2*
kPI - dPhi;
1855 if(dPhi>150*TMath::DegToRad() && jetsIncl[ij].perp()/leadpt > 0.8)
1858 isBackToBack = kTRUE;
1862 for(
Int_t ij=0; ij<(
Int_t)jetsIncl.size(); ij++)
1864 if(ij==leadIndex || ij==backIndex)
continue;
1865 if(TMath::Abs(jetsIncl[ij].eta())>0.5)
continue;
1866 if(jetsIncl[ij].perp()>15) isBackToBack = kFALSE;
1871 if(axis[0]>2*
kPI) axis[0] -= 2*
kPI;
1872 if(axis[1]<0) axis[1] += 2*
kPI;
1881 fESD->GetVertex()->GetXYZ(vertex) ;
1882 TLorentzVector gamma;
1885 for(
Int_t j=0; j<2; j++)
1888 for(
Int_t it=0; it<ntracks; it++)
1890 AliESDtrack *t = (AliESDtrack*)
fTrackArray->At(it);
1892 Double_t dPhi = TMath::Abs(axis[j]-t->Phi());
1893 Double_t dEta = TMath::Abs(leadEta-t->Eta());
1894 if(dPhi >
kPI) dPhi = 2*
kPI - dPhi;
1895 if(TMath::Sqrt(dPhi*dPhi+dEta*dEta)<0.4)
1900 if(TMath::Abs(leadEta-0.4)<0.7 && axis[j]>80*TMath::DegToRad()+0.4 && axis[j]<180*TMath::DegToRad()-0.4)
1911 if(!(TMath::Abs(leadEta-0.4)<0.7 && axis[j]>80*TMath::DegToRad()+0.4 && axis[j]<180*TMath::DegToRad()-0.4))
continue;
1914 for(
Int_t ic=0; ic<nclusters; ic++)
1916 AliESDCaloCluster * cl = (AliESDCaloCluster *)
fClusterArray->At(ic);
1918 cl->GetMomentum(gamma, vertex);
1920 if(clsPhi<0) clsPhi += 2*
kPI;
1921 Double_t dPhi = TMath::Abs(axis[j]-clsPhi);
1922 Double_t dEta = TMath::Abs(leadEta-gamma.Eta());
1923 if(dPhi >
kPI) dPhi = 2*
kPI - dPhi;
1924 if(TMath::Sqrt(dPhi*dPhi+dEta*dEta)<0.4)
1926 ueChNe += gamma.Pt();
1940 for(
Int_t j=0; j<2; j++)
1942 Double_t ueCh = 0, ueChNe = 0., ueChNe2 = 0.;
1943 for(
Int_t ipos=0; ipos<npart; ipos++)
1946 if(!vParticle)
continue;
1947 Double_t dPhi = TMath::Abs(axis[j]-vParticle->Phi());
1948 Double_t dEta = TMath::Abs(leadEta-vParticle->Eta());
1949 if(dPhi >
kPI) dPhi = 2*
kPI - dPhi;
1950 if(TMath::Sqrt(dPhi*dPhi+dEta*dEta)<0.4)
1956 if( vParticle->Charge()!=0 )
1965 if(pt>0.5) ueChNe2 += pt;
1984 if(jet->Pt()<1)
return kFALSE;
1985 if(TMath::Abs(jet->Eta())>(0.7-rad))
return kFALSE;
1986 if(jet->Phi() < (80*TMath::DegToRad()+rad) || jet->Phi() > (180*TMath::DegToRad()-rad) )
return kFALSE;
1999 std::vector<fastjet::PseudoJet> constituents = jetFinder->
GetJetConstituents(jetIndex);
2003 for(
UInt_t ic=0; ic<constituents.size(); ic++)
2005 if(constituents[ic].perp()>maxPt)
2007 maxPt = constituents[ic].perp();
2012 z =
GetZ(constituents[index].px(),constituents[index].py(),constituents[index].pz(),jetsIncl[jetIndex].px(),jetsIncl[jetIndex].py(),jetsIncl[jetIndex].pz());
2023 return (trkPx*jetPx+trkPy*jetPy+trkPz*jetPz)/(jetPx*jetPx+jetPy*jetPy+jetPz*jetPz);
2034 std::vector<fastjet::PseudoJet> constituents = jetFinder->
GetJetConstituents(jetIndex);
2035 for(
UInt_t ic=0; ic<constituents.size(); ic++)
2037 if(constituents[ic].user_index()>0)
2039 AliESDtrack *track = (AliESDtrack*)
fTrackArray->At(constituents[ic].user_index()-1);
2040 jetSigma2 += TMath::Power(track->Pt()*track->Pt()*TMath::Sqrt(track->GetSigma1Pt2()),2);
2044 AliESDCaloCluster *cluster = (AliESDCaloCluster *)
fClusterArray->At(constituents[ic].user_index()*(-1)-1);
2045 jetSigma2 += TMath::Power(cluster->GetTOF(),2);
2048 return TMath::Sqrt(jetSigma2);
2062 Double_t jetPt = jetsIncl[jetIndex].perp();
2065 printf(
"Warning: can't get the mean # of tracks per jet with pt=%f in: trigger=%d, radiusIndex=%d\n",jetPt,
fTriggerType,radiusIndex);
2071 printf(
"Warning: no sampling distrubtion for jet with pt=%f\n",jetPt);
2078 if(pro1<res) nTrk++;
2079 for(
Int_t itry=0; itry<nTrk; itry++)
2085 if(pro>eff) misspt += trkPt;
2098 if(!vParticle)
return kFALSE;
2099 if(!
fMC->IsPhysicalPrimary(ipart))
return kFALSE;
2100 if (TMath::Abs(vParticle->Eta())>2)
return kFALSE;
2112 dEta=-999, dPhi=-999;
2114 for(
UInt_t ij=0; ij<jets_incl.size(); ij++)
2116 if(jets_incl[ij].perp()<5)
continue;
2117 if(TMath::Abs(jets_incl[ij].eta())>1)
continue;
2118 Double_t tmpR = TMath::Sqrt( TMath::Power(jet.eta()-jets_incl[ij].eta(), 2) + TMath::Power(jet.phi()-jets_incl[ij].phi(), 2) );
2123 dEta = jet.eta()-jets_incl[ij].eta();
2124 dPhi = jet.phi()-jets_incl[ij].phi();
2137 Int_t matchedIndex = -1;
2138 std::vector<fastjet::PseudoJet> jetsIncl1 = jetFinder1->
GetInclusiveJets();
2139 std::vector<fastjet::PseudoJet> jetsIncl2 = jetFinder2->
GetInclusiveJets();
2140 std::vector<fastjet::PseudoJet> constituents1 = jetFinder1->
GetJetConstituents(index1);
2141 Double_t jetPt1 = jetsIncl1[index1].perp();
2142 if(jetPt1<0)
return matchedIndex;
2144 for(
UInt_t ij2=0; ij2<jetsIncl2.size(); ij2++)
2146 Double_t jetPt2 = jetsIncl2[ij2].perp();
2147 if(jetPt2<0)
return matchedIndex;
2149 Double_t sharedPt1 = 0., sharedPt2 = 0.;
2150 for(
UInt_t ic2=0; ic2<constituents2.size(); ic2++)
2152 Int_t mcLabel = constituents2[ic2].user_index()-1;
2153 Double_t consPt2 = constituents2[ic2].perp();
2154 for(
UInt_t ic1=0; ic1<constituents1.size(); ic1++)
2156 Double_t consPt1 = constituents1[ic1].perp();
2157 if(constituents1[ic1].user_index()>0)
2159 AliESDtrack *track = (AliESDtrack*)
fTrackArray->At(constituents1[ic1].user_index()-1);
2160 if(track->GetLabel()==mcLabel) {sharedPt2 += consPt2; sharedPt1 += consPt1; cout<<
"Found a matched track"<<endl;
break;}
2164 AliESDCaloCluster *cluster = (AliESDCaloCluster *)
fClusterArray->At(constituents1[ic1].user_index()*(-1)-1);
2165 if(cluster->GetLabel()==mcLabel) {sharedPt2 += consPt2; sharedPt1 += consPt1; cout<<
"Found a matched cluster"<<endl;
break;}
2169 cout<<sharedPt1/jetPt1<<
" "<<sharedPt2/jetPt2<<endl;
2170 if(sharedPt1/jetPt1 > fraction && sharedPt2/jetPt2 > fraction)
2176 return matchedIndex;
2186 Int_t nTrax =
fESD->GetNumberOfTracks();
2187 if(
fVerbosity>5) printf(
"[i] # of tracks in event: %d\n",nTrax);
2189 for (
Int_t i = 0; i < nTrax; ++i)
2191 AliESDtrack* esdtrack =
fESD->GetTrack(i);
2194 AliError(Form(
"Couldn't get ESD track %d\n", i));
2199 if(!newtrack)
continue;
2218 newtrack->SetIntegratedLength(esdtrack->Pt());
2234 AliESDtrack *newTrack = 0x0;
2240 newTrack =
new AliESDtrack(*esdtrack);
2241 newTrack->SetTRDQuality(0);
2245 if(esdtrack->GetConstrainedParam())
2247 newTrack =
new AliESDtrack(*esdtrack);
2248 const AliExternalTrackParam* constrainParam = esdtrack->GetConstrainedParam();
2249 newTrack->Set(constrainParam->GetX(),constrainParam->GetAlpha(),constrainParam->GetParameter(),constrainParam->GetCovariance());
2250 newTrack->SetTRDQuality(1);
2257 if(esdtrack->GetConstrainedParam())
2259 newTrack =
new AliESDtrack(*esdtrack);
2260 const AliExternalTrackParam* constrainParam = esdtrack->GetConstrainedParam();
2261 newTrack->Set(constrainParam->GetX(),constrainParam->GetAlpha(),constrainParam->GetParameter(),constrainParam->GetCovariance());
2262 newTrack->SetTRDQuality(2);
2276 newTrack = AliESDtrackCuts::GetTPCOnlyTrack(const_cast<AliESDEvent*>(
fESD),esdtrack->GetID());
2277 if(!newTrack)
return 0x0;
2278 AliExternalTrackParam exParam;
2279 Bool_t relate = newTrack->RelateToVertexTPC(
fESD->GetPrimaryVertexSPD(),
fESD->GetMagneticField(),kVeryBig,&exParam);
2285 newTrack->Set(exParam.GetX(),exParam.GetAlpha(),exParam.GetParameter(),exParam.GetCovariance());
2286 newTrack->SetTRDQuality(1);
2297 newTrack =
new AliESDtrack(*esdtrack);
2298 newTrack->SetTRDQuality(0);
2321 if (!TGeoGlobalMagField::Instance()->GetField())
fESD->InitMagneticField();
2327 const Int_t nCaloClusters =
fESD->GetNumberOfCaloClusters();
2328 for(
Int_t i = 0 ; i < nCaloClusters; i++)
2330 AliESDCaloCluster * cl = (AliESDCaloCluster *)
fESD->GetCaloCluster(i);
2332 AliESDCaloCluster *newCluster =
new AliESDCaloCluster(*cl);
2334 {
delete newCluster;
continue;}
2337 if(
fPeriod.Contains(
"lhc11a",TString::kIgnoreCase))
2339 Double_t newE = newCluster->E() * 1.02;
2340 newCluster->SetE(newE);
2347 newCluster->SetE(newE);
2351 if(
fPeriod.Contains(
"lhc12a15a",TString::kIgnoreCase))
fhClsE[0]->Fill(newCluster->E());
2360 newCluster->SetE(newE);
2370 newCluster->SetE(newE);
2378 newCluster->SetE(newE);
2390 Double_t subE = 0., eRes = 0., mcSubE = 0, MIPE = 0.;
2395 if(clsE<0) {
delete newCluster;
continue;}
2396 newCluster->SetE(clsE);
2397 newCluster->SetTOF(eRes);
2398 newCluster->SetDispersion(subE);
2399 newCluster->SetEmcCpvDistance(MIPE);
2400 newCluster->SetDistanceToBadChannel(mcSubE);
2423 if(!cluster)
return kFALSE;
2424 if (!cluster->IsEMCAL())
return kFALSE;
2443 Double_t subE = 0., sumTrkPt = 0., sumTrkP = 0.;
2445 TArrayI *matched = cluster->GetTracksMatched();
2446 if(!matched)
return 0;
2447 for(
Int_t im=0; im<matched->GetSize(); im++)
2449 Int_t trkIndex = matched->At(im);
2450 if(trkIndex<0 || trkIndex>=
fESD->GetNumberOfTracks())
continue;
2451 Bool_t isSelected = kFALSE;
2455 AliESDtrack *tr = (AliESDtrack*)
fTrackArray->At(j);
2456 if( trkIndex == tr->GetID() )
2463 if(!isSelected)
continue;
2465 AliESDtrack *track = (AliESDtrack*)
fTrackArray->At(index);
2467 sumTrkPt += track->Pt(); sumTrkP += track->P();
2475 eRes += TMath::Power(track->Pt()*track->Pt()*TMath::Sqrt(track->GetSigma1Pt2()),2);
2482 MIPE += (trkP>0.27)?0.27:trkP;
2492 eRes += TMath::Power(track->Pt()*track->Pt()*TMath::Sqrt(track->GetSigma1Pt2()),2);
2499 eRes += TMath::Power(
fFractionHC*track->Pt()*track->Pt()*TMath::Sqrt(track->GetSigma1Pt2()),2);
2508 Double_t fraction[4] = {0.3,0.5,0.7,1.0};
2509 for(
Int_t j=0; j<4; j++)
2511 Double_t subETmp = sumTrkP*fraction[j];
2512 if(subETmp>cluster->E()) subETmp = cluster->E();
2517 eRes = TMath::Sqrt(eRes);
2519 if(
fIsMC && nTrack>0)
2522 TArrayI* labels = cluster->GetLabelsArray();
2525 for(
Int_t il=0; il<labels->GetSize(); il++)
2527 Int_t ipart = labels->At(il);
2528 if(ipart>-1 && ipart<fMC->GetNumberOfTracks())
2530 AliVParticle* vParticle =
fMC->GetTrack(ipart);
2531 if(vParticle->Charge()==0)
2533 neutralE += vParticle->E();
2538 mcSubE = cluster->E() - neutralE;
2557 if(!cluster)
return -1;
2558 AliVCaloCells *cells = (AliVCaloCells*)
fESD->GetEMCALCells();
2559 if(!cells)
return -1;
2562 Int_t iSupMod = -1, absID = -1, ieta = -1, iphi = -1,iTower = -1, iIphi = -1, iIeta = -1;
2565 fGeom->GetCellIndex(absID,iSupMod,iTower,iIphi,iIeta);
2566 fGeom->GetCellPhiEtaIndexInSModule(iSupMod,iTower,iIphi, iIeta,iphi,ieta);
2568 Int_t absID1 =
fGeom-> GetAbsCellIdFromCellIndexes(iSupMod, iphi+1, ieta);
2569 Int_t absID2 =
fGeom-> GetAbsCellIdFromCellIndexes(iSupMod, iphi-1, ieta);
2570 Int_t absID3 =
fGeom-> GetAbsCellIdFromCellIndexes(iSupMod, iphi, ieta+1);
2571 Int_t absID4 =
fGeom-> GetAbsCellIdFromCellIndexes(iSupMod, iphi, ieta-1);
2573 Float_t ecell = 0, ecell1 = 0, ecell2 = 0, ecell3 = 0, ecell4 = 0;
2574 Double_t tcell = 0, tcell1 = 0, tcell2 = 0, tcell3 = 0, tcell4 = 0;
2575 Bool_t accept = 0, accept1 = 0, accept2 = 0, accept3 = 0, accept4 = 0;
2580 if(!accept)
return -1;
2582 if(ecell < 0.5)
return -1;
2589 const Double_t exoticCellDiffTime = 1e6;
2590 if(TMath::Abs(tcell-tcell1)*1.e9 > exoticCellDiffTime) ecell1 = 0 ;
2591 if(TMath::Abs(tcell-tcell2)*1.e9 > exoticCellDiffTime) ecell2 = 0 ;
2592 if(TMath::Abs(tcell-tcell3)*1.e9 > exoticCellDiffTime) ecell3 = 0 ;
2593 if(TMath::Abs(tcell-tcell4)*1.e9 > exoticCellDiffTime) ecell4 = 0 ;
2595 Float_t eCross = ecell1+ecell2+ecell3+ecell4;
2597 return 1-eCross/ecell;
2611 AliGenEventHeader *head =
dynamic_cast<AliGenEventHeader*
>(
fMC->GenEventHeader());
2614 AliError(
"Could not get the event header");
2618 AliGenPythiaEventHeader *headPy =
dynamic_cast<AliGenPythiaEventHeader*
>(head);
2621 if (headPy->Trials() > 0)
2623 fhNTrials[0]->Fill(0.5,headPy->Trials());
2638 Info(
"Terminate",
"Terminate");
2639 AliAnalysisTaskSE::Terminate();
2653 Int_t isTrigger = 0;
2654 Int_t ncl =
fESD->GetNumberOfCaloClusters();
2655 for(
Int_t icl=0; icl<ncl; icl++)
2658 AliESDCaloCluster *cluster =
fESD->GetCaloCluster(icl);
2666 cluster->SetChi2(1);
2669 cluster->SetChi2(0);
2686 AliVCaloCells *cells = (AliVCaloCells*)
fESD->GetEMCALCells();
2687 Int_t iSupMod = -1, absID = -1, ieta = -1, iphi = -1,iTower = -1, iIphi = -1, iIeta = -1;
2690 fGeom->GetCellIndex(absID,iSupMod,iTower,iIphi,iIeta);
2691 fGeom->GetCellPhiEtaIndexInSModule(iSupMod,iTower,iIphi, iIeta,iphi,ieta);
2693 Int_t gphi = iphi + 24*(iSupMod/2);
2694 Int_t geta = ieta + 48*(iSupMod%2);
2696 Int_t fphi = gphi / 2;
2697 Int_t feta = geta / 2;
2702 if(clsE>10) pro = 1;
2724 cluster->GetPosition(pos);
2725 TVector3 clsVec(pos[0],pos[1],pos[2]);
2728 fGeom->SuperModuleNumberFromEtaPhi(clsVec.Eta(), clsVec.Phi(), sMod);
2755 Double_t ptBound[4] = {0, 0.5, 3.8, 300};
2757 for(
Int_t i=0; i<3; i++)
2759 if( inPt < ptBound[i+1] && inPt >= ptBound[i])
2775 Double_t resolution = track->Pt()*track->Pt()*TMath::Sqrt(track->GetSigma1Pt2());
2791 const Int_t nColsModule = 2;
2792 const Int_t nRowsModule = 5;
2793 const Int_t nRowsFeeModule = 24;
2794 const Int_t nColsFeeModule = 48;
2795 const Int_t nColsFaltroModule = 24;
2796 const Int_t nRowsFaltroModule = 12;
2799 Int_t trigtimes[30], globCol, globRow, ntimes;
2800 Int_t trigger[nColsFaltroModule*nColsModule][nRowsFaltroModule*nRowsModule];
2803 for(
Int_t i = 0; i < nColsFaltroModule*nColsModule; i++ )
2805 for(
Int_t j = 0; j < nRowsFaltroModule*nRowsModule; j++ )
2811 Int_t fTrigCutLow = 7, fTrigCutHigh = 10, trigInCut = 0;
2812 AliESDCaloTrigger * fCaloTrigger =
fESD->GetCaloTrigger(
"EMCAL" );
2814 if( fCaloTrigger->GetEntries() > 0 )
2817 fCaloTrigger->Reset();
2818 while( fCaloTrigger->Next() )
2820 fCaloTrigger->GetPosition( globCol, globRow );
2821 fCaloTrigger->GetNL0Times( ntimes );
2822 if( ntimes < 1 )
continue;
2823 fCaloTrigger->GetL0Times( trigtimes );
2826 for(
Int_t i = 0; i < ntimes; i++ )
2828 if( trigtimes[i] > fTrigCutLow && trigtimes[i] < fTrigCutHigh )
2833 if(trigInCut==1) trigger[globCol][globRow] = 1;
2842 Int_t absID = -1, nSupMod=-1, nModule=-1, nIphi=-1, nIeta=-1, iphi=-1, ieta=-1, gphi=-1, geta=-1, feta=-1, fphi=-1;
2844 AliVCaloCells *cells = (AliVCaloCells*)
fESD->GetEMCALCells();
2845 for(
Int_t icl=0; icl<
fESD->GetNumberOfCaloClusters(); icl++)
2847 AliESDCaloCluster *cluster =
fESD->GetCaloCluster(icl);
2848 if(!cluster || !cluster->IsEMCAL())
continue;
2849 cluster->SetChi2(0);
2854 fGeom->GetCellIndex(absID,nSupMod,nModule, nIphi, nIeta);
2855 fGeom->GetCellPhiEtaIndexInSModule(nSupMod,nModule, nIphi, nIeta, iphi, ieta);
2856 gphi = iphi + nRowsFeeModule*(nSupMod/2);
2857 geta = ieta + nColsFeeModule*(nSupMod%2);
2863 nCell = cluster->GetNCells();
2864 cellAddrs = cluster->GetCellsAbsId();
2865 for( iCell = 0; iCell < nCell; iCell++ )
2868 fGeom->GetCellIndex( cellAddrs[iCell], nSupMod, nModule, nIphi, nIeta );
2869 fGeom->GetCellPhiEtaIndexInSModule( nSupMod,nModule, nIphi, nIeta, iphi, ieta);
2872 gphi = iphi + nRowsFeeModule*(nSupMod/2);
2873 geta = ieta + nColsFeeModule*(nSupMod%2);
2879 if( trigger[feta][fphi] == 1)
2881 cluster->SetChi2(1);
2898 const char *trackCutName[3] = {
"Hybrid tracks",
"TPCOnly tracks",
"Golden tracks"};
2899 const char *triggerType[2] = {
"MB",
"EMC"};
2900 const char *decision[2] = {
"no",
"yes"};
2901 const char *recombination[] = {
"E_scheme",
"pt_scheme",
"pt2_scheme",
"Et_scheme",
"Et2_scheme",
"BIpt_scheme",
"BIpt2_scheme"};
2902 const char *type[2] = {
"local",
"grid"};
2905 printf(
"\n\n=================================\n");
2906 printf(
"======WARNING: HC is ingored!======\n");
2907 printf(
"====== NOT for PHYSICS! ======\n\n");
2909 printf(
"Run period: %s\n",
fPeriod.Data());
2912 printf(
"Is this MC data: %s\n",decision[
fIsMC]);
2913 printf(
"Only find charged jets in MC: %s\n",decision[
fChargedMC]);
2914 printf(
"Analyze on local or grid? %s\n",type[
fAnaType]);
2917 printf(
"Is K0 and n included: %s\n",decision[1-
fRejectNK]);
2920 for(
Int_t i=0; i<2; i++)
2922 printf(
"Track pt cut: %s -> %2.2f < pT < %2.1f\n",triggerType[i],
fTrkPtMin[i],
fTrkPtMax[i]);
2924 for(
Int_t i=0; i<2; i++)
2926 printf(
"Cluster selection: %s -> %2.2f < Et < %2.1f\n",triggerType[i],
fClsEtMin[i],
fClsEtMax[i]);
2931 printf(
"Use only good SM (1,2,6,7,8,9) for trigger: %s\n",decision[
fUseGoodSM]);
2938 printf(
"Jet radius: %s\n",
fRadius.Data());
2943 printf(
"Systematics: tracking efficiency: %s with variation %1.0f%%\n",decision[
fSysTrkEff],
fVaryTrkEff*100);
2946 printf(
"Systematics: EMCal non-linearity: %s\n",decision[
fSysNonLinearity]);
2949 printf(
"Smear lhc12a15a: %s\n",decision[
fSmearMC]);
2950 printf(
"Run UE analysis: %s\n",decision[
fRunUE]);
2952 printf(
"=======================================\n\n");
2963 Int_t nCls =
fESD->GetNumberOfCaloClusters();
2964 for(
Int_t icl=0; icl<nCls; icl++)
2966 AliESDCaloCluster *cluster =
fESD->GetCaloCluster(icl);
2967 if(!cluster)
continue;
2968 if (!cluster->IsEMCAL())
continue;
2971 leadingE = cluster->E();
2985 const AliESDVertex* vtx =
fESD->GetPrimaryVertex();
2986 if (!vtx || vtx->GetNContributors()<1)
return kFALSE;
3009 Bool_t isGoodVtx = kTRUE;
3010 AliESDVertex* goodvtx =
const_cast<AliESDVertex*
>(
fESD->GetPrimaryVertexTracks());
3011 if(!goodvtx || goodvtx->GetNContributors()<1)
3012 goodvtx = const_cast<AliESDVertex*>(
fESD->GetPrimaryVertexSPD());
3013 if(!goodvtx || !goodvtx->GetStatus()) isGoodVtx = kFALSE;
3015 if( isPrimaryVtx && !isGoodVtx )
3027 Int_t lTriggerType = -1;
3028 if (trigger & AliVEvent::kMB) lTriggerType = 1;
3029 if (trigger & AliVEvent::kFastOnly) lTriggerType = 0;
3030 if (trigger & AliVEvent::kEMC1) lTriggerType = 2;
3031 if(lTriggerType==-1)
return;
3044 AliESDCaloCells *cells =
fESD->GetEMCALCells();
3045 Short_t nCells = cells->GetNumberOfCells();
3046 Int_t nCellCount[2] = {0,0};
3047 for(
Int_t iCell=0; iCell<nCells; iCell++)
3049 Int_t cellId = cells->GetCellNumber(iCell);
3050 Double_t cellE = cells->GetCellAmplitude(cellId);
3051 Int_t sMod =
fGeom->GetSuperModuleNumber(cellId);
3053 if(sMod==3 || sMod==4)
3056 nCellCount[sMod-3]++;
3061 if(
fPeriod.CompareTo(
"lhc11a")==0)
3063 if (nCellCount[1] > 100)
3066 if (runN>=146858 && runN<=146860)
void SetCutPhi(Float_t cutPhi)
Bool_t HasPrimaryVertex() const
Bool_t fRunUE
Random number generator.
Int_t RunOfflineTrigger()
TH2F * fhJetPtWithClsThres[2][kNRadii]
pt of jets containing tracks above certian threshold
Bool_t IsGoodCluster(AliESDCaloCluster *cluster)
TH2F * fhJetResolutionNK[2][kNRadii]
Jet response due to missing weakly decayed particles using response matrix.
TH2F * fhHCTrkPtAmbig[2][kNRadii][5]
Cleanly subtracted charged pt.
TH1F * fhUEJetPtNorm[3][2][2]
Leading jet pt vs constituent pt in underlying event.
TH3F * fhJetPtVsZ[3][kNRadii]
Leading charged constituent Z vs jet pt.
Bool_t fFindChargedOnlyJet
TH1F * fhJetPtInExoticEvent[2][kNRadii]
Jet pt vs Fcross vs Zleading.
TH2F * fhJetResponseNKSM[2][kNRadii]
Jet resolution due to missing weakly decayed particles using response matrix.
TH2F * fhHCTrkPtClean[2][kNRadii][5]
f*subtracted cluster energy vs jet pt
AliESDtrackCuts * fEsdTrackCuts
Reco utility.
void AnalyzeSecondaryContributionViaMatching(AliFJWrapper *jetFinder, const Int_t r, const Int_t type, const Int_t etaCut)
TH1F * fEventZ[2]
Generated event vertex z.
Bool_t fElectronRejection
Bool_t fSaveQAHistos
Output list.
TH1F * fhEventStatTPCVtx
Event counts used for jet analysis.
TClonesArray * fMcTruthAntikt[kNRadii]
Jet finder for particle jets.
AliAODEvent * fAOD
ESD object.
virtual void CopySettingsFrom(const AliFJWrapper &wrapper)
Bool_t fRejectExoticTrigger
Bool_t IsExoticCluster(const AliVCluster *cluster, AliVCaloCells *cells, Int_t bc=0)
TH1F * fhSysClusterE[2][2]
Jets in full TPC acceptance in events with TPC only vertex.
Bool_t fRejectExoticCluster
TH3F * fhFcrossVsZleading[2][kNRadii]
Error made by hadronic correction assessed by using particle jet.
AliESDtrack * GetAcceptTrack(AliESDtrack *esdtrack)
TH2F * fhNeutralPtInJet[3][kNRadii]
Subtracted energy due to hadronic correction.
TH2F * fhJetResponseNK[2][kNRadii]
Energy fraction lost due to weakly decaying particles.
TH2F * fhChargedPtInJet[3][kNRadii]
pt of neutral constituents in jet
TH2F * fhTrigNeuPtInJet[3][kNRadii]
pt of neutral constituents in jet
TH2F * fhUEJetPtVsSumPt[3][2][2]
Jet pt in exotic events.
Double_t GetLeadingZ(const Int_t jetIndex, AliFJWrapper *jetFinder)
Bool_t IsTPCOnlyVtx() const
TF1 * fTriggerEfficiency[10]
Trigger turn-on curves of EMCal clusters.
void SetNonLinearityFunction(Int_t fun)
void FillAODJets(TClonesArray *fJetArray, AliFJWrapper *jetFinder, const Bool_t isTruth=0)
TH2F * fhSysNCellVsClsE[2][2]
Cluster energy distribution before and after hadonic correction.
Bool_t IsElectron(AliESDtrack *track, Double_t clsE) const
AliFJWrapper * fDetJetFinder[3][2][kNRadii]
Some utilities for cluster and cell treatment.
void FindDetJets(const Int_t s=0, const Int_t a=0, const Int_t r=0)
void UserCreateOutputObjects()
TH2F * fhJetResponseWP[2][kNRadii]
Jet response due to missing neutron and K0L using response matrix.
TH2F * fhSubClsEVsJetPt[2][kNRadii][5]
pT distribution of pions detected
TH1F * fJetCount[3][kNRadii]
Jet NPart fraction.
Double_t GetSmearedTrackPt(AliESDtrack *track)
Int_t GetClusterSuperModule(AliESDCaloCluster *cluster)
void SwitchOffRejectExoticCell()
THnSparse * fJetEnergyFraction[3][kNRadii]
Contribution of low pt particles to jet energy.
void SwitchOnBadChannelsRemoval()
TClonesArray * fJetTCA[3][2][kNRadii]
Jet finder.
Double_t GetZ(const Double_t trkPx, const Double_t trkPy, const Double_t trkPz, const Double_t jetPx, const Double_t jetPy, const Double_t jetPz) const
void SetClusterMatchedToTrack(const AliVEvent *event)
const std::vector< fastjet::PseudoJet > & GetInclusiveJets() const
void SwitchOffRejectExoticCluster()
Bool_t fIsMC
Array of MC particles.
Bool_t IsLEDEvent() const
void GetESDEMCalClusters()
TH1F * fhClsE[2]
Leading jet normalization.
Bool_t AcceptCalibrateCell(Int_t absId, Int_t bc, Float_t &, Double_t &time, AliVCaloCells *cells)
Double_t GetExoticEnergyFraction(AliESDCaloCluster *cluster)
TH1F * fhNTrials[2]
reconstructed event vertex z
Bool_t fHadronicCorrection
Double_t GetJetArea(UInt_t idx) const
TH1D * fTriggerCurve[10]
Offline trigger mask.
TObjArray * fClusterArray
Array of input tracks.
void CheckTPCOnlyVtx(const UInt_t trigger)
TH2F * fhJetResponseWPSM[2][kNRadii]
Jet response due to missing neutron and K0L via matching.
void RunAnalyzeUE(AliFJWrapper *jetFinder, const Int_t type, const Bool_t isMCTruth)
Double_t SubtractClusterEnergy(AliESDCaloCluster *cluster, Double_t &eRes, Double_t &MIPE, Double_t &MCsubE)
Double_t GetJetMissPtDueToTrackingEfficiency(const Int_t jetIndex, AliFJWrapper *jetFinder, const Int_t radiusIndex)
TH2F * fhJetResolutionWP[2][kNRadii]
Jet resolution due to missing neutron and K0L using response matrix.
Double_t fHCLowerPtCutMIP
Double_t fJetNEFMin
Parameterization of cluster energy resolution from test beam results.
TH1F * fhJetEventStat
Event counts to keep track of rejection criteria.
Bool_t fSysJetTrigEff
Response matrix for secondary particles.
AliEMCALGeometry * fGeom
Fit of trigger turn-on curves for EMCal clusters above 4-5 GeV.
Double_t fVaryClusterERes
void SwitchOffBadChannelsRemoval()
void SetTracksMatchedToCluster(const AliVEvent *event)
TList * fOutputList
TCA of MC truth anti-kt jets.
AliEMCALRecoUtils * fRecoUtil
EMCal goemetry utility.
TH2F * fhJetPtWithTrkThres[2][kNRadii]
Jet pt vs track pt contribution vs track class.
virtual void Clear(const Option_t *="")
AliMCEvent * fMC
AOD object.
AliFJWrapper * fTrueJetFinder[kNRadii]
Parameterazation of momentum resolution estimated from data.
virtual ~AliAnalysisTaskFullppJet()
TH2F * fhSecondaryResponse[3]
Double_t GetOfflineTriggerProbability(AliESDCaloCluster *cluster)
Double_t fVaryClusterEScale
TH2F * fhChLeadZVsJetPt[2][kNRadii]
pt of leading charged constituents in jet
TH2F * fhUEJetPtVsConsPt[3][2][2]
Leading jet pt vs underlying event pt.
Bool_t fIsExoticEvent5GeV
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
TH3F * fRelTrkCon[2][kNRadii]
Jet pt vs constituent Z vs constituent type.
AliStack * fStack
MC object.
TH2F * fhNKFracVsJetPt[2][kNRadii]
NCell vs cluster energy before and after hadonic correction.
AliAnalysisTaskFullppJet()
void UserExec(Option_t *option)
TH3F * fhJetResolutionWPSM[2][kNRadii]
Jet resolution due to missing neutron and K0L via matching.
TArrayI * fMcPartArray
Array of input clusters.
TF1 * fClusterEResolution
void GetMaxEnergyCell(const AliEMCALGeometry *geom, AliVCaloCells *cells, const AliVCluster *clu, Int_t &absId, Int_t &iSupMod, Int_t &ieta, Int_t &iphi, Bool_t &shared)
std::vector< fastjet::PseudoJet > GetJetConstituents(UInt_t idx) const
TH2F * fhSubEVsTrkPt[2][4]
of matched tracks per cluster
Bool_t fIsEventTriggerBit
Double_t GetTrkEff(Double_t inPt)
TObjArray * fTrackArray
MC stack.
TH1F * fVertexGenZ[2]
Check if the chunk is corrupted.
Int_t GetParentParton(const Int_t ipart)
TH3F * fhJetResolutionNKSM[2][kNRadii]
Jet response due to missing weakly decayed particles via matching.
Bool_t fSysClusterEScale
Non-linearity correction functions for data.
Int_t FindEnergyMatchedJet(AliFJWrapper *jetFinder1, const Int_t index1, AliFJWrapper *jetFinder2, const Double_t fraction=0.5)
TH2F * fhLeadNePtInJet[3][kNRadii]
pt of charged constituents in jet
void SwitchOnRejectExoticCluster()
void ProcessMC(const Int_t r=0)
AliESDtrackCuts * fHybridTrackCuts1
TH2F * fhJetPtVsLowPtCons[2][kNRadii][2]
pt of jets containing clusters above certian threshold
Int_t fRecombinationScheme
AliESDtrackCuts * fHybridTrackCuts2
void FindMatches(AliVEvent *event, TObjArray *clusterArr=0x0, const AliEMCALGeometry *geom=0x0, AliMCEvent *mc=0x0)
Bool_t fConstrainChInEMCal
TCA of jets: in - akt - r.
TH1F * fhChunkQA
Event counts for TPC only vertices.
Bool_t IsGoodJet(fastjet::PseudoJet jet, Double_t radius)
Bool_t IsPrimaryVertexOk() const
Int_t FindSpatialMatchedJet(fastjet::PseudoJet jet, AliFJWrapper *jetFinder, Double_t &dEta, Double_t &dPhi, Double_t maxR)
virtual void AddInputVector(Double_t px, Double_t py, Double_t pz, Double_t E, Int_t index=-99999)
void SwitchOnCutEtaPhiSeparate()
TH1F * fhCorrTrkEffPtBin[2][kNRadii]
Fit function of tracking efficiency.
void SetEMCALChannelStatus(Int_t iSM, Int_t iCol, Int_t iRow, Double_t status=1)
void CheckEventTriggerBit()
void Terminate(Option_t *)
void SetCutEta(Float_t cutEta)
Bool_t fFindNeutralOnlyJet
Bool_t ClusterContainsBadChannel(const AliEMCALGeometry *geom, const UShort_t *cellList, Int_t nCells)
TH3F * fhJetInTPCOnlyVtx[2][kNRadii]
Cluster energy distribution.
Bool_t IsGoodMcPartilce(const AliVParticle *vParticle, const Int_t ipart)
TH2F * fHCOverSubE[kNRadii][5]
Ambiguously subtracted charged pt.
Double_t GetMeasuredJetPtResolution(const Int_t jetIndex, AliFJWrapper *jetFinder)
TH1F * fhCorrTrkEffSample[2][kNRadii][kNBins]
Number of tracks per jet pt bin, used to correct the tracking efficiency explicitly.
TH2F * fHCOverSubEFrac[kNRadii][5]
Error made by hadronic correction assessed by using particle jet.
void AnalyzeSecondaryContribution(AliFJWrapper *jetFinder, const Int_t r, const Int_t etaCut)
TH2F * fhWeakFracVsJetPt[2][kNRadii]
Energy fraction lost due to missing neutron and K0L.
TRandom3 * fRandomGen
Tracking efficiency estimated from simulation.
THnSparse * fJetNPartFraction[3][kNRadii]
Jet energy fraction.
Bool_t fIsExoticEvent3GeV
TH1F * fhNMatchedTrack[2]
of trials
TH2F * fhLeadChPtInJet[3][kNRadii]
pt of leading neutral constituents in jet
TList * OpenFile(const char *fname)
void AnalyzeJets(AliFJWrapper *jetFinder, const Int_t type, const Int_t r)