Double_t vertexBins[] = {-10.,-9.,-8.,-7.,-6.,-5.,-4.,-3.,-2.,-1.,0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.};
const Double_t* zvtxBins = vertexBins;
// pt bins of associated particles for the analysis
- Int_t nPtBins = 4;
- const Double_t PtBins[5] = {3.0,5.0,7.0,9.0,11.0};
+ //Int_t nPtBins = 4;
+ //const Double_t PtBins[5] = {3.0,5.0,7.0,9.0,11.0};
+ Int_t nPtBins = 1;
+ const Double_t PtBins[2] = {3.0,15.0};
// pt bins of trigger particles for the analysis
- Int_t nPtBinsV0 = 1;
- const Double_t PtBinsV0[2] = {8.0,15.0};
+ Int_t nPtBinsV0 = 9;
+ //const Double_t PtBinsV0[2] = {6.0,15.0};
+ const Double_t PtBinsV0[10] = {6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0};
// V0 candidate: 1 - K0sig, 2 - Lamsig, 3 - Alamsig, 4 - K0bg, 5 - Lambg, 6 - Alambg
Int_t nTrigC = 6;
const Double_t TrigC[7] = {0.5,1.5,2.5,3.5,4.5,5.5,6.5};
Double_t mlaMax = 1.17;
Double_t malMin = 1.07;
Double_t malMax = 1.17;
+
+ Int_t nCutSets = 3;
+ const Double_t CutSet[4] = {0.,1.,2.,3.};
- const Int_t spBins[3] = {nBins, nPtBinsV0, nCentralityBins};
- const Double_t spMinK0[3] = {mk0Min, PtBinsV0[0], centralityBins[0]};
- const Double_t spMaxK0[3] = {mk0Max, PtBinsV0[1], centralityBins[9]};
- const Double_t spMinLa[3] = {mlaMin, PtBinsV0[0], centralityBins[0]};
- const Double_t spMaxLa[3] = {mlaMax, PtBinsV0[1], centralityBins[9]};
- const Double_t spMinAl[3] = {malMin, PtBinsV0[0], centralityBins[0]};
- const Double_t spMaxAl[3] = {malMax, PtBinsV0[1], centralityBins[9]};
+ const Int_t spBins[4] = {nBins, nPtBinsV0, nCentralityBins, nCutSets};
+ const Double_t spMinK0[4] = {mk0Min, PtBinsV0[0], centralityBins[0], CutSet[0]};
+ const Double_t spMaxK0[4] = {mk0Max, PtBinsV0[9], centralityBins[9], CutSet[3]};
+ const Double_t spMinLa[4] = {mlaMin, PtBinsV0[0], centralityBins[0], CutSet[0]};
+ const Double_t spMaxLa[4] = {mlaMax, PtBinsV0[9], centralityBins[9], CutSet[3]};
+ const Double_t spMinAl[4] = {malMin, PtBinsV0[0], centralityBins[0], CutSet[0]};
+ const Double_t spMaxAl[4] = {malMax, PtBinsV0[9], centralityBins[9], CutSet[3]};
// Create mass histograms
- fHistMassK0 = new THnSparseF("fHistMassK0","V0 mass for K0 hypothesis", 3, spBins, spMinK0, spMaxK0);
- fHistMassLambda = new THnSparseF("fHistMassLambda","V0 mass for Lambda hypothesis", 3, spBins, spMinLa, spMaxLa);
- fHistMassAntiLambda = new THnSparseF("fHistMassAntiLambda","V0 mass for AntiLambda hypothesis", 3, spBins, spMinAl, spMaxAl);
+ fHistMassK0 = new THnSparseF("fHistMassK0","V0 mass for K0 hypothesis", 4, spBins, spMinK0, spMaxK0);
+ fHistMassLambda = new THnSparseF("fHistMassLambda","V0 mass for Lambda hypothesis", 4, spBins, spMinLa, spMaxLa);
+ fHistMassAntiLambda = new THnSparseF("fHistMassAntiLambda","V0 mass for AntiLambda hypothesis", 4, spBins, spMinAl, spMaxAl);
// defining bins for dPhi distributions
const Int_t nbPhiBins = 144;
const Int_t corBins[7] = {nbPhiBins, nbEtaBins, nPtBinsV0, nPtBins, nCentralityBins, nZvtxBins, nTrigC};
const Double_t corMin[7] = {PhiBins[0], EtaBins[0], PtBinsV0[0], PtBins[0], centralityBins[0], zvtxBins[0], TrigC[0]};
- const Double_t corMax[7] = {PhiBins[144], EtaBins[72], PtBinsV0[1], PtBins[4], centralityBins[9], zvtxBins[20], TrigC[6]};
+ const Double_t corMax[7] = {PhiBins[144], EtaBins[72], PtBinsV0[9], PtBins[1], centralityBins[9], zvtxBins[20], TrigC[6]};
// Create correlation histograms
fHistdPhidEtaSib = new THnSparseF("fHistdPhidEtaSib","dPhi vs. dEta siblings", 7, corBins, corMin, corMax);
fHistdPhidEtaMix = new THnSparseF("fHistdPhidEtaMix","dPhi vs. dEta mixed", 7, corBins, corMin, corMax);
const Int_t corTrigBins[4] = {nPtBinsV0, nCentralityBins, nZvtxBins, nTrigC};
const Double_t corTrigMin[4] = {PtBinsV0[0], centBins[0], vertexBins[0], TrigC[0]};
- const Double_t corTrigMax[4] = {PtBinsV0[1], centBins[9], vertexBins[20], TrigC[6]};
+ const Double_t corTrigMax[4] = {PtBinsV0[9], centBins[9], vertexBins[20], TrigC[6]};
// Create histograms for trigger particles
fHistTrigSib = new THnSparseF("fHistTrigSib","pt trigger sib", 4, corTrigBins, corTrigMin, corTrigMax);
fHistTrigMix = new THnSparseF("fHistTrigMix","pt trigger mix", 4, corTrigBins, corTrigMin, corTrigMax);
- // Histogram for debugging
- fHistTemp = new TH1D("fHistTemp", "Temporary", 100, 0., 100.);
+ // Histograms for debugging
+ fHistTemp = new TH1D("fHistTemp", "Temporary", 500, 0., 10.);
fOutput->Add(fHistCentVtx);
// pt intervals for trigger particles
const Double_t kPi = TMath::Pi();
- Double_t PtTrigMin = 8.0;
+ Double_t PtTrigMin = 6.0;
Double_t PtTrigMax = 15.0;
// pt interval for associated particles
Double_t PtAssocMin = 3.0;
for (Int_t i = 0; i < nTracks; i++)
{
AliAODTrack* tr = aod->GetTrack(i);
- if (!(IsMyGoodPrimaryTrack(tr))) continue;
if ((tr->Pt())<PtAssocMin) continue;
+ if (!(IsMyGoodPrimaryTrack(tr))) continue;
selectedTracks->Add(tr);
}
//---------------------------------
myTrackNeg = myTrackPosTest;
}
- if (!IsMyGoodV0(aod,aodV0,myTrackPos,myTrackNeg)) continue;
+// if (!IsMyGoodV0CutSet0(aod,aodV0,myTrackPos,myTrackNeg)) continue;
// effective mass calculations for each hypothesis
Double_t lInvMassK0 = aodV0->MassK0Short();
// special cut related to AP diagram for K0s
Bool_t k0APcut = (aodV0->Pt()>(TMath::Abs(0.2*aodV0->AlphaV0())));
cutK0sc = cutK0sc && k0APcut;
- // fill the mass histograms
- Double_t spK0[3] = {lInvMassK0, aodV0->Pt(), lCent};
- Double_t spLa[3] = {lInvMassLambda, aodV0->Pt(), lCent};
- Double_t spAl[3] = {lInvMassAntiLambda, aodV0->Pt(), lCent};
- if (cutK0sc) fHistMassK0->Fill(spK0);
- if (cutLambdasc) fHistMassLambda->Fill(spLa);
- if (cutAntiLambdasc) fHistMassAntiLambda->Fill(spAl);
+ // fill the mass histograms
+ if (IsMyGoodV0CutSet0(aod,aodV0,myTrackPos,myTrackNeg))
+ {
+ Double_t cs0K0[4] = {lInvMassK0, aodV0->Pt(), lCent,0};
+ Double_t cs0La[4] = {lInvMassLambda, aodV0->Pt(), lCent,0};
+ Double_t cs0Al[4] = {lInvMassAntiLambda, aodV0->Pt(), lCent,0};
+ if (cutK0sc) fHistMassK0->Fill(cs0K0);
+ if (cutLambdasc) fHistMassLambda->Fill(cs0La);
+ if (cutAntiLambdasc) fHistMassAntiLambda->Fill(cs0Al);
+ }
+ if (IsMyGoodV0CutSet1(aod,aodV0,myTrackPos,myTrackNeg))
+ {
+ Double_t cs1K0[4] = {lInvMassK0, aodV0->Pt(), lCent,1};
+ Double_t cs1La[4] = {lInvMassLambda, aodV0->Pt(), lCent,1};
+ Double_t cs1Al[4] = {lInvMassAntiLambda, aodV0->Pt(), lCent,1};
+ if (cutK0sc) fHistMassK0->Fill(cs1K0);
+ if (cutLambdasc) fHistMassLambda->Fill(cs1La);
+ if (cutAntiLambdasc) fHistMassAntiLambda->Fill(cs1Al);
+ }
+ if (IsMyGoodV0CutSet2(aod,aodV0,myTrackPos,myTrackNeg))
+ {
+ Double_t cs2K0[4] = {lInvMassK0, aodV0->Pt(), lCent,2};
+ Double_t cs2La[4] = {lInvMassLambda, aodV0->Pt(), lCent,2};
+ Double_t cs2Al[4] = {lInvMassAntiLambda, aodV0->Pt(), lCent,2};
+ if (cutK0sc) fHistMassK0->Fill(cs2K0);
+ if (cutLambdasc) fHistMassLambda->Fill(cs2La);
+ if (cutAntiLambdasc) fHistMassAntiLambda->Fill(cs2Al);
+ }
+
+ if (!IsMyGoodV0CutSet2(aod,aodV0,myTrackPos,myTrackNeg)) continue;
+ //Double_t spK0[3] = {lInvMassK0, aodV0->Pt(), lCent,0};
+ //Double_t spLa[3] = {lInvMassLambda, aodV0->Pt(), lCent};
+ //Double_t spAl[3] = {lInvMassAntiLambda, aodV0->Pt(), lCent};
+ //if (cutK0sc) fHistMassK0->Fill(spK0);
+ //if (cutLambdasc) fHistMassLambda->Fill(spLa);
+ //if (cutAntiLambdasc) fHistMassAntiLambda->Fill(spAl);
// select final V0s for correlation, selected background to study its contribution to correlation function
// the values for signal might change in the future ...
- Bool_t K0Signal = (lInvMassK0>0.484)&&(lInvMassK0<0.512);
- Bool_t K0Bckg = ((lInvMassK0>0.450)&&(lInvMassK0<0.462)) || ((lInvMassK0>0.532)&&(lInvMassK0<0.544));
+ Bool_t K0Signal = (lInvMassK0>0.48)&&(lInvMassK0<0.52);
+ Bool_t K0Bckg = ((lInvMassK0>0.40)&&(lInvMassK0<0.44)) || ((lInvMassK0>0.56)&&(lInvMassK0<0.60));
- Bool_t LamSignal = (lInvMassLambda>1.110)&&(lInvMassLambda<1.122);
- Bool_t LamBckg = ((lInvMassLambda>1.097)&&(lInvMassLambda<1.104)) || ((lInvMassLambda>1.127)&&(lInvMassLambda<1.134));
+ Bool_t LamSignal = (lInvMassLambda>1.108)&&(lInvMassLambda<1.125);
+ Bool_t LamBckg = ((lInvMassLambda>1.090)&&(lInvMassLambda<1.100)) || ((lInvMassLambda>1.135)&&(lInvMassLambda<1.145));
- Bool_t ALamSignal = (lInvMassAntiLambda>1.110)&&(lInvMassAntiLambda<1.122);
- Bool_t ALamBckg = ((lInvMassAntiLambda>1.097)&&(lInvMassAntiLambda<1.104)) || ((lInvMassAntiLambda>1.127)&&(lInvMassAntiLambda<1.134));
+ Bool_t ALamSignal = (lInvMassAntiLambda>1.108)&&(lInvMassAntiLambda<1.125);
+ Bool_t ALamBckg = ((lInvMassAntiLambda>1.090)&&(lInvMassAntiLambda<1.100)) || ((lInvMassAntiLambda>1.135)&&(lInvMassAntiLambda<1.145));
// Fill selected V0 particle array
if ((cutK0sc)&&(K0Signal)) selectedV0s->Add(new AliV0ChBasicParticle(aodV0->Eta(), aodV0->Phi(), aodV0->Pt(), 1));
//===================================
for (Int_t j = 0; j < nSelectedTracks; j++)
{
- //const Double_t kPi = TMath::Pi();
AliAODTrack* atr = (AliAODTrack*) selectedTracks->At(j);
- //if (!(IsMyGoodPrimaryTrack(atr))) continue;
if ((atr->Pt())>=(aodV0->Pt())) continue;
Double_t dEta = atr->Eta() - aodV0->Eta();
Double_t dPhi = atr->Phi() - aodV0->Phi();
return kTRUE;
}
//______________________________________________
-Bool_t AliAnalysisTaskV0ChCorrelations::IsMyGoodV0(const AliAODEvent* aod, const AliAODv0* aodV0, const AliAODTrack* myTrackPos, const AliAODTrack* myTrackNeg)
+Bool_t AliAnalysisTaskV0ChCorrelations::IsMyGoodV0CutSet0(const AliAODEvent* aod, const AliAODv0* aodV0, const AliAODTrack* myTrackPos, const AliAODTrack* myTrackNeg)
{
if (!aodV0) {
AliError(Form("ERROR: Could not retrieve aodV0"));
return kTRUE;
}
+Bool_t AliAnalysisTaskV0ChCorrelations::IsMyGoodV0CutSet1(const AliAODEvent* aod, const AliAODv0* aodV0, const AliAODTrack* myTrackPos, const AliAODTrack* myTrackNeg)
+{
+ if (!aodV0) {
+ AliError(Form("ERROR: Could not retrieve aodV0"));
+ return kFALSE;
+ }
+
+ // Rapidity cut
+ Double_t lCutRap = 0.75;
+ Double_t lRapK0s = aodV0->Y(310);
+ Double_t lRapLambda = aodV0->Y(3122);
+ Double_t lRapAntiLambda = aodV0->Y(-3122);
+
+ if (TMath::Abs(lRapK0s)>=lCutRap) return kFALSE;
+ if (TMath::Abs(lRapLambda)>=lCutRap) return kFALSE;
+ if (TMath::Abs(lRapAntiLambda)>=lCutRap) return kFALSE;
+
+ // Offline reconstructed V0 only
+ if (aodV0->GetOnFlyStatus()) return kFALSE;
+
+ // DCA of daughter track to Primary Vertex
+ Float_t xyn=aodV0->DcaNegToPrimVertex();
+ if (TMath::Abs(xyn)<0.5) return kFALSE;
+ Float_t xyp=aodV0->DcaPosToPrimVertex();
+ if (TMath::Abs(xyp)<0.5) return kFALSE;
+
+ // DCA of daughter tracks
+ Double_t dca=aodV0->DcaV0Daughters();
+ if (dca>0.5) return kFALSE;
+
+ // Cosinus of pointing angle
+ Double_t cpa=aodV0->CosPointingAngle(aod->GetPrimaryVertex());
+ if (cpa<0.998) return kFALSE;
+
+ // Fiducial volume cut
+ Double_t xyz[3]; aodV0->GetSecondaryVtx(xyz);
+ Double_t r2=xyz[0]*xyz[0] + xyz[1]*xyz[1];
+ if (r2<0.9*0.9) return kFALSE;
+ if (r2>100*100) return kFALSE;
+
+ // c*tau cut - in main V0 loop - depends on particle hypothesis
+
+ // Get daughters and check them
+ AliAODTrack *myTrackNegTest=dynamic_cast<AliAODTrack *>(aodV0->GetDaughter(1));
+ AliAODTrack *myTrackPosTest=dynamic_cast<AliAODTrack *>(aodV0->GetDaughter(0));
+
+ if (!myTrackPosTest || !myTrackNegTest) {
+ Printf("strange analysis::UserExec:: Error:Could not retreive one of the daughter track\n");
+ return kFALSE;
+ }
+
+ if( myTrackPosTest->Charge() ==1){
+ myTrackPos = myTrackPosTest;
+ myTrackNeg = myTrackNegTest;
+ }
+
+ if( myTrackPosTest->Charge() ==-1){
+ myTrackPos = myTrackNegTest;
+ myTrackNeg = myTrackPosTest;
+ }
+
+ // Track cuts for daugher tracks
+ if ( !(IsMyGoodDaughterTrack(myTrackPos)) || !(IsMyGoodDaughterTrack(myTrackNeg)) ) return kFALSE;
+
+ // Unlike signs of daughters
+ if (myTrackNegTest->Charge() == myTrackPosTest->Charge()) return kFALSE;
+
+ // Minimum pt of daughters
+ Double_t lMomPos[3] = {999,999,999};
+ Double_t lMomNeg[3] = {999,999,999};
+
+ lMomPos[0] = aodV0->MomPosX();
+ lMomPos[1] = aodV0->MomPosY();
+ lMomPos[2] = aodV0->MomPosZ();
+
+ lMomNeg[0] = aodV0->MomNegX();
+ lMomNeg[1] = aodV0->MomNegY();
+ lMomNeg[2] = aodV0->MomNegZ();
+
+ Double_t lPtPos = TMath::Sqrt(lMomPos[0]*lMomPos[0] + lMomPos[1]*lMomPos[1]);
+ Double_t lPtNeg = TMath::Sqrt(lMomNeg[0]*lMomNeg[0] + lMomNeg[1]*lMomNeg[1]);
+
+ Double_t cutMinPtDaughter = 0.160;
+ if (lPtPos<cutMinPtDaughter || lPtNeg<cutMinPtDaughter) return kFALSE;
+
+ // Daughter PID cut - in main V0 loop - depends on particle hypothesis
+
+ return kTRUE;
+}
+
+Bool_t AliAnalysisTaskV0ChCorrelations::IsMyGoodV0CutSet2(const AliAODEvent* aod, const AliAODv0* aodV0, const AliAODTrack* myTrackPos, const AliAODTrack* myTrackNeg)
+{
+ if (!aodV0) {
+ AliError(Form("ERROR: Could not retrieve aodV0"));
+ return kFALSE;
+ }
+
+ // Rapidity cut
+ Double_t lCutRap = 0.75;
+ Double_t lRapK0s = aodV0->Y(310);
+ Double_t lRapLambda = aodV0->Y(3122);
+ Double_t lRapAntiLambda = aodV0->Y(-3122);
+
+ if (TMath::Abs(lRapK0s)>=lCutRap) return kFALSE;
+ if (TMath::Abs(lRapLambda)>=lCutRap) return kFALSE;
+ if (TMath::Abs(lRapAntiLambda)>=lCutRap) return kFALSE;
+
+ // Offline reconstructed V0 only
+ if (aodV0->GetOnFlyStatus()) return kFALSE;
+
+ // DCA of daughter track to Primary Vertex
+ Float_t xyn=aodV0->DcaNegToPrimVertex();
+ if (TMath::Abs(xyn)<0.5) return kFALSE;
+ Float_t xyp=aodV0->DcaPosToPrimVertex();
+ if (TMath::Abs(xyp)<0.5) return kFALSE;
+
+ // DCA of daughter tracks
+ Double_t dca=aodV0->DcaV0Daughters();
+ if (dca>0.1) return kFALSE;
+
+ // Cosinus of pointing angle
+ Double_t cpa=aodV0->CosPointingAngle(aod->GetPrimaryVertex());
+ if (cpa<0.998) return kFALSE;
+
+ // Fiducial volume cut
+ Double_t xyz[3]; aodV0->GetSecondaryVtx(xyz);
+ Double_t r2=xyz[0]*xyz[0] + xyz[1]*xyz[1];
+ if (r2<0.9*0.9) return kFALSE;
+ if (r2>100*100) return kFALSE;
+
+ // c*tau cut - in main V0 loop - depends on particle hypothesis
+
+ // Get daughters and check them
+ AliAODTrack *myTrackNegTest=dynamic_cast<AliAODTrack *>(aodV0->GetDaughter(1));
+ AliAODTrack *myTrackPosTest=dynamic_cast<AliAODTrack *>(aodV0->GetDaughter(0));
+
+ if (!myTrackPosTest || !myTrackNegTest) {
+ Printf("strange analysis::UserExec:: Error:Could not retreive one of the daughter track\n");
+ return kFALSE;
+ }
+
+ if( myTrackPosTest->Charge() ==1){
+ myTrackPos = myTrackPosTest;
+ myTrackNeg = myTrackNegTest;
+ }
+
+ if( myTrackPosTest->Charge() ==-1){
+ myTrackPos = myTrackNegTest;
+ myTrackNeg = myTrackPosTest;
+ }
+
+ // Track cuts for daugher tracks
+ if ( !(IsMyGoodDaughterTrack(myTrackPos)) || !(IsMyGoodDaughterTrack(myTrackNeg)) ) return kFALSE;
+
+ // Unlike signs of daughters
+ if (myTrackNegTest->Charge() == myTrackPosTest->Charge()) return kFALSE;
+
+ // Minimum pt of daughters
+ Double_t lMomPos[3] = {999,999,999};
+ Double_t lMomNeg[3] = {999,999,999};
+
+ lMomPos[0] = aodV0->MomPosX();
+ lMomPos[1] = aodV0->MomPosY();
+ lMomPos[2] = aodV0->MomPosZ();
+
+ lMomNeg[0] = aodV0->MomNegX();
+ lMomNeg[1] = aodV0->MomNegY();
+ lMomNeg[2] = aodV0->MomNegZ();
+
+ Double_t lPtPos = TMath::Sqrt(lMomPos[0]*lMomPos[0] + lMomPos[1]*lMomPos[1]);
+ Double_t lPtNeg = TMath::Sqrt(lMomNeg[0]*lMomNeg[0] + lMomNeg[1]*lMomNeg[1]);
+
+ Double_t cutMinPtDaughter = 0.160;
+ if (lPtPos<cutMinPtDaughter || lPtNeg<cutMinPtDaughter) return kFALSE;
+
+ // Daughter PID cut - in main V0 loop - depends on particle hypothesis
+
+ return kTRUE;
+}
+