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