1 #include "KinematicsUtils.hxx" 5 Float_t anaUtils::GetParticleMass(ParticleId::ParticleEnum partID ) {
10 if (partID == ParticleId::kElectron || partID == ParticleId::kPositron) {
11 mass = units::mass_electron;
12 }
else if (partID == ParticleId::kPionPlus || partID == ParticleId::kPionMinus) {
13 mass = units::mass_pion_charged;
14 }
else if (partID == ParticleId::kMuon || partID == ParticleId::kAntiMuon) {
15 mass = units::mass_muon;
16 }
else if (partID == ParticleId::kProton || partID == ParticleId::kAntiProton) {
17 mass = units::mass_proton;
18 }
else if (partID == ParticleId::kKaonPlus || partID == ParticleId::kKaonMinus) {
19 mass = units::mass_kaon_charged;
28 Float_t anaUtils::ComputeBetaGamma(Float_t mom, ParticleId::ParticleEnum partID ) {
31 Float_t mass = GetParticleMass(partID);
32 if (mass<0)
return -1;
34 Float_t bg = mom / mass;
39 Float_t anaUtils::ComputeBeta(Float_t mom, ParticleId::ParticleEnum partID ) {
42 Float_t mass = GetParticleMass(partID);
43 if (mass<0)
return -1;
45 Float_t bg = mom / mass;
46 Float_t beta = bg / sqrt(1. + bg * bg);
56 if (mass1 < 0. || mass2 < 0.)
62 Float_t energy = sqrt(mass1*mass1 + pow(part1.
Momentum, 2));
64 TLorentzVector lvect1(vect, energy);
69 energy = sqrt(mass2*mass2 + pow(part2.
Momentum, 2));
71 TLorentzVector lvect2(vect, energy);
73 return (lvect1 + lvect2).M();
106 if (PTinv==0)
return -999;
107 Float_t pt = 1/PTinv;
109 if (u_t==0)
return -999;
119 Float_t u_t = sqrt(1-pow(part.
Direction[0],2));
130 Float_t mass_proton = 938.272;
131 Float_t ene_lepton = sqrt(mom_lepton * mom_lepton + mass_lepton * mass_lepton);
132 return 0.5 * (2 * mass_proton * ene_lepton - mass_lepton * mass_lepton) /
133 (mass_proton - ene_lepton + mom_lepton * costheta_lepton);
145 Float_t reduced_nMass = units::mass_neutron - bindingEnergy;
148 Float_t Emu = sqrt( (mass_lepton*mass_lepton) + (mom_lepton*mom_lepton) );
151 Float_t eNuRec = ( (units::mass_proton*units::mass_proton)
152 - (mass_lepton*mass_lepton)
153 - (reduced_nMass*reduced_nMass)
154 + (2 * Emu * reduced_nMass)
156 2*(reduced_nMass + (mom_lepton * costheta_lepton) - Emu)
172 Float_t Q2 =
ComputeQ2(mom_lepton, mass_lepton,costheta_lepton,eNuRec);
178 Float_t
anaUtils::ComputeQ2(Float_t mom_lepton, Float_t mass_lepton, Float_t costheta_lepton, Float_t e_neutrino) {
184 Float_t Emu = sqrt( pow(mass_lepton,2) + pow(mom_lepton,2) );
187 Float_t Q2 = (2 * e_neutrino * (Emu - (mom_lepton * costheta_lepton)) - pow(mass_lepton,2)) / 1e6;
195 static Float_t uf[3] = {0, 0, 0};
196 TVector3 u(end[0]-start[0], end[1]-start[1], end[2]-start[2]);
209 return sqrt(pow(mom, 2) + pow(mass, 2)) - mass;
216 return thisvec - thisvec.Dot(nudir)/nudir.Mag2() * nudir;
222 TVector3 nudirv = TVector3(nudir);
223 TVector3 mudirv = TVector3(mudir);
224 TVector3 pdirv = TVector3(pdir);
225 return TMath::Pi()-ProjectTransverse(nudirv, mudirv).Angle(ProjectTransverse(nudirv, pdirv));
231 TVector3 nudirv = TVector3(nudir);
232 TVector3 thisdirv = TVector3(thisdir);
234 return (thismom * projectedv).Mag();
Float_t NeutrinoERecCCQE(Float_t mom_lepton, Float_t mass_lepton, Float_t costheta_lepton)
Float_t ComputeRecQ2CCQE(Float_t mom_lepton, Float_t mass_lepton, Float_t costheta_lepton)
/// Extension to AnaParticleB containing momentum and charge info
Float_t ComputeQ2(Float_t mom_lepton, Float_t mass_lepton, Float_t costheta_lepton, Float_t energy_neutrino)
Float_t ComputeMomentumFromInversePT(const AnaParticleB &part, Float_t PTinv)
compute the total momentum given the part and the inverse transverse momentum
Float_t ComputeRecNuEnergyCCQE(Float_t mom_lepton, Float_t mass_lepton, Float_t costheta_lepton, Float_t bindingEnergy=25.)
Float_t Momentum
The initial momentum of the true particle.
TVector3 ProjectTransverse(TVector3 &nudir, TVector3 &thisvec)
Float_t Momentum
The reconstructed momentum of the particle, at the start position.
Representation of a true Monte Carlo trajectory/particle.
Float_t ComputeInversePT(const AnaDetCrossingB &cross, bool entrance=true)
Compute inverse PT given an AnaDetCrossing.
Float_t GetTransverseMom(const Float_t *nudir, const Float_t *thisdir, Float_t thismom)
Get the transverse momentum.
Float_t ComputeInvariantMass(const AnaParticleMomB &part1, const AnaParticleMomB &part2, Float_t mass1, Float_t mass2)
Get invariant mass given two AnaParticleB's and corresponding masses.
Float_t DirectionStart[3]
The reconstructed start direction of the particle.
Float_t * GetSLineDir(Float_t *start, Float_t *end)
Direction assuming straight line between given start and end points.
Float_t ComputeKineticEnergy(Float_t mom, Float_t mass)
Compute kinetic energy given momentum and mass.
Representation of a reconstructed particle (track or shower).
Float_t Direction[3]
The initial direction of the true particle.
Float_t GetDPhi(const Float_t *nudir, const Float_t *mudir, const Float_t *pdir)
Returns pi-(the angle between muon and proton). Should be delta-fn in ideal back2back.