@@ -1362,6 +1362,10 @@ class VarManager : public TObject
13621362 static void FillDileptonTrackVertexing (C const & collision, T1 const & lepton1, T1 const & lepton2, T1 const & track, float * values);
13631363 template <typename T1, typename T2>
13641364 static void FillDileptonHadron (T1 const & dilepton, T2 const & hadron, float * values = nullptr , float hadronMass = 0 .0f );
1365+ template <typename T1, typename T2, typename T3>
1366+ static void FillEnergyCorrelatorTriple (T1 const & lepton1, T2 const & lepton2, T3 const & hadron, float * values = nullptr , float Translow = 1 . / 3 , float Transhigh = 2 . / 3 , bool applyFitMass = false , float sidebandMass = 0 .0f );
1367+ template <int pairType, typename T1, typename T2, typename T3, typename T4, typename T5>
1368+ static void FillEnergyCorrelatorsUnfoldingTriple (T1 const & lepton1, T2 const & lepton2, T3 const & hadron, T4 const & track, T5 const & t1, float * values = nullptr );
13651369 template <typename T1, typename T2>
13661370 static void FillEnergyCorrelator (T1 const & dilepton, T2 const & hadron, float * values = nullptr , float Translow = 1 . / 3 , float Transhigh = 2 . / 3 , bool applyFitMass = false , float sidebandMass = 0 .0f );
13671371 template <typename T1, typename T2>
@@ -5872,6 +5876,114 @@ void VarManager::FillEnergyCorrelator(T1 const& dilepton, T2 const& hadron, floa
58725876 }
58735877 }
58745878}
5879+
5880+ template <typename T1, typename T2, typename T3>
5881+ void VarManager::FillEnergyCorrelatorTriple (T1 const & lepton1, T2 const & lepton2, T3 const & hadron, float * values, float Translow, float Transhigh, bool applyFitMass, float sidebandMass)
5882+ {
5883+ float m1 = o2::constants::physics::MassElectron;
5884+ float m2 = o2::constants::physics::MassElectron;
5885+
5886+ ROOT::Math::PtEtaPhiMVector v_lepton1 (lepton1.pt (), lepton1.eta (), lepton1.phi (), m1);
5887+ ROOT::Math::PtEtaPhiMVector v_lepton2 (lepton2.pt (), lepton2.eta (), lepton2.phi (), m2);
5888+ ROOT::Math::PtEtaPhiMVector dilepton = v_lepton1 + v_lepton2;
5889+
5890+ float dileptonmass = o2::constants::physics::MassJPsi;
5891+ if (applyFitMass) {
5892+ dileptonmass = dilepton.mass ();
5893+ }
5894+ if (applyFitMass && sidebandMass > 0 ) {
5895+ dileptonmass = sidebandMass;
5896+ }
5897+
5898+ if (fgUsedVars[kCosChi ] || fgUsedVars[kECWeight ] || fgUsedVars[kCosTheta ] || fgUsedVars[kEWeight_before ] || fgUsedVars[kPtDau ] || fgUsedVars[kEtaDau ] || fgUsedVars[kPhiDau ] || fgUsedVars[kCosChi_randomPhi_trans ] || fgUsedVars[kCosChi_randomPhi_toward ] || fgUsedVars[kCosChi_randomPhi_away ]) {
5899+ values[kdileptonmass] = dileptonmass;
5900+ ROOT::Math::PtEtaPhiMVector v1 (dilepton.pt (), dilepton.eta (), dilepton.phi (), dileptonmass);
5901+ ROOT::Math::PtEtaPhiMVector v2 (hadron.pt (), hadron.eta (), hadron.phi (), o2::constants::physics::MassPionCharged);
5902+ values[kCosChi ] = LorentzTransformJpsihadroncosChi (" coschi" , v1, v2);
5903+ float E_boost = LorentzTransformJpsihadroncosChi (" weight_boost" , v1, v2);
5904+ values[kECWeight ] = E_boost / v1.M ();
5905+ values[kCosTheta ] = LorentzTransformJpsihadroncosChi (" costheta" , v1, v2);
5906+ values[kEWeight_before ] = v2.Pt () / v1.M ();
5907+ values[kPtDau ] = v2.pt ();
5908+ values[kEtaDau ] = v2.eta ();
5909+ values[kPhiDau ] = RecoDecay::constrainAngle (v2.phi (), -o2::constants::math::PIHalf);
5910+
5911+ float deltaphi = RecoDecay::constrainAngle (v1.phi () - v2.phi (), -o2::constants::math::PI);
5912+ values[kDeltaPhi ] = deltaphi;
5913+ values[kDeltaEta ] = v1.eta () - v2.eta ();
5914+ values[kCosChi_randomPhi_trans ] = -999 .9f ;
5915+ values[kCosChi_randomPhi_toward ] = -999 .9f ;
5916+ values[kCosChi_randomPhi_away ] = -999 .9f ;
5917+
5918+ values[kdeltaphi_randomPhi_trans] = -999 .9f ;
5919+ values[kdeltaphi_randomPhi_toward] = -999 .9f ;
5920+ values[kdeltaphi_randomPhi_away] = -999 .9f ;
5921+
5922+ float randomPhi_trans = -o2::constants::math::PIHalf;
5923+ float randomPhi_toward = -o2::constants::math::PIHalf;
5924+ float randomPhi_away = -o2::constants::math::PIHalf;
5925+
5926+ if ((deltaphi > -Transhigh * TMath::Pi () && deltaphi < -Translow * TMath::Pi ()) || (deltaphi > Translow * TMath::Pi () && deltaphi < Transhigh * TMath::Pi ())) {
5927+ randomPhi_trans = gRandom ->Uniform (-o2::constants::math::PIHalf, 3 . * o2::constants::math::PIHalf);
5928+ randomPhi_toward = gRandom ->Uniform (-o2::constants::math::PIHalf, 3 . * o2::constants::math::PIHalf);
5929+ randomPhi_away = gRandom ->Uniform (-o2::constants::math::PIHalf, 3 . * o2::constants::math::PIHalf);
5930+
5931+ ROOT::Math::PtEtaPhiMVector v2_randomPhi_trans (v2.pt (), v2.eta (), randomPhi_trans, o2::constants::physics::MassPionCharged);
5932+ values[kCosChi_randomPhi_trans ] = LorentzTransformJpsihadroncosChi (" coschi" , v1, v2_randomPhi_trans);
5933+ values[kWeight_randomPhi_trans ] = LorentzTransformJpsihadroncosChi (" weight_boost" , v1, v2_randomPhi_trans) / v1.M ();
5934+
5935+ ROOT::Math::PtEtaPhiMVector v2_randomPhi_toward (v2.pt (), v2.eta (), randomPhi_toward, o2::constants::physics::MassPionCharged);
5936+ values[kCosChi_randomPhi_toward ] = LorentzTransformJpsihadroncosChi (" coschi" , v1, v2_randomPhi_toward);
5937+ values[kWeight_randomPhi_toward ] = LorentzTransformJpsihadroncosChi (" weight_boost" , v1, v2_randomPhi_toward) / v1.M ();
5938+
5939+ ROOT::Math::PtEtaPhiMVector v2_randomPhi_away (v2.pt (), v2.eta (), randomPhi_away, o2::constants::physics::MassPionCharged);
5940+ values[kCosChi_randomPhi_away ] = LorentzTransformJpsihadroncosChi (" coschi" , v1, v2_randomPhi_away);
5941+ values[kWeight_randomPhi_away ] = LorentzTransformJpsihadroncosChi (" weight_boost" , v1, v2_randomPhi_away) / v1.M ();
5942+
5943+ values[kdeltaphi_randomPhi_trans] = RecoDecay::constrainAngle (v1.phi () - randomPhi_trans, -o2::constants::math::PIHalf);
5944+ values[kdeltaphi_randomPhi_toward] = RecoDecay::constrainAngle (v1.phi () - randomPhi_toward, -o2::constants::math::PIHalf);
5945+ values[kdeltaphi_randomPhi_away] = RecoDecay::constrainAngle (v1.phi () - randomPhi_away, -o2::constants::math::PIHalf);
5946+ }
5947+ }
5948+ }
5949+
5950+ template <int pairType, typename T1, typename T2, typename T3, typename T4, typename T5>
5951+ void VarManager::FillEnergyCorrelatorsUnfoldingTriple (T1 const & lepton1, T2 const & lepton2, T3 const & hadron, T4 const & track, T5 const & t1, float * values)
5952+ {
5953+ if (fgUsedVars[kMCCosChi_gen ] || fgUsedVars[kMCWeight_gen ] || fgUsedVars[kMCdeltaeta_gen ] || fgUsedVars[kMCCosChi_rec ] || fgUsedVars[kMCWeight_rec ] || fgUsedVars[kMCdeltaeta_rec ]) {
5954+ // energy correlators
5955+
5956+ float m1 = o2::constants::physics::MassElectron;
5957+ float m2 = o2::constants::physics::MassElectron;
5958+
5959+ ROOT::Math::PtEtaPhiMVector v_lepton1 (lepton1.pt (), lepton1.eta (), lepton1.phi (), m1);
5960+ ROOT::Math::PtEtaPhiMVector v_lepton2 (lepton2.pt (), lepton2.eta (), lepton2.phi (), m2);
5961+ ROOT::Math::PtEtaPhiMVector dilepton = v_lepton1 + v_lepton2;
5962+
5963+ float MassHadron;
5964+ if constexpr (pairType == kJpsiHadronMass ) {
5965+ MassHadron = TMath::Sqrt (t1.e () * t1.e () - t1.p () * t1.p ());
5966+ }
5967+ if constexpr (pairType == kJpsiPionMass ) {
5968+ MassHadron = o2::constants::physics::MassPionCharged;
5969+ }
5970+ ROOT::Math::PtEtaPhiMVector v1_gen (track.pt (), track.eta (), track.phi (), o2::constants::physics::MassJPsi);
5971+ ROOT::Math::PtEtaPhiMVector v2_gen (t1.pt (), t1.eta (), t1.phi (), MassHadron);
5972+ float E_boost_gen = LorentzTransformJpsihadroncosChi (" weight_boost" , v1_gen, v2_gen);
5973+ float CosChi_gen = LorentzTransformJpsihadroncosChi (" coschi" , v1_gen, v2_gen);
5974+ values[kMCCosChi_gen ] = CosChi_gen;
5975+ values[kMCWeight_gen ] = E_boost_gen / o2::constants::physics::MassJPsi;
5976+ values[kMCdeltaeta_gen ] = track.eta () - t1.eta ();
5977+
5978+ ROOT::Math::PtEtaPhiMVector v1_rec (dilepton.pt (), dilepton.eta (), dilepton.phi (), dilepton.mass ());
5979+ ROOT::Math::PtEtaPhiMVector v2_rec (hadron.pt (), hadron.eta (), hadron.phi (), o2::constants::physics::MassPionCharged);
5980+ values[kMCCosChi_rec ] = LorentzTransformJpsihadroncosChi (" coschi" , v1_rec, v2_rec);
5981+ float E_boost_rec = LorentzTransformJpsihadroncosChi (" weight_boost" , v1_rec, v2_rec);
5982+ values[kMCWeight_rec ] = E_boost_rec / v1_rec.M ();
5983+ values[kMCdeltaeta_rec ] = dilepton.eta () - hadron.eta ();
5984+ }
5985+ }
5986+
58755987template <typename T1, typename T2>
58765988void VarManager::FillDileptonPhoton (T1 const & dilepton, T2 const & photon, float * values)
58775989{
0 commit comments