#include "AliAnalysisTaskFragmentationFunction.h"
-
ClassImp(AliAnalysisTaskFragmentationFunction)
//____________________________________________________________________________
,fAOD(0)
,fBranchRecJets("jets")
,fBranchRecBackJets("")
+ ,fBranchRecBckgClusters("")
,fBranchGenJets("")
,fTrackTypeGen(0)
,fJetTypeGen(0)
,fDJMode(0)
,fEffMode(0)
,fPhiCorrMode(0)
- ,fUseRecEffRecJetPtBins(1)
+ ,fUseRecEffRecJetPtBins(0)
+ ,fUseResponseRecJetPtBins(1)
,fAvgTrials(0)
,fTracksRec(0)
,fTracksRecCuts(0)
,fhnResponseJetXi(0)
// Background
,fh1OutLeadingMult(0)
+ ,fh1OutLeadingStatMult(0)
,fh1PerpMult(0)
,fh1ASideMult(0)
,fh1ASideWindowMult(0)
,fh1PerpWindowMult(0)
,fh1Out2JetsMult(0)
,fh1Out3JetsMult(0)
+ ,fh1MedianClustersMult(0)
+ ,fh1OutClustersMult(0)
,fQABckgHisto0RecCuts(0)
,fQABckgHisto0Gen(0)
,fQABckgHisto1RecCuts(0)
,fQABckgHisto1Gen(0)
,fQABckgHisto2RecCuts(0)
- ,fQABckgHisto2Gen(0)
+ ,fQABckgHisto2Gen(0)
+ ,fQABckgHisto3RecCuts(0)
+ ,fQABckgHisto3Gen(0)
,fFFBckgHisto0RecCuts(0)
,fFFBckgHisto0RecLeading(0)
,fFFBckgHisto0Gen(0)
,fFFBckgHisto2RecLeading(0)
,fFFBckgHisto2Gen(0)
,fFFBckgHisto2GenLeading(0)
+ ,fFFBckgHisto3RecCuts(0)
+ ,fFFBckgHisto3RecLeading(0)
+ ,fFFBckgHisto3Gen(0)
+ ,fFFBckgHisto3GenLeading(0)
,fIJBckgHisto0RecCuts(0)
,fIJBckgHisto0RecLeading(0)
,fIJBckgHisto0Gen(0)
,fIJBckgHisto2RecLeading(0)
,fIJBckgHisto2Gen(0)
,fIJBckgHisto2GenLeading(0)
+ ,fIJBckgHisto3RecCuts(0)
+ ,fIJBckgHisto3RecLeading(0)
+ ,fIJBckgHisto3Gen(0)
+ ,fIJBckgHisto3GenLeading(0)
,fRandom(0)
,fBckgSubMethod(0)
{
fBckgType[0] = 0;
fBckgType[1] = 0;
fBckgType[2] = 0;
+ fBckgType[3] = 0;
}
//__________________________________________________________________________________________
,fAOD(0)
,fBranchRecJets("jets")
,fBranchRecBackJets("")
+ ,fBranchRecBckgClusters("")
,fBranchGenJets("")
,fTrackTypeGen(0)
,fJetTypeGen(0)
,fDJMode(0)
,fEffMode(0)
,fPhiCorrMode(0)
- ,fUseRecEffRecJetPtBins(1)
+ ,fUseRecEffRecJetPtBins(0)
+ ,fUseResponseRecJetPtBins(1)
,fAvgTrials(0)
,fTracksRec(0)
,fTracksRecCuts(0)
,fhnResponseJetXi(0)
// Background
,fh1OutLeadingMult(0)
+ ,fh1OutLeadingStatMult(0)
,fh1PerpMult(0)
,fh1ASideMult(0)
,fh1ASideWindowMult(0)
,fh1PerpWindowMult(0)
,fh1Out2JetsMult(0)
,fh1Out3JetsMult(0)
+ ,fh1MedianClustersMult(0)
+ ,fh1OutClustersMult(0)
,fQABckgHisto0RecCuts(0)
,fQABckgHisto0Gen(0)
,fQABckgHisto1RecCuts(0)
,fQABckgHisto1Gen(0)
,fQABckgHisto2RecCuts(0)
- ,fQABckgHisto2Gen(0)
+ ,fQABckgHisto2Gen(0)
+ ,fQABckgHisto3RecCuts(0)
+ ,fQABckgHisto3Gen(0)
,fFFBckgHisto0RecCuts(0)
,fFFBckgHisto0RecLeading(0)
,fFFBckgHisto0Gen(0)
,fFFBckgHisto2RecLeading(0)
,fFFBckgHisto2Gen(0)
,fFFBckgHisto2GenLeading(0)
+ ,fFFBckgHisto3RecCuts(0)
+ ,fFFBckgHisto3RecLeading(0)
+ ,fFFBckgHisto3Gen(0)
+ ,fFFBckgHisto3GenLeading(0)
,fIJBckgHisto0RecCuts(0)
,fIJBckgHisto0RecLeading(0)
,fIJBckgHisto0Gen(0)
,fIJBckgHisto2RecLeading(0)
,fIJBckgHisto2Gen(0)
,fIJBckgHisto2GenLeading(0)
+ ,fIJBckgHisto3RecCuts(0)
+ ,fIJBckgHisto3RecLeading(0)
+ ,fIJBckgHisto3Gen(0)
+ ,fIJBckgHisto3GenLeading(0)
,fRandom(0)
,fBckgSubMethod(0)
{
fBckgType[0] = 0;
fBckgType[1] = 0;
fBckgType[2] = 0;
+ fBckgType[3] = 0;
DefineOutput(1,TList::Class());
,fAOD(copy.fAOD)
,fBranchRecJets(copy.fBranchRecJets)
,fBranchRecBackJets(copy.fBranchRecBackJets)
+ ,fBranchRecBckgClusters(copy.fBranchRecBckgClusters)
,fBranchGenJets(copy.fBranchGenJets)
,fTrackTypeGen(copy.fTrackTypeGen)
,fJetTypeGen(copy.fJetTypeGen)
,fEffMode(copy.fEffMode)
,fPhiCorrMode(copy.fPhiCorrMode)
,fUseRecEffRecJetPtBins(copy.fUseRecEffRecJetPtBins)
+ ,fUseResponseRecJetPtBins(copy.fUseResponseRecJetPtBins)
,fAvgTrials(copy.fAvgTrials)
,fTracksRec(copy.fTracksRec)
,fTracksRecCuts(copy.fTracksRecCuts)
,fhnResponseJetXi(copy.fhnResponseJetXi)
// Background
,fh1OutLeadingMult(copy.fh1OutLeadingMult)
+ ,fh1OutLeadingStatMult(copy.fh1OutLeadingStatMult)
,fh1PerpMult(copy.fh1PerpMult)
,fh1ASideMult(copy.fh1ASideMult)
,fh1ASideWindowMult(copy.fh1ASideWindowMult)
,fh1PerpWindowMult(copy.fh1PerpWindowMult)
,fh1Out2JetsMult(copy.fh1Out2JetsMult)
,fh1Out3JetsMult(copy.fh1Out3JetsMult)
+ ,fh1MedianClustersMult(copy.fh1MedianClustersMult)
+ ,fh1OutClustersMult(copy.fh1OutClustersMult)
,fQABckgHisto0RecCuts(copy.fQABckgHisto0RecCuts)
,fQABckgHisto0Gen(copy.fQABckgHisto0Gen)
,fQABckgHisto1RecCuts(copy.fQABckgHisto1RecCuts)
,fQABckgHisto1Gen(copy.fQABckgHisto1Gen)
,fQABckgHisto2RecCuts(copy.fQABckgHisto2RecCuts)
- ,fQABckgHisto2Gen(copy.fQABckgHisto2Gen)
+ ,fQABckgHisto2Gen(copy.fQABckgHisto2Gen)
+ ,fQABckgHisto3RecCuts(copy.fQABckgHisto3RecCuts)
+ ,fQABckgHisto3Gen(copy.fQABckgHisto3Gen)
,fFFBckgHisto0RecCuts(copy.fFFBckgHisto0RecCuts)
,fFFBckgHisto0RecLeading(copy.fFFBckgHisto0RecLeading)
,fFFBckgHisto0Gen(copy.fFFBckgHisto0Gen)
,fFFBckgHisto2RecLeading(copy.fFFBckgHisto2RecLeading)
,fFFBckgHisto2Gen(copy.fFFBckgHisto2Gen)
,fFFBckgHisto2GenLeading(copy.fFFBckgHisto2GenLeading)
+ ,fFFBckgHisto3RecCuts(copy.fFFBckgHisto3RecCuts)
+ ,fFFBckgHisto3RecLeading(copy.fFFBckgHisto3RecLeading)
+ ,fFFBckgHisto3Gen(copy.fFFBckgHisto3Gen)
+ ,fFFBckgHisto3GenLeading(copy.fFFBckgHisto3GenLeading)
,fIJBckgHisto0RecCuts(copy.fIJBckgHisto0RecCuts)
,fIJBckgHisto0RecLeading(copy.fIJBckgHisto0RecLeading)
,fIJBckgHisto0Gen(copy.fIJBckgHisto0Gen)
,fIJBckgHisto2RecLeading(copy.fIJBckgHisto2RecLeading)
,fIJBckgHisto2Gen(copy.fIJBckgHisto2Gen)
,fIJBckgHisto2GenLeading(copy.fIJBckgHisto2GenLeading)
+ ,fIJBckgHisto3RecCuts(copy.fIJBckgHisto3RecCuts)
+ ,fIJBckgHisto3RecLeading(copy.fIJBckgHisto3RecLeading)
+ ,fIJBckgHisto3Gen(copy.fIJBckgHisto3Gen)
+ ,fIJBckgHisto3GenLeading(copy.fIJBckgHisto3GenLeading)
,fRandom(copy.fRandom)
,fBckgSubMethod(copy.fBckgSubMethod)
{
fBckgType[0] = copy.fBckgType[0];
fBckgType[1] = copy.fBckgType[1];
fBckgType[2] = copy.fBckgType[2];
+ fBckgType[3] = copy.fBckgType[3];
}
// _________________________________________________________________________________________________________________________________
fAOD = o.fAOD;
fBranchRecJets = o.fBranchRecJets;
fBranchRecBackJets = o.fBranchRecBackJets;
+ fBranchRecBckgClusters = o.fBranchRecBckgClusters;
fBranchGenJets = o.fBranchGenJets;
fTrackTypeGen = o.fTrackTypeGen;
fJetTypeGen = o.fJetTypeGen;
fBckgType[0] = o.fBckgType[0];
fBckgType[1] = o.fBckgType[1];
fBckgType[2] = o.fBckgType[2];
+ fBckgType[3] = o.fBckgType[3];
fUseRecEffRecJetPtBins = o.fUseRecEffRecJetPtBins;
+ fUseResponseRecJetPtBins = o.fUseResponseRecJetPtBins;
fAvgTrials = o.fAvgTrials;
fTracksRec = o.fTracksRec;
fTracksRecCuts = o.fTracksRecCuts;
fhnResponseJetXi = o.fhnResponseJetXi;
// Background
fh1OutLeadingMult = o.fh1OutLeadingMult;
+ fh1OutLeadingStatMult = o.fh1OutLeadingStatMult;
fh1PerpMult = o.fh1PerpMult;
fh1ASideMult = o.fh1ASideMult;
fh1ASideWindowMult = o.fh1ASideWindowMult;
fh1PerpWindowMult = o.fh1PerpWindowMult;
fh1Out2JetsMult = o.fh1Out2JetsMult;
fh1Out3JetsMult = o.fh1Out3JetsMult;
+ fh1MedianClustersMult = o.fh1MedianClustersMult;
+ fh1OutClustersMult = o.fh1OutClustersMult;
fQABckgHisto0RecCuts = o.fQABckgHisto0RecCuts;
fQABckgHisto0Gen = o.fQABckgHisto0Gen;
fQABckgHisto1RecCuts = o.fQABckgHisto1RecCuts;
fQABckgHisto1Gen = o.fQABckgHisto1Gen;
fQABckgHisto2RecCuts = o.fQABckgHisto2RecCuts;
fQABckgHisto2Gen = o.fQABckgHisto2Gen;
+ fQABckgHisto3RecCuts = o.fQABckgHisto3RecCuts;
+ fQABckgHisto3Gen = o.fQABckgHisto3Gen;
fFFBckgHisto0RecCuts = o.fFFBckgHisto0RecCuts;
fFFBckgHisto0RecLeading = o.fFFBckgHisto0RecLeading;
fFFBckgHisto0Gen = o.fFFBckgHisto0Gen;
fFFBckgHisto2RecLeading = o.fFFBckgHisto2RecLeading;
fFFBckgHisto2Gen = o.fFFBckgHisto2Gen;
fFFBckgHisto2GenLeading = o.fFFBckgHisto2GenLeading;
+ fFFBckgHisto3RecCuts = o.fFFBckgHisto3RecCuts;
+ fFFBckgHisto3RecLeading = o.fFFBckgHisto3RecLeading;
+ fFFBckgHisto3Gen = o.fFFBckgHisto3Gen;
+ fFFBckgHisto3GenLeading = o.fFFBckgHisto3GenLeading;
fIJBckgHisto0RecCuts = o.fIJBckgHisto0RecCuts;
fIJBckgHisto0RecLeading = o.fIJBckgHisto0RecLeading;
fIJBckgHisto0Gen = o.fIJBckgHisto0Gen;
fIJBckgHisto2RecLeading = o.fIJBckgHisto2RecLeading;
fIJBckgHisto2Gen = o.fIJBckgHisto2Gen;
fIJBckgHisto2GenLeading = o.fIJBckgHisto2GenLeading;
+ fIJBckgHisto3Gen = o.fIJBckgHisto3Gen;
+ fIJBckgHisto3GenLeading = o.fIJBckgHisto3GenLeading;
fRandom = o.fRandom;
fBckgSubMethod = o.fBckgSubMethod;
}
if(fJetsRecCuts) delete fJetsRecCuts;
if(fJetsGen) delete fJetsGen;
if(fJetsRecEff) delete fJetsRecEff;
- if(fBckgMode && (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters)){
+ if(fBckgMode &&
+ (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters ||
+ fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading ||
+ fBckgType[2]==kBckgClustersOutLeading || fBckgType[3]==kBckgClustersOutLeading)){
+
if(fBckgJetsRec) delete fBckgJetsRec;
if(fBckgJetsRecCuts) delete fBckgJetsRecCuts;
if(fBckgJetsGen) delete fBckgJetsGen;
fh2EtaPhi = new TH2F(Form("fh2TrackQAEtaPhi%s", fNameQAT.Data()), Form("%s: #eta - #phi distribution", fNameQAT.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
fh2HighPtEtaPhi = new TH2F(Form("fh2TrackQAHighPtEtaPhi%s", fNameQAT.Data()), Form("%s: #eta - #phi distribution for high-p_{T}", fNameQAT.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
fh1Pt = new TH1F(Form("fh1TrackQAPt%s", fNameQAT.Data()), Form("%s: p_{T} distribution", fNameQAT.Data()), fNBinsPt, fPtMin, fPtMax);
- fh2PhiPt = new TH2F(Form("fh2TrackQAPhiPt%s", fNameQAT.Data()), Form("%s: #eta - #p_{T} distribution", fNameQAT.Data()), fNBinsPhi, fPhiMin, fPhiMax, fNBinsPt, fPtMin, fPtMax);
+ fh2PhiPt = new TH2F(Form("fh2TrackQAPhiPt%s", fNameQAT.Data()), Form("%s: #phi - #p_{T} distribution", fNameQAT.Data()), fNBinsPhi, fPhiMin, fPhiMax, fNBinsPt, fPtMin, fPtMax);
AliAnalysisTaskFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi");
AliAnalysisTaskFragmentationFunction::SetProperties(fh2HighPtEtaPhi, "#eta", "#phi");
// fJetsKine = new TList();
// fJetsKine->SetOwner(kTRUE); // delete AOD jets using mom from Kine Tree via TList::Clear()
- if(fBckgMode && (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters)){
+ if(fBckgMode &&
+ (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters ||
+ fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading ||
+ fBckgType[2]==kBckgClustersOutLeading || fBckgType[3]==kBckgClustersOutLeading)){
+
fBckgJetsRec = new TList();
fBckgJetsRec->SetOwner(kFALSE);
fh1EvtSelection->GetXaxis()->SetBinLabel(5,"vertex z: rejected");
fh1EvtSelection->GetXaxis()->SetBinLabel(6,"vertex type: rejected");
- fh1VertexNContributors = new TH1F("fh1VertexNContributors", "Vertex N contributors", 11,-.5, 10.5);
+ fh1VertexNContributors = new TH1F("fh1VertexNContributors", "Vertex N contributors", 2500,-.5, 2499.5);
fh1VertexZ = new TH1F("fh1VertexZ", "Vertex z distribution", 30, -15., 15.);
fh1EvtMult = new TH1F("fh1EvtMult","Event multiplicity, track pT cut > 150 MeV/c, |#eta| < 0.9",120,0.,12000.);
fh1EvtCent = new TH1F("fh1EvtCent","centrality",100,0.,100.);
// Background
if(fBckgMode) {
- if(fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters) {
+ if(fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters ||
+ fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading ||
+ fBckgType[2]==kBckgClustersOutLeading || fBckgType[3]==kBckgClustersOutLeading){
+
fh1nRecBckgJetsCuts = new TH1F("fh1nRecBckgJetsCuts","reconstructed background jets per event",10,-0.5,9.5);
fh1nGenBckgJets = new TH1F("fh1nGenBckgJets","generated background jets per event",10,-0.5,9.5);
}
- if(fBckgType[0]==kBckgPerp || fBckgType[1]==kBckgPerp || fBckgType[2]==kBckgPerp)
- fh1PerpMult = new TH1F("fh1PerpMult","Background multiplicity - Cone perpendicular to leading jet axis",120,0.,120.);
- if(fBckgType[0]==kBckgASide || fBckgType[1]==kBckgASide || fBckgType[2]==kBckgASide)
- fh1ASideMult = new TH1F("fh1ASideMult","Background multiplicity - Cone in the away side of leading jet axis",120,0.,120.);
- if(fBckgType[0]==kBckgASideWindow || fBckgType[1]==kBckgASideWindow || fBckgType[2]==kBckgASideWindow)
- fh1ASideWindowMult = new TH1F("fh1ASideWindowMult","Background multiplicity - Cone in the away side of leading jet axis",120,0.,120.);
- if(fBckgType[0]==kBckgPerpWindow || fBckgType[1]==kBckgPerpWindow || fBckgType[2]==kBckgPerpWindow)
- fh1PerpWindowMult = new TH1F("fh1PerpWindowMult","Background multiplicity - Cone in the perp direction of leading jet axis",120,0.,120.);
- if(fBckgType[0]==kBckgOutLJ || fBckgType[1]==kBckgOutLJ || fBckgType[2]==kBckgOutLJ)
- fh1OutLeadingMult = new TH1F("fh1OutLeadingMult","Background multiplicity - Cone outside leading jet",120,0,120.);
- if(fBckgType[0]==kBckgOut2J || fBckgType[1]==kBckgOut2J || fBckgType[2]==kBckgOut2J)
- fh1Out2JetsMult = new TH1F("fh1Out2JetsMult","Background multiplicity - Cone outside 2 jets",120,0.,120.);
- if(fBckgType[0]==kBckgOut3J || fBckgType[1]==kBckgOut3J || fBckgType[2]==kBckgOut3J)
- fh1Out3JetsMult = new TH1F("fh1Out3JetsMult","Background multiplicity - Cone outside 3 jets",120,0.,120.);
- }
+ if(fBckgType[0]==kBckgPerp || fBckgType[1]==kBckgPerp || fBckgType[2]==kBckgPerp || fBckgType[3]==kBckgPerp)
+ fh1PerpMult = new TH1F("fh1PerpMult","Background multiplicity - Cone perpendicular to leading jet axis",500,0.,500.);
+ if(fBckgType[0]==kBckgASide || fBckgType[1]==kBckgASide || fBckgType[2]==kBckgASide || fBckgType[3]==kBckgASide)
+ fh1ASideMult = new TH1F("fh1ASideMult","Background multiplicity - Cone in the away side of leading jet axis",500,0.,500.);
+ if(fBckgType[0]==kBckgASideWindow || fBckgType[1]==kBckgASideWindow || fBckgType[2]==kBckgASideWindow || fBckgType[3]==kBckgASideWindow)
+ fh1ASideWindowMult = new TH1F("fh1ASideWindowMult","Background multiplicity - Cone in the away side of leading jet axis",500,0.,500.);
+ if(fBckgType[0]==kBckgPerpWindow || fBckgType[1]==kBckgPerpWindow || fBckgType[2]==kBckgPerpWindow || fBckgType[3]==kBckgPerpWindow)
+ fh1PerpWindowMult = new TH1F("fh1PerpWindowMult","Background multiplicity - Cone in the perp direction of leading jet axis",500,0.,500.);
+ if(fBckgType[0]==kBckgOutLJ || fBckgType[1]==kBckgOutLJ || fBckgType[2]==kBckgOutLJ || fBckgType[3]==kBckgOutLJ)
+ fh1OutLeadingMult = new TH1F("fh1OutLeadingMult","Background multiplicity - Cone outside leading jet",500,0,500.);
+ if(fBckgType[0]==kBckgOutLJStat || fBckgType[1]==kBckgOutLJStat || fBckgType[2]==kBckgOutLJStat || fBckgType[3]==kBckgOutLJStat)
+ fh1OutLeadingStatMult = new TH1F("fh1OutLeadingStatMult","Background multiplicity - Cone outside leading jet",3000,0,3000.);
+ if(fBckgType[0]==kBckgOut2J || fBckgType[1]==kBckgOut2J || fBckgType[2]==kBckgOut2J || fBckgType[3]==kBckgOut2J)
+ fh1Out2JetsMult = new TH1F("fh1Out2JetsMult","Background multiplicity - Cone outside 2 jets",500,0.,500.);
+ if(fBckgType[0]==kBckgOut3J || fBckgType[1]==kBckgOut3J || fBckgType[2]==kBckgOut3J || fBckgType[3]==kBckgOut3J)
+ fh1Out3JetsMult = new TH1F("fh1Out3JetsMult","Background multiplicity - Cone outside 3 jets",500,0.,500.);
+ if(fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters)
+ fh1MedianClustersMult = new TH1F("fh1MedianClustersMult","Background multiplicity - median cluster",500,0.,500.);
+ if(fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading || fBckgType[3]==kBckgClustersOutLeading)
+ fh1OutClustersMult = new TH1F("fh1OutClustersMult","Background multiplicity - clusters outside leading jet",3000,0.,3000.);
+ }
+
if(fQAMode){
if(fQAMode&1){ // track QA
fQATrackHistosRec = new AliFragFuncQATrackHistos("Rec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
// Background
if(fBckgMode){
// Track QA
- TString title[3];
- for(Int_t i=0; i<3; i++){
+ TString title[4];
+ for(Int_t i=0; i<4; i++){
if(fBckgType[i]==kBckgPerp) title[i]="Perp";
else if(fBckgType[i]==kBckgPerpWindow) title[i]="PerpW";
else if(fBckgType[i]==kBckgASide) title[i]="ASide";
else if(fBckgType[i]==kBckgOut2JStat) title[i]="Out2JetsStat";
else if(fBckgType[i]==kBckgOut3JStat) title[i]="Out3JetsStat";
else if(fBckgType[i]==kBckgOutAJStat) title[i]="AllJetsStat";
- else if(fBckgType[i]==kBckgClusters) title[i]="OutClusters";
+ else if(fBckgType[i]==kBckgClustersOutLeading) title[i]="OutClusters";
+ else if(fBckgType[i]==kBckgClusters) title[i]="MedianClusters";
else printf("Please chose background method number %d!",i);
}
fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
fQATrackHighPtThreshold);
+ fQABckgHisto3RecCuts = new AliFragFuncQATrackHistos("Bckg"+title[3]+"RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
+ fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
+ fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
+ fQATrackHighPtThreshold);
+ fQABckgHisto3Gen = new AliFragFuncQATrackHistos("Bckg"+title[3]+"Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
+ fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
+ fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
+ fQATrackHighPtThreshold);
} // end: background QA
if(fFFMode){
fFFNBinsPt, fFFPtMin, fFFPtMax,
fFFNBinsXi, fFFXiMin, fFFXiMax,
fFFNBinsZ , fFFZMin , fFFZMax);
+ fFFBckgHisto3RecCuts = new AliFragFuncHistos("Bckg"+title[3]+"RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
+ fFFNBinsPt, fFFPtMin, fFFPtMax,
+ fFFNBinsXi, fFFXiMin, fFFXiMax,
+ fFFNBinsZ , fFFZMin , fFFZMax);
+ fFFBckgHisto3RecLeading = new AliFragFuncHistos("Bckg"+title[3]+"RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
+ fFFNBinsPt, fFFPtMin, fFFPtMax,
+ fFFNBinsXi, fFFXiMin, fFFXiMax,
+ fFFNBinsZ , fFFZMin , fFFZMax);
+ fFFBckgHisto3Gen = new AliFragFuncHistos("Bckg"+title[3]+"Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
+ fFFNBinsPt, fFFPtMin, fFFPtMax,
+ fFFNBinsXi, fFFXiMin, fFFXiMax,
+ fFFNBinsZ , fFFZMin , fFFZMax);
+ fFFBckgHisto3GenLeading = new AliFragFuncHistos("Bckg"+title[3]+"GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
+ fFFNBinsPt, fFFPtMin, fFFPtMax,
+ fFFNBinsXi, fFFXiMin, fFFXiMax,
+ fFFNBinsZ , fFFZMin , fFFZMax);
} // end: background FF
if(fIJMode){
fFFBckgHisto2RecLeading->DefineHistos();
fFFBckgHisto2Gen->DefineHistos();
fFFBckgHisto2GenLeading->DefineHistos();
+ fFFBckgHisto3RecCuts->DefineHistos();
+ fFFBckgHisto3RecLeading->DefineHistos();
+ fFFBckgHisto3Gen->DefineHistos();
+ fFFBckgHisto3GenLeading->DefineHistos();
}
if(fIJMode){
fQABckgHisto1Gen->DefineHistos();
fQABckgHisto2RecCuts->DefineHistos();
fQABckgHisto2Gen->DefineHistos();
+ fQABckgHisto3RecCuts->DefineHistos();
+ fQABckgHisto3Gen->DefineHistos();
}
} // end: background
fFFBckgHisto1RecLeading->AddToOutput(fCommonHistList);
fFFBckgHisto2RecCuts->AddToOutput(fCommonHistList);
fFFBckgHisto2RecLeading->AddToOutput(fCommonHistList);
+ fFFBckgHisto3RecCuts->AddToOutput(fCommonHistList);
+ fFFBckgHisto3RecLeading->AddToOutput(fCommonHistList);
if(genJets && genTracks){
fFFBckgHisto0Gen->AddToOutput(fCommonHistList);
fFFBckgHisto0GenLeading->AddToOutput(fCommonHistList);
fFFBckgHisto1GenLeading->AddToOutput(fCommonHistList);
fFFBckgHisto2Gen->AddToOutput(fCommonHistList);
fFFBckgHisto2GenLeading->AddToOutput(fCommonHistList);
+ fFFBckgHisto3Gen->AddToOutput(fCommonHistList);
+ fFFBckgHisto3GenLeading->AddToOutput(fCommonHistList);
}
}
fQABckgHisto0RecCuts->AddToOutput(fCommonHistList);
fQABckgHisto1RecCuts->AddToOutput(fCommonHistList);
fQABckgHisto2RecCuts->AddToOutput(fCommonHistList);
+ fQABckgHisto3RecCuts->AddToOutput(fCommonHistList);
if(genJets && genTracks){
fQABckgHisto0Gen->AddToOutput(fCommonHistList);
fQABckgHisto1Gen->AddToOutput(fCommonHistList);
fQABckgHisto2Gen->AddToOutput(fCommonHistList);
+ fQABckgHisto3Gen->AddToOutput(fCommonHistList);
}
}
- if(fBckgType[0]==kBckgOutLJ || fBckgType[1]==kBckgOutLJ || fBckgType[2]==kBckgOutLJ)
+ if(fBckgType[0]==kBckgOutLJ || fBckgType[1]==kBckgOutLJ || fBckgType[2]==kBckgOutLJ || fBckgType[3]==kBckgOutLJ)
fCommonHistList->Add(fh1OutLeadingMult);
- if(fBckgType[0]==kBckgPerp || fBckgType[1]==kBckgPerp || fBckgType[2]==kBckgPerp)
+ if(fBckgType[0]==kBckgOutLJStat || fBckgType[1]==kBckgOutLJStat || fBckgType[2]==kBckgOutLJStat || fBckgType[3]==kBckgOutLJStat)
+ fCommonHistList->Add(fh1OutLeadingStatMult);
+ if(fBckgType[0]==kBckgPerp || fBckgType[1]==kBckgPerp || fBckgType[2]==kBckgPerp || fBckgType[3]==kBckgPerp )
fCommonHistList->Add(fh1PerpMult);
- if(fBckgType[0]==kBckgASide || fBckgType[1]==kBckgASide || fBckgType[2]==kBckgASide)
+ if(fBckgType[0]==kBckgASide || fBckgType[1]==kBckgASide || fBckgType[2]==kBckgASide || fBckgType[3]==kBckgASide)
fCommonHistList->Add(fh1ASideMult);
- if(fBckgType[0]==kBckgASideWindow || fBckgType[1]==kBckgASideWindow || fBckgType[2]==kBckgASideWindow)
+ if(fBckgType[0]==kBckgASideWindow || fBckgType[1]==kBckgASideWindow || fBckgType[2]==kBckgASideWindow || fBckgType[3]==kBckgASideWindow)
fCommonHistList->Add(fh1ASideWindowMult);
- if(fBckgType[0]==kBckgPerpWindow || fBckgType[1]==kBckgPerpWindow || fBckgType[2]==kBckgPerpWindow)
+ if(fBckgType[0]==kBckgPerpWindow || fBckgType[1]==kBckgPerpWindow || fBckgType[2]==kBckgPerpWindow || fBckgType[3]==kBckgPerpWindow)
fCommonHistList->Add(fh1PerpWindowMult);
- if(fBckgType[0]==kBckgOut2J || fBckgType[1]==kBckgOut2J || fBckgType[2]==kBckgOut2J)
+ if(fBckgType[0]==kBckgOut2J || fBckgType[1]==kBckgOut2J || fBckgType[2]==kBckgOut2J || fBckgType[3]==kBckgOut2J)
fCommonHistList->Add(fh1Out2JetsMult);
- if(fBckgType[0]==kBckgOut3J || fBckgType[1]==kBckgOut3J || fBckgType[2]==kBckgOut3J)
+ if(fBckgType[0]==kBckgOut3J || fBckgType[1]==kBckgOut3J || fBckgType[2]==kBckgOut3J || fBckgType[3]==kBckgOut3J)
fCommonHistList->Add(fh1Out3JetsMult);
+ if(fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters)
+ fCommonHistList->Add(fh1MedianClustersMult);
+ if(fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading || fBckgType[3]==kBckgClustersOutLeading)
+ fCommonHistList->Add(fh1OutClustersMult);
}
// QA
}
}
- if(fBckgMode && (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters)) {
+ if(fBckgMode &&
+ (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters ||
+ fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading ||
+ fBckgType[2]==kBckgClustersOutLeading || fBckgType[3]==kBckgClustersOutLeading)) {
fCommonHistList->Add(fh1nRecBckgJetsCuts);
if(genJets) fCommonHistList->Add(fh1nGenBckgJets);
}
// phi correlation
if(fPhiCorrMode){
- fPhiCorrHistosJetArea->AddToOutput(fCommonHistList);
- fPhiCorrHistosTransverseArea->AddToOutput(fCommonHistList);
- fPhiCorrHistosAwayArea->AddToOutput(fCommonHistList);
+ fPhiCorrHistosJetArea->AddToOutput(fCommonHistList);
+ fPhiCorrHistosTransverseArea->AddToOutput(fCommonHistList);
+ fPhiCorrHistosAwayArea->AddToOutput(fCommonHistList);
}
// intra-jet
fh1nRecEffJets->Fill(nRecEffJets);
//____ fetch background jets ___________________________________________________
- if(fBckgMode && (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters)){
- Int_t nBJ = GetListOfBckgJets(/*fBckgJetsRec, kJetsRec*/);
+ if(fBckgMode &&
+ (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters ||
+ fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading ||
+ fBckgType[2]==kBckgClustersOutLeading || fBckgType[3]==kBckgClustersOutLeading)){
+
+ Int_t nBJ = GetListOfBckgJets(fBckgJetsRec, kJetsRec);
Int_t nRecBckgJets = 0;
if(nBJ>=0) nRecBckgJets = fBckgJetsRec->GetEntries();
if(fDebug>2)Printf("%s:%d Selected Rec background jets: %d %d",(char*)__FILE__,__LINE__,nBJ,nRecBckgJets);
if(nBJ != nRecBckgJets) Printf("%s:%d Mismatch Selected Rec background jets: %d %d",(char*)__FILE__,__LINE__,nBJ,nRecBckgJets);
- Int_t nBJCuts = GetListOfBckgJets(/*fBckgJetsRecCuts, kJetsRecAcceptance*/);
+ Int_t nBJCuts = GetListOfBckgJets(fBckgJetsRecCuts, kJetsRecAcceptance);
Int_t nRecBckgJetsCuts = 0;
if(nBJCuts>=0) nRecBckgJetsCuts = fBckgJetsRecCuts->GetEntries();
if(fDebug>2)Printf("%s:%d Selected Rec background jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
if(nRecBckgJetsCuts != nBJCuts) Printf("%s:%d Mismatch selected Rec background jets after cuts: %d %d",(char*)__FILE__,__LINE__,nBJCuts,nRecBckgJetsCuts);
fh1nRecBckgJetsCuts->Fill(nRecBckgJetsCuts);
- if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fBckgJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
- Int_t nBJGen = GetListOfBckgJets(/*fBckgJetsGen, fJetTypeGen*/);
- Int_t nGenBckgJets = 0;
- if(nBJGen>=0) nGenBckgJets = fBckgJetsGen->GetEntries();
- if(fDebug>2)Printf("%s:%d Selected Gen background jets: %d %d",(char*)__FILE__,__LINE__,nBJGen,nGenBckgJets);
- if(nBJGen != nGenBckgJets) Printf("%s:%d Mismatch selected Gen background jets: %d %d",(char*)__FILE__,__LINE__,nBJGen,nGenBckgJets);
- fh1nGenBckgJets->Fill(nGenBckgJets);
+ if(0){ // protection OB - not yet implemented
+ if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fBckgJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
+ Int_t nBJGen = GetListOfBckgJets(fBckgJetsGen, fJetTypeGen);
+ Int_t nGenBckgJets = 0;
+ if(nBJGen>=0) nGenBckgJets = fBckgJetsGen->GetEntries();
+ if(fDebug>2)Printf("%s:%d Selected Gen background jets: %d %d",(char*)__FILE__,__LINE__,nBJGen,nGenBckgJets);
+ if(nBJGen != nGenBckgJets) Printf("%s:%d Mismatch selected Gen background jets: %d %d",(char*)__FILE__,__LINE__,nBJGen,nGenBckgJets);
+ fh1nGenBckgJets->Fill(nGenBckgJets);
+ }
}
delete trackV;
}
- // ff and ij for background study
+ // ff and ij for background study
if(fBckgMode){
if(fBckgType[0]!=-1)
FillBckgHistos(fBckgType[0], fTracksRecCuts, fJetsRecCuts, jet, leadTrackPt, leadTrackV,
fFFBckgHisto2RecCuts, fFFBckgHisto2RecLeading,
fIJBckgHisto2RecCuts, fIJBckgHisto2RecLeading,
fQABckgHisto2RecCuts);
+ if(fBckgType[3]!=-1)
+ FillBckgHistos(fBckgType[3], fTracksRecCuts, fJetsRecCuts, jet, leadTrackPt, leadTrackV,
+ fFFBckgHisto3RecCuts, fFFBckgHisto3RecLeading,
+ fIJBckgHisto3RecCuts, fIJBckgHisto3RecLeading,
+ fQABckgHisto3RecCuts);
} // end if(fBckgMode)
delete leadTrackV;
jettracklistGen,fTracksAODMCCharged,indexAODTr,isGenPrim,fUseRecEffRecJetPtBins);
if(fFFMode) FillJetTrackResponse(fhnResponseJetTrackPt,fhnResponseJetZ,fhnResponseJetXi,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff,
- jettracklistGen,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,fUseRecEffRecJetPtBins);
-
+ jettracklistGen,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,fUseResponseRecJetPtBins);
+
delete jettracklistGen;
delete jettracklistRec;
}
TList* perpjettracklistGen = new TList();
Double_t sumPtGen = 0.;
- GetTracksTiltedwrpJetAxis(TMath::Pi()/2.,fTracksGen, perpjettracklistGen, jet, GetFFBckgRadius() , sumPtGen); // for efficiency: gen tracks perp to gen/rec jet
+ GetTracksTiltedwrpJetAxis(TMath::Pi()/2.,fTracksGen, perpjettracklistGen, jet, GetFFRadius() , sumPtGen); // for efficiency: gen tracks perp to gen/rec jet
// here could be your histos !!!
// FillJetTrackRecEffHisto(fFFBckgrPerpHistosRecEffGen,fFFBckgrPerpHistosRecEffRec,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff,perpjettracklistGen,
fJetsGen->Clear();
fJetsRecEff->Clear();
- if(fBckgMode && (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters)){
+ if(fBckgMode &&
+ (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters ||
+ fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading ||
+ fBckgType[2]==kBckgClustersOutLeading || fBckgType[3]==kBckgClustersOutLeading)){
+
fBckgJetsRec->Clear();
fBckgJetsRecCuts->Clear();
fBckgJetsGen->Clear();
//Post output data.
PostData(1, fCommonHistList);
-
}
//________________________________________________________________________________________
}
}
-// _______________________________________________________________________________
-Int_t AliAnalysisTaskFragmentationFunction::GetListOfBckgJets(/*TList *list, Int_t type*/)
+// ___________________________________________________________________________________
+Int_t AliAnalysisTaskFragmentationFunction::GetListOfBckgJets(TList *list, Int_t type)
{
- // fill list of jets selected according to type
+ // fill list of bgr clusters selected according to type
-// /*
-// Under construction
-// */
+ if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
- return 0;
+ if(fBranchRecBckgClusters.Length()==0){
+ Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
+ if(fDebug>1)fAOD->Print();
+ return 0;
+ }
+
+ TClonesArray *aodRecJets = 0;
+ if(fBranchRecBckgClusters.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAOD->FindListObject(fBranchRecBckgClusters.Data()));
+ if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAOD->GetList()->FindObject(fBranchRecBckgClusters.Data()));
+
+ if(!aodRecJets){
+ if(fBranchRecBckgClusters.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecBckgClusters.Data());
+ if(fDebug>1)fAOD->Print();
+ return 0;
+ }
+
+ // Reorder jet pt and fill new temporary AliAODJet objects
+ Int_t nRecJets = 0;
+
+ for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
+
+ AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
+ if(!tmp) continue;
+
+ // if( tmp->Pt() < fJetPtCut ) continue; // no pt cut on bckg clusters !
+ if( type == kJetsRecAcceptance &&
+ ( tmp->Eta() < fJetEtaMin
+ || tmp->Eta() > fJetEtaMax
+ || tmp->Phi() < fJetPhiMin
+ || tmp->Phi() > fJetPhiMax )) continue;
+
+ list->Add(tmp);
+
+ nRecJets++;
+
+ }
+
+ list->Sort();
+
+ return nRecJets;
+ }
+ // /*
+ // MC clusters still Under construction
+ // */
+
+ return 0;
}
// _________________________________________________________________________________________________________
if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
if(ptGen < fTrackPtCut) continue;
- Double_t zGen = ptGen / jetPtGen;
+ Double_t zGen = ptGen / jetPtRec;
Double_t xiGen = 0;
if(zGen>0) xiGen = TMath::Log(1/zGen);
if(rectrack){
Double_t ptRec = rectrack->Pt();
- Double_t zRec = ptRec / jetPtGen;
+ Double_t zRec = ptRec / jetPtRec;
Double_t xiRec = 0;
if(zRec>0) xiRec = TMath::Log(1/zRec);
}
+// ___________________________________________________________________________________________________________________________
+void AliAnalysisTaskFragmentationFunction::GetClusterTracksOutOf1Jet(AliAODJet* jet, TList* outputlist, Double_t &normFactor)
+{
+ // fill tracks from bckgCluster branch in list,
+ // for all clusters outside jet cone
+ // sum up total area of clusters
+
+ Double_t rc = GetFFRadius();
+ Double_t rcl = GetFFBckgRadius();
+
+ Double_t areaTotal = 0;
+ Double_t sumPtTotal = 0;
+
+ for(Int_t ij=0; ij<fBckgJetsRec->GetEntries(); ++ij){
+
+ AliAODJet* bgrCluster = (AliAODJet*)(fBckgJetsRec->At(ij)); // not 'recCuts': use all clusters in full eta range
+
+ Double_t dR = jet->DeltaR(bgrCluster);
+
+ if(dR<rcl) continue;
+
+ Double_t clusterPt = bgrCluster->Pt();
+ Double_t area = bgrCluster->EffectiveAreaCharged();
+ areaTotal += area;
+ sumPtTotal += clusterPt;
+
+ Int_t nTracksJet = bgrCluster->GetRefTracks()->GetEntries();
+
+ for(Int_t it = 0; it<nTracksJet; it++){
+
+ AliVParticle* track = dynamic_cast<AliVParticle*>(bgrCluster->GetTrack(it));
+
+ Float_t trackPt = track->Pt();
+ Float_t trackEta = track->Eta();
+ Float_t trackPhi = TVector2::Phi_0_2pi(track->Phi());
+
+ if(trackEta < fTrackEtaMin || trackEta > fTrackEtaMax) continue;
+ if(trackPhi < fTrackPhiMin || trackPhi > fTrackPhiMax) continue;
+ if(trackPt < fTrackPtCut) continue;
+
+ outputlist->Add(track);
+ }
+ }
+
+ Double_t areaJet = TMath::Pi()*rc*rc;
+ if(areaTotal) normFactor = (Float_t) 1./(areaJet / areaTotal);
+
+ outputlist->Sort();
+}
+
+// _______________________________________________________________________________________________________________________
+void AliAnalysisTaskFragmentationFunction::GetClusterTracksMedian(TList* outputlist, Double_t &normFactor)
+{
+ // fill tracks from bckgCluster branch,
+ // using cluster with median density (odd number of clusters)
+ // or picking randomly one of the two closest to median (even number)
+
+ Int_t nBckgClusters = fBckgJetsRec->GetEntries(); // not 'recCuts': use all clusters in full eta range
+
+ Double_t* bgrDensity = new Double_t[nBckgClusters];
+ Int_t* indices = new Int_t[nBckgClusters];
+
+ for(Int_t ij=0; ij<nBckgClusters; ++ij){
+
+ AliAODJet* bgrCluster = (AliAODJet*)(fBckgJetsRec->At(ij));
+ Double_t clusterPt = bgrCluster->Pt();
+ Double_t area = bgrCluster->EffectiveAreaCharged();
+
+ Double_t density = 0;
+ if(area>0) density = clusterPt/area;
+
+ bgrDensity[ij] = density;
+ indices[ij] = ij;
+ }
+
+ TMath::Sort(nBckgClusters, bgrDensity, indices);
+
+ // get median cluster
+
+ AliAODJet* medianCluster = 0;
+ Double_t medianDensity = 0;
+
+ if(TMath::Odd(nBckgClusters)){
+
+ Int_t medianIndex = indices[(Int_t) (0.5*(nBckgClusters-1))];
+ medianCluster = (AliAODJet*)(fBckgJetsRec->At(medianIndex));
+
+ Double_t clusterPt = medianCluster->Pt();
+ Double_t area = medianCluster->EffectiveAreaCharged();
+
+ if(area>0) medianDensity = clusterPt/area;
+ }
+ else{
+
+ Int_t medianIndex1 = indices[(Int_t) (0.5*nBckgClusters-1)];
+ Int_t medianIndex2 = indices[(Int_t) (0.5*nBckgClusters)];
+
+ AliAODJet* medianCluster1 = (AliAODJet*)(fBckgJetsRec->At(medianIndex1));
+ AliAODJet* medianCluster2 = (AliAODJet*)(fBckgJetsRec->At(medianIndex2));
+
+ Double_t density1 = 0;
+ Double_t clusterPt1 = medianCluster1->Pt();
+ Double_t area1 = medianCluster1->EffectiveAreaCharged();
+ if(area1>0) density1 = clusterPt1/area1;
+
+ Double_t density2 = 0;
+ Double_t clusterPt2 = medianCluster2->Pt();
+ Double_t area2 = medianCluster2->EffectiveAreaCharged();
+ if(area2>0) density2 = clusterPt2/area2;
+
+ medianDensity = 0.5*(density1+density2);
+
+ medianCluster = ( (fRandom->Rndm()>0.5) ? medianCluster1 : medianCluster2 ); // select one randomly to avoid adding areas
+ }
+
+ Int_t nTracksJet = medianCluster->GetRefTracks()->GetEntries();
+
+ for(Int_t it = 0; it<nTracksJet; it++){
+
+ AliVParticle* track = dynamic_cast<AliVParticle*>(medianCluster->GetTrack(it));
+
+ Float_t trackPt = track->Pt();
+ Float_t trackEta = track->Eta();
+ Float_t trackPhi = TVector2::Phi_0_2pi(track->Phi());
+
+ if(trackEta < fTrackEtaMin || trackEta > fTrackEtaMax) continue;
+ if(trackPhi < fTrackPhiMin || trackPhi > fTrackPhiMax) continue;
+ if(trackPt < fTrackPtCut) continue;
+
+ outputlist->Add(track);
+ }
+
+ Double_t areaMedian = medianCluster->EffectiveAreaCharged();
+ Double_t areaJet = TMath::Pi()*GetFFRadius()*GetFFRadius();
+
+ if(areaMedian) normFactor = (Float_t) 1./(areaJet / areaMedian);
+
+ outputlist->Sort();
+
+ delete[] bgrDensity;
+ delete[] indices;
+}
+
// ______________________________________________________________________________________________________________________________________________________
void AliAnalysisTaskFragmentationFunction::FillBckgHistos(Int_t type, TList* inputtracklist, TList* inputjetlist, AliAODJet* jet, Float_t leadTrackPt, TLorentzVector* leadTrackV,
AliFragFuncHistos* ffbckghistocuts, AliFragFuncHistos* ffbckghistoleading,
Double_t normFactorLeading = 0.;
GetTracksOutOfNJetsStat(1,inputtracklist, tracklistoutleadingStat, inputjetlist, sumPtOutLeadingStat, normFactorLeading);
+ if(type==kBckgOutLJStat) fh1OutLeadingStatMult->Fill(tracklistoutleadingStat->GetSize());
for(Int_t it=0; it<tracklistoutleadingStat->GetSize(); ++it){
if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactorLeading);
// Fill track QA for background
- //if(fQAMode&1) qabckghistocuts->FillTrackQA( trackEta, TVector2::Phi_0_2pi(trackPhi), trackPt);
+ if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt); // OB added bgr QA
}
// All cases included
if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactorLeading);
if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactorLeading );
+
+ if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
+
}
delete trackV;
}
if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactor2Jets);
if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactor2Jets );
+
+ if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
+
}
delete trackV;
}
if(fIJMode) ijbckghistocuts->FillIntraJet( trackV, jet->MomentumVector(), normFactor3Jets);
if(fFFMode) ffbckghistoleading->FillFF( trackPt, leadTrackPt , incrementJetPt, normFactor3Jets );
- if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV,normFactor3Jets );
+ if(fIJMode) ijbckghistoleading->FillIntraJet( trackV, leadTrackV, normFactor3Jets );
+
+ if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt ); // OB added bgr QA
+
}
delete trackV;
}
}
- if(type==kBckgClusters)
- {
- // To be implemented
- }
+ if(type==kBckgClustersOutLeading){ // clusters bgr: all tracks in clusters out of leading jet
+
+ TList* tracklistClustersOutLeading = new TList();
+ Double_t normFactorClusters = 0;
+ Float_t jetPt = jet->Pt();
+
+ GetClusterTracksOutOf1Jet(jet, tracklistClustersOutLeading, normFactorClusters);
+ fh1OutClustersMult->Fill(tracklistClustersOutLeading->GetSize());
+
+ for(Int_t it=0; it<tracklistClustersOutLeading->GetSize(); ++it){
+
+ AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistClustersOutLeading->At(it));
+ TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
+
+ Float_t trackPt = trackVP->Pt();
+
+ Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
+
+ if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorClusters );
+ if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt );
+ delete trackV;
+ }
+
+ delete tracklistClustersOutLeading;
+
+ }
+
+ if(type == kBckgClusters){ // clusters bgr: all tracks in 'median cluster'
+
+ TList* tracklistClustersMedian = new TList();
+ Double_t normFactorClusters = 0;
+ Float_t jetPt = jet->Pt();
+
+ GetClusterTracksMedian(tracklistClustersMedian, normFactorClusters);
+ fh1MedianClustersMult->Fill(tracklistClustersMedian->GetSize());
+
+ for(Int_t it=0; it<tracklistClustersMedian->GetSize(); ++it){
+
+ AliVParticle* trackVP = dynamic_cast<AliVParticle*>(tracklistClustersMedian->At(it));
+ TLorentzVector* trackV = new TLorentzVector(trackVP->Px(),trackVP->Py(),trackVP->Pz(),trackVP->P());
+
+ Float_t trackPt = trackVP->Pt();
+
+ Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
+
+ if(fFFMode) ffbckghistocuts->FillFF( trackPt, jetPt, incrementJetPt, normFactorClusters );
+ if(fQAMode&1) qabckghistocuts->FillTrackQA( trackV->Eta(), TVector2::Phi_0_2pi(trackV->Phi()), trackPt );
+
+ delete trackV;
+ }
+
+ delete tracklistClustersMedian;
+ }
+
delete tracklistout2jets;
delete tracklistout3jets;
delete tracklistout2jetsStat;
delete tracklistout3jetsStat;
-
+
}
// ______________________________________________________________________________________________________________________________________________________