From d514944fe9b3161cfbc7942d77f80b0701cb11a3 Mon Sep 17 00:00:00 2001 From: jgrosseo Date: Mon, 19 Mar 2012 16:07:27 +0000 Subject: [PATCH] updated analysis (Jason Ulery) --- .../DPhi/AliAnalysisTaskDiHadron.cxx | 1819 ++++++++++++----- .../DPhi/AliAnalysisTaskDiHadron.h | 338 +-- .../3particlecorrelations/AddTask_DiHadron.C | 222 ++ PWGCF/Correlations/macros/AddTaskDiHadron.C | 136 -- 4 files changed, 1767 insertions(+), 748 deletions(-) create mode 100644 PWGCF/Correlations/macros/3particlecorrelations/AddTask_DiHadron.C delete mode 100644 PWGCF/Correlations/macros/AddTaskDiHadron.C diff --git a/PWGCF/Correlations/DPhi/AliAnalysisTaskDiHadron.cxx b/PWGCF/Correlations/DPhi/AliAnalysisTaskDiHadron.cxx index 7c979df9e20..d380682aa20 100755 --- a/PWGCF/Correlations/DPhi/AliAnalysisTaskDiHadron.cxx +++ b/PWGCF/Correlations/DPhi/AliAnalysisTaskDiHadron.cxx @@ -17,6 +17,7 @@ //version: 3.4, last revised: 2010/08/15 #include "Riostream.h" +#include "TROOT.h" #include "TChain.h" #include "TTree.h" #include "TH1F.h" @@ -28,21 +29,30 @@ #include "TF3.h" #include "TVector3.h" #include "TMath.h" +#include "TRandom3.h" +#include "TSystem.h" #include "AliAnalysisTask.h" +#include "AliAnalysisTaskSE.h" #include "AliAnalysisManager.h" - +#include "AliAnalysisTaskSE.h" #include "AliESDEvent.h" #include "AliESDInputHandler.h" +#include "AliESDtrack.h" +#include "AliAODEvent.h" +#include "AliAODHeader.h" +#include "AliAODInputHandler.h" +#include "AliAODTrack.h" #include "AliMCEvent.h" #include "AliMCEventHandler.h" #include "AliMCParticle.h" #include "AliStack.h" #include "AliESDVertex.h" #include "AliMultiplicity.h" +#include "AliESDVZERO.h" #include "TParticle.h" - +#include "AliCentrality.h" //#include "AliHeader.h" //#include "AliGenEventHeader.h" @@ -56,10 +66,11 @@ ClassImp(AliAnalysisTaskDiHadron) //---------------------------------------- AliAnalysisTaskDiHadron::AliAnalysisTaskDiHadron(const char *name): -AliAnalysisTask(name,""), fESD(0), fMC(0), fOutput(0),fMinClustersTPC(0),fMinClusterRatio(0),fMaxTPCchi2(0),fMinClustersITS(0),fEtaCut(0),fTrigEtaCut(0),fNearPhiCut(0),fXECut(0),fMaxDCA(0),fMaxDCAXY(0),fMaxDCAZ(0),fDCA2D(0),fTPCRefit(0),fITSRefit(0),fSPDCut(0),fMinPtAssoc(0),fMaxPtAssoc(0),fVzCut(0),fEfficiencyCorr(0),fDEBUG(0),fnBinPhi(0),fnBinEta(0),fnBinPhiEtaPhi(0),fnBinPhiEtaEta(0),fnBinPhi3(0),fnBinEta3(0),fPi(3.1415926535898),fdPhiMin(0),fdPhiMax(0),fNTPtBins(0),fNMix(0),fNCentBins(0),fNAPtBins(0),fNAPt3Bins(0),fNVertexBins(0),fNXEBins(0),fNIDs(0),fEffFitPt(0),fNFitLowParam(0),fNFitHighParam(0),fMCHistos(0),fFitLow(NULL),fFitHigh(NULL),fFitLowParam(NULL),fFitHighParam(NULL),fPtTrigArray(NULL),fPtAssocArray(NULL),fPtAssoc3Array1(NULL),fPtAssoc3Array2(NULL),fCentArrayMin(NULL),fCentArrayMax(NULL),fXEArray(NULL),fTrigIDArray(NULL),ftPhi(NULL),ftEta(NULL),ftPt(NULL),ftCharge(NULL),ftEff(NULL),ftPtAssoc3(NULL),ftNPtAssoc3(NULL) +AliAnalysisTaskSE(name), fESD(0), fAOD(0), fMC(0), fOutput(0),fMinClustersTPC(0),fMinClusterRatio(0),fMaxTPCchi2(0),fMinClustersITS(0),fEtaCut(0),fTrigEtaCut(0),fNearPhiCut(0),fXECut(0),fMaxDCA(0),fMaxDCAXY(0),fMaxDCAZ(0),fDCA2D(0),fTPCRefit(0),fITSRefit(0),fSPDCut(0),fMinPtAssoc(0),fMaxPtAssoc(0),fVzCut(0),fAODData(0),fEfficiencyCorr(0),fDEBUG(0),fnBinPhi(0),fnBinEta(0),fnBinPhiEtaPhi(0),fnBinPhiEtaEta(0),fnBinPhi3(0),fnBinEta3(0),fPi(3.1415926535898),fdPhiMin(0),fdPhiMax(0),fNTPtBins(0),fNMix(0),fNCentBins(0),fCentPercent(0),fNAPtBins(0),fNAPt3Bins(0),fNVertexBins(0),fNXEBins(0),fNIDs(0),fEffFitPt(0),fNFitLowParam(0),fNFitHighParam(0),fV2FitPt(0),fV3FitPt(0),fV4FitPt(0),fNFitLowParamV2(0),fNFitHighParamV2(0),fNFitLowParamV3(0),fNFitHighParamV3(0),fNFitLowParamV4(0),fNFitHighParamV4(0),fMCHistos(0),fFitLow(NULL),fFitHigh(NULL),fFitLowParam(NULL),fFitHighParam(NULL),fFitLowV2(NULL),fFitHighV2(NULL),fFitLowParamV2(NULL),fFitHighParamV2(NULL),fFitLowV3(NULL),fFitHighV3(NULL),fFitLowParamV3(NULL),fFitHighParamV3(NULL),fFitLowV4(NULL),fFitHighV4(NULL),fFitLowParamV4(NULL),fFitHighParamV4(NULL),fPtTrigArray(NULL),fPtAssocArray(NULL),fPtAssoc3Array1(NULL),fPtAssoc3Array2(NULL),fCentArrayMin(NULL),fCentArrayMax(NULL),fXEArray(NULL),fTrigIDArray(NULL),fSimulate(0),fSimNBgPart(0),fSimNJetPart(0),fSimNJet(0),fSimNEvents(0),ftPhi(NULL),ftEta(NULL),ftPt(NULL),ftCharge(NULL),ftEff(NULL),ftV2(NULL),ftV3(NULL),ftV4(NULL),ftPtAssoc3(NULL),ftNPtAssoc3(NULL) { - + //TRandom *gRandom=new TRandom3(); + //IO Slots DefineInput(0, TChain::Class()); DefineOutput(0,TList::Class()); @@ -68,12 +79,16 @@ AliAnalysisTask(name,""), fESD(0), fMC(0), fOutput(0),fMinClustersTPC(0),fMinClu for(int c=0;c (GetInputData(0)); if (!tree&&fDEBUG) {Printf("ERROR: Could not read chain from input slot 0");} else { - AliESDInputHandler *esdH = dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()); - - if (!esdH){ - if(fDEBUG)Printf("ERROR: Could not get ESDInputHandler"); + if(!fAODData){ +AliESDInputHandler *esdH = dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()); + if (!esdH){if(fDEBUG) Printf("ERROR: Could not get ESDInputHandler");} + else fESD = esdH->GetEvent(); } - else{ - fESD = esdH->GetEvent(); + else{ + AliAODInputHandler *aodH = dynamic_cast (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()); + if (!aodH) { + Printf("ERROR: Could not get AODInputHandler"); + } + else{ + fAOD = aodH->GetEvent(); + } } - //MC Data handler (so one can calcualte eff) AliMCEventHandler *mcH = dynamic_cast((AliAnalysisManager::GetAnalysisManager())->GetMCtruthEventHandler()); if(mcH)fMC=mcH->MCEvent(); } - if(fDEBUG)Printf("Connected"); + if(fDEBUG)Printf("Connected"); } //--------------------------------------------------------- @@ -191,9 +261,8 @@ void AliAnalysisTaskDiHadron::CreateOutputObjects(){ if(fDEBUG)Printf("Output"); fOutput=new TList(); fOutput->SetName(GetName()); - const Int_t buffersize = 256; - char histname[buffersize]; - char histtitle[buffersize]; + char histname[300]; + char histtitle[300]; int nptbins=fNAPtBins; int lptbins=0; const char *cmc1[2]={"","_MC"}; @@ -207,6 +276,7 @@ void AliAnalysisTaskDiHadron::CreateOutputObjects(){ Float_t etaArray[fnBinEta+1]; Float_t phiEtaArrayPhi[fnBinPhiEtaPhi+1]; Float_t phiEtaArrayEta[fnBinPhiEtaEta+1]; + Int_t BufferSize=256; for(int iphi=0;iphi<=fnBinPhi;iphi++){ phiArray[iphi]=fdPhiMin+iphi*2*fPi/fnBinPhi; } @@ -222,8 +292,8 @@ void AliAnalysisTaskDiHadron::CreateOutputObjects(){ for(int imc=0;imc<=1;imc++){//MC loop if(imc==1&&!fMCHistos) continue; //Create the histograms - snprintf(histname,buffersize,"fHistMult%s",cmc1[imc]); - snprintf(histtitle,buffersize,"Multiplicity%s",cmc2[imc]); + snprintf(histname,BufferSize,"fHistMult%s",cmc1[imc]); + snprintf(histtitle,BufferSize,"Multiplicity%s",cmc2[imc]); fHistMult[imc]=new TH1F(histname,histtitle,2000,-0.5,1999.5); fHistMult[imc]->Sumw2(); fHistMult[imc]->GetXaxis()->SetTitle("Number of tracks"); @@ -233,89 +303,89 @@ void AliAnalysisTaskDiHadron::CreateOutputObjects(){ for(int imult=0;imultSumw2(); fHistPt[imult][imc]->GetXaxis()->SetTitle("p_{T}"); fHistPt[imult][imc]->GetYaxis()->SetTitle("Counts"); fOutput->Add(fHistPt[imult][imc]); - //Histograms that are independent of the trigger - snprintf(histname,buffersize,"fHistPtEff_C%d%s",imult,cmc1[imc]); - snprintf(histtitle,buffersize,"P_{T} Distribution of Tracks %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]); + //Histograms that are independent of the trigger + snprintf(histname,BufferSize,"fHistPtEff_C%d%s",imult,cmc1[imc]); + snprintf(histtitle,BufferSize,"P_{T} Distribution of Tracks %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]); fHistPtEff[imult][imc]=new TH1F(histname,histtitle,1000,0,100); fHistPtEff[imult][imc]->Sumw2(); fHistPtEff[imult][imc]->GetXaxis()->SetTitle("p_{T}"); fHistPtEff[imult][imc]->GetYaxis()->SetTitle("Counts"); fOutput->Add(fHistPtEff[imult][imc]); - snprintf(histname,buffersize,"fHistPhi_C%d%s",imult,cmc1[imc]); - snprintf(histtitle,buffersize,"#phi Distribution of Tracks %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]); + snprintf(histname,BufferSize,"fHistPhi_C%d%s",imult,cmc1[imc]); + snprintf(histtitle,BufferSize,"#phi Distribution of Tracks %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]); fHistPhi[imult][imc]=new TH2F(histname,histtitle,fnBinPhi,phiArray,nptbins,fPtAssocArray); fHistPhi[imult][imc]->Sumw2(); fHistPhi[imult][imc]->GetXaxis()->SetTitle("#phi"); fHistPhi[imult][imc]->GetYaxis()->SetTitle("P_{T}"); fOutput->Add(fHistPhi[imult][imc]); - snprintf(histname,buffersize,"fHistPhiPt_C%d%s",imult,cmc1[imc]); - snprintf(histtitle,buffersize,"P_{T} weighted #phi Distribution of tracks %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]); + snprintf(histname,BufferSize,"fHistPhiPt_C%d%s",imult,cmc1[imc]); + snprintf(histtitle,BufferSize,"P_{T} weighted #phi Distribution of tracks %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]); fHistPhiPt[imult][imc]=new TH2F(histname,histtitle,fnBinPhi,phiArray,nptbins,fPtAssocArray); fHistPhiPt[imult][imc]->Sumw2(); fHistPhiPt[imult][imc]->GetXaxis()->SetTitle("#phi"); fHistPhiPt[imult][imc]->GetYaxis()->SetTitle("P_{T}"); fOutput->Add(fHistPhiPt[imult][imc]); - snprintf(histname,buffersize,"fHistEta_C%d%s",imult,cmc1[imc]); - snprintf(histtitle,buffersize,"#eta Distribution of Tracks %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]); + snprintf(histname,BufferSize,"fHistEta_C%d%s",imult,cmc1[imc]); + snprintf(histtitle,BufferSize,"#eta Distribution of Tracks %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]); fHistEta[imult][imc]=new TH2F(histname,histtitle,fnBinEta,etaArray,nptbins,fPtAssocArray); fHistEta[imult][imc]->Sumw2(); fHistEta[imult][imc]->GetXaxis()->SetTitle("#eta"); fHistEta[imult][imc]->GetYaxis()->SetTitle("P_{T}"); fOutput->Add(fHistEta[imult][imc]); - snprintf(histname,buffersize,"fHistEtaPt_C%d%s",imult,cmc1[imc]); - snprintf(histtitle,buffersize,"P_{T} weighted #eta Distribution of tracks %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]); + snprintf(histname,BufferSize,"fHistEtaPt_C%d%s",imult,cmc1[imc]); + snprintf(histtitle,BufferSize,"P_{T} weighted #eta Distribution of tracks %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]); fHistEtaPt[imult][imc]=new TH2F(histname,histtitle,fnBinEta,etaArray,nptbins,fPtAssocArray); fHistEtaPt[imult][imc]->Sumw2(); fHistEtaPt[imult][imc]->GetXaxis()->SetTitle("#eta"); fHistEtaPt[imult][imc]->GetYaxis()->SetTitle("P_{T}"); fOutput->Add(fHistEtaPt[imult][imc]); - snprintf(histname,buffersize,"fHistNEvents_C%d%s",imult,cmc1[imc]); - snprintf(histtitle,buffersize,"Number of Events and Number Passing Cuts %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]); + snprintf(histname,BufferSize,"fHistNEvents_C%d%s",imult,cmc1[imc]); + snprintf(histtitle,BufferSize,"Number of Events and Number Passing Cuts %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]); fHistNEvents[imult][imc]=new TH1F(histname,histtitle,2,-0.5,1.5); fHistNEvents[imult][imc]->Sumw2(); fHistNEvents[imult][imc]->GetXaxis()->SetTitle("Events,Passing Cuts"); fHistNEvents[imult][imc]->GetYaxis()->SetTitle("Number of Events"); fOutput->Add(fHistNEvents[imult][imc]); - snprintf(histname,buffersize,"fHistNTrigger_C%d%s",imult,cmc1[imc]); - snprintf(histtitle,buffersize,"Number of Triggers %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]); + snprintf(histname,BufferSize,"fHistNTrigger_C%d%s",imult,cmc1[imc]); + snprintf(histtitle,BufferSize,"Number of Triggers %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]); fHistNTrigger[imult][imc]=new TH1F(histname,histtitle,fNTPtBins,-0.5,fNTPtBins-0.5); fHistNTrigger[imult][imc]->Sumw2(); fHistNTrigger[imult][imc]->GetXaxis()->SetTitle("Trigger Number"); fHistNTrigger[imult][imc]->GetYaxis()->SetTitle("Number of Triggers"); fOutput->Add(fHistNTrigger[imult][imc]); - snprintf(histname,buffersize,"fHistNTriggerPt_C%d%s",imult,cmc1[imc]); - snprintf(histtitle,buffersize,"P_{T} Weighted Number of Triggers %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]); + snprintf(histname,BufferSize,"fHistNTriggerPt_C%d%s",imult,cmc1[imc]); + snprintf(histtitle,BufferSize,"P_{T} Weighted Number of Triggers %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]); fHistNTriggerPt[imult][imc]=new TH1F(histname,histtitle,fNTPtBins,-0.5,fNTPtBins-0.5); fHistNTriggerPt[imult][imc]->Sumw2(); fHistNTriggerPt[imult][imc]->GetXaxis()->SetTitle("Trigger Number"); fHistNTriggerPt[imult][imc]->GetYaxis()->SetTitle("Number of Triggers"); fOutput->Add(fHistNTriggerPt[imult][imc]); - snprintf(histname,buffersize,"fHistNMix_C%d%s",imult,cmc1[imc]); - snprintf(histtitle,buffersize,"Number of Mixed Events %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]); + snprintf(histname,BufferSize,"fHistNMix_C%d%s",imult,cmc1[imc]); + snprintf(histtitle,BufferSize,"Number of Mixed Events %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]); fHistNMix[imult][imc]=new TH1F(histname,histtitle,fNTPtBins,-0.5,fNTPtBins-0.5); fHistNMix[imult][imc]->Sumw2(); fHistNMix[imult][imc]->GetXaxis()->SetTitle("Trigger Number"); fHistNMix[imult][imc]->GetYaxis()->SetTitle("Number of Mixed Events"); fOutput->Add(fHistNMix[imult][imc]); - snprintf(histname,buffersize,"fHistPhiEta_C%d%s",imult,cmc1[imc]); - snprintf(histtitle,buffersize,"#phi-#eta distribution of tracks %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]); + snprintf(histname,BufferSize,"fHistPhiEta_C%d%s",imult,cmc1[imc]); + snprintf(histtitle,BufferSize,"#phi-#eta distribution of tracks %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]); fHistPhiEta[imult][imc]=new TH3F(histname, histtitle,fnBinPhiEtaPhi,phiEtaArrayPhi,fnBinPhiEtaEta,phiEtaArrayEta,nptbins,fPtAssocArray); fHistPhiEta[imult][imc]->Sumw2(); fHistPhiEta[imult][imc]->GetXaxis()->SetTitle("#phi"); @@ -323,8 +393,8 @@ void AliAnalysisTaskDiHadron::CreateOutputObjects(){ fHistPhiEta[imult][imc]->GetZaxis()->SetTitle("p_{T}"); fOutput->Add(fHistPhiEta[imult][imc]); - snprintf(histname,buffersize,"fHistPhiEtaPt_C%d%s",imult,cmc1[imc]); - snprintf(histtitle,buffersize,"Pt Weighted #phi-#eta distribution of tracks %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]); + snprintf(histname,BufferSize,"fHistPhiEtaPt_C%d%s",imult,cmc1[imc]); + snprintf(histtitle,BufferSize,"Pt Weighted #phi-#eta distribution of tracks %dMult%d%s",fCentArrayMin[imult],fCentArrayMax[imult],cmc2[imc]); fHistPhiEtaPt[imult][imc]=new TH3F(histname, histtitle,fnBinPhiEtaPhi,phiEtaArrayPhi,fnBinPhiEtaEta,phiEtaArrayEta,nptbins,fPtAssocArray); fHistPhiEtaPt[imult][imc]->Sumw2(); fHistPhiEtaPt[imult][imc]->GetXaxis()->SetTitle("#phi"); @@ -343,56 +413,56 @@ void AliAnalysisTaskDiHadron::CreateOutputObjects(){ //Ones with no centrality binning if(imult==0){ - snprintf(histname,buffersize,"fHistMultTrig_P%d%s",i,cmc1[imc]); - snprintf(histtitle,buffersize,"Distrubition of number of tracks in triggered events with %3.1fSumw2(); fHistMultTrig[i][imc]->GetXaxis()->SetTitle("Number of Tracks"); fHistMultTrig[i][imc]->GetYaxis()->SetTitle("Counts"); fOutput->Add(fHistMultTrig[i][imc]); } - snprintf(histname,buffersize,"fHistPtTrig_P%d_C%d%s",i,imult,cmc1[imc]); - snprintf(histtitle,buffersize,"P_{T} distribution in triggered events with %3.1fSumw2(); fHistPtTrig[i][imult][imc]->GetXaxis()->SetTitle("p_{T}"); fHistPtTrig[i][imult][imc]->GetYaxis()->SetTitle("Counts"); fOutput->Add(fHistPtTrig[i][imult][imc]); - snprintf(histname,buffersize,"fHistPhiTrig_P%d_C%d%s",i,imult,cmc1[imc]); - snprintf(histtitle,buffersize,"Phi Distribution of triggered events with %3.1fSumw2(); fHistPhiTrig[i][imult][imc]->GetXaxis()->SetTitle("#phi"); fHistPhiTrig[i][imult][imc]->GetYaxis()->SetTitle("p_{T}"); fOutput->Add(fHistPhiTrig[i][imult][imc]); - snprintf(histname,buffersize,"fHistPhiTrigPt_P%d_C%d%s",i,imult,cmc1[imc]); - snprintf(histtitle,buffersize,"P_{T} Weighted Phi Distribution of triggered events with %3.1fSumw2(); fHistPhiTrigPt[i][imult][imc]->GetXaxis()->SetTitle("#phi"); fHistPhiTrigPt[i][imult][imc]->GetYaxis()->SetTitle("p_{T}"); fOutput->Add(fHistPhiTrigPt[i][imult][imc]); - snprintf(histname,buffersize,"fHistEtaTrig_P%d_C%d%s",i,imult,cmc1[imc]); - snprintf(histtitle,buffersize,"Eta Distribution of triggered events with %3.1fSumw2(); fHistEtaTrig[i][imult][imc]->GetXaxis()->SetTitle("#eta"); fHistEtaTrig[i][imult][imc]->GetYaxis()->SetTitle("p_{T}"); fOutput->Add(fHistEtaTrig[i][imult][imc]); - snprintf(histname,buffersize,"fHistEtaTrigPt_P%d_C%d%s",i,imult,cmc1[imc]); - snprintf(histtitle,buffersize,"P_{T} Weighted Eta Distribution of triggered events with %3.1fSumw2(); fHistEtaTrigPt[i][imult][imc]->GetXaxis()->SetTitle("#eta"); fHistEtaTrigPt[i][imult][imc]->GetYaxis()->SetTitle("p_{T}"); fOutput->Add(fHistEtaTrigPt[i][imult][imc]); - snprintf(histname,buffersize,"fHistPhiEtaTrig_P%d_C%d%s",i,imult,cmc1[imc]); - snprintf(histtitle,buffersize,"#phi-#eta distribution in triggered events %3.1fSumw2(); fHistPhiEtaTrig[i][imult][imc]->GetXaxis()->SetTitle("#phi"); @@ -400,29 +470,29 @@ void AliAnalysisTaskDiHadron::CreateOutputObjects(){ fHistPhiEtaTrig[i][imult][imc]->GetZaxis()->SetTitle("p_{T}"); fOutput->Add(fHistPhiEtaTrig[i][imult][imc]); - snprintf(histname,buffersize,"fHistXEN_P%d_C%d%s",i,imult,cmc1[imc]); - snprintf(histtitle,buffersize,"Near-Side X_{E} distribution for %3.1fSumw2(); fHistXEN[i][imult][imc]->GetXaxis()->SetTitle("X_{E}"); fOutput->Add(fHistXEN[i][imult][imc]); - snprintf(histname,buffersize,"fHistXENMixed_P%d_C%d%s",i,imult,cmc1[imc]); - snprintf(histtitle,buffersize,"Mixed Near-Side X_{E} distribution for %3.1fSumw2(); fHistXENMix[i][imult][imc]->GetXaxis()->SetTitle("X_{E}"); fOutput->Add(fHistXENMix[i][imult][imc]); - snprintf(histname,buffersize,"fHistXEA_P%d_C%d%s",i,imult,cmc1[imc]); - snprintf(histtitle,buffersize,"Away-Side X_{E} distribution for %3.1fSumw2(); fHistXEA[i][imult][imc]->GetXaxis()->SetTitle("X_{E}"); fOutput->Add(fHistXEA[i][imult][imc]); - snprintf(histname,buffersize,"fHistXEAMixed_P%d_C%d%s",i,imult,cmc1[imc]); - snprintf(histtitle,buffersize,"Mixed Away-Side X_{E} distribution for %3.1fSumw2(); fHistXEAMix[i][imult][imc]->GetXaxis()->SetTitle("X_{E}"); @@ -430,109 +500,257 @@ void AliAnalysisTaskDiHadron::CreateOutputObjects(){ //signloop for(int isign=0;isign<3;isign++){ - snprintf(histname,buffersize,"fHistDeltaPhi_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); - snprintf(histtitle,buffersize,"#Delta#phi Distribution with %3.1fSumw2(); fHistDeltaPhi[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#phi"); fHistDeltaPhi[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); fOutput->Add(fHistDeltaPhi[i][imult][isign][imc]); - snprintf(histname,buffersize,"fHistDeltaPhiPt_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); - snprintf(histtitle,buffersize,"P_{T} Weighted #Delta#phi Distribution with %3.1fSumw2(); fHistDeltaPhiPt[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#phi"); fHistDeltaPhiPt[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); fOutput->Add(fHistDeltaPhiPt[i][imult][isign][imc]); - snprintf(histname,buffersize,"fHistDeltaPhiMix_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); - snprintf(histtitle,buffersize,"#Delta#phi Mixed Event Distribution with %3.1fSumw2(); fHistDeltaPhiMix[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#phi"); fHistDeltaPhiMix[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); fOutput->Add(fHistDeltaPhiMix[i][imult][isign][imc]); + + snprintf(histname,BufferSize,"fHistDeltaPhiMixV2_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); + snprintf(histtitle,BufferSize,"#Delta#phi Mixed Event V2 Distribution with %3.1fSumw2(); + fHistDeltaPhiMixV2[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#phi"); + fHistDeltaPhiMixV2[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); + fOutput->Add(fHistDeltaPhiMixV2[i][imult][isign][imc]); + + snprintf(histname,BufferSize,"fHistDeltaPhiMixV3_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); + snprintf(histtitle,BufferSize,"#Delta#phi Mixed Event V3 Distribution with %3.1fSumw2(); + fHistDeltaPhiMixV3[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#phi"); + fHistDeltaPhiMixV3[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); + fOutput->Add(fHistDeltaPhiMixV3[i][imult][isign][imc]); + + snprintf(histname,BufferSize,"fHistDeltaPhiMixV4_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); + snprintf(histtitle,BufferSize,"#Delta#phi Mixed Event V4 Distribution with %3.1fSumw2(); + fHistDeltaPhiMixV4[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#phi"); + fHistDeltaPhiMixV4[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); + fOutput->Add(fHistDeltaPhiMixV4[i][imult][isign][imc]); - snprintf(histname,buffersize,"fHistDeltaPhiMixPt_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); - snprintf(histtitle,buffersize,"P_{T} Weighted #Delta#phi Mixed Event Distribution with %3.1fSumw2(); fHistDeltaPhiMixPt[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#phi"); fHistDeltaPhiMixPt[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); fOutput->Add(fHistDeltaPhiMixPt[i][imult][isign][imc]); + + snprintf(histname,BufferSize,"fHistDeltaPhiMixV2Pt_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); + snprintf(histtitle,BufferSize,"P_{T} Weighted #Delta#phi Mixed Event V2 Distribution with %3.1fSumw2(); + fHistDeltaPhiMixV2Pt[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#phi"); + fHistDeltaPhiMixV2Pt[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); + fOutput->Add(fHistDeltaPhiMixV2Pt[i][imult][isign][imc]); + + snprintf(histname,BufferSize,"fHistDeltaPhiMixV3Pt_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); + snprintf(histtitle,BufferSize,"P_{T} Weighted #Delta#phi Mixed Event V3 Distribution with %3.1fSumw2(); + fHistDeltaPhiMixV3Pt[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#phi"); + fHistDeltaPhiMixV3Pt[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); + fOutput->Add(fHistDeltaPhiMixV3Pt[i][imult][isign][imc]); + snprintf(histname,BufferSize,"fHistDeltaPhiMixV4Pt_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); + snprintf(histtitle,BufferSize,"P_{T} Weighted #Delta#phi Mixed Event V4 Distribution with %3.1fSumw2(); + fHistDeltaPhiMixV4Pt[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#phi"); + fHistDeltaPhiMixV4Pt[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); + fOutput->Add(fHistDeltaPhiMixV4Pt[i][imult][isign][imc]); + + //etaNear - snprintf(histname,buffersize,"fHistDeltaEtaN_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); - snprintf(histtitle,buffersize,"Near-Side #Delta#eta Distribution with %3.1fSumw2(); fHistDeltaEtaN[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta"); fHistDeltaEtaN[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); fOutput->Add(fHistDeltaEtaN[i][imult][isign][imc]); - snprintf(histname,buffersize,"fHistDeltaEtaNPt_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); - snprintf(histtitle,buffersize,"Near-Side P_{T} Weighted #Delta#eta Distribution with %3.1fSumw2(); fHistDeltaEtaNPt[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta"); fHistDeltaEtaNPt[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); fOutput->Add(fHistDeltaEtaNPt[i][imult][isign][imc]); - snprintf(histname,buffersize,"fHistDeltaEtaNMix_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); - snprintf(histtitle,buffersize,"Near-Side #Delta#eta Mixed Event Distribution with %3.1fSumw2(); fHistDeltaEtaNMix[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta"); fHistDeltaEtaNMix[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); fOutput->Add(fHistDeltaEtaNMix[i][imult][isign][imc]); + + snprintf(histname,BufferSize,"fHistDeltaEtaNMixV2_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); + snprintf(histtitle,BufferSize,"Near-Side #Delta#eta Mixed Event V2 Distribution with %3.1fSumw2(); + fHistDeltaEtaNMixV2[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta"); + fHistDeltaEtaNMixV2[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); + fOutput->Add(fHistDeltaEtaNMixV2[i][imult][isign][imc]); + + snprintf(histname,BufferSize,"fHistDeltaEtaNMixV3_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); + snprintf(histtitle,BufferSize,"Near-Side #Delta#eta Mixed Event V2 Distribution with %3.1fSumw2(); + fHistDeltaEtaNMixV3[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta"); + fHistDeltaEtaNMixV3[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); + fOutput->Add(fHistDeltaEtaNMixV3[i][imult][isign][imc]); + + snprintf(histname,BufferSize,"fHistDeltaEtaNMixV4_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); + snprintf(histtitle,BufferSize,"Near-Side #Delta#eta Mixed Event V4 Distribution with %3.1fSumw2(); + fHistDeltaEtaNMixV4[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta"); + fHistDeltaEtaNMixV4[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); + fOutput->Add(fHistDeltaEtaNMixV4[i][imult][isign][imc]); + - snprintf(histname,buffersize,"fHistDeltaEtaNMixPt_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); - snprintf(histtitle,buffersize,"Near-Side P_{T} Weighted #Delta#eta Mixed Event Distribution with %3.1fSumw2(); fHistDeltaEtaNMixPt[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta"); fHistDeltaEtaNMixPt[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); fOutput->Add(fHistDeltaEtaNMixPt[i][imult][isign][imc]); - + + snprintf(histname,BufferSize,"fHistDeltaEtaNMixV2Pt_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); + snprintf(histtitle,BufferSize,"Near-Side P_{T} Weighted #Delta#eta Mixed Event V2 Distribution with %3.1fSumw2(); + fHistDeltaEtaNMixV2Pt[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta"); + fHistDeltaEtaNMixV2Pt[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); + fOutput->Add(fHistDeltaEtaNMixV2Pt[i][imult][isign][imc]); + + snprintf(histname,BufferSize,"fHistDeltaEtaNMixV3Pt_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); + snprintf(histtitle,BufferSize,"Near-Side P_{T} Weighted #Delta#eta Mixed Event V2 Distribution with %3.1fSumw2(); + fHistDeltaEtaNMixV3Pt[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta"); + fHistDeltaEtaNMixV3Pt[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); + fOutput->Add(fHistDeltaEtaNMixV3Pt[i][imult][isign][imc]); + + snprintf(histname,BufferSize,"fHistDeltaEtaNMixV4Pt_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); + snprintf(histtitle,BufferSize,"Near-Side P_{T} Weighted #Delta#eta V4 Mixed Event Distribution with %3.1fSumw2(); + fHistDeltaEtaNMixV4Pt[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta"); + fHistDeltaEtaNMixV4Pt[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); + fOutput->Add(fHistDeltaEtaNMixV4Pt[i][imult][isign][imc]); + //Away Eta - snprintf(histname,buffersize,"fHistDeltaEtaA_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); - snprintf(histtitle,buffersize,"Away-Side #Delta#eta Distribution with %3.1fSumw2(); fHistDeltaEtaA[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta"); fHistDeltaEtaA[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); fOutput->Add(fHistDeltaEtaA[i][imult][isign][imc]); - snprintf(histname,buffersize,"fHistDeltaEtaAPt_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); - snprintf(histtitle,buffersize,"Away-Side P_{T} Weighted #Delta#eta Distribution with %3.1fSumw2(); fHistDeltaEtaAPt[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta"); fHistDeltaEtaAPt[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); fOutput->Add(fHistDeltaEtaAPt[i][imult][isign][imc]); - snprintf(histname,buffersize,"fHistDeltaEtaAMix_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); - snprintf(histtitle,buffersize,"Away-Side #Delta#eta Mixed Event Distribution with %3.1fSumw2(); fHistDeltaEtaAMix[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta"); fHistDeltaEtaAMix[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); fOutput->Add(fHistDeltaEtaAMix[i][imult][isign][imc]); + + snprintf(histname,BufferSize,"fHistDeltaEtaAMixV2_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); + snprintf(histtitle,BufferSize,"Away-Side #Delta#eta Mixed Event V2 Distribution with %3.1fSumw2(); + fHistDeltaEtaAMixV2[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta"); + fHistDeltaEtaAMixV2[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); + fOutput->Add(fHistDeltaEtaAMixV2[i][imult][isign][imc]); + + + snprintf(histname,BufferSize,"fHistDeltaEtaAMixV3_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); + snprintf(histtitle,BufferSize,"Away-Side #Delta#eta Mixed Event V3 Distribution with %3.1fSumw2(); + fHistDeltaEtaAMixV3[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta"); + fHistDeltaEtaAMixV3[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); + fOutput->Add(fHistDeltaEtaAMixV3[i][imult][isign][imc]); + + + snprintf(histname,BufferSize,"fHistDeltaEtaAMixV4_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); + snprintf(histtitle,BufferSize,"Away-Side #Delta#eta Mixed Event V4 Distribution with %3.1fSumw2(); + fHistDeltaEtaAMixV4[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta"); + fHistDeltaEtaAMixV4[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); + fOutput->Add(fHistDeltaEtaAMixV4[i][imult][isign][imc]); - snprintf(histname,buffersize,"fHistDeltaEtaAMixPt_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); - snprintf(histtitle,buffersize,"Away-Side P_{T} Weighted #Delta#eta Mixed Event Distribution with %3.1fSumw2(); fHistDeltaEtaAMixPt[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta"); fHistDeltaEtaAMixPt[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); fOutput->Add(fHistDeltaEtaAMixPt[i][imult][isign][imc]); + snprintf(histname,BufferSize,"fHistDeltaEtaAMixV2Pt_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); + snprintf(histtitle,BufferSize,"Away-Side P_{T} Weighted V2 #Delta#eta Mixed Event Distribution with %3.1fSumw2(); + fHistDeltaEtaAMixV2Pt[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta"); + fHistDeltaEtaAMixV2Pt[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); + fOutput->Add(fHistDeltaEtaAMixV2Pt[i][imult][isign][imc]); + + snprintf(histname,BufferSize,"fHistDeltaEtaAMixV3Pt_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); + snprintf(histtitle,BufferSize,"Away-Side P_{T} Weighted V3 #Delta#eta Mixed Event Distribution with %3.1fSumw2(); + fHistDeltaEtaAMixV3Pt[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta"); + fHistDeltaEtaAMixV3Pt[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); + fOutput->Add(fHistDeltaEtaAMixV3Pt[i][imult][isign][imc]); + + snprintf(histname,BufferSize,"fHistDeltaEtaAMixV4Pt_P%d_C%d%s%s",i,imult,sign1[isign],cmc1[imc]); + snprintf(histtitle,BufferSize,"Away-Side P_{T} Weighted #Delta#eta V4 Mixed Event Distribution with %3.1fSumw2(); + fHistDeltaEtaAMixV4Pt[i][imult][isign][imc]->GetXaxis()->SetTitle("#Delta#eta"); + fHistDeltaEtaAMixV4Pt[i][imult][isign][imc]->GetYaxis()->SetTitle("p_{T}"); + fOutput->Add(fHistDeltaEtaAMixV4Pt[i][imult][isign][imc]); + //==== }//end isignloop - snprintf(histname,buffersize,"fHistDeltaPhiEta_P%d_C%d%s",i,imult,cmc1[imc]); - snprintf(histtitle,buffersize,"#Delta#phi-#Delta#eta %3.1fSumw2(); fHistDeltaPhiEta[i][imult][imc]->GetXaxis()->SetTitle("#phi"); @@ -540,17 +758,45 @@ void AliAnalysisTaskDiHadron::CreateOutputObjects(){ fHistDeltaPhiEta[i][imult][imc]->GetZaxis()->SetTitle("p_{T}"); fOutput->Add(fHistDeltaPhiEta[i][imult][imc]); - snprintf(histname,buffersize,"fHistDeltaPhiEtaMix_P%d_C%d%s",i,imult,cmc1[imc]); - snprintf(histtitle,buffersize,"#Delta#phi-#Delta#eta from Mixed Events %3.1fSumw2(); fHistDeltaPhiEtaMix[i][imult][imc]->GetXaxis()->SetTitle("#phi"); fHistDeltaPhiEtaMix[i][imult][imc]->GetYaxis()->SetTitle("#eta"); fHistDeltaPhiEtaMix[i][imult][imc]->GetZaxis()->SetTitle("p_{T}"); fOutput->Add(fHistDeltaPhiEtaMix[i][imult][imc]); + + snprintf(histname,BufferSize,"fHistDeltaPhiEtaMixV2_P%d_C%d%s",i,imult,cmc1[imc]); + snprintf(histtitle,BufferSize,"#Delta#phi-#Delta#eta V2 from Mixed Events %3.1fSumw2(); + fHistDeltaPhiEtaMixV2[i][imult][imc]->GetXaxis()->SetTitle("#phi"); + fHistDeltaPhiEtaMixV2[i][imult][imc]->GetYaxis()->SetTitle("#eta"); + fHistDeltaPhiEtaMixV2[i][imult][imc]->GetZaxis()->SetTitle("p_{T}"); + fOutput->Add(fHistDeltaPhiEtaMixV2[i][imult][imc]); + + snprintf(histname,BufferSize,"fHistDeltaPhiEtaMixV3_P%d_C%d%s",i,imult,cmc1[imc]); + snprintf(histtitle,BufferSize,"#Delta#phi-#Delta#eta V3 from Mixed Events %3.1fSumw2(); + fHistDeltaPhiEtaMixV3[i][imult][imc]->GetXaxis()->SetTitle("#phi"); + fHistDeltaPhiEtaMixV3[i][imult][imc]->GetYaxis()->SetTitle("#eta"); + fHistDeltaPhiEtaMixV3[i][imult][imc]->GetZaxis()->SetTitle("p_{T}"); + fOutput->Add(fHistDeltaPhiEtaMixV3[i][imult][imc]); + + snprintf(histname,BufferSize,"fHistDeltaPhiEtaMixV4_P%d_C%d%s",i,imult,cmc1[imc]); + snprintf(histtitle,BufferSize,"#Delta#phi-#Delta#eta V4 from Mixed Events %3.1fSumw2(); + fHistDeltaPhiEtaMixV4[i][imult][imc]->GetXaxis()->SetTitle("#phi"); + fHistDeltaPhiEtaMixV4[i][imult][imc]->GetYaxis()->SetTitle("#eta"); + fHistDeltaPhiEtaMixV4[i][imult][imc]->GetZaxis()->SetTitle("p_{T}"); + fOutput->Add(fHistDeltaPhiEtaMixV4[i][imult][imc]); - snprintf(histname,buffersize,"fHistPhiEtaTrigPt_P%d_C%d%s",i,imult,cmc1[imc]); - snprintf(histtitle,buffersize,"P_{T}-Weighted #phi-#eta distribution in triggered events %3.1fSumw2(); fHistPhiEtaTrigPt[i][imult][imc]->GetXaxis()->SetTitle("#phi"); @@ -558,8 +804,8 @@ void AliAnalysisTaskDiHadron::CreateOutputObjects(){ fHistPhiEtaTrigPt[i][imult][imc]->GetZaxis()->SetTitle("p_{T}"); fOutput->Add(fHistPhiEtaTrigPt[i][imult][imc]); - snprintf(histname,buffersize,"fHistDeltaPhiEtaPt_P%d_C%d%s",i,imult,cmc1[imc]); - snprintf(histtitle,buffersize,"P_{T}-Weighted #Delta#phi-#Delta#eta %3.1fSumw2(); fHistDeltaPhiEtaPt[i][imult][imc]->GetXaxis()->SetTitle("#phi"); @@ -567,8 +813,8 @@ void AliAnalysisTaskDiHadron::CreateOutputObjects(){ fHistDeltaPhiEtaPt[i][imult][imc]->GetZaxis()->SetTitle("p_{T}"); fOutput->Add(fHistDeltaPhiEtaPt[i][imult][imc]); - snprintf(histname,buffersize,"fHistDeltaPhiEtaMixPt_P%d_C%d%s",i,imult,cmc1[imc]); - snprintf(histtitle,buffersize,"P_{T}-Weighted #Delta#phi-#Delta#eta from Mixed Events %3.1fSumw2(); fHistDeltaPhiEtaMixPt[i][imult][imc]->GetXaxis()->SetTitle("#phi"); @@ -576,51 +822,167 @@ void AliAnalysisTaskDiHadron::CreateOutputObjects(){ fHistDeltaPhiEtaMixPt[i][imult][imc]->GetZaxis()->SetTitle("p_{T}"); fOutput->Add(fHistDeltaPhiEtaMixPt[i][imult][imc]); + snprintf(histname,BufferSize,"fHistDeltaPhiEtaMixV2Pt_P%d_C%d%s",i,imult,cmc1[imc]); + snprintf(histtitle,BufferSize,"P_{T}-Weighted #Delta#phi-#Delta#eta V2 from Mixed Events %3.1fSumw2(); + fHistDeltaPhiEtaMixV2Pt[i][imult][imc]->GetXaxis()->SetTitle("#phi"); + fHistDeltaPhiEtaMixV2Pt[i][imult][imc]->GetYaxis()->SetTitle("#eta"); + fHistDeltaPhiEtaMixV2Pt[i][imult][imc]->GetZaxis()->SetTitle("p_{T}"); + fOutput->Add(fHistDeltaPhiEtaMixV2Pt[i][imult][imc]); + + snprintf(histname,BufferSize,"fHistDeltaPhiEtaMixV3Pt_P%d_C%d%s",i,imult,cmc1[imc]); + snprintf(histtitle,BufferSize,"P_{T}-Weighted #Delta#phi-#Delta#eta V3 from Mixed Events %3.1fSumw2(); + fHistDeltaPhiEtaMixV3Pt[i][imult][imc]->GetXaxis()->SetTitle("#phi"); + fHistDeltaPhiEtaMixV3Pt[i][imult][imc]->GetYaxis()->SetTitle("#eta"); + fHistDeltaPhiEtaMixV3Pt[i][imult][imc]->GetZaxis()->SetTitle("p_{T}"); + fOutput->Add(fHistDeltaPhiEtaMixV3Pt[i][imult][imc]); + + snprintf(histname,BufferSize,"fHistDeltaPhiEtaMixV4Pt_P%d_C%d%s",i,imult,cmc1[imc]); + snprintf(histtitle,BufferSize,"P_{T}-Weighted #Delta#phi-#Delta#eta V4 from Mixed Events %3.1fSumw2(); + fHistDeltaPhiEtaMixV4Pt[i][imult][imc]->GetXaxis()->SetTitle("#phi"); + fHistDeltaPhiEtaMixV4Pt[i][imult][imc]->GetYaxis()->SetTitle("#eta"); + fHistDeltaPhiEtaMixV4Pt[i][imult][imc]->GetZaxis()->SetTitle("p_{T}"); + fOutput->Add(fHistDeltaPhiEtaMixV4Pt[i][imult][imc]); + //Three-Particle Histograms for(int ipt=0;iptSumw2(); fHistDeltaPhiPhi[i][ipt][imult][iSign][imc]->GetXaxis()->SetTitle("#Delta#phi_{1}"); fHistDeltaPhiPhi[i][ipt][imult][iSign][imc]->GetYaxis()->SetTitle("#Delta#phi_{2}"); fOutput->Add(fHistDeltaPhiPhi[i][ipt][imult][iSign][imc]); - snprintf(histname,buffersize,"fHistDeltaPhiPhiMix_P%dp%d_C%d%s%s",i,ipt,imult,cmc1[imc],sign31[iSign]); - snprintf(histtitle,buffersize,"Mixed #Delta#phi-#Delta#phi %3.1fSumw2(); fHistDeltaPhiPhiMix[i][ipt][imult][iSign][imc]->GetXaxis()->SetTitle("#Delta#phi_{1}"); fHistDeltaPhiPhiMix[i][ipt][imult][iSign][imc]->GetYaxis()->SetTitle("#Delta#phi_{2}"); fOutput->Add(fHistDeltaPhiPhiMix[i][ipt][imult][iSign][imc]); - snprintf(histname,buffersize,"fHistDeltaPhiPhiSS_P%dp%d_C%d%s%s",i,ipt,imult,cmc1[imc],sign31[iSign]); - snprintf(histtitle,buffersize,"Soft-Soft #Delta#phi-#Delta#phi %3.1fSumw2(); + fHistDeltaPhiPhiMixV2[i][ipt][imult][iSign][imc]->GetXaxis()->SetTitle("#Delta#phi_{1}"); + fHistDeltaPhiPhiMixV2[i][ipt][imult][iSign][imc]->GetYaxis()->SetTitle("#Delta#phi_{2}"); + fOutput->Add(fHistDeltaPhiPhiMixV2[i][ipt][imult][iSign][imc]); + + snprintf(histname,BufferSize,"fHistDeltaPhiPhiMixV3_P%dp%d_C%d%s%s",i,ipt,imult,cmc1[imc],sign31[iSign]); + snprintf(histtitle,BufferSize,"Mixed #Delta#phi-#Delta#phi V3 %3.1fSumw2(); + fHistDeltaPhiPhiMixV3[i][ipt][imult][iSign][imc]->GetXaxis()->SetTitle("#Delta#phi_{1}"); + fHistDeltaPhiPhiMixV3[i][ipt][imult][iSign][imc]->GetYaxis()->SetTitle("#Delta#phi_{2}"); + fOutput->Add(fHistDeltaPhiPhiMixV3[i][ipt][imult][iSign][imc]); + + snprintf(histname,BufferSize,"fHistDeltaPhiPhiMixV4_P%dp%d_C%d%s%s",i,ipt,imult,cmc1[imc],sign31[iSign]); + snprintf(histtitle,BufferSize,"Mixed #Delta#phi-#Delta#phi V4 %3.1fSumw2(); + fHistDeltaPhiPhiMixV4[i][ipt][imult][iSign][imc]->GetXaxis()->SetTitle("#Delta#phi_{1}"); + fHistDeltaPhiPhiMixV4[i][ipt][imult][iSign][imc]->GetYaxis()->SetTitle("#Delta#phi_{2}"); + fOutput->Add(fHistDeltaPhiPhiMixV4[i][ipt][imult][iSign][imc]); + + snprintf(histname,BufferSize,"fHistDeltaPhiPhiMixV2V2V4_P%dp%d_C%d%s%s",i,ipt,imult,cmc1[imc],sign31[iSign]); + snprintf(histtitle,BufferSize,"Mixed #Delta#phi-#Delta#phi %3.1fSumw2(); + fHistDeltaPhiPhiMixV2V2V4[i][ipt][imult][iSign][imc]->GetXaxis()->SetTitle("#Delta#phi_{1}"); + fHistDeltaPhiPhiMixV2V2V4[i][ipt][imult][iSign][imc]->GetYaxis()->SetTitle("#Delta#phi_{2}"); + fOutput->Add(fHistDeltaPhiPhiMixV2V2V4[i][ipt][imult][iSign][imc]); + + snprintf(histname,BufferSize,"fHistDeltaPhiPhiSS_P%dp%d_C%d%s%s",i,ipt,imult,cmc1[imc],sign31[iSign]); + snprintf(histtitle,BufferSize,"Soft-Soft #Delta#phi-#Delta#phi %3.1fSumw2(); fHistDeltaPhiPhiSS[i][ipt][imult][iSign][imc]->GetXaxis()->SetTitle("#Delta#phi_{1}"); fHistDeltaPhiPhiSS[i][ipt][imult][iSign][imc]->GetYaxis()->SetTitle("#Delta#phi_{2}"); fOutput->Add(fHistDeltaPhiPhiSS[i][ipt][imult][iSign][imc]); - snprintf(histname,buffersize,"fHistDeltaEtaEta_P%dp%d_C%d%s%s",i,ipt,imult,cmc1[imc],sign31[iSign]); - snprintf(histtitle,buffersize,"Raw #Delta#eta-#Delta#eta %3.1fSumw2(); + fHistDeltaPhiPhiSSV2[i][ipt][imult][iSign][imc]->GetXaxis()->SetTitle("#Delta#phi_{1}"); + fHistDeltaPhiPhiSSV2[i][ipt][imult][iSign][imc]->GetYaxis()->SetTitle("#Delta#phi_{2}"); + fOutput->Add(fHistDeltaPhiPhiSSV2[i][ipt][imult][iSign][imc]); + + snprintf(histname,BufferSize,"fHistDeltaPhiPhiSSV3_P%dp%d_C%d%s%s",i,ipt,imult,cmc1[imc],sign31[iSign]); + snprintf(histtitle,BufferSize,"Soft-Soft V3 #Delta#phi-#Delta#phi %3.1fSumw2(); + fHistDeltaPhiPhiSSV3[i][ipt][imult][iSign][imc]->GetXaxis()->SetTitle("#Delta#phi_{1}"); + fHistDeltaPhiPhiSSV3[i][ipt][imult][iSign][imc]->GetYaxis()->SetTitle("#Delta#phi_{2}"); + fOutput->Add(fHistDeltaPhiPhiSSV3[i][ipt][imult][iSign][imc]); + + snprintf(histname,BufferSize,"fHistDeltaPhiPhiSSV4_P%dp%d_C%d%s%s",i,ipt,imult,cmc1[imc],sign31[iSign]); + snprintf(histtitle,BufferSize,"Soft-Soft V4 #Delta#phi-#Delta#phi %3.1fSumw2(); + fHistDeltaPhiPhiSSV4[i][ipt][imult][iSign][imc]->GetXaxis()->SetTitle("#Delta#phi_{1}"); + fHistDeltaPhiPhiSSV4[i][ipt][imult][iSign][imc]->GetYaxis()->SetTitle("#Delta#phi_{2}"); + fOutput->Add(fHistDeltaPhiPhiSSV4[i][ipt][imult][iSign][imc]); + + snprintf(histname,BufferSize,"fHistDeltaEtaEta_P%dp%d_C%d%s%s",i,ipt,imult,cmc1[imc],sign31[iSign]); + snprintf(histtitle,BufferSize,"Raw #Delta#eta-#Delta#eta %3.1fSumw2(); fHistDeltaEtaEta[i][ipt][imult][iSign][imc]->GetXaxis()->SetTitle("#Delta#eta_{1}"); fHistDeltaEtaEta[i][ipt][imult][iSign][imc]->GetYaxis()->SetTitle("#Delta#eta_{2}"); fOutput->Add(fHistDeltaEtaEta[i][ipt][imult][iSign][imc]); - snprintf(histname,buffersize,"fHistDeltaEtaEtaMix_P%dp%d_C%d%s%s",i,ipt,imult,cmc1[imc],sign31[iSign]); - snprintf(histtitle,buffersize,"Mixed #Delta#eta-#Delta#eta %3.1fSumw2(); fHistDeltaEtaEtaMix[i][ipt][imult][iSign][imc]->GetXaxis()->SetTitle("#Delta#eta_{1}"); fHistDeltaEtaEtaMix[i][ipt][imult][iSign][imc]->GetYaxis()->SetTitle("#Delta#eta_{2}"); fOutput->Add(fHistDeltaEtaEtaMix[i][ipt][imult][iSign][imc]); - snprintf(histname,buffersize,"fHistDeltaEtaEtaSS_P%dp%d_C%d%s%s",i,ipt,imult,cmc1[imc],sign31[iSign]); - snprintf(histtitle,buffersize,"Soft-Soft #Delta#eta-#Delta#eta %3.1fSumw2(); + fHistDeltaEtaEtaMixV2[i][ipt][imult][iSign][imc]->GetXaxis()->SetTitle("#Delta#eta_{1}"); + fHistDeltaEtaEtaMixV2[i][ipt][imult][iSign][imc]->GetYaxis()->SetTitle("#Delta#eta_{2}"); + fOutput->Add(fHistDeltaEtaEtaMixV2[i][ipt][imult][iSign][imc]); + + snprintf(histname,BufferSize,"fHistDeltaEtaEtaMixV3_P%dp%d_C%d%s%s",i,ipt,imult,cmc1[imc],sign31[iSign]); + snprintf(histtitle,BufferSize,"Mixed #Delta#eta-#Delta#eta V3 %3.1fSumw2(); + fHistDeltaEtaEtaMixV3[i][ipt][imult][iSign][imc]->GetXaxis()->SetTitle("#Delta#eta_{1}"); + fHistDeltaEtaEtaMixV3[i][ipt][imult][iSign][imc]->GetYaxis()->SetTitle("#Delta#eta_{2}"); + fOutput->Add(fHistDeltaEtaEtaMixV3[i][ipt][imult][iSign][imc]); + + + snprintf(histname,BufferSize,"fHistDeltaEtaEtaMixV4_P%dp%d_C%d%s%s",i,ipt,imult,cmc1[imc],sign31[iSign]); + snprintf(histtitle,BufferSize,"Mixed #Delta#eta-#Delta#eta V4 %3.1fSumw2(); + fHistDeltaEtaEtaMixV4[i][ipt][imult][iSign][imc]->GetXaxis()->SetTitle("#Delta#eta_{1}"); + fHistDeltaEtaEtaMixV4[i][ipt][imult][iSign][imc]->GetYaxis()->SetTitle("#Delta#eta_{2}"); + fOutput->Add(fHistDeltaEtaEtaMixV4[i][ipt][imult][iSign][imc]); + + snprintf(histname,BufferSize,"fHistDeltaEtaEtaMixV2V2V4_P%dp%d_C%d%s%s",i,ipt,imult,cmc1[imc],sign31[iSign]); + snprintf(histtitle,BufferSize,"Mixed #Delta#eta-#Delta#eta V2V2V4 %3.1fSumw2(); + fHistDeltaEtaEtaMixV2V2V4[i][ipt][imult][iSign][imc]->GetXaxis()->SetTitle("#Delta#eta_{1}"); + fHistDeltaEtaEtaMixV2V2V4[i][ipt][imult][iSign][imc]->GetYaxis()->SetTitle("#Delta#eta_{2}"); + fOutput->Add(fHistDeltaEtaEtaMixV2V2V4[i][ipt][imult][iSign][imc]); + +snprintf(histname,BufferSize,"fHistDeltaEtaEtaSS_P%dp%d_C%d%s%s",i,ipt,imult,cmc1[imc],sign31[iSign]); + snprintf(histtitle,BufferSize,"Soft-Soft #Delta#eta-#Delta#eta %3.1fSumw2(); fHistDeltaEtaEtaSS[i][ipt][imult][iSign][imc]->GetXaxis()->SetTitle("#Delta#eta_{1}"); @@ -634,7 +996,7 @@ void AliAnalysisTaskDiHadron::CreateOutputObjects(){ }//imc if(fDEBUG)Printf("OutPut Created"); }//CreateOutputObjects - +///////////////////////////////// Int_t AliAnalysisTaskDiHadron::CheckVertex(const AliESDEvent *rESD){ //checks whether the vertex passes cuts Int_t rGood=-1; @@ -642,17 +1004,34 @@ Int_t AliAnalysisTaskDiHadron::CheckVertex(const AliESDEvent *rESD){ vtx[0]=rESD->GetPrimaryVertex()->GetX(); vtx[1]=rESD->GetPrimaryVertex()->GetY(); vtx[2]=rESD->GetPrimaryVertex()->GetZ(); - if((vtx[0]*vtx[0]+vtx[1]*vtx[1])<9) rGood=0; //vertex out of beam pipe - if(fabs(vtx[2])fVertexArray[i]&&vtx[2]<=fVertexArray[i+1]&&rGood==0)rGood=i; } return rGood; } - +/////////////////////////// +Int_t AliAnalysisTaskDiHadron::CheckVertexAOD(const AliAODEvent *rAOD){ + //checks whether the vertex passes cuts + Int_t rGood=-1; + Float_t vtx[3]; + vtx[0]=rAOD->GetPrimaryVertex()->GetX(); + vtx[1]=rAOD->GetPrimaryVertex()->GetY(); + vtx[2]=rAOD->GetPrimaryVertex()->GetZ(); + if((vtx[0]*vtx[0]+vtx[1]*vtx[1])<9&&fabs(vtx[2])fVertexArray[i]&&vtx[2]<=fVertexArray[i+1]&&rGood==0)rGood=i; + } + return rGood; +} +/////////////////////////////// Int_t AliAnalysisTaskDiHadron::CheckTrigger(const AliESDEvent *rESD){ //checks whether the trigger passes cuts + if(fDEBUG)Printf("Checking Trigger"); Int_t rGood=0; TString trigID=rESD->GetFiredTriggerClasses(); int count=0; @@ -672,8 +1051,33 @@ Int_t AliAnalysisTaskDiHadron::CheckTrigger(const AliESDEvent *rESD){ } return rGood; } +/////////////////////////////////////////// +Int_t AliAnalysisTaskDiHadron::CheckTriggerAOD(const AliAODEvent *rAOD){ + //checks whether the trigger passes cuts + if(fDEBUG)Printf("Checking Trigger"); + Int_t rGood=0; + TString trigID=rAOD->GetFiredTriggerClasses(); + int count=0; + char trigID2[50]; + int stop=0;//in as a safety + + for(int i=0;iEta(); sPhi=conTrack->Phi(); sCharge=conTrack->Charge(); + if(fDEBUG) Printf("Pt%2.2f Eta%2.2f Phi%2.2f ", sPt,sEta,sPhi); if(sPhifdPhiMax)sPhi-=2*fPi; if(sPtfMaxPtAssoc)continue;//set Pt range @@ -699,20 +1104,23 @@ Int_t AliAnalysisTaskDiHadron::TrackCuts(const AliESDEvent *rESD, Float_t *rPt, sNcls=eSDtrack->GetTPCNcls(); //if(fDEBUG)Printf("NCLS%d",sNcls); if(sNclsGetTPCNclsF(); - if((1.0*sNcls/sNclsF)GetTPCnclsS(); + if((1-1.0*sNclsF/sNcls)GetTPCchi2())/sNcls; if(sChi>fMaxTPCchi2)continue; sITScls=eSDtrack->GetNcls(0); if(sITSclsGetImpactParameters(sb,sbCov); + if(fDEBUG)Printf("dca %2.2f %2.2f",sb[0],sb[1]); if(!fDCA2D&&(sb[0]*sb[0]+sb[1]*sb[1])>(fMaxDCA*fMaxDCA))continue;//DCA cut if(fDCA2D==1&&(sb[0]*sb[0]/fMaxDCAXY/fMaxDCAXY+sb[1]*sb[1]/fMaxDCAZ/fMaxDCAZ)>1)continue; if(fDCA2D==2&&(0.35+0.42*std::pow(double(sPt),-0.9))<(sb[0]*sb[0]))continue; if(eSDtrack->GetKinkIndex(0)>0)continue;//removes kinked tracks - if(!eSDtrack->GetStatus()&&AliESDtrack::kTPCrefit&&fTPCRefit)continue;//refit in TPC - if((fITSRefit==1||(fITSRefit==2&&sPt>5))&&!eSDtrack->GetStatus()&&AliESDtrack::kITSrefit)continue;//refit of its tracks either for none,all, or >5 GeV/c + if(!eSDtrack->GetStatus()&AliESDtrack::kTPCrefit&&fTPCRefit)continue;//refit in TPC + if((fITSRefit==1||(fITSRefit==2&&sPt>5))&&!eSDtrack->GetStatus()&AliESDtrack::kITSrefit)continue;//refit of its tracks either for none,all, or >5 GeV/c + if(fDEBUG)Printf("SPD %d %d ", eSDtrack->HasPointOnITSLayer(0), eSDtrack->HasPointOnITSLayer(1)); if(fSPDCut&&!eSDtrack->HasPointOnITSLayer(0)&&!eSDtrack->HasPointOnITSLayer(1))continue; + if(fDEBUG)Printf("Pass \n"); rPt[rGoodTracks[0]]=sPt; rEta[rGoodTracks[0]]=sEta; rPhi[rGoodTracks[0]]=sPhi; @@ -722,7 +1130,27 @@ Int_t AliAnalysisTaskDiHadron::TrackCuts(const AliESDEvent *rESD, Float_t *rPt, else rEff[rGoodTracks[0]]=1./fFitHigh->Eval(sPt); } else rEff[rGoodTracks[0]]=1; + if(rEff[rGoodTracks[0]]!=rEff[rGoodTracks[0]]||rEff[rGoodTracks[0]]>1E8||rEff[rGoodTracks[0]]<-1E8){ + Printf("Efficiency Error %f %f",rEff[rGoodTracks[0]],rPt[rGoodTracks[0]]); + continue; + } if(sPt>leadPt)lead=rGoodTracks[0]; + if(sPtEval(sPt); + else rV2[rGoodTracks[0]]=fFitHighV2->Eval(sPt); + if(sPtEval(sPt); + else rV3[rGoodTracks[0]]=fFitHighV3->Eval(sPt); + if(sPtEval(sPt); + else rV4[rGoodTracks[0]]=fFitHighV4->Eval(sPt); + if(rV2[rGoodTracks[0]]!=rV2[rGoodTracks[0]]||rV2[rGoodTracks[0]]>1E8||rV2[rGoodTracks[0]]<-1E8){ + Printf("V2 Error %f %f",rV2[rGoodTracks[0]],rPt[rGoodTracks[0]]); + continue; + } + if(rV4[rGoodTracks[0]]!=rV4[rGoodTracks[0]]||rV4[rGoodTracks[0]]>1E8||rV4[rGoodTracks[0]]<-1E8){ + Printf("V4 Error %f %f",rV4[rGoodTracks[0]],rPt[rGoodTracks[0]]); + continue; + } + + //Printf("V2 %2.2f V4 %2.4f 1.15V2V2 %2.4f",rV2[rGoodTracks[0]],rV4[rGoodTracks[0]],1.15*pow(rV2[rGoodTracks[0]],2)); //rPtAssoc3[rGoodTracks[0]]=new Int_t [10]; rNPtAssoc3[rGoodTracks[0]]=0; for(int apt3=0;apt3GetNTracks(); + Float_t sPt, sEta, sPhi, sChi, sb[2]; + Int_t sNcls, sNclsF, sITScls; + Short_t sCharge; + for(int iTrack=0;iTrackGetTrack(iTrack); + sPt=aodTrack->Pt(); + sEta=aodTrack->Eta(); + sPhi=aodTrack->Phi(); + sCharge=aodTrack->Charge(); + if(fDEBUG) Printf("Pt%2.2f Eta%2.2f Phi%2.2f ", sPt,sEta,sPhi); + if(sPhifdPhiMax)sPhi-=2*fPi; + if(sPtfMaxPtAssoc)continue;//set Pt range + if(fabs(sEta)>fEtaCut)continue;//set Eta Range + if(!sCharge)continue; + sNcls=aodTrack->GetTPCNcls(); + if(sNclsGetTPCSharedMap().CountBits(); + if((1-1.0*sNclsF/sNcls)Chi2perNDF(); + if(sChi>fMaxTPCchi2)continue; + sITScls=aodTrack->GetNcls(0); + if(sITSclsDCA(); + sb[1]=aodTrack->ZAtDCA(); + if(fDEBUG)Printf("dca %2.2f %2.2f",sb[0],sb[1]); + if(!fDCA2D&&(sb[0]*sb[0]+sb[1]*sb[1])>(fMaxDCA*fMaxDCA))continue;//DCA cut + if(fDCA2D==1&&(sb[0]*sb[0]/fMaxDCAXY/fMaxDCAXY+sb[1]*sb[1]/fMaxDCAZ/fMaxDCAZ)>1)continue; + if(fDCA2D==2&&(0.35+0.42*std::pow(double(sPt),-0.9))<(sb[0])*sb[0])continue; + //if(eSDtrack->GetKinkIndex(0)>0)continue;//removes kinked tracks + if(!aodTrack->IsPrimaryCandidate())continue;//I assume this removes kinks + //if(!aodTrack->GetStatus()&AliAODTrack::kTPCrefit&&fTPCRefit)continue;//refit in TPC + //if((fITSRefit==1||(fITSRefit==2&&sPt>5))&&!aodTrack->GetStatus()&AliAODTrack::kITSrefit)continue;//refit of its tracks either for none,all, or >5 GeV/c + if(fDEBUG)Printf("SPD %d %d ", aodTrack->HasPointOnITSLayer(0), aodTrack->HasPointOnITSLayer(1)); + if(fSPDCut&&!aodTrack->HasPointOnITSLayer(0)&&!aodTrack->HasPointOnITSLayer(1))continue; + if(fDEBUG)Printf("Pass \n"); + rPt[rGoodTracks[0]]=sPt; + rEta[rGoodTracks[0]]=sEta; + rPhi[rGoodTracks[0]]=sPhi; + rCharge[rGoodTracks[0]]=sCharge; + if(fEfficiencyCorr){ + if(sPtEval(sPt); + else rEff[rGoodTracks[0]]=1./fFitHigh->Eval(sPt); + } + else rEff[rGoodTracks[0]]=1; + if(rEff[rGoodTracks[0]]!=rEff[rGoodTracks[0]]||rEff[rGoodTracks[0]]>1E8||rEff[rGoodTracks[0]]<-1E8){ + Printf("Efficiency Error %f %f",rEff[rGoodTracks[0]],rPt[rGoodTracks[0]]); + continue; + } + if(sPt>leadPt)lead=rGoodTracks[0]; + if(sPtEval(sPt); + else rV2[rGoodTracks[0]]=fFitHighV2->Eval(sPt); + if(sPtEval(sPt); + else rV3[rGoodTracks[0]]=fFitHighV3->Eval(sPt); + if(sPtEval(sPt); + else rV4[rGoodTracks[0]]=fFitHighV4->Eval(sPt); + if(rV2[rGoodTracks[0]]!=rV2[rGoodTracks[0]]||rV2[rGoodTracks[0]]>1E8||rV2[rGoodTracks[0]]<-1E8){ + Printf("V2 Error %f %f",rV2[rGoodTracks[0]],rPt[rGoodTracks[0]]); + continue; + } + if(rV4[rGoodTracks[0]]!=rV4[rGoodTracks[0]]||rV4[rGoodTracks[0]]>1E8||rV4[rGoodTracks[0]]<-1E8){ + Printf("V4 Error %f %f",rV4[rGoodTracks[0]],rPt[rGoodTracks[0]]); + continue; + } + + rNPtAssoc3[rGoodTracks[0]]=0; + for(int apt3=0;apt3=fPtAssoc3Array1[apt3]){ + rPtAssoc3[rGoodTracks[0]][rNPtAssoc3[rGoodTracks[0]]]=apt3; + rNPtAssoc3[rGoodTracks[0]]++; + } + } + + rGoodTracks[0]++; + + } + return lead; +} +/////////////////////////////////////////////////////// -Int_t AliAnalysisTaskDiHadron::TrackCutsMC(AliMCEvent *rMC, Float_t *rPt, Float_t *rEta, Float_t *rPhi, Short_t *rCharge, Float_t *rEff, Int_t **rPtAssoc3, Int_t *rNPtAssoc3, Int_t *rGoodTracks){ -//Fills Arrays of MC particles +Int_t AliAnalysisTaskDiHadron::TrackCutsMC(AliMCEvent *rMC, Float_t *rPt, Float_t *rEta, Float_t *rPhi, Short_t *rCharge, Float_t *rEff, Float_t *rV2, Float_t *rV3, Float_t *rV4, Int_t **rPtAssoc3, Int_t *rNPtAssoc3, Int_t *rGoodTracks){ + //Fills Arrays of MC particles rGoodTracks[1]=0; AliStack *rStack=rMC->Stack(); Int_t rTrack=rStack->GetNtrack(); @@ -765,6 +1281,9 @@ Int_t AliAnalysisTaskDiHadron::TrackCutsMC(AliMCEvent *rMC, Float_t *rPt, Float_ rPhi[rGoodTracks[1]]=sPhi; rCharge[rGoodTracks[1]]=sCharge; rEff[rGoodTracks[1]]=1; + rV2[rGoodTracks[1]]=0; + rV3[rGoodTracks[1]]=0; + rV4[rGoodTracks[1]]=0; if(sPt>leadPt)lead=rGoodTracks[1]; rNPtAssoc3[rGoodTracks[1]]=0; for(int apt3=0;apt3Eval(3.); + float v3=fFitHighV3->Eval(3.); + float v4=fFitHighV4->Eval(3.); + Int_t lead=0; + rGoodTracks[0]=0; + + TF1 *SimFlow=new TF1("SimFlow","1+2*[0]*cos(2*x)+2*[1]*cos(3*(x-[2]))+2*[3]*cos(4*x)",-TMath::Pi(),TMath::Pi()); + Float_t V3PlaneAngle=2*TMath::Pi()*gRandom->Rndm(); + SimFlow->SetParameters(v2,v3,V3PlaneAngle,v4); + // SimFlow->SetParameters(0,0,0,0); + TF1 *SimNear=new TF1("SimNear","exp(-0.5*x*x/[0]/[0])",-TMath::Pi(),TMath::Pi()); + SimNear->SetParameter(0,0.3); + TF1 *SimAway=new TF1("SimAway","exp(-0.5*x*x/[0]/[0])",-TMath::Pi(),TMath::Pi()); + SimAway->SetParameter(0,0.5);//0.5 for DiJet 0.3 for cone + + TF1 *SimAway2=new TF1("SimAway2","exp(-0.5*(x-[1])*(x-[1])/[0]/[0])+exp(-0.5*(x+[1])*(x+[1])/[0]/[0])",-TMath::Pi(),TMath::Pi()); + SimAway2->SetParameter(0,0.3);//0.5 for DiJet 0.3 for cone + SimAway2->SetParameter(1,1.4);//Cone Angle + + // TF1 *AwayProb=new TF1("AwayProb","[0]"); + TF1 *AwayProb=new TF1("AwayProb","[0]*cos(2*x)*cos(2*x)"); + //AwayProb->SetParameter(0,0.5); + AwayProb->SetParameter(0,1); + Int_t AwayDeflected=0; + + + // TF1 *SimAway=new TF1("SimAway","0.035+2*[0]*[0]*cos(2*x)+2*[1]*[1]*cos(3*x)+2*[2]*[2]*cos(4*x)",1.0,TMath::Pi()*2-1.0); + // SimAway->SetParameters(v2,v3,v4); + // TF1 *SimAway2=new TF1("SimAway2","0.035+2*[0]*[0]*cos(2*x)+2*[1]*[1]*cos(3*x)+2*[2]*[2]*cos(4*x)",1.05,TMath::Pi()*2-1.05); + //SimAway->SetParameters(v2,v3,v4); + + Float_t RPAngle=2*TMath::Pi()*gRandom->Rndm(); + Float_t TrigAngle; + Float_t sPt,sPhi; + Int_t InAccpt; + Int_t AccptPercent=4;//1 over this is % in aceptance on away-side + Int_t AwaySidePM=0; + + Int_t AwaySide1=1; + //Use SimAway1 or 2 + // if(gRandom->Rndm()Eval(RPAngle))AwaySide1=1; + //else AwaySide1=2; + + for(int i=0;iPoisson(fSimNBgPart);i++){ + sPt=1.5; + rPt[rGoodTracks[0]]=sPt; + rEta[rGoodTracks[0]]=0; + sPhi=SimFlow->GetRandom()+RPAngle; + if(sPhifdPhiMax)sPhi-=2*fPi; + rPhi[rGoodTracks[0]]=sPhi; + rCharge[rGoodTracks[0]]=1; + rEff[rGoodTracks[0]]=1; + rV2[rGoodTracks[0]]=v2; + rV3[rGoodTracks[0]]=v3; + rV4[rGoodTracks[0]]=v4; + rNPtAssoc3[rGoodTracks[0]]=0; + for(int apt3=0;apt3=fPtAssoc3Array1[apt3]){ + rPtAssoc3[rGoodTracks[0]][rNPtAssoc3[rGoodTracks[0]]]=apt3; + rNPtAssoc3[rGoodTracks[0]]++; + } + } + rGoodTracks[0]++; + } + for(int i=0;iPoisson(fSimNJet);i++){ + TrigAngle=SimFlow->GetRandom()+RPAngle; + if(gRandom->Rndm()Eval(TrigAngle-RPAngle))AwaySide1=1; + else AwaySide1=2; + sPhi=TrigAngle; + if(sPhifdPhiMax)sPhi-=2*fPi; + sPt=3.1; + rPt[rGoodTracks[0]]=sPt; + rEta[rGoodTracks[0]]=0; + rPhi[rGoodTracks[0]]=sPhi; + rCharge[rGoodTracks[0]]=1; + rEff[rGoodTracks[0]]=1; + rV2[rGoodTracks[0]]=v2; + rV3[rGoodTracks[0]]=v3; + rV4[rGoodTracks[0]]=v4; + rNPtAssoc3[rGoodTracks[0]]=0; + lead=rGoodTracks[0]; + rGoodTracks[0]++; + + for(int k=0;kPoisson(fSimNJetPart);k++){ + sPhi=SimNear->GetRandom()+TrigAngle; + if(sPhifdPhiMax)sPhi-=2*fPi; + sPt=1.5; + rPt[rGoodTracks[0]]=sPt; + rEta[rGoodTracks[0]]=0; + rPhi[rGoodTracks[0]]=sPhi; + rCharge[rGoodTracks[0]]=1; + rEff[rGoodTracks[0]]=1; + rV2[rGoodTracks[0]]=v2; + rV3[rGoodTracks[0]]=v3; + rV4[rGoodTracks[0]]=v4; + rNPtAssoc3[rGoodTracks[0]]=0; + for(int apt3=0;apt3=fPtAssoc3Array1[apt3]){ + rPtAssoc3[rGoodTracks[0]][rNPtAssoc3[rGoodTracks[0]]]=apt3; + rNPtAssoc3[rGoodTracks[0]]++; + } + } + rGoodTracks[0]++; + } + + if(gRandom->Rndm()<1./AccptPercent)InAccpt=1; + else InAccpt=0; + if(gRandom->Rndm()<0.5)AwaySidePM=0; + else AwaySidePM=1; + for(int k=0;kPoisson(InAccpt*AccptPercent*fSimNJetPart);k++){ + //sPhi=SimAway->GetRandom()+TrigAngle+TMath::Pi(); + if(AwaySide1==1)sPhi=SimAway->GetRandom(); + else(sPhi=SimAway2->GetRandom()); + if(AwayDeflected){ + if(sPhi>0&&AwaySidePM)sPhi=-sPhi; + else if(sPhi<0&&!AwaySidePM)sPhi=-sPhi; + } + sPhi+=TrigAngle+fPi; + if(sPhifdPhiMax)sPhi-=2*fPi; + sPt=1.5; + rPt[rGoodTracks[0]]=sPt; + rEta[rGoodTracks[0]]=0; + rPhi[rGoodTracks[0]]=sPhi; + rCharge[rGoodTracks[0]]=1; + rEff[rGoodTracks[0]]=1; + rV2[rGoodTracks[0]]=v2; + rV3[rGoodTracks[0]]=v3; + rV4[rGoodTracks[0]]=v4; + rNPtAssoc3[rGoodTracks[0]]=0; + for(int apt3=0;apt3=fPtAssoc3Array1[apt3]){ + rPtAssoc3[rGoodTracks[0]][rNPtAssoc3[rGoodTracks[0]]]=apt3; + rNPtAssoc3[rGoodTracks[0]]++; + } + } + rGoodTracks[0]++; + } + + + }//njet + + return lead; +} + + //------------------------------------------------------------ void AliAnalysisTaskDiHadron::Exec(Option_t *) { @@ -787,395 +1458,565 @@ void AliAnalysisTaskDiHadron::Exec(Option_t *) const int nCentBins=fNCentBins; for(int ievent=0;ievent<=1;ievent++){ - if(!fESD&&ievent==0){ - if(fDEBUG)Printf("Error: fESD not found"); - break; - } - if(!fMC&&ievent==1){ - break; - } - if(ievent==1&&!fMCHistos)break;//break out if MC event and we don't have fill of those set - //Secondary check - if(ievent==0){ - if(fESD->GetNumberOfTracks()<=0){ - if(fDEBUG)Printf("Error: no tracks"); + if((!fESD&&!fAOD)&&ievent==0){ + if(fDEBUG)Printf("Error: fESD not found"); break; } - } - //The previous check doesn't seem to work as a fMC is bad not NULL - if(ievent==1){ - if(fMC->GetNumberOfTracks()<=0){ - if(fDEBUG)Printf("<=0 MCTracks"); + if(!fMC&&ievent==1){ break; } - } - - //Check for Trigger only on real data - if(!fMC){ - if(!CheckTrigger(fESD)) break; - } - //I'll only cut on the reconstructed vertex since these are the events that will be used - int vertexBin; - vertexBin=CheckVertex(fESD); - //else vertexBin=CheckVertex(fMC); - if(vertexBin<0)break; - - Int_t nGoodTracks[2]={0,0}, nTriggers[nTPtBins][nCentBins][2]; - Int_t nTrack; - if(!ievent)nTrack=fESD->GetNumberOfTracks(); - else nTrack=fMC->Stack()->GetNtrack(); - - Float_t tdPhi, tdEta, tXE; - Float_t tdPhi2, tdEta2; - ftPhi=new Float_t [nTrack]; - ftEta=new Float_t [nTrack]; - ftPt=new Float_t [nTrack]; - ftCharge=new Short_t [nTrack]; - ftEff=new Float_t [nTrack]; - ftPtAssoc3=new Int_t *[nTrack]; - for(int i=0;iGetNumberOfTracks()<=0){ + if(fDEBUG)Printf("Error: no tracks"); + break; + } + } + else{ + if(fAOD->GetNTracks()<=0){ + if(fDEBUG)Printf("Error: no tracks"); + break; + } + } + } + //The previous check doesn't seem to work as a fMC is bad not NULL + if(ievent==1){ + if(fMC->GetNumberOfTracks()<=0){ + if(fDEBUG)Printf("<=0 MCTracks"); + break; + } } - } - Int_t tMult=fESD->GetMultiplicity()->GetNumberOfTracklets();//I think this is the correct multiplicity to use - if(fDEBUG)Printf("Mult%d",tMult); - //Decide what multiplicy bins are filled with this event, note set to max of 4 as I didn't think more then 2 overlapping bins likely at one time, easliy changed - Int_t multArray[4]={0,0,0,0}; - Int_t maxArray=0; - for(int imult=0;imult=fCentArrayMin[imult]&&tMultSetParameter(ipar,fFitLowParam[multArray[0]*fNCentBins+ipar]); - } - for(int ipar=0;iparSetParameter(ipar,fFitHighParam[multArray[0]*fNCentBins+ipar]); - } - fHistMult[ievent]->Fill(tMult); - for(int c=0;cFill(0);}//count the number of events used - Int_t leadPart; - //returns arrays filled up to nGoodTracks with tracks passing cuts - if(!ievent)leadPart=TrackCuts(fESD,ftPt,ftEta,ftPhi,ftCharge,ftEff,ftPtAssoc3,ftNPtAssoc3,nGoodTracks); - else leadPart=TrackCutsMC(fMC,ftPt,ftEta,ftPhi,ftCharge,ftEff,ftPtAssoc3,ftNPtAssoc3,nGoodTracks); - int nearEta=0,NearXE=0; - int nearEta2=0; - if(fDEBUG)Printf("Track Loop"); - for(int iTrack=0;iTrackfdPhiMax)ftPhi[iTrack]-=2*fPi; - for(int c=0;cFill(ftPt[iTrack],ftEff[iTrack]); - fHistPtEff[multArray[c]][ievent]->Fill(ftPt[iTrack]); - fHistPhi[multArray[c]][ievent]->Fill(ftPhi[iTrack],ftPt[iTrack],ftEff[iTrack]); - fHistPhiPt[multArray[c]][ievent]->Fill(ftPhi[iTrack],ftPt[iTrack],ftPt[iTrack]*ftEff[iTrack]); - fHistEta[multArray[c]][ievent]->Fill(ftEta[iTrack],ftPt[iTrack],ftEff[iTrack]); - fHistEtaPt[multArray[c]][ievent]->Fill(ftEta[iTrack],ftPt[iTrack],ftPt[iTrack]*ftEff[iTrack]); - fHistPhiEta[multArray[c]][ievent]->Fill(ftPhi[iTrack],ftEta[iTrack],ftPt[iTrack],ftEff[iTrack]); - fHistPhiEtaPt[multArray[c]][ievent]->Fill(ftPhi[iTrack],ftEta[iTrack],ftPt[iTrack],ftPt[iTrack]*ftEff[iTrack]); + //I'll only cut on the reconstructed vertex since these are the events that will be used + int vertexBin; + if(!fAODData)vertexBin=CheckVertex(fESD); + else vertexBin=CheckVertexAOD(fAOD); + if(vertexBin<0)break; + + + + Int_t nGoodTracks[2]={0,0}, nTriggers[nTPtBins][nCentBins][2]; + Int_t nTrack; + if(!ievent){ + if(!fAODData)nTrack=fESD->GetNumberOfTracks(); + else nTrack=fAOD->GetNumberOfTracks(); + } + else nTrack=fMC->Stack()->GetNtrack(); + if(fSimulate)nTrack=10*(fSimNBgPart+10*fSimNJetPart); + gRandom->SetSeed(time(0)+gSystem->GetPid()); + Float_t tdPhi, tdEta, tXE; + Float_t tdPhi2, tdEta2; + Float_t V2_T1, V2_T2, V3_T1, V3_T2, V4_T1, V4_T2, V42_T12, V42_1T2, V42_2T1, V2V2V4, V2, V3, V4; + Float_t V2_A, V3_A, V4_A; + ftPhi=new Float_t [nTrack]; + ftEta=new Float_t [nTrack]; + ftPt=new Float_t [nTrack]; + ftCharge=new Short_t [nTrack]; + ftEff=new Float_t [nTrack]; + ftV2=new Float_t [nTrack]; + ftV3=new Float_t [nTrack]; + ftV4=new Float_t [nTrack]; + ftPtAssoc3=new Int_t *[nTrack]; + for(int i=0;ifPtTrigArray[i]&&ftPt[iTrack]Fill(tMult); + for(int c=0;cGetMultiplicity()->GetNumberOfTracklets();//I think this is the correct multiplicity to use + + //AliESDVZERO* esdV0 = fESD->GetVZEROData(); + Float_t tMult=0; + if(!fAODData){ + if(fCentPercent) tMult=fESD->GetCentrality()->GetCentralityPercentile("V0M"); + else tMult=fESD->GetVZEROData()->GetMTotV0A()+fESD->GetVZEROData()->GetMTotV0C(); + } + else{ + AliAODHeader *tHeader=fAOD->GetHeader(); + tMult=tHeader->GetCentrality(); + } + + if(fDEBUG)Printf("Mult/Cent%6.1f",tMult); + + //Decide what multiplicy bins are filled with this event, note set to max of 4 overlapping bins as I didn't think more then 2 overlapping bins likely at one time, easliy changed + Int_t multArray[4]={0,0,0,0}; + Int_t maxArray=0; + + for(int imult=0;imult=fCentArrayMin[imult]&&tMultSetParameter(ipar,fFitLowParam[multArray[0]*fNFitLowParam+ipar]); + } + for(int ipar=0;iparSetParameter(ipar,fFitHighParam[multArray[0]*fNFitHighParam+ipar]); + } + for(int ipar=0;iparSetParameter(ipar,fFitLowParamV2[multArray[0]*fNFitLowParamV2+ipar]); + } + for(int ipar=0;iparSetParameter(ipar,fFitHighParamV2[multArray[0]*fNFitHighParamV2+ipar]); + } + for(int ipar=0;iparSetParameter(ipar,fFitLowParamV3[multArray[0]*fNFitLowParamV3+ipar]); + } + for(int ipar=0;iparSetParameter(ipar,fFitHighParamV3[multArray[0]*fNFitHighParamV2+ipar]); + } + for(int ipar=0;iparSetParameter(ipar,fFitLowParamV4[multArray[0]*fNFitLowParamV4+ipar]); + } + for(int ipar=0;iparSetParameter(ipar,fFitHighParamV4[multArray[0]*fNFitHighParamV4+ipar]); + } + fHistMult[ievent]->Fill(tMult); + for(int c=0;cFill(0);}//count the number of events used + Int_t leadPart=-1; + + //returns arrays filled up to nGoodTracks with tracks passing cuts + for(int nSimEvents=0;nSimEvents<=(fSimulate*fSimNEvents);nSimEvents++){//only 1 loop if not simulation + //Printf("nSimEvents %d",nSimEvents); + if(fSimulate)leadPart=TrackCutsSim(ftPt,ftEta,ftPhi,ftCharge,ftEff,ftV2,ftV3,ftV4,ftPtAssoc3,ftNPtAssoc3,nGoodTracks); + else if(!ievent){ + if(!fAODData)leadPart=TrackCuts(fESD,ftPt,ftEta,ftPhi,ftCharge,ftEff,ftV2,ftV3,ftV4,ftPtAssoc3,ftNPtAssoc3,nGoodTracks); + else leadPart=TrackCutsAOD(fAOD,ftPt,ftEta,ftPhi,ftCharge,ftEff,ftV2,ftV3,ftV4,ftPtAssoc3,ftNPtAssoc3,nGoodTracks); + } + else leadPart=TrackCutsMC(fMC,ftPt,ftEta,ftPhi,ftCharge,ftEff,ftV2,ftV3,ftV4,ftPtAssoc3,ftNPtAssoc3,nGoodTracks); + //Printf("nGoodTracks %d",nGoodTracks[0]); + int nearEta=0,NearXE=0; + int nearEta2=0; + + if(fDEBUG)Printf("Track Loop"); + for(int iTrack=0;iTrackfdPhiMax)ftPhi[iTrack]-=2*fPi; for(int c=0;cFill(i); - fHistNTriggerPt[multArray[c]][ievent]->Fill(i,ftPt[iTrack]); + // Printf("c%d mult%d",c,multArray[c]); + fHistPt[multArray[c]][ievent]->Fill(ftPt[iTrack],ftEff[iTrack]); + fHistPtEff[multArray[c]][ievent]->Fill(ftPt[iTrack]); + fHistPhi[multArray[c]][ievent]->Fill(ftPhi[iTrack],ftPt[iTrack],ftEff[iTrack]); + fHistPhiPt[multArray[c]][ievent]->Fill(ftPhi[iTrack],ftPt[iTrack],ftPt[iTrack]*ftEff[iTrack]); + fHistEta[multArray[c]][ievent]->Fill(ftEta[iTrack],ftPt[iTrack],ftEff[iTrack]); + fHistEtaPt[multArray[c]][ievent]->Fill(ftEta[iTrack],ftPt[iTrack],ftPt[iTrack]*ftEff[iTrack]); + fHistPhiEta[multArray[c]][ievent]->Fill(ftPhi[iTrack],ftEta[iTrack],ftPt[iTrack],ftEff[iTrack]); + fHistPhiEtaPt[multArray[c]][ievent]->Fill(ftPhi[iTrack],ftEta[iTrack],ftPt[iTrack],ftPt[iTrack]*ftEff[iTrack]); } - if(fDEBUG)Printf("Assiciated Particle Loop"); - for(int iTrack2=0;iTrack2ftPt[iTrack])continue; - tdPhi=ftPhi[iTrack]-ftPhi[iTrack2]; - if(tdPhi<-fPi)tdPhi+=2*fPi; - if(tdPhi>fPi)tdPhi-=2*fPi; - if(fabs(tdPhi)fdPhiMax)tdPhi-=2*fPi; - if((ftCharge[iTrack]<0&&ftCharge[iTrack2]<0)||(ftCharge[iTrack]>0&&ftCharge[iTrack2]>0))sign=1; - else sign=2; - if(fDEBUG) Printf("dPhi %f dEta %f",tdPhi,tdEta); - for(int c=0;cFill(ftPt[iTrack2],ftEff[iTrack2]); - fHistPhiTrig[i][multArray[c]][ievent]->Fill(ftPhi[iTrack2],ftPt[iTrack2],ftEff[iTrack2]); - fHistPhiTrigPt[i][multArray[c]][ievent]->Fill(ftPhi[iTrack2],ftPt[iTrack2],ftPt[iTrack2]*ftEff[iTrack2]); - fHistEtaTrig[i][multArray[c]][ievent]->Fill(ftEta[iTrack2],ftPt[iTrack2],ftEff[iTrack2]); - fHistEtaTrigPt[i][multArray[c]][ievent]->Fill(ftEta[iTrack2],ftPt[iTrack2],ftPt[iTrack2]*ftEff[iTrack2]); - - fHistPhiEtaTrig[i][multArray[c]][ievent]->Fill(ftPhi[iTrack2],ftEta[iTrack2],ftPt[iTrack2],ftEff[iTrack2]); - fHistPhiEtaTrigPt[i][multArray[c]][ievent]->Fill(ftPhi[iTrack2],ftEta[iTrack2],ftPt[iTrack2],ftPt[iTrack2]*ftEff[iTrack2]); - fHistDeltaPhi[i][multArray[c]][0][ievent]->Fill(tdPhi,ftPt[iTrack2],ftEff[iTrack2]); - fHistDeltaPhiPt[i][multArray[c]][0][ievent]->Fill(tdPhi,ftPt[iTrack2],ftPt[iTrack2]*ftEff[iTrack2]); - fHistDeltaPhi[i][multArray[c]][sign][ievent]->Fill(tdPhi,ftPt[iTrack2],ftEff[iTrack2]); - fHistDeltaPhiPt[i][multArray[c]][sign][ievent]->Fill(tdPhi,ftPt[iTrack2],ftPt[iTrack2]*ftEff[iTrack2]); - - if(nearEta){ - fHistDeltaEtaN[i][multArray[c]][0][ievent]->Fill(tdEta,ftPt[iTrack2],ftEff[iTrack2]); - fHistDeltaEtaNPt[i][multArray[c]][0][ievent]->Fill(tdEta,ftPt[iTrack2],ftPt[iTrack2]*ftEff[iTrack2]); - fHistDeltaEtaN[i][multArray[c]][sign][ievent]->Fill(tdEta,ftPt[iTrack2],ftEff[iTrack2]); - fHistDeltaEtaNPt[i][multArray[c]][sign][ievent]->Fill(tdEta,ftPt[iTrack2],ftPt[iTrack2]*ftEff[iTrack2]); - } - else{ - fHistDeltaEtaA[i][multArray[c]][0][ievent]->Fill(tdEta,ftPt[iTrack2],ftEff[iTrack2]); - fHistDeltaEtaAPt[i][multArray[c]][0][ievent]->Fill(tdEta,ftPt[iTrack2],ftPt[iTrack2]*ftEff[iTrack2]); - fHistDeltaEtaA[i][multArray[c]][sign][ievent]->Fill(tdEta,ftPt[iTrack2],ftEff[iTrack2]); - fHistDeltaEtaAPt[i][multArray[c]][sign][ievent]->Fill(tdEta,ftPt[iTrack2],ftPt[iTrack2]*ftEff[iTrack2]); + for(int i=0;ifPtTrigArray[i]&&ftPt[iTrack]<=fPtTrigArray[i+1]&&fabs(ftEta[iTrack])Fill(tMult); + for(int c=0;cFill(i,ftEff[iTrack]); + fHistNTriggerPt[multArray[c]][ievent]->Fill(i,ftPt[iTrack]*ftEff[iTrack]); } - fHistDeltaPhiEta[i][multArray[c]][ievent]->Fill(tdPhi,tdEta,ftPt[iTrack2],ftEff[iTrack2]); - fHistDeltaPhiEtaPt[i][multArray[c]][ievent]->Fill(tdPhi,tdEta,ftPt[iTrack2],ftPt[iTrack2]*ftEff[iTrack2]); - - //only fill these if trigger particle is the leading particle - if(iTrack==leadPart){ - if(NearXE){ - tXE=ftPt[iTrack2]*cos(tdPhi)/ftPt[iTrack]; - fHistXEN[i][multArray[c]][ievent]->Fill(tXE,ftEff[iTrack2]); - } - else{ - tXE=ftPt[iTrack2]*cos(tdPhi+fPi)/ftPt[iTrack]; - fHistXEA[i][multArray[c]][ievent]->Fill(tXE,ftEff[iTrack2]); - } - } - - }//Centrality loop (c) - - //3-particle Correlations - for(int iTrack3=0;iTrack3ftPt[iTrack])continue; - tdPhi2=ftPhi[iTrack]-ftPhi[iTrack3]; - if(tdPhi2<-fPi)tdPhi2+=2*fPi; - if(tdPhi2>fPi)tdPhi2-=2*fPi; - if(fabs(tdPhi2)fdPhiMax)tdPhi2-=2*fPi; - // if((ftCharge[iTrack]<0&&ftCharge[iTrack2]<0)||(ftCharge[iTrack]>0&&ftCharge[iTrack2]>0))sign=1; - if((ftCharge[iTrack]<0&&ftCharge[iTrack2]<0&&ftCharge[iTrack3]<0)||(ftCharge[iTrack]>0&&ftCharge[iTrack2]>0&&ftCharge[iTrack3]>0))sign=1; - else if((ftCharge[iTrack3]<0&&ftCharge[iTrack2]<0)||(ftCharge[iTrack3]>0&&ftCharge[iTrack2]>0))sign=2; - else sign=3; - for(int e=0;eFill(tdPhi,tdPhi2,ftEff[iTrack2]*ftEff[iTrack3]); - fHistDeltaPhiPhi[i][ftPtAssoc3[iTrack2][e]][multArray[c]][sign][ievent]->Fill(tdPhi2,tdPhi,ftEff[iTrack2]*ftEff[iTrack3]); - - - if(nearEta2){ - fHistDeltaEtaEta[i][ftPtAssoc3[iTrack2][e]][multArray[c]][0][ievent]->Fill(tdEta,tdEta2,ftEff[iTrack2]*ftEff[iTrack3]); - fHistDeltaEtaEta[i][ftPtAssoc3[iTrack2][e]][multArray[c]][sign][ievent]->Fill(tdEta,tdEta2,ftEff[iTrack2]*ftEff[iTrack3]); - } - }//multiplicity loop (c) - } - } - }//track checking loops - }//iTrack3 - }//iTrack2 (associated track loop) - - if(fDEBUG)Printf("Mixed Event Loop"); - for(int c=0;c=0){//check if there are any mixed events for this bin - for(int imix=0;imix<=fMixEnd[d][vertexBin][ievent];imix++){//loop over the stored mixed events - fHistNMix[d][ievent]->Fill(i); - for(int iTrack2=0;iTrack2fPi)tdPhi-=2*fPi; - if(fabs(tdPhi)fdPhiMax)tdPhi-=2*fPi; - if((ftCharge[iTrack]<0&&fMCharge[imix][d][vertexBin][ievent][iTrack2]<0)||(ftCharge[iTrack]>0&&fMCharge[imix][d][vertexBin][ievent][iTrack2]>0))sign=1; - else sign=2; - - fHistDeltaPhiMix[i][d][0][ievent]->Fill(tdPhi,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]); - fHistDeltaPhiMixPt[i][d][0][ievent]->Fill(tdPhi,fMPt[imix][d][vertexBin][ievent][iTrack2],fMPt[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix][d][vertexBin][ievent][iTrack2]); - fHistDeltaPhiMix[i][d][sign][ievent]->Fill(tdPhi,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]); - fHistDeltaPhiMixPt[i][d][sign][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMPt[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix][d][vertexBin][ievent][iTrack2]); + + if(fDEBUG)Printf("Assiciated Particle Loop"); + // Printf("GoodTracks %d Cent%d",nGoodTracks[ievent],multArray[0]); + for(int iTrack2=0;iTrack2ftPt[iTrack])continue; + tdPhi=ftPhi[iTrack]-ftPhi[iTrack2]; + if(tdPhi<-fPi)tdPhi+=2*fPi; + if(tdPhi>fPi)tdPhi-=2*fPi; + if(fabs(tdPhi)fdPhiMax)tdPhi-=2*fPi; + if((ftCharge[iTrack]<0&&ftCharge[iTrack2]<0)||(ftCharge[iTrack]>0&&ftCharge[iTrack2]>0))sign=1; + else sign=2; + if(fDEBUG) Printf("dPhi %f dEta %f",tdPhi,tdEta); + for(int c=0;cFill(ftPt[iTrack2],ftEff[iTrack2]*ftEff[iTrack]); + fHistPhiTrig[i][multArray[c]][ievent]->Fill(ftPhi[iTrack2],ftPt[iTrack2],ftEff[iTrack2]*ftEff[iTrack]); + fHistPhiTrigPt[i][multArray[c]][ievent]->Fill(ftPhi[iTrack2],ftPt[iTrack2],ftPt[iTrack2]*ftEff[iTrack2]*ftEff[iTrack]); + fHistEtaTrig[i][multArray[c]][ievent]->Fill(ftEta[iTrack2],ftPt[iTrack2],ftEff[iTrack2]*ftEff[iTrack]); + fHistEtaTrigPt[i][multArray[c]][ievent]->Fill(ftEta[iTrack2],ftPt[iTrack2],ftPt[iTrack2]*ftEff[iTrack2]*ftEff[iTrack]); + + fHistPhiEtaTrig[i][multArray[c]][ievent]->Fill(ftPhi[iTrack2],ftEta[iTrack2],ftPt[iTrack2],ftEff[iTrack2]*ftEff[iTrack]); + fHistPhiEtaTrigPt[i][multArray[c]][ievent]->Fill(ftPhi[iTrack2],ftEta[iTrack2],ftPt[iTrack2],ftPt[iTrack2]*ftEff[iTrack2]*ftEff[iTrack]); + fHistDeltaPhi[i][multArray[c]][0][ievent]->Fill(tdPhi,ftPt[iTrack2],ftEff[iTrack2]*ftEff[iTrack]); + fHistDeltaPhiPt[i][multArray[c]][0][ievent]->Fill(tdPhi,ftPt[iTrack2],ftPt[iTrack2]*ftEff[iTrack2]*ftEff[iTrack]); + fHistDeltaPhi[i][multArray[c]][sign][ievent]->Fill(tdPhi,ftPt[iTrack2],ftEff[iTrack2]*ftEff[iTrack]); + fHistDeltaPhiPt[i][multArray[c]][sign][ievent]->Fill(tdPhi,ftPt[iTrack2],ftPt[iTrack2]*ftEff[iTrack2]*ftEff[iTrack]); + if(nearEta){ - fHistDeltaEtaNMix[i][d][0][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]); - fHistDeltaEtaNMixPt[i][d][0][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMPt[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix][d][vertexBin][ievent][iTrack2]); - fHistDeltaEtaNMix[i][d][sign][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]); - fHistDeltaEtaNMixPt[i][d][sign][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMPt[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix][d][vertexBin][ievent][iTrack2]); + fHistDeltaEtaN[i][multArray[c]][0][ievent]->Fill(tdEta,ftPt[iTrack2],ftEff[iTrack2]*ftEff[iTrack]); + fHistDeltaEtaNPt[i][multArray[c]][0][ievent]->Fill(tdEta,ftPt[iTrack2],ftPt[iTrack2]*ftEff[iTrack2]*ftEff[iTrack]); + fHistDeltaEtaN[i][multArray[c]][sign][ievent]->Fill(tdEta,ftPt[iTrack2],ftEff[iTrack2]*ftEff[iTrack]); + fHistDeltaEtaNPt[i][multArray[c]][sign][ievent]->Fill(tdEta,ftPt[iTrack2],ftPt[iTrack2]*ftEff[iTrack2]*ftEff[iTrack]); } else{ - fHistDeltaEtaAMix[i][d][0][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]); - fHistDeltaEtaAMixPt[i][d][0][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMPt[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix][d][vertexBin][ievent][iTrack2]); - fHistDeltaEtaAMix[i][d][sign][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]); - fHistDeltaEtaAMixPt[i][d][sign][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMPt[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix][d][vertexBin][ievent][iTrack2]); - } - - fHistDeltaPhiEtaMix[i][d][ievent]->Fill(tdPhi,tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]); - fHistDeltaPhiEtaMixPt[i][d][ievent]->Fill(tdPhi,tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMPt[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix][d][vertexBin][ievent][iTrack2]); - + fHistDeltaEtaA[i][multArray[c]][0][ievent]->Fill(tdEta,ftPt[iTrack2],ftEff[iTrack2]*ftEff[iTrack]); + fHistDeltaEtaAPt[i][multArray[c]][0][ievent]->Fill(tdEta,ftPt[iTrack2],ftPt[iTrack2]*ftEff[iTrack2]*ftEff[iTrack]); + fHistDeltaEtaA[i][multArray[c]][sign][ievent]->Fill(tdEta,ftPt[iTrack2],ftEff[iTrack2]*ftEff[iTrack]); + fHistDeltaEtaAPt[i][multArray[c]][sign][ievent]->Fill(tdEta,ftPt[iTrack2],ftPt[iTrack2]*ftEff[iTrack2]*ftEff[iTrack]); + } + fHistDeltaPhiEta[i][multArray[c]][ievent]->Fill(tdPhi,tdEta,ftPt[iTrack2],ftEff[iTrack2]*ftEff[iTrack]); + fHistDeltaPhiEtaPt[i][multArray[c]][ievent]->Fill(tdPhi,tdEta,ftPt[iTrack2],ftPt[iTrack2]*ftEff[iTrack2]*ftEff[iTrack]); + + //only fill these if trigger particle is the leading particle if(iTrack==leadPart){ if(NearXE){ - tXE=fMPt[imix][d][vertexBin][ievent][iTrack2]*cos(tdPhi)/ftPt[iTrack]; - fHistXENMix[i][d][ievent]->Fill(tXE,fMEff[imix][d][vertexBin][ievent][iTrack2]); + tXE=ftPt[iTrack2]*cos(tdPhi)/ftPt[iTrack]; + fHistXEN[i][multArray[c]][ievent]->Fill(tXE,ftEff[iTrack2]*ftEff[iTrack]); } else{ - tXE=fMPt[imix][d][vertexBin][ievent][iTrack2]*cos(tdPhi+fPi)/ftPt[iTrack]; - fHistXEAMix[i][multArray[c]][ievent]->Fill(tXE,fMEff[imix][d][vertexBin][ievent][iTrack2]); + tXE=ftPt[iTrack2]*cos(tdPhi+fPi)/ftPt[iTrack]; + fHistXEA[i][multArray[c]][ievent]->Fill(tXE,ftEff[iTrack2]*ftEff[iTrack]); } } - //3-particle correlation soft-soft term (both associated from the same event) - for(int iTrack3=0;iTrack3ftPt[iTrack])continue; + tdPhi2=ftPhi[iTrack]-ftPhi[iTrack3]; if(tdPhi2<-fPi)tdPhi2+=2*fPi; if(tdPhi2>fPi)tdPhi2-=2*fPi; - if(fabs(tdPhi2)fdPhiMax)tdPhi2-=2*fPi; - //if((ftCharge[iTrack]<0&&fMCharge[imix][d][vertexBin][ievent][iTrack2]<0)||(ftCharge[iTrack]>0&&fMCharge[imix][d][vertexBin][ievent][iTrack2]>0))sign=1; - //else sign=2; - if((ftCharge[iTrack]<0&&fMCharge[imix][d][vertexBin][ievent][iTrack2]<0&&fMCharge[imix][d][vertexBin][ievent][iTrack3]<0)||(ftCharge[iTrack]>0&&fMCharge[imix][d][vertexBin][ievent][iTrack2]>0&&fMCharge[imix][d][vertexBin][ievent][iTrack3]>0))sign=1; - else if((fMCharge[imix][d][vertexBin][ievent][iTrack3]<0&&fMCharge[imix][d][vertexBin][ievent][iTrack2]<0)||(fMCharge[imix][d][vertexBin][ievent][iTrack3]>0&&fMCharge[imix][d][vertexBin][ievent][iTrack2]>0))sign=2; + // if((ftCharge[iTrack]<0&&ftCharge[iTrack2]<0)||(ftCharge[iTrack]>0&&ftCharge[iTrack2]>0))sign=1; + if((ftCharge[iTrack]<0&&ftCharge[iTrack2]<0&&ftCharge[iTrack3]<0)||(ftCharge[iTrack]>0&&ftCharge[iTrack2]>0&&ftCharge[iTrack3]>0))sign=1; + else if((ftCharge[iTrack3]<0&&ftCharge[iTrack2]<0)||(ftCharge[iTrack3]>0&&ftCharge[iTrack2]>0))sign=2; else sign=3; - for(int e=0;eFill(tdPhi,tdPhi2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix][d][vertexBin][ievent][iTrack3]); - fHistDeltaPhiPhiSS[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdPhi,tdPhi2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix][d][vertexBin][ievent][iTrack3]); - - if(nearEta2){ - fHistDeltaEtaEtaSS[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdEta,tdEta2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix][d][vertexBin][ievent][iTrack3]); - fHistDeltaEtaEtaSS[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdEta,tdEta2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix][d][vertexBin][ievent][iTrack3]); - }//near-side + for(int e=0;eFill(tdPhi,tdPhi2,ftEff[iTrack2]*ftEff[iTrack3]*ftEff[iTrack]); + fHistDeltaPhiPhi[i][ftPtAssoc3[iTrack2][e]][multArray[c]][sign][ievent]->Fill(tdPhi2,tdPhi,ftEff[iTrack2]*ftEff[iTrack3]*ftEff[iTrack]); + + + if(nearEta2){ + fHistDeltaEtaEta[i][ftPtAssoc3[iTrack2][e]][multArray[c]][0][ievent]->Fill(tdEta,tdEta2,ftEff[iTrack2]*ftEff[iTrack3]*ftEff[iTrack]); + fHistDeltaEtaEta[i][ftPtAssoc3[iTrack2][e]][multArray[c]][sign][ievent]->Fill(tdEta,tdEta2,ftEff[iTrack2]*ftEff[iTrack3]*ftEff[iTrack]); + } + }//multiplicity loop (c) } } - }//associated pt bin - }//iTrack3 - - //3-particle mixed event (associated from different events) - //for(int imix2=0;imix2<=fMixEnd[d][vertexBin][ievent];imix2++){//loop over the stored mixed events - //if(imix2==imix)continue; - int imix2=imix+1; - if(imix2>=fMixEnd[d][vertexBin][ievent])imix2=0; - if(imix2==imix)continue;//will kill it when there is only 1 mixed event (remember to scale by 1 less then the number of mixed events in others (number of mixed-mixed is 2*(mixed-1))) - for(int iTrack3=0;iTrack3fPi)tdPhi2-=2*fPi; - if(fabs(tdPhi2)fdPhiMax)tdPhi2-=2*fPi; - //if((ftCharge[iTrack]<0&&fMCharge[imix2][d][vertexBin][ievent][iTrack2]<0)||(ftCharge[iTrack]>0&&fMCharge[imix2][d][vertexBin][ievent][iTrack2]>0))sign=1; - //else sign=2; - if((ftCharge[iTrack]<0&&fMCharge[imix][d][vertexBin][ievent][iTrack2]<0&&fMCharge[imix2][d][vertexBin][ievent][iTrack3]<0)||(ftCharge[iTrack]>0&&fMCharge[imix][d][vertexBin][ievent][iTrack2]>0&&fMCharge[imix2][d][vertexBin][ievent][iTrack3]>0))sign=1; - else if((fMCharge[imix2][d][vertexBin][ievent][iTrack3]<0&&fMCharge[imix][d][vertexBin][ievent][iTrack2]<0)||(fMCharge[imix2][d][vertexBin][ievent][iTrack3]>0&&fMCharge[imix][d][vertexBin][ievent][iTrack2]>0))sign=2; - else sign=3; - for(int e=0;eFill(tdPhi,tdPhi2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]); - fHistDeltaPhiPhiMix[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdPhi,tdPhi2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]); - fHistDeltaPhiPhiMix[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdPhi2,tdPhi,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]);//free factor of 2 in statistics - fHistDeltaPhiPhiMix[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdPhi2,tdPhi,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]); - if(nearEta2){ - fHistDeltaEtaEtaMix[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdEta,tdEta2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]); - fHistDeltaEtaEtaMix[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdEta,tdEta2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]); - fHistDeltaEtaEtaMix[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdEta2,tdEta,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]); - fHistDeltaEtaEtaMix[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdEta2,tdEta,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]); - }//near-side - } + }//track checking loops + }//iTrack3 + }//iTrack2 (associated track loop) + + if(fDEBUG)Printf("Mixed Event Loop"); + for(int c=0;c2){//check if there are any mixed events for this bin, require 2 for soft-soft mixing + for(int imix=0;imixFill(i); + //Printf("GoodTracksMixed %d Cent%d fMixEnd%d",fMixTrack[imix][d][vertexBin][ievent],d,fMixEnd[d][vertexBin][ievent]); + for(int iTrack2=0;iTrack2fPi)tdPhi-=2*fPi; + if(fabs(tdPhi)fdPhiMax)tdPhi-=2*fPi; + if((ftCharge[iTrack]<0&&fMCharge[imix][d][vertexBin][ievent][iTrack2]<0)||(ftCharge[iTrack]>0&&fMCharge[imix][d][vertexBin][ievent][iTrack2]>0))sign=1; + else sign=2; + V2_T1=2*fMV2[imix][d][vertexBin][ievent][iTrack2]*ftV2[iTrack]*cos(2*tdPhi); + V3_T1=2*fMV3[imix][d][vertexBin][ievent][iTrack2]*ftV3[iTrack]*cos(3*tdPhi); + V4_T1=2*fMV4[imix][d][vertexBin][ievent][iTrack2]*ftV4[iTrack]*cos(4*tdPhi); + + fHistDeltaPhiMix[i][d][0][ievent]->Fill(tdPhi,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]); + fHistDeltaPhiMixV2[i][d][0][ievent]->Fill(tdPhi,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]*V2_T1); + fHistDeltaPhiMixV3[i][d][0][ievent]->Fill(tdPhi,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]*V3_T1); + fHistDeltaPhiMixV4[i][d][0][ievent]->Fill(tdPhi,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]*V4_T1); + fHistDeltaPhiMixPt[i][d][0][ievent]->Fill(tdPhi,fMPt[imix][d][vertexBin][ievent][iTrack2],fMPt[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix][d][vertexBin][ievent][iTrack2]); + fHistDeltaPhiMixV2Pt[i][d][0][ievent]->Fill(tdPhi,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]*V2_T1*fMPt[imix][d][vertexBin][ievent][iTrack2]); + fHistDeltaPhiMixV3Pt[i][d][0][ievent]->Fill(tdPhi,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]*V3_T1*fMPt[imix][d][vertexBin][ievent][iTrack2]); + fHistDeltaPhiMixV4Pt[i][d][0][ievent]->Fill(tdPhi,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]*V4_T1*fMPt[imix][d][vertexBin][ievent][iTrack2]); + fHistDeltaPhiMix[i][d][sign][ievent]->Fill(tdPhi,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]); + fHistDeltaPhiMixV2[i][d][sign][ievent]->Fill(tdPhi,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]*V2_T1); + fHistDeltaPhiMixV3[i][d][sign][ievent]->Fill(tdPhi,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]*V3_T1); + fHistDeltaPhiMixV4[i][d][sign][ievent]->Fill(tdPhi,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]*V4_T1); + fHistDeltaPhiMixPt[i][d][sign][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMPt[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix][d][vertexBin][ievent][iTrack2]); + fHistDeltaPhiMixV2Pt[i][d][sign][ievent]->Fill(tdPhi,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]*V2_T1*fMPt[imix][d][vertexBin][ievent][iTrack2]); + fHistDeltaPhiMixV3Pt[i][d][sign][ievent]->Fill(tdPhi,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]*V3_T1*fMPt[imix][d][vertexBin][ievent][iTrack2]); + fHistDeltaPhiMixV4Pt[i][d][sign][ievent]->Fill(tdPhi,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]*V4_T1*fMPt[imix][d][vertexBin][ievent][iTrack2]); + + if(nearEta){ + fHistDeltaEtaNMix[i][d][0][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]); + fHistDeltaEtaNMixV2[i][d][0][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]*V2_T1); + fHistDeltaEtaNMixV3[i][d][0][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]*V3_T1); + fHistDeltaEtaNMixV4[i][d][0][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]*V4_T1); + fHistDeltaEtaNMixPt[i][d][0][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMPt[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix][d][vertexBin][ievent][iTrack2]); + fHistDeltaEtaNMix[i][d][sign][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]); + fHistDeltaEtaNMixPt[i][d][sign][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMPt[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix][d][vertexBin][ievent][iTrack2]); + fHistDeltaEtaNMixV2Pt[i][d][0][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]*V2_T1*fMPt[imix][d][vertexBin][ievent][iTrack2]); + fHistDeltaEtaNMixV3Pt[i][d][0][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]*V3_T1*fMPt[imix][d][vertexBin][ievent][iTrack2]); + fHistDeltaEtaNMixV4Pt[i][d][0][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]*V4_T1*fMPt[imix][d][vertexBin][ievent][iTrack2]); + } + else{ + fHistDeltaEtaAMix[i][d][0][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]); + fHistDeltaEtaAMixV2[i][d][0][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]*V2_T1); + fHistDeltaEtaAMixV3[i][d][0][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]*V3_T1); + fHistDeltaEtaAMixV4[i][d][0][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]*V4_T1); + fHistDeltaEtaAMixPt[i][d][0][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMPt[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix][d][vertexBin][ievent][iTrack2]); + fHistDeltaEtaAMix[i][d][sign][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]); + fHistDeltaEtaAMixPt[i][d][sign][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMPt[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix][d][vertexBin][ievent][iTrack2]); + fHistDeltaEtaAMixV2Pt[i][d][0][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]*V2_T1*fMPt[imix][d][vertexBin][ievent][iTrack2]); + fHistDeltaEtaAMixV3Pt[i][d][0][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]*V3_T1*fMPt[imix][d][vertexBin][ievent][iTrack2]); + fHistDeltaEtaAMixV4Pt[i][d][0][ievent]->Fill(tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]*V4_T1*fMPt[imix][d][vertexBin][ievent][iTrack2]); + } + + fHistDeltaPhiEtaMix[i][d][ievent]->Fill(tdPhi,tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]); + fHistDeltaPhiEtaMixV2[i][d][ievent]->Fill(tdPhi,tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]*V2_T1); + fHistDeltaPhiEtaMixV3[i][d][ievent]->Fill(tdPhi,tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]*V3_T1); + fHistDeltaPhiEtaMixV4[i][d][ievent]->Fill(tdPhi,tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMEff[imix][d][vertexBin][ievent][iTrack2]*V4_T1); + fHistDeltaPhiEtaMixPt[i][d][ievent]->Fill(tdPhi,tdEta,fMPt[imix][d][vertexBin][ievent][iTrack2],fMPt[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix][d][vertexBin][ievent][iTrack2]); + + if(iTrack==leadPart){ + if(NearXE){ + tXE=fMPt[imix][d][vertexBin][ievent][iTrack2]*cos(tdPhi)/ftPt[iTrack]; + fHistXENMix[i][d][ievent]->Fill(tXE,fMEff[imix][d][vertexBin][ievent][iTrack2]); } - }//associated pt bin - }//iTrack3 - - }//iTrack2 - }//imix - }//fMixEnd - }//Centrality bins (c) - }//pt trig cuts - }//i Pt Trig - }//itrack + else{ + tXE=fMPt[imix][d][vertexBin][ievent][iTrack2]*cos(tdPhi+fPi)/ftPt[iTrack]; + fHistXEAMix[i][multArray[c]][ievent]->Fill(tXE,fMEff[imix][d][vertexBin][ievent][iTrack2]); + } + } + + //3-particle correlation soft-soft term (both associated from the same event) + for(int iTrack3=0;iTrack3fPi)tdPhi2-=2*fPi; + if(fabs(tdPhi2)fdPhiMax)tdPhi2-=2*fPi; + + if((ftCharge[iTrack]<0&&fMCharge[imix][d][vertexBin][ievent][iTrack2]<0&&fMCharge[imix][d][vertexBin][ievent][iTrack3]<0)||(ftCharge[iTrack]>0&&fMCharge[imix][d][vertexBin][ievent][iTrack2]>0&&fMCharge[imix][d][vertexBin][ievent][iTrack3]>0))sign=1; + else if((fMCharge[imix][d][vertexBin][ievent][iTrack3]<0&&fMCharge[imix][d][vertexBin][ievent][iTrack2]<0)||(fMCharge[imix][d][vertexBin][ievent][iTrack3]>0&&fMCharge[imix][d][vertexBin][ievent][iTrack2]>0))sign=2; + else sign=3; + for(int e=0;eFill(tdPhi,tdPhi2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix][d][vertexBin][ievent][iTrack3]); + fHistDeltaPhiPhiSS[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdPhi,tdPhi2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix][d][vertexBin][ievent][iTrack3]); + + if(nearEta2){ + fHistDeltaEtaEtaSS[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdEta,tdEta2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix][d][vertexBin][ievent][iTrack3]); + fHistDeltaEtaEtaSS[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdEta,tdEta2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix][d][vertexBin][ievent][iTrack3]); + }//near-side + } + } + }//associated pt bin + }//iTrack3 + + //3-particle mixed event (associated from different events) + int imix2=imix+1; + if(imix2>=fMixEnd[d][vertexBin][ievent])imix2=0; + if(imix2==imix)continue; + for(int iTrack3=0;iTrack3fPi)tdPhi2-=2*fPi; + if(fabs(tdPhi2)fdPhiMax)tdPhi2-=2*fPi; + V2_T2=2*ftV2[iTrack]*fMV2[imix2][d][vertexBin][ievent][iTrack3]*cos(2*tdPhi2); + V3_T2=2*ftV3[iTrack]*fMV3[imix2][d][vertexBin][ievent][iTrack3]*cos(3*tdPhi2); + V4_T2=2*ftV4[iTrack]*fMV4[imix2][d][vertexBin][ievent][iTrack3]*cos(4*tdPhi2); + V42_T12=2*ftV4[iTrack]*fMV2[imix2][d][vertexBin][ievent][iTrack3]*fMV2[imix][d][vertexBin][ievent][iTrack2]*cos(2*tdPhi+2*tdPhi2); + V42_1T2=2*fMV4[imix][d][vertexBin][ievent][iTrack2]*ftV2[iTrack]*fMV2[imix2][d][vertexBin][ievent][iTrack3]*cos(4*tdPhi-2*tdPhi2); + V42_2T1=2*fMV4[imix2][d][vertexBin][ievent][iTrack3]*ftV2[iTrack]*fMV2[imix][d][vertexBin][ievent][iTrack2]*cos(4*tdPhi2-2*tdPhi); + V2_A=2*fMV2[imix2][d][vertexBin][ievent][iTrack3]*fMV2[imix][d][vertexBin][ievent][iTrack2]*cos(2*(tdPhi-tdPhi2)); + V3_A=2*fMV3[imix2][d][vertexBin][ievent][iTrack3]*fMV3[imix][d][vertexBin][ievent][iTrack2]*cos(3*(tdPhi-tdPhi2)); + V4_A=2*fMV4[imix2][d][vertexBin][ievent][iTrack3]*fMV4[imix][d][vertexBin][ievent][iTrack2]*cos(4*(tdPhi-tdPhi2)); + + V2=V2_T1+V2_T2; + V3=V3_T1+V3_T2; + V4=V4_T1+V4_T2; + V2V2V4=V42_T12+V42_1T2+V42_2T1; + + if((ftCharge[iTrack]<0&&fMCharge[imix][d][vertexBin][ievent][iTrack2]<0&&fMCharge[imix2][d][vertexBin][ievent][iTrack3]<0)||(ftCharge[iTrack]>0&&fMCharge[imix][d][vertexBin][ievent][iTrack2]>0&&fMCharge[imix2][d][vertexBin][ievent][iTrack3]>0))sign=1; + else if((fMCharge[imix2][d][vertexBin][ievent][iTrack3]<0&&fMCharge[imix][d][vertexBin][ievent][iTrack2]<0)||(fMCharge[imix2][d][vertexBin][ievent][iTrack3]>0&&fMCharge[imix][d][vertexBin][ievent][iTrack2]>0))sign=2; + else sign=3; + for(int e=0;eFill(tdPhi,tdPhi2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]); + fHistDeltaPhiPhiMix[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdPhi,tdPhi2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]); + fHistDeltaPhiPhiMix[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdPhi2,tdPhi,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]);//free factor of 2 in statistics + fHistDeltaPhiPhiMix[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdPhi2,tdPhi,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]); + //v2 + fHistDeltaPhiPhiMixV2[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdPhi,tdPhi2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V2); + fHistDeltaPhiPhiMixV2[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdPhi,tdPhi2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V2); + fHistDeltaPhiPhiMixV2[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdPhi2,tdPhi,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V2);//free factor of 2 in statistics + fHistDeltaPhiPhiMixV2[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdPhi2,tdPhi,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V2); + fHistDeltaPhiPhiSSV2[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdPhi,tdPhi2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V2_A); + fHistDeltaPhiPhiSSV2[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdPhi2,tdPhi,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V2_A); + //v3 + fHistDeltaPhiPhiMixV3[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdPhi,tdPhi2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V3); + fHistDeltaPhiPhiMixV3[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdPhi,tdPhi2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V3); + fHistDeltaPhiPhiMixV3[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdPhi2,tdPhi,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V3);//free factor of 2 in statistics + fHistDeltaPhiPhiMixV3[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdPhi2,tdPhi,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V3); + fHistDeltaPhiPhiSSV3[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdPhi,tdPhi2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V3_A); + fHistDeltaPhiPhiSSV3[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdPhi2,tdPhi,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V3_A); + //v4 + fHistDeltaPhiPhiMixV4[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdPhi,tdPhi2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V4); + fHistDeltaPhiPhiMixV4[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdPhi,tdPhi2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V4); + fHistDeltaPhiPhiMixV4[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdPhi2,tdPhi,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V4);//free factor of 2 in statistics + fHistDeltaPhiPhiMixV4[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdPhi2,tdPhi,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V4); + fHistDeltaPhiPhiSSV4[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdPhi,tdPhi2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V4_A); + fHistDeltaPhiPhiSSV4[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdPhi2,tdPhi,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V4_A); + //v2v2v4 + fHistDeltaPhiPhiMixV2V2V4[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdPhi,tdPhi2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V2V2V4); + fHistDeltaPhiPhiMixV2V2V4[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdPhi,tdPhi2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V2V2V4); + fHistDeltaPhiPhiMixV2V2V4[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdPhi2,tdPhi,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V2V2V4);//free factor of 2 in statistics + fHistDeltaPhiPhiMixV2V2V4[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdPhi2,tdPhi,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V2V2V4); + + if(nearEta2){ + fHistDeltaEtaEtaMix[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdEta,tdEta2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]); + fHistDeltaEtaEtaMix[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdEta,tdEta2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]); + fHistDeltaEtaEtaMix[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdEta2,tdEta,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]); + fHistDeltaEtaEtaMix[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdEta2,tdEta,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]); + //v2 + fHistDeltaEtaEtaMixV2[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdEta,tdEta2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V2); + fHistDeltaEtaEtaMixV2[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdEta,tdEta2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V2); + fHistDeltaEtaEtaMixV2[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdEta2,tdEta,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V2); + fHistDeltaEtaEtaMixV2[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdEta2,tdEta,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V2); + //v3 + fHistDeltaEtaEtaMixV3[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdEta,tdEta2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V3); + fHistDeltaEtaEtaMixV3[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdEta,tdEta2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V3); + fHistDeltaEtaEtaMixV3[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdEta2,tdEta,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V3); + fHistDeltaEtaEtaMixV3[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdEta2,tdEta,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V3); + //v4 + fHistDeltaEtaEtaMixV4[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdEta,tdEta2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V4); + fHistDeltaEtaEtaMixV4[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdEta,tdEta2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V4); + fHistDeltaEtaEtaMixV4[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdEta2,tdEta,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V4); + fHistDeltaEtaEtaMixV4[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdEta2,tdEta,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V4); + //v2v2v4 + fHistDeltaEtaEtaMixV2V2V4[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdEta,tdEta2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V2V2V4); + fHistDeltaEtaEtaMixV2V2V4[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdEta,tdEta2,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V2V2V4); + fHistDeltaEtaEtaMixV2V2V4[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][0][ievent]->Fill(tdEta2,tdEta,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V2V2V4); + fHistDeltaEtaEtaMixV2V2V4[i][fMPtAssoc3[imix][d][vertexBin][ievent][e][iTrack2]][d][sign][ievent]->Fill(tdEta2,tdEta,fMEff[imix][d][vertexBin][ievent][iTrack2]*fMEff[imix2][d][vertexBin][ievent][iTrack3]*V2V2V4); + + }//near-side + } + } + }//associated pt bin + }//iTrack3 + }//iTrack2 + }//imix + }//fMixEnd + }//Centrality bins (c) + }//pt trig cuts + }//i Pt Trig + }//itrack - //now store this event for mixing (using these dynamic arrays instead of the other fix to save memory) - if(fDEBUG)Printf("Store Event For Mixing"); - for(int c=0;cSetCuts(MinimumClustersTPC,MinClusterRatio,MaxTPCchi2,MinimumClustersITS, EtaCut,TriggerEtaCut,NearPhiCut,XECut,MaxDCA,MaxDCAXY,MaxDCAZ, DCAMethod, TPCRefit,ITSRefit,SPDCut,MinimumPt,MaximumPt,ZVertexCut,NumberOfTriggerIDs,TriggerIDArray); + task->SetOptions(RunOnAOD,EfficiencyCorrection,DEBUG,MakeMCHistos); + task->SetBins(nBinPhi,nBinEta,nBinsPhiEtaPhi,nBinsPhiEtaEta,nBinsPhiPhi,nBinsEtaEta,PhiPlotMin,PhiPlotMax,NTriggerPtBins,NEventsToMix,NCentralityBins,PercentageCentralityBins,NAssociatedPtBins,N3ParticleAssociatedPtBins,NZVertexBinsForMixing,NXEBins,TriggerPtBins,AssociatedPtBins,AssociatedPtBins31,AssociatedPtBins32,CentralityBins1,CentralityBins2,XEBins); + task->SetEfficiencies(EffFitPtCut,EfficiencyFitLow,EfficiencyFitHigh,NParamFitLow,NParamFitHigh,FitLowParam,FitHighParam); + task->SetFlow(V2FitPtCut,V3FitPtCut,V4FitPtCut,V2FitLow,V2FitHigh,V3FitLow,V3FitHigh,V4FitLow,V4FitHigh,NParamV2FitLow,NParamV2FitHigh,NParamV3FitLow,NParamV3FitHigh,NParamV4FitLow,NParamV4FitHigh,FitLowParamV2,FitHighParamV2,FitLowParamV3,FitHighParamV3,FitLowParamV4,FitHighParamV4); + +// physics selection +Int_t isMC=0;//1 for MC 0 for DATA +//gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); +//AliPhysicsSelectionTask *PhysicsTask=AddTaskPhysicsSelection(isMC, 0); //isMC is true when processing monte carlo, the second 0 disables the cluster vs tracklets + gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); + //AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection(isMC,0); + task->SelectCollisionCandidates(AliVEvent::kMB); + //AliCentralitySelectionTask *centSelTask = AliCentralitySelectionTask("CentralitySelection"); + + mgr->AddTask(task); + + + //================================================ + // data containers + //================================================ + // find input container + //below the trunk version + // AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer(); + //this is the old way!!! + AliAnalysisDataContainer *cinput = (AliAnalysisDataContainer*)mgr->GetContainers()->FindObject("cAUTO_INPUT"); + + // define output containers, please use 'username'_'somename' + AliAnalysisDataContainer *coutput1 = + mgr->CreateContainer("julery_DiHadron", TList::Class(), + AliAnalysisManager::kOutputContainer,"julery_DiHadron.root"); + + // connect containers + mgr->ConnectInput (task, 0, cinput ); + mgr->ConnectOutput (task, 0, coutput1); + + return task; + +} diff --git a/PWGCF/Correlations/macros/AddTaskDiHadron.C b/PWGCF/Correlations/macros/AddTaskDiHadron.C deleted file mode 100644 index 191fd67cf83..00000000000 --- a/PWGCF/Correlations/macros/AddTaskDiHadron.C +++ /dev/null @@ -1,136 +0,0 @@ -//#include "exception.h" -//For running at CERN -AliAnalysisTask *AddTaskDiHadron(){ - //get the current analysis manager - AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); - if (!mgr) { - Error("AddTask_DiHadron", "No analysis manager found."); - return 0; - } - - - //========= Set initial parameters===== - - //Track Quality Cuts - Int_t MinimumClustersTPC=70; - Float_t MinClusterRatio=0.1;//1/2 would remove split tracks if not for sharing of clusters - Float_t MaxTPCchi2=4; - Int_t MinimumClustersITS=0; - Float_t EtaCut=0.8;//Tracks in +/- Eta are used - Float_t TriggerEtaCut=0.5;//Smaller trigger for flat acceptance on near-side - Float_t NearPhiCut=1.5;//Cut used to seperate near and away side for delta eta plots - Float_t XECut=NearPhiCut;//For XE distribution near and away seperation - Float_t MaxDCA=3;//Total DCA Cut - Float_t MaxDCAXY=2.4; - Float_t MaxDCAZ=3.2; - Int_t DCAMethod=2;//0 MaxDCA used, 1 MaxDCAXY and MaxDCAZ used 2 pT dependent DCA cut - Int_t TPCRefit=1; - Int_t ITSRefit=1;//1 for all particles, 2 for particles above 5 GeV/c - Int_t SPDCut=1;//check for a point in 1 of first 2 layers of the its - Float_t MinimumPt=0.25;//Minimum Pt considered by the code - Float_t MaximumPt=50; - Float_t ZVertexCut=10;//in cm - - Int_t EfficiencyCorrection=1;//do efficiency corrections in this code - Int_t MakeMCHistos=1;//if 0 MC histograms are not made (will be empty if 1 and ran on real data) - Int_t DEBUG=0;//for debugging - - - - //Binning - Int_t nBinPhi=60;//Number of bins for #Delta#phi histograms - Int_t nBinEta=54;//Number of bins for #Delta#eta histograms - Int_t nBinsPhiEtaPhi=20;//Number of bins for #Delta#phi-#Delta#eta in #Delta#phi - Int_t nBinsPhiEtaEta=18;//Number of bins for #Delta#phi-#Delta#eta in #Delta#phi - Int_t nBinsPhiPhi=30;//Number of bins for #Delta#phi-#Delta#phi - Int_t nBinsEtaEta=27;//Number of bins for #Delta#eta-#Delta#eta - const Float_t fPi=3.1415926535898; - Float_t PhiPlotMin=-fPi/3;//Min bin edge in #Delta#phi - Float_t PhiPlotMax=2*fPi+PhiPlotMin;//Max bin edge - - //Size of some arrays change array contents below - const Int_t NTriggerPtBins=12;//max=20 - const Int_t NEventsToMix=100;//max=100 - const Int_t NCentralityBins=4;//max=10 - const Int_t NAssociatedPtBins=25;//max=50 - const Int_t N3ParticleAssociatedPtBins=10;//max=50 - const Int_t NZVertexBinsForMixing=7;//max=20 - const Int_t NXEBins=11;//max=20 - const Int_t NumberOfTriggerIDs=1; - Float_t EffFitPtCut=3; - - TF1 *EfficiencyFitLow=new TF1("EfficiencyFitLow","[0]/[1]*exp(-0.5*pow(x/[1],2))+[2]+[3]*x",MinimumPt,EffFitPtCut); - TF1 *EfficiencyFitHigh=new TF1("EfficiencyFitHigh","[0]",EffFitPtCut,MaximumPt); - const Int_t NParamFitLow=4; - const Int_t NParamFitHigh=1; - - //Not high enough occupancy to worry about the centrality in pp - //For overlapping centrality bins efficiencies from first bin are used - //7Pythia_LHC10b5 - Float_t FitLowParam[NCentralityBins*NParamFitLow]={ - -0.030749, 0.254311, 0.858824, -0.0323708, - -0.0304332, 0.252195, 0.851405, -0.03164, - -0.0295618, 0.248594, 0.869159, -0.0354148, - -0.0300529, 0.236693, 0.875875, -0.0370379}; - - Float_t FitHighParam[NCentralityBins*NParamFitHigh]={ - 0.75813, - 0.750521, - 0.751902, - 0.68658}; - - /* - //LHC10c6_900Pythia - Float_t FitLowParam[NCentralityBins*NParamFitLow]={ - -0.027393, 0.236723, 0.814427, -0.023897, - -0.0271116, 0.232689, 0.809889, -0.0246341, - -0.0284658, 0.245163, 0.856043, -0.0318309, - -0.117114, 0.0355117, 0.828829, -0.0207492} - - Float_t FightHighParam[NCentralityBins*NParamFitHigh]={ - 0.729888, - 0.719402, - 0.708409, - 0.829268} - */ - - - Float_t TriggerPtBins[(NTriggerPtBins+1)]={2,2.5,3,4,6,8,10,15,20,30,40,50}; - Float_t AssociatedPtBins[(NAssociatedPtBins+1)]={0.25,0.5,0.75,1,1.5,2,2.5,3,3.5,4,4.5,5,6,7,8,9,10,12,15,20,25,30,40,50,70,100}; - Float_t AssociatedPtBins31[N3ParticleAssociatedPtBins]={0.5,1.0,1.5,2.0,3,4,1}; - Float_t AssociatedPtBins32[N3ParticleAssociatedPtBins]={1.0,1.5,2.0,3.0,4,5,2}; - Int_t CentralityBins1[NCentralityBins]={0, 0, 20, 40}; - Int_t CentralityBins2[NCentralityBins]={500,20,40,500}; - Float_t XEBins[(NXEBins+1)]={0,0.05,0.1,0.15,0.2,0.3,0.4,0.5,0.6,0.7,0.8,1}; - char *TriggerIDArray[NumberOfTriggerIDs]={"CINT1B"}; - - //================================== - //Add the task - //=================================== - AliAnalysisTaskDiHadron *task = new AliAnalysisTaskDiHadron("DiHadron"); - task->SetCuts(MinimumClustersTPC,MinClusterRatio,MaxTPCchi2,MinimumClustersITS, EtaCut,TriggerEtaCut,NearPhiCut,XECut,MaxDCA,MaxDCAXY,MaxDCAZ, DCAMethod, TPCRefit,ITSRefit,SPDCut,MinimumPt,MaximumPt,ZVertexCut,NumberOfTriggerIDs,TriggerIDArray); - task->SetOptions(EfficiencyCorrection,DEBUG,MakeMCHistos); - task->SetBins(nBinPhi,nBinEta,nBinsPhiEtaPhi,nBinsPhiEtaEta,nBinsPhiPhi,nBinsEtaEta,PhiPlotMin,PhiPlotMax,NTriggerPtBins,NEventsToMix,NCentralityBins,NAssociatedPtBins,N3ParticleAssociatedPtBins,NZVertexBinsForMixing,NXEBins,TriggerPtBins,AssociatedPtBins,AssociatedPtBins31,AssociatedPtBins32,CentralityBins1,CentralityBins2,XEBins); - task->SetEfficiencies(EffFitPtCut,EfficiencyFitLow,EfficiencyFitHigh,NParamFitLow,NParamFitHigh,FitLowParam,FitHighParam); - - mgr->AddTask(task); - - - //================================================ - // data containers - //================================================ - AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer(); - mgr->ConnectInput(task, 0, cinput); - - - // define output containers, please use 'username'_'somename' - AliAnalysisDataContainer *coutput1 = - mgr->CreateContainer("DiHadron", TList::Class(), - AliAnalysisManager::kOutputContainer,"DiHadron.root"); - - // connect containers - mgr->ConnectInput (task, 0, cinput ); - mgr->ConnectOutput (task, 0, coutput1); - - return task; -} -- 2.43.0