From 0f07243a91923dbe4cafcd5f58bc64a52015aedc Mon Sep 17 00:00:00 2001 From: df Date: Sun, 6 Mar 2022 00:09:16 -0800 Subject: [PATCH 01/14] dowang fix CorrFcn Fill mom --- .../AliFemtoUser/AliFemtoCorrFctnpdtHe3.cxx | 49 ++++++------------- 1 file changed, 16 insertions(+), 33 deletions(-) diff --git a/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnpdtHe3.cxx b/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnpdtHe3.cxx index 5b4614cea75..2c0d52c10d5 100644 --- a/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnpdtHe3.cxx +++ b/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnpdtHe3.cxx @@ -315,17 +315,17 @@ void AliFemtoCorrFctnpdtHe3::AddRealPair(AliFemtoPair* aPair) fNumerator->Fill(tKStar); if(fHighCF){ - float tMom1 = 0.; - float tMom2 = 0.; + float FillMom1 = 0.; + float FillMom2 = 0.; if(fUsePt){ - tMom1 = fPair->Track1()->Track()->Pt(); - tMom2 = fPair->Track2()->Track()->Pt(); + FillMom1 = fPair->Track1()->Track()->Pt(); + FillMom2 = fPair->Track2()->Track()->Pt(); } else{ - tMom1 = fPair->Track1()->Track()->P().Mag(); - tMom2 = fPair->Track2()->Track()->P().Mag(); + FillMom1 = fPair->Track1()->Track()->P().Mag(); + FillMom2 = fPair->Track2()->Track()->P().Mag(); } - fNumHigh3F->Fill(tMom1,tMom2,tKStar); + fNumHigh3F->Fill(FillMom1,FillMom2,tKStar); } if(fSideBand){ FillSideBandNum(fPair); @@ -365,17 +365,17 @@ void AliFemtoCorrFctnpdtHe3::AddMixedPair(AliFemtoPair* aPair) double tKStar = fabs(fPair->KStar()); fDenominator->Fill(tKStar); if(fHighCF){ - float tMom1 = 0.; - float tMom2 = 0.; + float FillMom1 = 0.; + float FillMom2 = 0.; if(fUsePt){ - tMom1 = fPair->Track1()->Track()->Pt(); - tMom2 = fPair->Track2()->Track()->Pt(); + FillMom1 = fPair->Track1()->Track()->Pt(); + FillMom2 = fPair->Track2()->Track()->Pt(); } else{ - tMom1 = fPair->Track1()->Track()->P().Mag(); - tMom2 = fPair->Track2()->Track()->P().Mag(); + FillMom1 = fPair->Track1()->Track()->P().Mag(); + FillMom2 = fPair->Track2()->Track()->P().Mag(); } - fDenHigh3F->Fill(tMom1,tMom2,tKStar); + fDenHigh3F->Fill(FillMom1,FillMom2,tKStar); } if(fSideBand) FillSideBandDum(fPair); @@ -534,17 +534,8 @@ void AliFemtoCorrFctnpdtHe3::FillSideBandNum(AliFemtoPair* aPair){ float c = 1.; float beta = aPair->Track2()->Track()->VTOF(); if(beta==0) return; - - float tMom = 0.; - if(fUsePt){ - tMom = aPair->Track2()->Track()->Pt(); - } - else{ - tMom = aPair->Track2()->Track()->P().Mag(); - - } - + float tMom = aPair->Track2()->Track()->P().Mag(); float massTOF = tMom*tMom/c/c*(1./(beta*beta)-1); float EvalMassSideBandUp = SideBandUp->Eval(tMom); @@ -582,15 +573,7 @@ void AliFemtoCorrFctnpdtHe3::FillSideBandDum(AliFemtoPair* aPair){ float beta = aPair->Track2()->Track()->VTOF(); if(beta==0.) return; - float tMom = 0.; - if(fUsePt){ - tMom = aPair->Track2()->Track()->Pt(); - } - else{ - tMom = aPair->Track2()->Track()->P().Mag(); - } - - + float tMom = aPair->Track2()->Track()->P().Mag(); float massTOF = tMom*tMom/c/c*(1./(beta*beta)-1); float EvalMassSideBandUp = SideBandUp->Eval(tMom); From cc6d2c3c2f2f08011987aa8845ac8c6973eca97c Mon Sep 17 00:00:00 2001 From: Jeremy Wilkinson Date: Tue, 8 Mar 2022 11:41:38 +0100 Subject: [PATCH 02/14] fix lumi uncertainty --- PWGHF/vertexingHF/AliHFSystErr.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGHF/vertexingHF/AliHFSystErr.cxx b/PWGHF/vertexingHF/AliHFSystErr.cxx index b256c99494b..4d2cd954c13 100644 --- a/PWGHF/vertexingHF/AliHFSystErr.cxx +++ b/PWGHF/vertexingHF/AliHFSystErr.cxx @@ -9465,7 +9465,7 @@ void AliHFSystErr::InitLctopK0S2017pp5TeVBDT() { // Normalization fNorm = new TH1F("fNorm","fNorm",nBins,limits); - for(Int_t i=1;i<=nBins;i++) fNorm->SetBinContent(i,0.037); // 3.7% error + for(Int_t i=1;i<=nBins;i++) fNorm->SetBinContent(i,0.021); // 2.1% error on sigmaV0AND // Tracking efficiency fTrackingEff = new TH1F("fTrackingEff","fTrackingEff",nBins,limits); From a8c04eadae66d0125704ed1c920ca4787ea3debc Mon Sep 17 00:00:00 2001 From: zumoravc Date: Tue, 8 Mar 2022 14:48:47 +0100 Subject: [PATCH 03/14] Fixed combi --- PWGCF/FLOW/GF/AliAnalysisTaskCorrForFlowFMD.cxx | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/PWGCF/FLOW/GF/AliAnalysisTaskCorrForFlowFMD.cxx b/PWGCF/FLOW/GF/AliAnalysisTaskCorrForFlowFMD.cxx index a627b1eea56..485c5abbda3 100644 --- a/PWGCF/FLOW/GF/AliAnalysisTaskCorrForFlowFMD.cxx +++ b/PWGCF/FLOW/GF/AliAnalysisTaskCorrForFlowFMD.cxx @@ -1324,14 +1324,16 @@ Bool_t AliAnalysisTaskCorrForFlowFMD::PrepareMCTracks(){ AliMCEvent* mcEvent = dynamic_cast(MCEvent()); if(!mcEvent) return kFALSE; - if(fDoPID){ - for(Int_t i(1); i < 4; i++){ - fTracksTrig[i] = new TObjArray; + if(fIsTPCgen){ + if(fDoPID){ + for(Int_t i(1); i < 4; i++){ + fTracksTrig[i] = new TObjArray; + } } - } - if(fDoV0){ - for(Int_t i(4); i < 6; i++){ - fTracksTrig[i] = new TObjArray; + if(fDoV0){ + for(Int_t i(4); i < 6; i++){ + fTracksTrig[i] = new TObjArray; + } } } From 8c072fe45612d5ec3230121af7a6c0a749e615f0 Mon Sep 17 00:00:00 2001 From: Meike Danisch Date: Tue, 8 Mar 2022 22:58:36 +0100 Subject: [PATCH 04/14] PWG-EM update PbPb 5TeV cocktail file fix --- .../parametrisations/PbPb_5020GeV.root | Bin 589800 -> 589800 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/PWG/Cocktail/parametrisations/PbPb_5020GeV.root b/PWG/Cocktail/parametrisations/PbPb_5020GeV.root index b164fc147e18217ffa39778f4fb0a5463b816077..982e7526f8b95b785c2423f966f1092ecb7981e2 100644 GIT binary patch delta 12227 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 gBs2?q*5`zDab)z Date: Wed, 9 Mar 2022 14:01:58 +0900 Subject: [PATCH 05/14] fixed histo for cahrged track pt --- PWGHF/hfe/AliAnalysisTaskCaloHFEpp.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGHF/hfe/AliAnalysisTaskCaloHFEpp.cxx b/PWGHF/hfe/AliAnalysisTaskCaloHFEpp.cxx index a0c7cac4899..afdda68450a 100644 --- a/PWGHF/hfe/AliAnalysisTaskCaloHFEpp.cxx +++ b/PWGHF/hfe/AliAnalysisTaskCaloHFEpp.cxx @@ -1270,7 +1270,7 @@ void AliAnalysisTaskCaloHFEpp::UserExec(Option_t *) fHistEta_track->Fill(track->Eta()); fHistPhi_track->Fill(track->Phi()); fTPCCrossedRow->Fill(track -> GetTPCCrossedRows()); - fHistCheff1->Fill(correctednAcc,TrkP); + fHistCheff1->Fill(correctednAcc,TrkPt); /////////////////////// From fa3d0e8a92eb0fdc70bffb52e470fde6e43f32b7 Mon Sep 17 00:00:00 2001 From: df Date: Wed, 9 Mar 2022 01:50:35 -0800 Subject: [PATCH 06/14] dowang modify other sigma cut func --- .../AliFemtoUser/AliFemtoTrackCutPdtHe3.cxx | 104 ++++++++++++++---- .../AliFemtoUser/AliFemtoTrackCutPdtHe3.h | 5 + 2 files changed, 86 insertions(+), 23 deletions(-) diff --git a/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoTrackCutPdtHe3.cxx b/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoTrackCutPdtHe3.cxx index e882026da5d..15f3a4b753e 100644 --- a/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoTrackCutPdtHe3.cxx +++ b/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoTrackCutPdtHe3.cxx @@ -275,49 +275,40 @@ bool AliFemtoTrackCutPdtHe3::Pass(const AliFemtoTrack* track){ int imost=0; //****N Sigma Method**** if (fPIDMethod==0) { + //\ for proton PID if (fMostProbable == 4) { // proton nsigma-PID required contour adjusting (in LHC10h) if (IsProtonNSigma(track->P().Mag(), track->NSigmaTPCP(), track->NSigmaTOFP()) ) { - imost = 4; + imost = 4; } - if(fOtherNsigmacut){ - if(IsPionNSigmaRejection(track->P().Mag(),track->NSigmaTPCPi(), track->NSigmaTOFPi()) - || IsKaonNSigmaRejection(track->P().Mag(),track->NSigmaTPCK(), track->NSigmaTOFK())){ - imost = 0; - } + //\ reject + if( fOtherNsigmacut && RejectFakeP(track,track->P().Mag()) ){ + imost = 0; } } + //\ for deuteron PID else if (fMostProbable == 13){ //cut on Nsigma deuteron - if (IsDeuteronNSigma(track->P().Mag(), track->MassTOF(), fNsigmaMass, track->NSigmaTPCD(), track->NSigmaTOFD())){ + if ( IsDeuteronNSigma(track->P().Mag(), track->MassTOF(), fNsigmaMass, track->NSigmaTPCD(), track->NSigmaTOFD())){ imost = 13; } - if(fOtherNsigmacut){ - if(IsElectronNSigmaRejection(track->P().Mag(),track->NSigmaTPCE()) - || IsPionNSigmaRejection(track->P().Mag(),track->NSigmaTPCPi(), track->NSigmaTOFPi()) - || IsKaonNSigmaRejection(track->P().Mag(),track->NSigmaTPCK(), track->NSigmaTOFK()) - || IsProtonNSigmaRejection(track->P().Mag(),track->NSigmaTPCP(), track->NSigmaTOFP())){ - imost = 0; - } + //\ reject + if( fOtherNsigmacut && RejectFakeD(track,track->P().Mag()) ){ + imost = 0; } //\ dE/dx cut for low pt abnormal if ( fdEdxcut && !IsDeuteronTPCdEdx(track->P().Mag(), track->TPCsignal()) ){ - imost = 0; + imost = 0; } } + //\ for triton PID else if (fMostProbable == 14){ //cut on Nsigma triton if (IsTritonNSigma(track->P().Mag(), track->MassTOF(), fNsigmaMass, track->NSigmaTPCT(), track->NSigmaTOFT()) ){ - // if (IsTritonNSigma(track->P().Mag(), track->MassTOF(), fNsigmaMass, track->NSigmaTPCT(), track->NSigmaTOFT()) - // && !IsElectronNSigmaRejection(track->P().Mag(),track->NSigmaTPCE()) - // && !IsPionNSigmaRejection(track->P().Mag(),track->NSigmaTPCPi(), track->NSigmaTOFPi()) - // && !IsKaonNSigmaRejection(track->P().Mag(),track->NSigmaTPCK(), track->NSigmaTOFK()) - // && !IsProtonNSigmaRejection(track->P().Mag(),track->NSigmaTPCP(), track->NSigmaTOFP()) ){ imost = 14; } if ( fdEdxcut && !IsTritonTPCdEdx(track->P().Mag(), track->TPCsignal()) ){ imost = 0; - } - - + } } + //\ for He3 PID else if (fMostProbable == 15){ //cout<<"enter He PID"<P().Mag(), track->MassTOF(), fNsigmaMass, track->NSigmaTPCH(), track->NSigmaTOFH()) ){ @@ -606,3 +597,70 @@ void AliFemtoTrackCutPdtHe3::SetfUsePtCut(int aUsePtCut){ void AliFemtoTrackCutPdtHe3::SetfOnlyTPCreject(int aOnlyTPCreject){ fOnlyTPCreject = aOnlyTPCreject; } +bool AliFemtoTrackCutPdtHe3::RejectFakeP(const AliFemtoTrack* track, float mom){ + + bool rejected = true; + float p_NsigmaCombine = 0.; + float k_NsigmaCombine = 0.; + float e_NsigmaCombine = 0.; + float pi_NsigmaCombine = 0.; + if (mom > SwitchMom_p) { + p_NsigmaCombine = TMath::Hypot(track->NSigmaTPCP(), track->NSigmaTOFP()); + k_NsigmaCombine = TMath::Hypot(track->NSigmaTPCK(), track->NSigmaTOFK()); + e_NsigmaCombine = TMath::Hypot(track->NSigmaTPCE(), track->NSigmaTOFE()); + pi_NsigmaCombine = TMath::Hypot(track->NSigmaTPCPi(), track->NSigmaTOFPi()); + if ( (k_NsigmaCombine < p_NsigmaCombine) || + (e_NsigmaCombine < p_NsigmaCombine) || + (pi_NsigmaCombine < p_NsigmaCombine) ) + return rejected; + } + else { + p_NsigmaCombine = track->NSigmaTPCP(); + k_NsigmaCombine = track->NSigmaTPCK(); + e_NsigmaCombine = track->NSigmaTPCE(); + pi_NsigmaCombine = track->NSigmaTPCPi(); + if ( (k_NsigmaCombine < p_NsigmaCombine) || + (e_NsigmaCombine < p_NsigmaCombine) || + (pi_NsigmaCombine < p_NsigmaCombine) ) + return rejected; + } + return false; + +} +bool AliFemtoTrackCutPdtHe3::RejectFakeD(const AliFemtoTrack* track, float mom){ + + bool rejected = true; + float d_NsigmaCombine = 0.; + float p_NsigmaCombine = 0.; + float k_NsigmaCombine = 0.; + float e_NsigmaCombine = 0.; + float pi_NsigmaCombine = 0.; + if (mom > SwitchMom_p) { + d_NsigmaCombine = TMath::Hypot(track->NSigmaTPCD(), track->NSigmaTOFD()); + p_NsigmaCombine = TMath::Hypot(track->NSigmaTPCP(), track->NSigmaTOFP()); + k_NsigmaCombine = TMath::Hypot(track->NSigmaTPCK(), track->NSigmaTOFK()); + e_NsigmaCombine = TMath::Hypot(track->NSigmaTPCE(), track->NSigmaTOFE()); + pi_NsigmaCombine = TMath::Hypot(track->NSigmaTPCPi(), track->NSigmaTOFPi()); + if ( (k_NsigmaCombine < d_NsigmaCombine) || + (e_NsigmaCombine < d_NsigmaCombine) || + (pi_NsigmaCombine < d_NsigmaCombine) || + (p_NsigmaCombine < d_NsigmaCombine) ) + return rejected; + } + else { + d_NsigmaCombine = track->NSigmaTPCD(); + p_NsigmaCombine = track->NSigmaTPCP(); + k_NsigmaCombine = track->NSigmaTPCK(); + e_NsigmaCombine = track->NSigmaTPCE(); + pi_NsigmaCombine = track->NSigmaTPCPi(); + if ( (k_NsigmaCombine < d_NsigmaCombine) || + (e_NsigmaCombine < d_NsigmaCombine) || + (pi_NsigmaCombine < d_NsigmaCombine) || + (p_NsigmaCombine < d_NsigmaCombine) ) + return rejected; + } + return false; + +} + + diff --git a/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoTrackCutPdtHe3.h b/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoTrackCutPdtHe3.h index aaddc1a0e52..4a194a61365 100644 --- a/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoTrackCutPdtHe3.h +++ b/PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoTrackCutPdtHe3.h @@ -43,6 +43,7 @@ class AliFemtoTrackCutPdtHe3 : public AliFemtoESDTrackCut{ void SetfUsePtCut(int aUsePtCut); void SetfOnlyTPCreject(int aOnlyTPCreject); + private: float fNsigmaP; float fNsigmaD; @@ -87,6 +88,10 @@ class AliFemtoTrackCutPdtHe3 : public AliFemtoESDTrackCut{ int fUsePtCut; // for Nsigma reject int fOnlyTPCreject; + + // real reject, now, only for p + bool RejectFakeP(const AliFemtoTrack* track, float mom); + bool RejectFakeD(const AliFemtoTrack* track, float mom); }; inline void AliFemtoTrackCutPdtHe3::SetMostProbableDeuteron() { fMostProbable = 13; } From fa8154f74195ee7dc88b64b982adfe18d5192a61 Mon Sep 17 00:00:00 2001 From: Cindy Date: Wed, 9 Mar 2022 12:51:04 +0100 Subject: [PATCH 07/14] (PWG-CF) Add support for corrected NUA maps, and additional trials --- .../macros/jcorran/AddTaskJHOCFAMaster.C | 120 ++++++++++++---- .../macros/jcorran/AddTaskJHOCFAminPtMaster.C | 132 +++++++++++++----- 2 files changed, 193 insertions(+), 59 deletions(-) diff --git a/PWGCF/Correlations/macros/jcorran/AddTaskJHOCFAMaster.C b/PWGCF/Correlations/macros/jcorran/AddTaskJHOCFAMaster.C index aa14ff62b3e..45a06efd1c6 100644 --- a/PWGCF/Correlations/macros/jcorran/AddTaskJHOCFAMaster.C +++ b/PWGCF/Correlations/macros/jcorran/AddTaskJHOCFAMaster.C @@ -25,30 +25,60 @@ AliAnalysisTask *AddTaskJHOCFAMaster(TString taskName = "JHOCFAMaster", UInt_t p if (iOldConfig == iConfig) {break;} switch(iConfig) { // Hardcoded names to prevent typo in phi weights files. - case 0 : // Default: global. - configNames.push_back("global"); + case 0 : // Default selection. // V0M + |zVtx < 8| + (pileup > 15000) + configNames.push_back("default"); // + global tracks 96 + (NTPC < 70) + (chi2 in [0.1, 4]). break; - case 1 : // Syst: hybrid. + case 1 : // Syst: global changed to hybrid. configNames.push_back("hybrid"); break; - case 2 : // Syst: nqq. TBI - configNames.push_back("nqq"); + case 2 : // Syst: V0M changed to SPD clusters. + configNames.push_back("SPD"); break; - case 3 : // Syst: pileup. - configNames.push_back("pileup"); + case 3 : // Syst: (pileup > 15000) changed to (no pileup cut). + configNames.push_back("noPileup"); break; - case 4 : // Syst: SPD. - configNames.push_back("SPD"); + case 4 : // Syst: (pileup > 15000) changed to (pileup > 10000). + configNames.push_back("pileup10"); break; - case 5 : // Syst: subA. TBI - configNames.push_back("subA"); + case 5 : // Syst: |zVtx < 8| changed to |zVtx < 10|. + configNames.push_back("zvtx10"); + break; + case 6 : // Syst: |zVtx < 8| changed to |zVtx < 9|. + configNames.push_back("zvtx9"); + break; + case 7 : // Syst: |zVtx < 8| changed to |zVtx < 7|. + configNames.push_back("zvtx7"); + break; + case 8 : // Syst: (NTPC > 70) changed to (NTPC > 80). + configNames.push_back("NTPC80"); + break; + case 9 : // Syst: (NTPC > 70) changed to (NTPC > 90). + configNames.push_back("NTPC90"); + break; + case 10 : // Syst: (NTPC > 70) changed to (NTPC > 100). + configNames.push_back("NTPC100"); break; - case 6 : // Syst: ztx < 10. - configNames.push_back("zvtx"); + case 11 : // Syst: (chi2 in [0.1, 4]) changed to (chi2 < 4). + configNames.push_back("chi2def"); break; - case 7 : // Syst: pqq. TBI. + case 12 : // Syst: (chi2 in [0.1, 4]) changed to (chi2 < 2.5). + configNames.push_back("chi2tight"); + break; + case 13 : // Syst: (DCAz < 2cm - default in global) changed to (DCAz < 1cm). + configNames.push_back("DCAz1"); + break; + case 14 : // Syst: (DCAz < 2cm - default in global) changed to (DCAz < 0.5cm). + configNames.push_back("DCAz05"); + break; + case 15 : // Syst: (all charges) changed to (negative charges only). + configNames.push_back("nqq"); + break; + case 16 : // Syst: (all charges) changed to (positive charges only). configNames.push_back("pqq"); break; + case 17 : // Syst: subA. TBI + configNames.push_back("subA"); + break; default : std::cout << "ERROR: Invalid configuration index. Skipping this element." << std::endl; @@ -82,8 +112,13 @@ AliAnalysisTask *AddTaskJHOCFAMaster(TString taskName = "JHOCFAMaster", UInt_t p MAPdirname.Data(), sCorrection[period].Data(), Int_t(ptMin * 10), configNames[i].Data()); break; case 2: // 2; Fine binning, minPt = 0.2 for all. - MAPfilenames[i] = Form("%sPhiWeights_LHC%s_Error_finerBins_pt02_s_%s.root", - MAPdirname.Data(), sCorrection[period].Data(), configNames[i].Data()); + if (strcmp(configNames[i].Data(), "default") == 0) { + MAPfilenames[i] = Form("%sPhiWeights_LHC%s_Error_finerBins_Default_s_%s.root", + MAPdirname.Data(), sCorrection[period].Data(), configNames[i].Data()); + } else { + MAPfilenames[i] = Form("%sPhiWeights_LHC%s_Error_finerBins_s_%s.root", + MAPdirname.Data(), sCorrection[period].Data(), configNames[i].Data()); + } break; default: std::cout << "ERROR: Invalid configuration index. Skipping this element." @@ -95,7 +130,7 @@ AliAnalysisTask *AddTaskJHOCFAMaster(TString taskName = "JHOCFAMaster", UInt_t p // Set the general variables. int hybridCut = 768; // Global hybrid tracks. - int globalCut = 96; // Global tracks. + int globalCut = 96; // Global tracks - default. UInt_t selEvt; // Trigger. if (period == lhc15o) { // Minimum bias. selEvt = AliVEvent::kINT7; @@ -113,9 +148,10 @@ AliAnalysisTask *AddTaskJHOCFAMaster(TString taskName = "JHOCFAMaster", UInt_t p fJCatalyst[i]->SetSaveAllQA(saveQA); // Set the correct flags to use. - if (strcmp(configNames[i].Data(), "pileup") != 0) { + if (strcmp(configNames[i].Data(), "noPileup") != 0) { // Set flag only if we cut on pileup. fJCatalyst[i]->AddFlags(AliJCatalystTask::FLUC_CUT_OUTLIERS); - fJCatalyst[i]->SetESDpileupCuts(ESDpileup, slope, intercept, saveQApileup); + if (strcmp(configNames[i].Data(), "pileup10") == 0) {fJCatalyst[i]->SetESDpileupCuts(true, slope, 10000, saveQApileup);} + else {fJCatalyst[i]->SetESDpileupCuts(ESDpileup, slope, intercept, saveQApileup);} } if (period == lhc18q || period == lhc18r) {fJCatalyst[i]->AddFlags(AliJCatalystTask::FLUC_CENT_FLATTENING);} @@ -129,19 +165,49 @@ AliAnalysisTask *AddTaskJHOCFAMaster(TString taskName = "JHOCFAMaster", UInt_t p fJCatalyst[i]->SetCentDetName("V0M"); } - // Set the filtering and kinematic cuts. - if (strcmp(configNames[i].Data(), "global") == 0) { - fJCatalyst[i]->SetTestFilterBit(globalCut); - } else { // Default: Hybrid tracks. - fJCatalyst[i]->SetTestFilterBit(hybridCut); - } - - if (strcmp(configNames[i].Data(), "zvtx") == 0) { + if (strcmp(configNames[i].Data(), "zvtx10") == 0) { fJCatalyst[i]->SetZVertexCut(10.0); + } else if (strcmp(configNames[i].Data(), "zvtx9") == 0) { + fJCatalyst[i]->SetZVertexCut(9.0); + } else if (strcmp(configNames[i].Data(), "zvtx7") == 0) { + fJCatalyst[i]->SetZVertexCut(7.0); } else { // Default value for JCorran analyses in Run 2. fJCatalyst[i]->SetZVertexCut(8.0); } + /// Filtering, kinematic and detector cuts. + if (strcmp(configNames[i].Data(), "hybrid") == 0) { + fJCatalyst[i]->SetTestFilterBit(hybridCut); + } else { // Default: global tracks. + fJCatalyst[i]->SetTestFilterBit(globalCut); + } + + if (strcmp(configNames[i].Data(), "NTPC80") == 0) { + fJCatalyst[i]->SetNumTPCClusters(80); + } else if (strcmp(configNames[i].Data(), "NTPC90") == 0) { + fJCatalyst[i]->SetNumTPCClusters(90); + } else if (strcmp(configNames[i].Data(), "NTPC100") == 0) { + fJCatalyst[i]->SetNumTPCClusters(100); + } else { // Default value for JCorran analyses in Run 2. + fJCatalyst[i]->SetNumTPCClusters(70); + } + + if (strcmp(configNames[i].Data(), "chi2def") == 0) { + fJCatalyst[i]->SetChi2Cuts(0.0, 4.0); + } else if (strcmp(configNames[i].Data(), "chi2tight") == 0) { + fJCatalyst[i]->SetChi2Cuts(0.0, 2.5); + } else { // Default value for JCorran analyses in Run 2. + fJCatalyst[i]->SetChi2Cuts(0.1, 4.0); + } + + if (strcmp(configNames[i].Data(), "DCAz1") == 0) { + fJCatalyst[i]->SetDCAzCut(1.0); + } else if (strcmp(configNames[i].Data(), "DCAz05") == 0) { + fJCatalyst[i]->SetDCAzCut(0.5); + } else { // Default value for JCorran analyses in Run 2. + fJCatalyst[i]->SetDCAzCut(2.0); + } + if (strcmp(configNames[i].Data(), "nqq") == 0) { fJCatalyst[i]->SetParticleCharge(-1); } else if (strcmp(configNames[i].Data(), "pqq") == 0) { diff --git a/PWGCF/Correlations/macros/jcorran/AddTaskJHOCFAminPtMaster.C b/PWGCF/Correlations/macros/jcorran/AddTaskJHOCFAminPtMaster.C index eb0c286e6fc..0ff0621ebf3 100644 --- a/PWGCF/Correlations/macros/jcorran/AddTaskJHOCFAminPtMaster.C +++ b/PWGCF/Correlations/macros/jcorran/AddTaskJHOCFAminPtMaster.C @@ -15,30 +15,60 @@ AliAnalysisTask *AddTaskJHOCFAminPtMaster(TString taskName = "JHOCFAminPtMaster_ TString configName; // Configuration name corresponding to the cutConfig. switch(cutConfig) { // Hardcoded names to prevent typo in phi weights files. - case 0 : // Default: global. - configName = "global"; + case 0 : // Default selection. // V0M + |zVtx < 8| + (pileup > 15000) + configName = "default"; // + global tracks 96 + (NTPC < 70) + (chi2 in [0.1, 4]). break; - case 1 : // Syst: hybrid. + case 1 : // Syst: global changed to hybrid. configName = "hybrid"; break; - case 2 : // Syst: nqq. TBI - configName = "nqq"; + case 2 : // Syst: V0M changed to SPD clusters. + configName = "SPD"; break; - case 3 : // Syst: pileup. - configName = "pileup"; + case 3 : // Syst: (pileup > 15000) changed to (no pileup cut). + configName = "noPileup"; break; - case 4 : // Syst: SPD. - configName = "SPD"; + case 4 : // Syst: (pileup > 15000) changed to (pileup > 10000). + configName = "pileup10"; break; - case 5 : // Syst: subA. TBI - configName = "subA"; + case 5 : // Syst: |zVtx < 8| changed to |zVtx < 10|. + configName = "zvtx10"; + break; + case 6 : // Syst: |zVtx < 8| changed to |zVtx < 9|. + configName = "zvtx9"; + break; + case 7 : // Syst: |zVtx < 8| changed to |zVtx < 7|. + configName = "zvtx7"; + break; + case 8 : // Syst: (NTPC > 70) changed to (NTPC > 80). + configName = "NTPC80"; + break; + case 9 : // Syst: (NTPC > 70) changed to (NTPC > 90). + configName = "NTPC90"; + break; + case 10 : // Syst: (NTPC > 70) changed to (NTPC > 100). + configName = "NTPC100"; + break; + case 11 : // Syst: (chi2 in [0.1, 4]) changed to (chi2 < 4). + configName = "chi2def"; break; - case 6 : // Syst: ztx < 10. - configName = "zvtx"; + case 12 : // Syst: (chi2 in [0.1, 4]) changed to (chi2 < 2.5). + configName = "chi2tight"; break; - case 7 : // Syst: pqq. TBI. + case 13 : // Syst: (DCAz < 2cm - default in global) changed to (DCAz < 1cm). + configName = "DCAz1"; + break; + case 14 : // Syst: (DCAz < 2cm - default in global) changed to (DCAz < 0.5cm). + configName = "DCAz05"; + break; + case 15 : // Syst: (all charges) changed to (negative charges only). + configName = "nqq"; + break; + case 16 : // Syst: (all charges) changed to (positive charges only). configName = "pqq"; break; + case 17 : // Syst: subA. TBI + configName = "subA"; + break; default : std::cout << "ERROR: Invalid configuration index." << std::endl; } @@ -81,9 +111,14 @@ AliAnalysisTask *AddTaskJHOCFAminPtMaster(TString taskName = "JHOCFAminPtMaster_ MAPfilenames = Form("%sPhiWeights_LHC%s_Error_pt02_s_%s.root", MAPdirname.Data(), sCorrection[period].Data(), configName.Data()); break; - case 1: // 1; Fine binning, minPt = 0.2 for all. - MAPfilenames = Form("%sPhiWeights_LHC%s_Error_finerBins_pt02_s_%s.root", - MAPdirname.Data(), sCorrection[period].Data(), configName.Data()); + case 1: // 1; Fine binning, minPt = 0.2 for all. --> Default. + if (cutConfig == 0) { + MAPfilenames = Form("%sPhiWeights_LHC%s_Error_finerBins_Default_s_%s.root", + MAPdirname.Data(), sCorrection[period].Data(), configName.Data()); + } else { + MAPfilenames = Form("%sPhiWeights_LHC%s_Error_finerBins_s_%s.root", + MAPdirname.Data(), sCorrection[period].Data(), configName.Data()); + } break; default: std::cout << "ERROR: Invalid configuration index. Skipping this element." @@ -112,14 +147,7 @@ AliAnalysisTask *AddTaskJHOCFAminPtMaster(TString taskName = "JHOCFAminPtMaster_ std::cout << "Setting the catalyst: " << fJCatalyst[i]->GetJCatalystTaskName() << std::endl; fJCatalyst[i]->SetSaveAllQA(saveQA); - // Set the correct flags to use. - if (strcmp(configName.Data(), "pileup") != 0) { - fJCatalyst[i]->AddFlags(AliJCatalystTask::FLUC_CUT_OUTLIERS); - fJCatalyst[i]->SetESDpileupCuts(ESDpileup, slope, intercept, saveQApileup); - } - if (period == lhc18q || period == lhc18r) {fJCatalyst[i]->AddFlags(AliJCatalystTask::FLUC_CENT_FLATTENING);} - - // Set the trigger and centrality selection. + /// Trigger and centrality selection. fJCatalyst[i]->SelectCollisionCandidates(selEvt); fJCatalyst[i]->SetCentrality(0.,5.,10.,20.,30.,40.,50.,60.,70.,80.,-10.,-10.,-10.,-10.,-10.,-10.,-10.); fJCatalyst[i]->SetInitializeCentralityArray(); @@ -129,25 +157,65 @@ AliAnalysisTask *AddTaskJHOCFAminPtMaster(TString taskName = "JHOCFAminPtMaster_ fJCatalyst[i]->SetCentDetName("V0M"); } - // Set the filtering and kinematic cuts. - if (strcmp(configName.Data(), "global") == 0) { - fJCatalyst[i]->SetTestFilterBit(globalCut); - } else { // Default: Hybrid tracks. - fJCatalyst[i]->SetTestFilterBit(hybridCut); + /// Event selection: pileup cuts and Zvtx. + if (strcmp(configName.Data(), "noPileup") != 0) { // Set flag only if we cut on pileup. + fJCatalyst[i]->AddFlags(AliJCatalystTask::FLUC_CUT_OUTLIERS); + if (strcmp(configName.Data(), "pileup10") == 0) {fJCatalyst[i]->SetESDpileupCuts(true, slope, 10000, saveQApileup);} + else {fJCatalyst[i]->SetESDpileupCuts(ESDpileup, slope, intercept, saveQApileup);} } - - if (strcmp(configName.Data(), "zvtx") == 0) { + if (period == lhc18q || period == lhc18r) {fJCatalyst[i]->AddFlags(AliJCatalystTask::FLUC_CENT_FLATTENING);} + + if (strcmp(configName.Data(), "zvtx10") == 0) { fJCatalyst[i]->SetZVertexCut(10.0); + } else if (strcmp(configName.Data(), "zvtx9") == 0) { + fJCatalyst[i]->SetZVertexCut(9.0); + } else if (strcmp(configName.Data(), "zvtx7") == 0) { + fJCatalyst[i]->SetZVertexCut(7.0); } else { // Default value for JCorran analyses in Run 2. fJCatalyst[i]->SetZVertexCut(8.0); } + /// Filtering, kinematic and detector cuts. + if (strcmp(configName.Data(), "hybrid") == 0) { + fJCatalyst[i]->SetTestFilterBit(hybridCut); + } else { // Default: global tracks. + fJCatalyst[i]->SetTestFilterBit(globalCut); + } + + if (strcmp(configName.Data(), "NTPC80") == 0) { + fJCatalyst[i]->SetNumTPCClusters(80); + } else if (strcmp(configName.Data(), "NTPC90") == 0) { + fJCatalyst[i]->SetNumTPCClusters(90); + } else if (strcmp(configName.Data(), "NTPC100") == 0) { + fJCatalyst[i]->SetNumTPCClusters(100); + } else { // Default value for JCorran analyses in Run 2. + fJCatalyst[i]->SetNumTPCClusters(70); + } + + if (strcmp(configName.Data(), "chi2def") == 0) { + fJCatalyst[i]->SetChi2Cuts(0.0, 4.0); + } else if (strcmp(configName.Data(), "chi2tight") == 0) { + fJCatalyst[i]->SetChi2Cuts(0.0, 2.5); + } else { // Default value for JCorran analyses in Run 2. + fJCatalyst[i]->SetChi2Cuts(0.1, 4.0); + } + + if (strcmp(configName.Data(), "DCAz1") == 0) { + fJCatalyst[i]->SetDCAzCut(1.0); + } else if (strcmp(configName.Data(), "DCAz05") == 0) { + fJCatalyst[i]->SetDCAzCut(0.5); + } else { // Default value for JCorran analyses in Run 2. + fJCatalyst[i]->SetDCAzCut(2.0); + } + if (strcmp(configName.Data(), "nqq") == 0) { fJCatalyst[i]->SetParticleCharge(-1); } else if (strcmp(configName.Data(), "pqq") == 0) { fJCatalyst[i]->SetParticleCharge(1); } // Default: charge = 0 to accept all charges. + // TBA: subA systematics. + fJCatalyst[i]->SetPtRange(configMinPt[i], ptMax); fJCatalyst[i]->SetEtaRange(-0.8, 0.8); fJCatalyst[i]->SetPhiCorrectionIndex(0); // Instead of i. From 794e300611191cf9eb29b57e4a40a0a707b16bb4 Mon Sep 17 00:00:00 2001 From: bheybeck <86231730+bheybeck@users.noreply.github.com> Date: Wed, 9 Mar 2022 13:13:25 +0100 Subject: [PATCH 08/14] Update AliAnalysisTaskSigmaPlus.cxx --- .../Sigma_Baryons/AliAnalysisTaskSigmaPlus.cxx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/PWGLF/NUCLEX/Hypernuclei/Hyp2Body/HypTritYield/Sigma_Baryons/AliAnalysisTaskSigmaPlus.cxx b/PWGLF/NUCLEX/Hypernuclei/Hyp2Body/HypTritYield/Sigma_Baryons/AliAnalysisTaskSigmaPlus.cxx index e05a4c2a851..cefb9c015dd 100644 --- a/PWGLF/NUCLEX/Hypernuclei/Hyp2Body/HypTritYield/Sigma_Baryons/AliAnalysisTaskSigmaPlus.cxx +++ b/PWGLF/NUCLEX/Hypernuclei/Hyp2Body/HypTritYield/Sigma_Baryons/AliAnalysisTaskSigmaPlus.cxx @@ -155,8 +155,8 @@ fveryverylowkstar(0.05), fMinPairPi0Mass(0.1), fMaxPairPi0Mass(0.16), fMaxPairSigmaPA(0.06), -fMinPairSigmaMass(1.16), -fMaxPairSigmaMass(1.22), +fMinPairSigmaMass(1.14), +fMaxPairSigmaMass(1.24), fMinPairProtonDCAxy(0.005), fMaxPairkstar(0.5), @@ -333,8 +333,8 @@ fveryverylowkstar(0.05), fMinPairPi0Mass(0.1), fMaxPairPi0Mass(0.16), fMaxPairSigmaPA(0.06), -fMinPairSigmaMass(1.16), -fMaxPairSigmaMass(1.22), +fMinPairSigmaMass(1.14), +fMaxPairSigmaMass(1.24), fMinPairProtonDCAxy(0.005), fMaxPairkstar(0.5), From 928cefaf8457a04e7a93e8abcc5031613c7b1db9 Mon Sep 17 00:00:00 2001 From: bheybeck <86231730+bheybeck@users.noreply.github.com> Date: Wed, 9 Mar 2022 13:14:54 +0100 Subject: [PATCH 09/14] Update AliAnalysisTaskSigmaPlus.h --- .../HypTritYield/Sigma_Baryons/AliAnalysisTaskSigmaPlus.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PWGLF/NUCLEX/Hypernuclei/Hyp2Body/HypTritYield/Sigma_Baryons/AliAnalysisTaskSigmaPlus.h b/PWGLF/NUCLEX/Hypernuclei/Hyp2Body/HypTritYield/Sigma_Baryons/AliAnalysisTaskSigmaPlus.h index 088826379c3..cb66f179299 100644 --- a/PWGLF/NUCLEX/Hypernuclei/Hyp2Body/HypTritYield/Sigma_Baryons/AliAnalysisTaskSigmaPlus.h +++ b/PWGLF/NUCLEX/Hypernuclei/Hyp2Body/HypTritYield/Sigma_Baryons/AliAnalysisTaskSigmaPlus.h @@ -249,8 +249,8 @@ class AliAnalysisTaskSigmaPlus : public AliAnalysisTaskSE Double_t fMinPairPi0Mass = 0.1; Double_t fMaxPairPi0Mass = 0.16; Double_t fMaxPairSigmaPA = 0.06; - Double_t fMinPairSigmaMass = 1.16; - Double_t fMaxPairSigmaMass = 1.22; + Double_t fMinPairSigmaMass = 1.14; + Double_t fMaxPairSigmaMass = 1.24; Double_t fMinPairProtonDCAxy = 0.005; Double_t fMaxPairkstar = 0.5; void SetPairPi0MinMass(Double_t minpi0mass) {fMinPairPi0Mass = minpi0mass;} From efeb332518540ff0c1d64eabcf4ab3c791dac502 Mon Sep 17 00:00:00 2001 From: Raquel Quishpe Date: Wed, 9 Mar 2022 13:34:37 +0100 Subject: [PATCH 10/14] local debug --- .../macros/AddTaskLegendreCoef_local.C | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 PWGCF/EBYE/LongAsymmetry/macros/AddTaskLegendreCoef_local.C diff --git a/PWGCF/EBYE/LongAsymmetry/macros/AddTaskLegendreCoef_local.C b/PWGCF/EBYE/LongAsymmetry/macros/AddTaskLegendreCoef_local.C new file mode 100644 index 00000000000..c3838a415c1 --- /dev/null +++ b/PWGCF/EBYE/LongAsymmetry/macros/AddTaskLegendreCoef_local.C @@ -0,0 +1,66 @@ +#include "AliAnalysisManager.h" +#include "AliAnalysisDataContainer.h" +R__ADD_INCLUDE_PATH($PWD) +#include "AliAnalysisTaskLegendreCoef_local.h" + + +AliAnalysisTaskLegendreCoef_local* AddTaskLegendreCoef_local(const char *suffix = "") +{ + // get the manager via the static access member. since it's static, you don't need + // to create an instance of the class here to call the function + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + return 0x0; + } + // get the input event handler, again via a static method. + // this handler is part of the managing system and feeds events + // to your task + if (!mgr->GetInputEventHandler()) { + return 0x0; + } + + TString name; + name.Form("LegCoef%s", suffix); + // by default, a file is open for writing. here, we get the filename + TString fileName = AliAnalysisManager::GetCommonFileName(); + fileName += ":LongFluctuations"; // create a subfolder in the file + // now we create an instance of your task + AliAnalysisTaskLegendreCoef_local* task = new AliAnalysisTaskLegendreCoef_local(name.Data()); + if(!task) return 0x0; + task->SelectCollisionCandidates(AliVEvent::kINT7); + task->SetMCRead(kFALSE); + task->SetPileUpRead(kFALSE); + task->SetChi2DoF(4); + task->SetPtLimits(0.2, 2.0); + task->SetEtaMinLimit(-0.8); + task->SetEtaMaxLimit(0.8); + task->SetBuildBackground(kFALSE); + task->SetBuildLegendre(kFALSE); + printf("Container name is %s\n",name.Data()); + + // add your task to the manager + mgr->AddTask(task); + // your task needs input: here we connect the manager to your task + AliAnalysisDataContainer *cinput, *coutput1, *coutput2, *coutput3, *coutput4; + cinput = mgr->GetCommonInputContainer(); + mgr->ConnectInput(task, 0, cinput); + // same for the output + TString dirName = ""; + TString fileDirStructure = AliAnalysisManager::GetCommonFileName(); + TString listName = ""; + listName = "LegCoef"; + coutput1 = mgr->CreateContainer(listName, TList::Class(), AliAnalysisManager::kOutputContainer, fileDirStructure); + coutput2 = mgr->CreateContainer("mcRec", TTree::Class(), AliAnalysisManager::kOutputContainer, fileDirStructure); + coutput3 = mgr->CreateContainer("mcGen", TTree::Class(), AliAnalysisManager::kOutputContainer, fileDirStructure); + coutput4 = mgr->CreateContainer("Raw", TTree::Class(), AliAnalysisManager::kOutputContainer, fileDirStructure); + + mgr->ConnectOutput(task, 1, coutput1); + mgr->ConnectOutput(task, 2, coutput2); + mgr->ConnectOutput(task, 3, coutput3); + mgr->ConnectOutput(task, 4, coutput4); + + // mgr->ConnectOutput(task,1,mgr->CreateContainer(name.Data(), TList::Class(), AliAnalysisManager::kOutputContainer, fileName.Data())); + // in the end, this macro returns a pointer to your task. this will be convenient later on + // when you will run your analysis in an analysis train on grid + return task; +} From b6f6a07f1f6d0455db67048bc929ef413603b685 Mon Sep 17 00:00:00 2001 From: Raquel Quishpe Date: Wed, 9 Mar 2022 13:35:35 +0100 Subject: [PATCH 11/14] local debug --- .../AliAnalysisTaskLegendreCoef_local.cxx | 770 ++++++++++++++++++ .../AliAnalysisTaskLegendreCoef_local.h | 116 +++ 2 files changed, 886 insertions(+) create mode 100644 PWGCF/EBYE/LongAsymmetry/AliAnalysisTaskLegendreCoef_local.cxx create mode 100644 PWGCF/EBYE/LongAsymmetry/AliAnalysisTaskLegendreCoef_local.h diff --git a/PWGCF/EBYE/LongAsymmetry/AliAnalysisTaskLegendreCoef_local.cxx b/PWGCF/EBYE/LongAsymmetry/AliAnalysisTaskLegendreCoef_local.cxx new file mode 100644 index 00000000000..930978f2113 --- /dev/null +++ b/PWGCF/EBYE/LongAsymmetry/AliAnalysisTaskLegendreCoef_local.cxx @@ -0,0 +1,770 @@ +//////////////////////////////////////////////////////// +// AliAnalysisTaskLegendreCoef_local: +// Description: Analysis task computes the background +// and extracts legendre coefficients from eta dist +// Author: Raquel Quishpe (raquel.quishpe@cern.ch) +//////////////////////////////////////////////////////// +#include "TChain.h" +#include "TH3D.h" +#include "TTree.h" +#include "TProfile.h" +#include "TString.h" +#include "TList.h" +#include "AliAnalysisTask.h" +#include "AliAODTrack.h" +#include "AliMultSelection.h" +#include "AliAnalysisManager.h" +#include "AliAODEvent.h" +#include "AliAODInputHandler.h" +#include "AliAnalysisTaskLegendreCoef_local.h" +#include "AliAODMCParticle.h" +#include "AliEventCuts.h" +#include "AliAODMCHeader.h" +#include "TRandom2.h" +#include + +ClassImp(AliAnalysisTaskLegendreCoef_local) + +AliAnalysisTaskLegendreCoef_local::AliAnalysisTaskLegendreCoef_local() : AliAnalysisTaskSE(), + fAOD(0), fOutputList(0), + fIsMC(0), fChi2DoF(3), fTPCNcls(70), fPtmin(0.2), fPtmax(2), fEtaMin(-0.8), fEtaMax(0.8), fBit(96), + fIsPileUpCuts(0), fIsBuildBG(0), fIsBuildLG(0), + fPosBackgroundHist(0), fNegBackgroundHist(0), fChargedBackgroundHist(0), + fMCPosBackgroundHist(0), fMCNegBackgroundHist(0), fMCChargedBackgroundHist(0), fNeventCentHist(0), + fGenName("Hijing"), fPileUpLevel(2), fTPCNCrossedRows(70), fPVzMax(8.0), fPVzMin(0.0), fPVzSign(0), fNetabins(16), PVz(0), Cent(0), fTreeSRedirector(0x0),fTreeMCrec(0x0),fTreeMCgen(0x0),fTreeRaw(0x0),fEventCuts(0) +{ + +} +//_____________________________________________________________________________ +AliAnalysisTaskLegendreCoef_local::AliAnalysisTaskLegendreCoef_local(const char* name) : AliAnalysisTaskSE(name), + fAOD(0), fOutputList(0), + fIsMC(0), fChi2DoF(3), fTPCNcls(70), fPtmin(0.2), fPtmax(2), fEtaMin(-0.8), fEtaMax(0.8), fBit(96), + fIsPileUpCuts(0), fIsBuildBG(0), fIsBuildLG(0), + fPosBackgroundHist(0), fNegBackgroundHist(0), fChargedBackgroundHist(0), + fMCPosBackgroundHist(0), fMCNegBackgroundHist(0), fMCChargedBackgroundHist(0), fNeventCentHist(0), + fGenName("Hijing"), fPileUpLevel(2), fTPCNCrossedRows(70), fPVzMax(8.0), fPVzMin(0.0), fPVzSign(0), fNetabins(16), PVz(0), Cent(0), fTreeSRedirector(0x0),fTreeMCrec(0x0),fTreeMCgen(0x0),fTreeRaw(0x0),fEventCuts(0) +{ + // Default constructor + // Define input and output slots here + // Input slot #0 works with a TChain + // DefineInput(0, TChain::Class()); + // Output slot #0 writes into a TList container + DefineOutput(1, TList::Class()); + DefineOutput(2, TTree::Class()); + DefineOutput(3, TTree::Class()); + DefineOutput(4, TTree::Class()); +} +//_____________________________________________________________________________ +AliAnalysisTaskLegendreCoef_local::~AliAnalysisTaskLegendreCoef_local() +{ + // destructor + if(fOutputList) { + delete fOutputList; // at the end of your task, it is deleted from memory by calling this function + } + if (fTreeSRedirector) delete fTreeSRedirector; + +} +//_____________________________________________________________________________ + +void AliAnalysisTaskLegendreCoef_local::UserCreateOutputObjects() +{ + // Initialize output list of containers + OpenFile(1); + if (fOutputList != NULL) { + delete fOutputList; + fOutputList = NULL; + } + if (!fOutputList) { + fOutputList = new TList(); + fOutputList->SetOwner(kTRUE); + } + double centbins[9] = {0.01,5,10,20,30,40,50,60,70}; + + + if(fIsBuildBG){ + fOutputList->Add(new TH1D("NeventsCentHist", "nevents;centrality", 8,centbins));//output histogram when building background - all tracks + fOutputList->Add(new TH2D("PosBGHistOut", "postrack;eta;centrality", fNetabins,fEtaMin,fEtaMax,8,centbins));//output histogram when building background - positive tracks + fOutputList->Add(new TH2D("NegBGHistOut", "negtrack;eta;centrality", fNetabins,fEtaMin,fEtaMax,8,centbins));//output histogram when building background - negative tracks + fOutputList->Add(new TH2D("ChargedBGHistOut", "track;eta;centrality", fNetabins,fEtaMin,fEtaMax,8,centbins));//output histogram when building background - charged tracks + fOutputList->Add(new TH3D("PhiEtaCentHist", "track;phi;eta;centrality", 24, 0 ,TMath::Pi()*2.0, fNetabins,fEtaMin,fEtaMax, 100, 0.01, 70.0));//QA hist phi vs eta + fOutputList->Add(new TH2D("PtCentHist", "track;pt;centrality", 50,fPtmin,fPtmax,8,centbins));//QA hist pt + if(fIsMC) { + fOutputList->Add(new TH1D("GenNeventsCentHist", "nevents;centrality", 8,centbins));//output histogram when building background - all tracks + fOutputList->Add(new TH1D("RecNeventsCentHist", "nevents;centrality", 8,centbins));//output histogram when building background - all tracks + fOutputList->Add(new TH2D("MCPosBGHistOut", "postrack;eta;centrality", fNetabins,fEtaMin,fEtaMax,8,centbins));//output MC histogram when building background - positive tracks + fOutputList->Add(new TH2D("MCNegBGHistOut", "negtrack;eta;centrality", fNetabins,fEtaMin,fEtaMax,8,centbins));//output MC histogram when building background - negative tracks + fOutputList->Add(new TH2D("MCChargedBGHistOut", "track;eta;centrality", fNetabins,fEtaMin,fEtaMax,8,centbins));//output MC histogram when building background - charged tracks + fOutputList->Add(new TH3D("GenPhiEtaCentHist", "track;phi;eta;centrality", 24, 0 ,TMath::Pi()*2.0, fNetabins,fEtaMin,fEtaMax, 100, 0.01, 70.0));//QA hist phi vs eta + fOutputList->Add(new TH3D("RecPhiEtaCentHist", "track;phi;eta;centrality", 24, 0 ,TMath::Pi()*2.0, fNetabins,fEtaMin,fEtaMax, 100, 0.01, 70.0));//QA hist phi vs eta + fOutputList->Add(new TH2D("GenPtCentHist", "track;pt;centrality", 50,fPtmin,fPtmax,8,centbins));//QA hist pt + fOutputList->Add(new TH2D("RecPtCentHist", "track;pt;centrality", 50,fPtmin,fPtmax,8,centbins));//QA hist pt + } + } + + if(fIsBuildLG) { + //for charged + fOutputList->Add(new TProfile("a1","a1;centrality;",8,centbins, ""));//first order legendre cofficient - direct + fOutputList->Add(new TProfile("Ra1","Ra1;centrality;",8,centbins, ""));//first order legendre cofficient - random Fill(ran->Uniform(-fEta,fEta)) + fOutputList->Add(new TProfile("a2","a2;centrality;",8,centbins, ""));//second order legendre cofficient - direct + fOutputList->Add(new TProfile("Ra2","Ra2;centrality;",8,centbins, ""));//second order legendre cofficient - random Fill(ran->Uniform(-fEta,fEta)) + //for positive + fOutputList->Add(new TProfile("a1pos","a1;centrality;",8,centbins, ""));//first order legendre cofficient - direct + fOutputList->Add(new TProfile("Ra1pos","Ra1;centrality;",8,centbins, ""));//first order legendre cofficient - random Fill(ran->Uniform(-fEta,fEta)) + fOutputList->Add(new TProfile("a2pos","a2;centrality;",8,centbins, ""));//second order legendre cofficient - direct + fOutputList->Add(new TProfile("Ra2pos","Ra2;centrality;",8,centbins, ""));//second order legendre cofficient - random Fill(ran->Uniform(-fEta,fEta)) + //for negative + fOutputList->Add(new TProfile("a1neg","a1;centrality;",8,centbins, ""));//first order legendre cofficient - direct + fOutputList->Add(new TProfile("Ra1neg","Ra1;centrality;",8,centbins, ""));//first order legendre cofficient - random Fill(ran->Uniform(-fEta,fEta)) + fOutputList->Add(new TProfile("a2neg","a2;centrality;",8,centbins, ""));//second order legendre cofficient - direct + fOutputList->Add(new TProfile("Ra2neg","Ra2;centrality;",8,centbins, ""));//second order legendre cofficient - random Fill(ran->Uniform(-fEta,fEta)) + if(fIsMC) { + //for charged + fOutputList->Add(new TProfile("a1MC","a1;centrality;",8,centbins, ""));//first order legendre cofficient - direct + fOutputList->Add(new TProfile("Ra1MC","Ra1;centrality;",8,centbins, ""));//first order legendre cofficient - random Fill(ran->Uniform(-fEta,fEta)) + fOutputList->Add(new TProfile("a2MC","a2;centrality;",8,centbins, ""));//second order legendre cofficient - direct + fOutputList->Add(new TProfile("Ra2MC","Ra2;centrality;",8,centbins, ""));//second order legendre cofficient - random Fill(ran->Uniform(-fEta,fEta)) + //for positive + fOutputList->Add(new TProfile("a1posMC","a1;centrality;",8,centbins, ""));//first order legendre cofficient - direct + fOutputList->Add(new TProfile("Ra1posMC","Ra1;centrality;",8,centbins, ""));//first order legendre cofficient - random Fill(ran->Uniform(-fEta,fEta)) + fOutputList->Add(new TProfile("a2posMC","a2;centrality;",8,centbins, ""));//second order legendre cofficient - direct + fOutputList->Add(new TProfile("Ra2posMC","Ra2;centrality;",8,centbins, ""));//second order legendre cofficient - random Fill(ran->Uniform(-fEta,fEta)) + //for negative + fOutputList->Add(new TProfile("a1negMC","a1;centrality;",8,centbins, ""));//first order legendre cofficient - direct + fOutputList->Add(new TProfile("Ra1negMC","Ra1;centrality;",8,centbins, ""));//first order legendre cofficient - random Fill(ran->Uniform(-fEta,fEta)) + fOutputList->Add(new TProfile("a2negMC","a2;centrality;",8,centbins, ""));//second order legendre cofficient - direct + fOutputList->Add(new TProfile("Ra2negMC","Ra2;centrality;",8,centbins, ""));//second order legendre cofficient - random Fill(ran->Uniform(-fEta,fEta)) + } + } + + // ************************************************************************ + // Trees + // ************************************************************************ + // + fTreeSRedirector = new TTreeSRedirector(); + fTreeMCrec = ((*fTreeSRedirector)<<"mcRec").GetTree(); + fTreeMCgen = ((*fTreeSRedirector)<<"mcGen").GetTree(); + fTreeRaw = ((*fTreeSRedirector)<<"Raw").GetTree(); + + + PostData(1, fOutputList); + PostData(2, fTreeMCrec); + PostData(3, fTreeMCgen); + PostData(4, fTreeRaw); + +} +//_____________________________________________________________________________ +void AliAnalysisTaskLegendreCoef_local::BuildBackground() +{ + //printf("Building background!\n"); + + fAOD = dynamic_cast(InputEvent()); + if(!fAOD) return; + + if(fIsPileUpCuts){ + fEventCuts.fUseITSTPCCluCorrelationCut = fPileUpLevel; + if (!fEventCuts.AcceptEvent(fAOD)) return; + } + + TClonesArray *stack =0; + if(fIsMC) { + TList *lst = fAOD->GetList(); + stack = (TClonesArray*)lst->FindObject(AliAODMCParticle::StdBranchName()); + if(!stack) return; + } + + //making a cut in pvz -8 to 8cm + const AliAODVertex *PrimaryVertex = fAOD->GetVertex(0); + if(!PrimaryVertex) return; + PVz = PrimaryVertex->GetZ(); + if(fabs(PVz)>fPVzMax) return; + if(fabs(PVz)0) return; + } + + AliMultSelection *MultSelection = (AliMultSelection*)fAOD->FindListObject("MultSelection"); + if(!MultSelection) return; + + Cent = MultSelection->GetMultiplicityPercentile("V0M"); //centrality + //mCentCL0 = MultSelection->GetMultiplicityPercentile("CL0"); + //mCentCL1 = MultSelection->GetMultiplicityPercentile("CL1"); + if(Cent>70.0 || Cent<0.01) return; + ((TH1D*) fOutputList->FindObject("NeventsCentHist"))->Fill(Cent);//Nevents vs centrality + + if(!fTreeSRedirector) return; + + if(fIsMC){ + int nMCTracks; + if (!stack) nMCTracks = 0; + else nMCTracks = stack->GetEntries(); + + if(fIsPileUpCuts){ + AliAODMCHeader *mcHeader = 0; + mcHeader = (AliAODMCHeader*)fAOD->GetList()->FindObject(AliAODMCHeader::StdBranchName()); + if(!mcHeader) { + printf("AliAnalysisTaskSEHFTreeCreator::UserExec: MC header branch not found!\n"); + return; + } + Bool_t isPileupInGeneratedEvent = kFALSE; + isPileupInGeneratedEvent = AliAnalysisUtils::IsPileupInGeneratedEvent(mcHeader, fGenName); + if(isPileupInGeneratedEvent) return; + } + ((TH1D*) fOutputList->FindObject("GenNeventsCentHist"))->Fill(Cent);//Nevents vs centrality + for (Int_t i(0); i < nMCTracks; i++) { + AliAODMCParticle *p1=(AliAODMCParticle*)stack->UncheckedAt(i); + if (!p1) continue; + DumpMCGen(fAOD, p1); + if(fabs(p1->Charge()<1))continue;//only get charged tracks + if(!p1->IsPhysicalPrimary()) continue; + if(p1->Eta()> fEtaMax || p1->Eta()Pt() < fPtmin|| p1->Pt() > fPtmax) continue; + if((fabs(p1->GetPdgCode())==211)||(fabs(p1->GetPdgCode())==2212)||(fabs(p1->GetPdgCode())==321)){ + //build background + ((TH2D*) fOutputList->FindObject("MCChargedBGHistOut"))->Fill(p1->Eta(), Cent); + if(p1->Charge() > 0) ((TH2D*) fOutputList->FindObject("MCPosBGHistOut"))->Fill(p1->Eta(), Cent); + if(p1->Charge() < 0) ((TH2D*) fOutputList->FindObject("MCNegBGHistOut"))->Fill(p1->Eta(), Cent); + ((TH3D*) fOutputList->FindObject("GenPhiEtaCentHist"))->Fill(p1->Phi(),p1->Eta(), Cent); + ((TH2D*) fOutputList->FindObject("GenPtCentHist"))->Fill(p1->Pt(), Cent); + } + } + } + + //fill hist nevent vs cent + for(Int_t i(0); i < fAOD->GetNumberOfTracks(); i++) { // loop over all these tracks + AliAODTrack* track = static_cast(fAOD->GetTrack(i)); // get a track (type AliAODTrack) from the event + if(!track) continue; + if (fIsMC) { + int label = TMath::Abs(track->GetLabel()); + AliAODMCParticle* mcTrack = dynamic_cast(stack->At(label)); + DumpMCRec(fAOD,track,mcTrack); + } + if(!fIsMC) DumpRaw(fAOD,track); + + if(fabs(track->Charge())<1) continue;//only get charged tracks + if(track->Eta() > fEtaMax || track->Eta() < fEtaMin) continue;//eta cut + if(track->Pt() < fPtmin|| track->Pt() > fPtmax) continue; //pt cut + if(track->GetTPCNcls()GetTPCNCrossedRows()Chi2perNDF() > fChi2DoF) continue;// cut in TPC Ncls , crossed rows and chi2/dof + if(track->TestFilterBit(fBit)) { + if(!fIsMC){ + //build background for raw data + //printf("filter bit is %i\n",fBit); + ((TH2D*) fOutputList->FindObject("ChargedBGHistOut"))->Fill(track->Eta(), Cent); + if(track->Charge() > 0) ((TH2D*) fOutputList->FindObject("PosBGHistOut"))->Fill(track->Eta(), Cent); + if(track->Charge() < 0) ((TH2D*) fOutputList->FindObject("NegBGHistOut"))->Fill(track->Eta(), Cent); + ((TH3D*) fOutputList->FindObject("PhiEtaCentHist"))->Fill(track->Phi(),track->Eta(), Cent); + ((TH2D*) fOutputList->FindObject("PtCentHist"))->Fill(track->Pt(), Cent); + }else{ + //build background for MC reconstructed + int label = TMath::Abs(track->GetLabel()); + AliAODMCParticle* mcTrack = dynamic_cast(stack->At(label)); + if (!mcTrack) continue; + if(fabs(mcTrack->Charge())<1)continue;//only get charged tracks + // if(!mcTrack->IsPrimary()) continue; + if(!mcTrack->IsPhysicalPrimary()) continue; + // + // count Tracks + if((fabs(mcTrack->GetPdgCode())==211)||(fabs(mcTrack->GetPdgCode())==2212)||(fabs(mcTrack->GetPdgCode())==321)){ + ((TH2D*) fOutputList->FindObject("ChargedBGHistOut"))->Fill(mcTrack->Eta(), Cent); + if(mcTrack->Charge() > 0) ((TH2D*) fOutputList->FindObject("PosBGHistOut"))->Fill(mcTrack->Eta(), Cent); + if(mcTrack->Charge() < 0) ((TH2D*) fOutputList->FindObject("NegBGHistOut"))->Fill(mcTrack->Eta(), Cent); + ((TH3D*) fOutputList->FindObject("RecPhiEtaCentHist"))->Fill(mcTrack->Phi(),mcTrack->Eta(), Cent); + ((TH2D*) fOutputList->FindObject("RecPtCentHist"))->Fill(mcTrack->Pt(), Cent); + } + } + } + } + return; +} +//_____________________________________________________________________________ +void AliAnalysisTaskLegendreCoef_local::DumpMCRec(AliAODEvent *fAOD, AliAODTrack *trackAOD, AliAODMCParticle* mcTrack) +{ + + // + // Dump information for the track cut tuning + Int_t nTPCClusters = fAOD->GetNumberOfTPCClusters(); + Int_t nITSClusters = 0; + AliVMultiplicity *multiObj = fAOD->GetMultiplicity(); + for(Int_t i=2;i<6;i++) nITSClusters += multiObj->GetNumberOfITSClusters(i); + // + Float_t naodtracks = fAOD->GetNumberOfTracks(); + Float_t pt = trackAOD->Pt(); + Double_t chi2perndf = trackAOD->Chi2perNDF(); + UShort_t tpcncls = trackAOD->GetTPCncls(); + Double_t tpcchi2 = trackAOD->GetTPCchi2(); + Double_t tpcchi2percl = trackAOD->GetTPCchi2perCluster(); + Double_t tpcchi2perndf = trackAOD->GetTPCchi2perNDF(); + Double_t oldtpcchi2perndf = trackAOD->GetOldTPCchi2perNDF(); + Short_t charge = trackAOD->Charge(); + Bool_t istpconly = trackAOD->IsTPCOnly(); + Bool_t istpcconst = trackAOD->IsTPCConstrained(); + Bool_t isglobalconst = trackAOD->IsGlobalConstrained(); + UShort_t tpcncrossedrows = trackAOD->GetTPCNCrossedRows(); + Double_t ptot = trackAOD->GetTPCmomentum(); + Double_t tpctgl = trackAOD->GetTPCTgl(); + Double_t tpcsignaln = trackAOD->GetTPCsignalN(); + Bool_t bit96 = trackAOD->TestFilterBit(96); + Bool_t bit128 = trackAOD->TestFilterBit(128); + Bool_t bit16 = trackAOD->TestFilterBit(16); + Bool_t bit768 = trackAOD->TestFilterBit(768); + Bool_t bit512 = trackAOD->TestFilterBit(512); + Double_t dEdx = trackAOD->GetTPCsignal(); + Float_t pv[2],cov[3]; + trackAOD->GetImpactParameters(pv,cov); + Double_t leta = trackAOD->Eta(); + Double_t p = trackAOD->P(); + Double_t phi = trackAOD->Phi(); + Double_t theta = trackAOD->Theta(); + Float_t misscl = trackAOD->GetTPCClusterInfo(3,0,0,159); + Float_t itsncls = trackAOD->GetITSNcls(); + Double_t itschi2 = trackAOD->GetITSchi2(); + // + // Variables from as you use + Bool_t bPdgCond = ((fabs(mcTrack->GetPdgCode())==211)||(fabs(mcTrack->GetPdgCode())==2212)||(fabs(mcTrack->GetPdgCode())==321)); + Bool_t fTrackBitDef = trackAOD->TestFilterBit(fBit); + Bool_t bEtaAcc = (trackAOD->Eta() > fEtaMax || trackAOD->Eta() < fEtaMin) ; + Bool_t bPtAcc = (trackAOD->Pt() < fPtmin|| trackAOD->Pt() > fPtmax); + Float_t fChi2Dof = trackAOD->Chi2perNDF(); + Int_t fNcls = trackAOD->GetTPCNcls(); + Int_t fNcrows = trackAOD->GetTPCNCrossedRows(); + Bool_t bPrim = (mcTrack->IsPrimary()); + Bool_t bPhysicalPrim = (mcTrack->IsPhysicalPrimary()); + Int_t fPDGcode = mcTrack->GetPdgCode(); + Int_t fCharge = mcTrack->Charge(); + // + if (fTreeSRedirector){ + (*fTreeSRedirector)<<"mcRec"<< + "tpcclmult=" << nTPCClusters << // eta + "itsclmult=" << nITSClusters << // eta + "naodtracks=" << naodtracks << // eta + "dEdx=" << dEdx << // eta + "phi=" << phi << // eta + "theta=" << theta << // eta + "ptot=" << ptot << // eta + "pt=" << pt << // eta + "p=" << p << // eta + "eta=" << leta << // eta + "dcaxy=" << pv[0] << // eta + "dcaz=" << pv[1] << // eta + "cov0=" << cov[0] << // eta + "cov1=" << cov[1] << // eta + "cov2=" << cov[2] << // eta + "bit96=" << bit96 << // eta + "bit128=" << bit128 << // eta + "bit16=" << bit16 << // eta + "bit768=" << bit768 << // eta + "bit512=" << bit512 << // eta + "misscl=" << misscl << // eta + "chi2perndf=" << chi2perndf << // eta + "tpcncls=" << tpcncls << // eta + "itsncls=" << itsncls << // eta + "tpcchi2=" << tpcchi2 << // eta + "itschi2=" << itschi2 << // eta + "tpcchi2percl=" << tpcchi2percl << // real tpcchi2 which is used + "tpcchi2perndf=" << tpcchi2perndf << // eta + "oldtpcchi2perndf=" << oldtpcchi2perndf << // eta + "charge=" << charge << // eta + "istpconly=" << istpconly << // eta + "istpcconst=" << istpcconst << // eta + "isglobalconst=" << isglobalconst << // eta + "tpcncrossedrows=" << tpcncrossedrows << // eta + "tpctgl=" << tpctgl << // eta + "tpcsignaln=" << tpcsignaln << // eta + // + "rBitDef=" << fTrackBitDef << + "rEtaAcc=" << bEtaAcc << + "rPtAcc=" << bPtAcc << + "rPrim=" << bPrim << + "rPhysicalPrim=" << bPhysicalPrim << + "rPDGcode=" << fPDGcode << + "rChi2Dof=" << fChi2Dof << + "rNcls=" <GetPdgCode())==211)||(fabs(mcTrack->GetPdgCode())==2212)||(fabs(mcTrack->GetPdgCode())==321)); + Bool_t bEtaAcc = (mcTrack->Eta() > fEtaMax || mcTrack->Eta() < fEtaMin) ; + Bool_t bPtAcc = (mcTrack->Pt() < fPtmin|| mcTrack->Pt() > fPtmax); + Bool_t bPrim = (mcTrack->IsPrimary()); + Bool_t bPhysicalPrim = (mcTrack->IsPhysicalPrimary()); + Int_t fPDGcode = mcTrack->GetPdgCode(); + Int_t fCharge = mcTrack->Charge(); + Bool_t fChargeCond = (mcTrack->Charge()!=-3 && mcTrack->Charge()!=+3); + Float_t pTMCgen = mcTrack->Pt(); + Float_t phiMCgen = mcTrack->Phi(); + Float_t etaMCgen = mcTrack->Eta(); + Float_t chargeGen = mcTrack->Eta(); + // + if (fTreeSRedirector){ + (*fTreeSRedirector)<<"mcGen"<< + "rEtaAcc=" << bEtaAcc << + "rPtAcc=" << bPtAcc << + "rPrim=" << bPrim << + "rPhysicalPrim=" << bPhysicalPrim << + "rPDGcode=" << fPDGcode << + "rCharge=" << fCharge << + "rPdgCond=" << bPdgCond << + "rcharge=" << chargeGen<< // transverse momentum + "rpT=" << pTMCgen<< // transverse momentum + "reta=" << etaMCgen << // mc eta + "rphi=" << phiMCgen << // mc eta + "rcent=" << Cent << // Centrality + "rvZ=" << PVz << //PVz + "\n"; + } + +} +//_____________________________________________________________________________ +void AliAnalysisTaskLegendreCoef_local::DumpRaw(AliAODEvent *fAOD, AliAODTrack *trackAOD) +{ + + // + // Dump information for the track cut tuning + Int_t nTPCClusters = fAOD->GetNumberOfTPCClusters(); + Int_t nITSClusters = 0; + AliVMultiplicity *multiObj = fAOD->GetMultiplicity(); + for(Int_t i=2;i<6;i++) nITSClusters += multiObj->GetNumberOfITSClusters(i); + // + Float_t naodtracks = fAOD->GetNumberOfTracks(); + Float_t pt = trackAOD->Pt(); + Double_t chi2perndf = trackAOD->Chi2perNDF(); + UShort_t tpcncls = trackAOD->GetTPCncls(); + Double_t tpcchi2 = trackAOD->GetTPCchi2(); + Double_t tpcchi2percl = trackAOD->GetTPCchi2perCluster(); + Double_t tpcchi2perndf = trackAOD->GetTPCchi2perNDF(); + Double_t oldtpcchi2perndf = trackAOD->GetOldTPCchi2perNDF(); + Short_t charge = trackAOD->Charge(); + Bool_t istpconly = trackAOD->IsTPCOnly(); + Bool_t istpcconst = trackAOD->IsTPCConstrained(); + Bool_t isglobalconst = trackAOD->IsGlobalConstrained(); + UShort_t tpcncrossedrows = trackAOD->GetTPCNCrossedRows(); + Double_t ptot = trackAOD->GetTPCmomentum(); + Double_t tpctgl = trackAOD->GetTPCTgl(); + Double_t tpcsignaln = trackAOD->GetTPCsignalN(); + Bool_t bit96 = trackAOD->TestFilterBit(96); + Bool_t bit128 = trackAOD->TestFilterBit(128); + Bool_t bit16 = trackAOD->TestFilterBit(16); + Bool_t bit768 = trackAOD->TestFilterBit(768); + Bool_t bit512 = trackAOD->TestFilterBit(512); + Double_t dEdx = trackAOD->GetTPCsignal(); + Float_t pv[2],cov[3]; + trackAOD->GetImpactParameters(pv,cov); + Double_t leta = trackAOD->Eta(); + Double_t p = trackAOD->P(); + Double_t phi = trackAOD->Phi(); + Double_t theta = trackAOD->Theta(); + Float_t misscl = trackAOD->GetTPCClusterInfo(3,0,0,159); + Float_t itsncls = trackAOD->GetITSNcls(); + Double_t itschi2 = trackAOD->GetITSchi2(); + // + // Variables from as you use + Bool_t fTrackBitDef = trackAOD->TestFilterBit(fBit); + Bool_t bEtaAcc = (trackAOD->Eta() > fEtaMax || trackAOD->Eta() < fEtaMin) ; + Bool_t bPtAcc = (trackAOD->Pt() < fPtmin|| trackAOD->Pt() > fPtmax); + Float_t fChi2Dof = trackAOD->Chi2perNDF(); + Int_t fNcls = trackAOD->GetTPCNcls(); + Int_t fNcrows = trackAOD->GetTPCNCrossedRows(); + // + if (fTreeSRedirector){ + (*fTreeSRedirector)<<"Raw"<< + "tpcclmult=" << nTPCClusters << // eta + "itsclmult=" << nITSClusters << // eta + "naodtracks=" << naodtracks << // eta + "dEdx=" << dEdx << // eta + "phi=" << phi << // eta + "theta=" << theta << // eta + "ptot=" << ptot << // eta + "pt=" << pt << // eta + "p=" << p << // eta + "eta=" << leta << // eta + "dcaxy=" << pv[0] << // eta + "dcaz=" << pv[1] << // eta + "cov0=" << cov[0] << // eta + "cov1=" << cov[1] << // eta + "cov2=" << cov[2] << // eta + "bit96=" << bit96 << // eta + "bit128=" << bit128 << // eta + "bit16=" << bit16 << // eta + "bit768=" << bit768 << // eta + "bit512=" << bit512 << // eta + "misscl=" << misscl << // eta + "chi2perndf=" << chi2perndf << // eta + "tpcncls=" << tpcncls << // eta + "itsncls=" << itsncls << // eta + "tpcchi2=" << tpcchi2 << // eta + "itschi2=" << itschi2 << // eta + "tpcchi2percl=" << tpcchi2percl << // real tpcchi2 which is used + "tpcchi2perndf=" << tpcchi2perndf << // eta + "oldtpcchi2perndf=" << oldtpcchi2perndf << // eta + "charge=" << charge << // eta + "istpconly=" << istpconly << // eta + "istpcconst=" << istpcconst << // eta + "isglobalconst=" << isglobalconst << // eta + "tpcncrossedrows=" << tpcncrossedrows << // eta + "tpctgl=" << tpctgl << // eta + "tpcsignaln=" << tpcsignaln << // eta + // + "rBitDef=" << fTrackBitDef << + "rEtaAcc=" << bEtaAcc << + "rPtAcc=" << bPtAcc << + "rChi2Dof=" << fChi2Dof << + "rNcls=" <(InputEvent()); + if(!fAOD) return; + + if(fIsPileUpCuts){ + fEventCuts.fUseITSTPCCluCorrelationCut = fPileUpLevel; + if (!fEventCuts.AcceptEvent(fAOD)) return; + } + + TClonesArray *stack =0; + if(fIsMC) { + TList *lst = fAOD->GetList(); + stack = (TClonesArray*)lst->FindObject(AliAODMCParticle::StdBranchName()); + if(!stack) return; + } + + //making a cut in pvz -8 to 8cm + const AliAODVertex *PrimaryVertex = fAOD->GetVertex(0); + if(!PrimaryVertex) return; + Float_t PVz = PrimaryVertex->GetZ(); + if(fabs(PVz)>fPVzMax) return; + if(fabs(PVz)0) return; + } + + AliMultSelection *MultSelection = (AliMultSelection*)fAOD->FindListObject("MultSelection"); + if(!MultSelection) return; + + Float_t Cent = MultSelection->GetMultiplicityPercentile("V0M"); //centrality + //mCentCL0 = MultSelection->GetMultiplicityPercentile("CL0"); + //mCentCL1 = MultSelection->GetMultiplicityPercentile("CL1"); + if(Cent>70.0 || Cent<0.01) return; + double centbins[9] = {0.01,5,10,20,30,40,50,60,70}; + TAxis *centaxis = new TAxis(8,centbins); + TH1D *posSignal, *negSignal, *chargedSignal; + TH1D *MCposSignal, *MCnegSignal, *MCchargedSignal; + + posSignal = new TH1D("PosSignal", "postrack;eta;centrality", fNetabins,fEtaMin,fEtaMax); + negSignal = new TH1D("NegSignal", "postrack;eta;centrality", fNetabins,fEtaMin,fEtaMax); + chargedSignal = new TH1D("chargedSignal", "postrack;eta;centrality", fNetabins,fEtaMin,fEtaMax); + MCposSignal = new TH1D("MCPosSignal", "postrack;eta;centrality", fNetabins,fEtaMin,fEtaMax); + MCnegSignal = new TH1D("MCNegSignal", "postrack;eta;centrality", fNetabins,fEtaMin,fEtaMax); + MCchargedSignal = new TH1D("MCchargedSignal", "postrack;eta;centrality", fNetabins,fEtaMin,fEtaMax); + + + if(fIsMC){ + int nMCTracks; + if (!stack) nMCTracks = 0; + else nMCTracks = stack->GetEntries(); + + if(fIsPileUpCuts){ + AliAODMCHeader *mcHeader = 0; + mcHeader = (AliAODMCHeader*)fAOD->GetList()->FindObject(AliAODMCHeader::StdBranchName()); + if(!mcHeader) { + printf("AliAnalysisTaskSEHFTreeCreator::UserExec: MC header branch not found!\n"); + return; + } + Bool_t isPileupInGeneratedEvent = kFALSE; + isPileupInGeneratedEvent = AliAnalysisUtils::IsPileupInGeneratedEvent(mcHeader,fGenName); + if(isPileupInGeneratedEvent) return; + } + + for (Int_t i(0); i < nMCTracks; i++) { + AliAODMCParticle *p1=(AliAODMCParticle*)stack->UncheckedAt(i); + if (!p1) continue; + if(p1->Charge()==0)continue;//only get charged tracks + if(p1->Charge()!=-3 && p1->Charge()!=+3) continue;// x3 by convention + if(!p1->IsPrimary()) continue; + if(!p1->IsPhysicalPrimary()) continue; + if(p1->Eta() > fEtaMax || p1->Eta()Pt() < fPtmin|| p1->Pt() > fPtmax) continue; + if((fabs(p1->GetPdgCode())==211)||(fabs(p1->GetPdgCode())==2212)||(fabs(p1->GetPdgCode())==321)){ + // calculate signal + MCchargedSignal->Fill(p1->Eta()); + if(p1->Charge() > 0) MCposSignal->Fill(p1->Eta()); + if(p1->Charge() < 0) MCnegSignal->Fill(p1->Eta()); + } + } + + + for(Int_t i(0); i < fAOD->GetNumberOfTracks(); i++) { // loop over all these tracks + AliAODTrack* track = static_cast(fAOD->GetTrack(i)); // get a track (type AliAODTrack) from the event + if(!track) continue; + if(track->Charge()==0)continue;//only get charged tracks + if(track->Eta() > fEtaMax || track->Eta() < fEtaMin) continue;//eta cut + if(track->Pt() < fPtmin|| track->Pt() > fPtmax) continue; //pt cut + if(track->GetTPCNcls()GetTPCNCrossedRows()Chi2perNDF() > fChi2DoF) continue;// cut in TPC Ncls, crossed rows and chi2/dof + if(track->TestFilterBit(fBit)) { + if(!fIsMC){ + //build signal for raw data + chargedSignal->Fill(track->Eta()); + if(track->Charge() > 0) posSignal->Fill(track->Eta()); + if(track->Charge() < 0) negSignal->Fill(track->Eta()); + }else{ + //build signal for MC reconstructed + int label = TMath::Abs(track->GetLabel()); + AliAODMCParticle* mcTrack = dynamic_cast(stack->At(label)); + if (!mcTrack) continue; + if(mcTrack->Charge()==0)continue;//only get charged tracks + if(!mcTrack->IsPrimary()) continue; + if(!mcTrack->IsPhysicalPrimary()) continue; + if((fabs(mcTrack->GetPdgCode())==211)||(fabs(mcTrack->GetPdgCode())==2212)||(fabs(mcTrack->GetPdgCode())==321)){ + chargedSignal->Fill(mcTrack->Eta()); + if(mcTrack->Charge() > 0) posSignal->Fill(mcTrack->Eta()); + if(mcTrack->Charge() < 0) negSignal->Fill(mcTrack->Eta()); + } + } + } + } + + //calculate coefficients if histogram is full + int ncentbin = centaxis->FindBin(Cent); + int neventcent = fNeventCentHist->GetBinContent(ncentbin); + + if(chargedSignal->Integral()>0) { + TH1D *chargedBG = fChargedBackgroundHist->ProjectionX("chargedbackground", ncentbin,ncentbin); + // printf("BACKGROUND normal is %f\n",chargedBG->Integral()); + chargedBG->Scale(1.0/neventcent); + BuildCoefficients(chargedSignal, chargedBG, Cent, ""); + if(posSignal->Integral()>0) { + TH1D *posBG = fPosBackgroundHist->ProjectionX("posbackground", ncentbin,ncentbin); + posBG->Scale(1.0/neventcent); + BuildCoefficients(posSignal, posBG, Cent, "pos"); + } + if(negSignal->Integral()>0) { + TH1D *negBG = fNegBackgroundHist->ProjectionX("negbackground", ncentbin,ncentbin); + negBG->Scale(1.0/neventcent); + BuildCoefficients(negSignal, negBG, Cent, "neg"); + } + } + + + //calculate coefficients if histogram is full + if(MCchargedSignal->Integral()>0) { + TH1D *MCchargedBG = fMCChargedBackgroundHist->ProjectionX("MCchargedbackground", ncentbin,ncentbin); + MCchargedBG->Scale(1.0/neventcent); + BuildCoefficients(MCchargedSignal, MCchargedBG, Cent, "MC"); + if(MCposSignal->Integral()>0) { + TH1D *MCposBG = fMCPosBackgroundHist->ProjectionX("MCposbackground", ncentbin,ncentbin); + MCposBG->Scale(1.0/neventcent); + BuildCoefficients(MCposSignal, MCposBG, Cent, "posMC"); + } + if(MCnegSignal->Integral()>0) { + TH1D *MCnegBG = fMCNegBackgroundHist->ProjectionX("negbackground", ncentbin,ncentbin); + MCnegBG->Scale(1.0/neventcent); + BuildCoefficients(MCnegSignal, MCnegBG, Cent, "negMC"); + } + } + } + delete (posSignal); + delete (negSignal); + delete (chargedSignal); + delete (MCposSignal); + delete (MCnegSignal); + delete (MCchargedSignal); + return; +} +//_____________________________________________________________________________ +void AliAnalysisTaskLegendreCoef_local::BuildCoefficients(TH1D *signal, TH1D *background, Float_t centrality, TString type) +{ + TH1D *RanHist[5];//random distribution histograms + int ntracks = signal->Integral(); + int n; + char histname[50]; + printf("tracks is %i\n",ntracks); + + //normalizing signal hist + signal->Divide(background); + // printf("signal normal is %f\n",signal->Integral()); + + for (int s=0; s<5; s++){//5 random histograms + n = sprintf (histname, "RanHist%i", s+1); + RanHist[s] = new TH1D(histname,histname, fNetabins, fEtaMin, fEtaMax); + RanHist[s]->Sumw2(); + } + + //generating random uniform distributions + for (int s=0; s<5; s++){ + RanHist[s]->Reset("ICE"); + for (int rn=0; rnFill(background->GetRandom()); + } + RanHist[s]->Divide(background); + } + + //calculating the an coefficients + ((TProfile*) fOutputList->FindObject("a1"+type))->Fill(centrality, pow(GetSingleAnCoef(1,signal),2.0)); + ((TProfile*) fOutputList->FindObject("a2"+type))->Fill(centrality, pow(GetSingleAnCoef(2,signal),2.0)); + + for (int s=0; s<5; s++){ + ((TProfile*) fOutputList->FindObject("Ra1"+type))->Fill(centrality, pow(GetSingleAnCoef(1,RanHist[s]),2.0)); + ((TProfile*) fOutputList->FindObject("Ra2"+type))->Fill(centrality, pow(GetSingleAnCoef(2,RanHist[s]),2.0)); + } + + for (int s=0; s<5; s++){ + delete (RanHist[s]); + } + return; +} +//_____________________________________________________________________________ +void AliAnalysisTaskLegendreCoef_local::UserExec(Option_t *) +{ + if(fIsBuildBG) BuildBackground(); + if(fIsBuildLG) BuildSignal(); +} +//_____________________________________________________________________________ +Double_t AliAnalysisTaskLegendreCoef_local::GetSingleAnCoef(int order, TH1D *hist) +{ + double coef = 0.0; + double etawidth = (fEtaMax-fEtaMin)/2.0; + for(Int_t i=1;i<=hist->GetNbinsX();i++){ + coef += sqrt((1.0/etawidth)*(order+0.5))*(hist->GetBinContent(i)-1)*LegPol(order,hist->GetBinCenter(i)); + } + coef = coef*hist->GetBinWidth(1); + return coef; +} +//_____________________________________________________________________________ +Double_t AliAnalysisTaskLegendreCoef_local::LegPol(int order, Double_t x){ + double etawidth = (fEtaMax-fEtaMin)/2.0; + if( order == 1 ) return x/etawidth; + if( order == 2 ) return 0.5*(3.0*pow(x/etawidth,2)-1.0); + if( order == 3 ) return 0.5*(5.0*pow(x/etawidth,3)-3.0*x/etawidth); + if( order == 4 ) return (35.0*pow(x/etawidth,4)-30.0*pow(x/etawidth,2)+3.0)/8.0; + else return 0.0; +} +//_____________________________________________________________________________ +void AliAnalysisTaskLegendreCoef_local::Terminate(Option_t *) +{ + // terminate + // called at the END of the analysis (when all events are processed) +} +//_____________________________________________________________________________ \ No newline at end of file diff --git a/PWGCF/EBYE/LongAsymmetry/AliAnalysisTaskLegendreCoef_local.h b/PWGCF/EBYE/LongAsymmetry/AliAnalysisTaskLegendreCoef_local.h new file mode 100644 index 00000000000..256a2aac39c --- /dev/null +++ b/PWGCF/EBYE/LongAsymmetry/AliAnalysisTaskLegendreCoef_local.h @@ -0,0 +1,116 @@ +//////////////////////////////////////////////////////// +// AliAnalysisTaskLegendreCoef_local: +// Description: Analysis task computes the background +// and extracts legendre coefficients from eta dist +// Author: Raquel Quishpe (raquel.quishpe@cern.ch) +//////////////////////////////////////////////////////// + +#ifndef AliAnalysisTaskLegendreCoef_local_H +#define AliAnalysisTaskLegendreCoef_local_H +class TH1; +class THn; +class TH1F; +class TH2D; +class TH3D; +class TList; +class TTree; + +#include "AliAnalysisTaskSE.h" +#include "AliAODMCParticle.h" +#include "AliEventCuts.h" +#include +#define PI 3.1415927 + +class AliAnalysisTaskLegendreCoef_local : public AliAnalysisTaskSE +{ + public: + AliAnalysisTaskLegendreCoef_local(); + AliAnalysisTaskLegendreCoef_local(const char *name); + virtual ~AliAnalysisTaskLegendreCoef_local(); + + virtual void UserCreateOutputObjects(); + virtual void UserExec(Option_t* option); + virtual void Terminate(Option_t* option); + + + void SetMCRead(Bool_t flag) { fIsMC = flag; } + void SetChi2DoF(Double_t Chi2DoF) { fChi2DoF = Chi2DoF; } + void SetNclTPC(Int_t ncl) { fTPCNcls = ncl; } + void SetPtLimits(Double_t ptmin, Double_t ptmax) { fPtmin = ptmin; fPtmax=ptmax; } + void SetEtaMinLimit(Double_t etalowlimit) { fEtaMin = etalowlimit; } + void SetEtaMaxLimit(Double_t etauplimit) { fEtaMax = etauplimit; } + void SetFilterBit(Int_t filterbit) { fBit = filterbit; } + void SetPileUpRead(Bool_t flag) {fIsPileUpCuts = flag;} + void SetBuildBackground(Bool_t flag) {fIsBuildBG = flag; } + void SetBuildLegendre(Bool_t flag) {fIsBuildLG = flag; } + void GetPosBackground(TH2D* hist) { fPosBackgroundHist = hist; } + void GetNegBackground(TH2D* hist) { fNegBackgroundHist = hist; } + void GetChargedBackground(TH2D* hist) { fChargedBackgroundHist = hist; } + void GetMCPosBackground(TH2D* hist) { fMCPosBackgroundHist = hist; } + void GetMCNegBackground(TH2D* hist) { fMCNegBackgroundHist = hist; } + void GetMCChargedBackground(TH2D* hist) { fMCChargedBackgroundHist = hist; } + void GetNeventsCentHist(TH1D* hist) { fNeventCentHist = hist; } + void SetGeneratorName(TString generator) {fGenName = generator; } + void SetPileUpLevel(Int_t level) {fPileUpLevel = level; } + void SetTPCNCrossedRows(UShort_t crossedrows) { fTPCNCrossedRows = crossedrows; } + void SetPVzMinLimit(Float_t pvzmin) {fPVzMin=pvzmin;} + void SetPVzMaxLimit(Float_t pvzmax) {fPVzMax=pvzmax;} + void SetPVzSign(Int_t sign) {fPVzSign=sign;}//-1 then negative pvz, +1 then positive pvz, 0 then absolute value (to test effect from the TPC membrane) + void SetNEtaBins(Int_t Netabins) {fNetabins=Netabins;}//default 16 + + + private: + Double_t GetSingleAnCoef(int order, TH1D *hist); //method to get direct an + Double_t LegPol(int order, Double_t x); + void BuildBackground(); + void DumpMCRec(AliAODEvent *fAOD, AliAODTrack *trackAOD, AliAODMCParticle* mcTrack); + void DumpMCGen(AliAODEvent *fAOD, AliAODMCParticle* mcTrack); + void DumpRaw(AliAODEvent *fAOD, AliAODTrack *trackAOD); + void BuildSignal(); + void BuildCoefficients(TH1D *signal, TH1D *background, Float_t centrality, TString type); + AliAODEvent* fAOD; //! input event + TList* fOutputList; //! output list + + + Bool_t fIsMC; //MC flag + Double_t fChi2DoF; //limit for chi2 + Int_t fTPCNcls; //limit for TPC Ncls + Double_t fPtmin; //min PT + Double_t fPtmax; //max PT + Double_t fEtaMin; //min eta + Double_t fEtaMax; //max eta + Int_t fBit; //filter bit - 96 default + Bool_t fIsPileUpCuts; //pile up cuts flag + Bool_t fIsBuildBG; //build background flag + Bool_t fIsBuildLG; //calculates the legendre coefficients + TH2D* fPosBackgroundHist; //input background histogram for positive tracks (eta,cent) + TH2D* fNegBackgroundHist; //input background histogram for negative tracks (eta,cent) + TH2D* fChargedBackgroundHist; //input background histogram for positive and negative tracks (eta,cent) + TH2D* fMCPosBackgroundHist; //input MC background histogram for positive tracks (eta,cent) + TH2D* fMCNegBackgroundHist; //input MC background histogram for negative tracks (eta,cent) + TH2D* fMCChargedBackgroundHist; //input MC background histogram for positive and negative tracks (eta,cent) + TH1D* fNeventCentHist; //input Nevents vs centrality histogram + TString fGenName; //MC generator name + Int_t fPileUpLevel; + UShort_t fTPCNCrossedRows; + Float_t fPVzMax; //max PVz + Float_t fPVzMin; //min PVz + Int_t fPVzSign; //sign of PVz + Int_t fNetabins; //number of bins in eta + // + Float_t PVz; // ????? + Float_t Cent; //centrality + TTreeSRedirector *fTreeSRedirector; //! temp tree to dump output + TTree *fTreeMCrec; // tree for reconstructed + TTree *fTreeMCgen; // tree for generatec + TTree *fTreeRaw; // tree for generatec + + AliEventCuts fEventCuts; + + AliAnalysisTaskLegendreCoef_local(const AliAnalysisTaskLegendreCoef_local&); // not implemented + AliAnalysisTaskLegendreCoef_local& operator=(const AliAnalysisTaskLegendreCoef_local&); // not implemented + + ClassDef(AliAnalysisTaskLegendreCoef_local, 1); +}; + +#endif From 1ccac5aca36d58af95345f1ee7ae3cbdab2f98a7 Mon Sep 17 00:00:00 2001 From: Raquel Quishpe Date: Wed, 9 Mar 2022 13:36:39 +0100 Subject: [PATCH 12/14] efficiency for legendre coef --- PWGCF/EBYE/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/PWGCF/EBYE/CMakeLists.txt b/PWGCF/EBYE/CMakeLists.txt index ef823440a5c..1b1b81b3a5b 100644 --- a/PWGCF/EBYE/CMakeLists.txt +++ b/PWGCF/EBYE/CMakeLists.txt @@ -120,6 +120,7 @@ set(SRCS LongAsymmetry/AliAnalysisFBMultFluct.cxx LongAsymmetry/AliAnalysisTaskLongFluctuations.cxx LongAsymmetry/AliAnalysisTaskLegendreCoef.cxx + LongAsymmetry/AliAnalysisTaskLegendreCoef_local.cxx LongAsymmetry/AliAnalysisTaskEtaDist.cxx StronglyIntensiveCorrelations/AliAnalysisTaskStronglyIntensiveCorrTree.cxx FBCorrelationsWithPID/AliAnalysisFBCorrelationsWithPID.cxx From 2010128347a8a24920092f27f0504917af09fceb Mon Sep 17 00:00:00 2001 From: Raquel Quishpe Date: Wed, 9 Mar 2022 13:37:15 +0100 Subject: [PATCH 13/14] efficiency for legendre coef --- PWGCF/EBYE/PWGCFebyeLinkDef.h | 1 + 1 file changed, 1 insertion(+) diff --git a/PWGCF/EBYE/PWGCFebyeLinkDef.h b/PWGCF/EBYE/PWGCFebyeLinkDef.h index d8ff7f8014c..8ae46753e31 100644 --- a/PWGCF/EBYE/PWGCFebyeLinkDef.h +++ b/PWGCF/EBYE/PWGCFebyeLinkDef.h @@ -83,6 +83,7 @@ #pragma link C++ class AliAnalysisFBMultFluct+; #pragma link C++ class AliAnalysisTaskLongFluctuations+; #pragma link C++ class AliAnalysisTaskLegendreCoef+; +#pragma link C++ class AliAnalysisTaskLegendreCoef_local+; #pragma link C++ class AliAnalysisTaskEtaDist+; From afb67f5542e0fbcebea9627108f104ca32c36658 Mon Sep 17 00:00:00 2001 From: Hikari Murakami <26593188+hmurakam@users.noreply.github.com> Date: Wed, 9 Mar 2022 22:11:38 +0900 Subject: [PATCH 14/14] Update: more eta params in HM to test w/o low pt constraint --- .../dielectron/files/pp13TeV_Run2_ROOT5.root | Bin 134265 -> 144800 bytes .../dielectron/files/pp13TeV_Run2_ROOT6.root | Bin 109229 -> 117529 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/PWGDQ/dielectron/files/pp13TeV_Run2_ROOT5.root b/PWGDQ/dielectron/files/pp13TeV_Run2_ROOT5.root index 59ac71b6100cc47f0a324dcc38416dcd0ccb21d1..0a1e20788f340e041fd9e4ceb80eeb9ba39a7dff 100644 GIT binary patch delta 9229 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 K8Cw2Rl>QsbG}apc delta 6229 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 BkVpUk delta 6260 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 E0r<~3RR910