#include <MultiProngTauSolver.h>
|
static void | analyticESolver (TLorentzVector &nu_plus, TLorentzVector &nu_minus, const TLorentzVector &A1, bool &isReal) |
|
static LorentzVectorParticle | estimateNu (const LorentzVectorParticle &a1, const TVector3 &pv, int ambiguity, TLorentzVector &tau) |
|
static void | numericalESolver (TLorentzVector &nu_plus, TLorentzVector &nu_minus, const TLorentzVector &A1, bool &isReal) |
|
static void | quadratic (double &x_plus, double &x_minus, double a, double b, double c, bool &isReal) |
|
static TVectorT< double > | rotateToTauFrame (const TVectorT< double > &inpar) |
|
static bool | setTauDirectionatThetaGJMax (const TLorentzVector &a1, double &theta, double &phi, double scale=1.0) |
|
static void | solveByRotation (const TVector3 &TauDir, const TLorentzVector &A1, TLorentzVector &Tau_plus, TLorentzVector &Tau_minus, TLorentzVector &nu_plus, TLorentzVector &nu_minus, bool &isReal, bool rotateback=true) |
|
static double | thetaGJMax (const TLorentzVector &a1) |
|
Definition at line 17 of file MultiProngTauSolver.h.
◆ Ambiguity
◆ MultiProngTauSolver()
tauImpactParameter::MultiProngTauSolver::MultiProngTauSolver |
( |
| ) |
|
|
inline |
◆ ~MultiProngTauSolver()
virtual tauImpactParameter::MultiProngTauSolver::~MultiProngTauSolver |
( |
| ) |
|
|
inlinevirtual |
◆ analyticESolver()
void MultiProngTauSolver::analyticESolver |
( |
TLorentzVector & |
nu_plus, |
|
|
TLorentzVector & |
nu_minus, |
|
|
const TLorentzVector & |
A1, |
|
|
bool & |
isReal |
|
) |
| |
|
static |
Definition at line 18 of file MultiProngTauSolver.cc.
22 double a = (A1.Pz() * A1.Pz()) / (A1.E() * A1.E()) - 1.0;
24 double b = 2.0 * K * A1.Pz() / A1.E();
25 double c = K * K - A1.Pt() * A1.Pt();
26 double z_plus(0), z_minus(0);
28 nu_plus = TLorentzVector(-A1.Px(), -A1.Py(), z_plus,
sqrt(z_plus * z_plus + A1.Pt() * A1.Pt()));
29 nu_minus = TLorentzVector(-A1.Px(), -A1.Py(), z_minus,
sqrt(z_minus * z_minus + A1.Pt() * A1.Pt()));
References a, b, c, quadratic(), mathSSE::sqrt(), and tauImpactParameter::PDGInfo::tau_mass().
Referenced by solveByRotation().
◆ estimateNu()
Definition at line 130 of file MultiProngTauSolver.cc.
134 TLorentzVector lorentzA1 = a1.
p4();
136 TVector3 tauFlghtDir =
sv -
pv;
137 TLorentzVector nuGuess;
139 TVector3 startingtauFlghtDir = tauFlghtDir.Unit();
140 if (ambiguity ==
zero) {
141 double theta = tauFlghtDir.Theta();
142 double phi = tauFlghtDir.Phi();
146 TLorentzVector
tau1,
tau2, nu1, nu2;
149 if (ambiguity ==
plus) {
153 if (ambiguity ==
minus) {
157 if (ambiguity ==
zero) {
170 TMatrixTSym<double> pvCov = a1.
vertexCov();
172 for (
int j = 0;
j <=
i;
j++) {
174 Cov(
i,
j) = pvCov(
i,
j);
180 v = 10 * par(
i) * par(
i);
References tauImpactParameter::Particle::bField(), funct::cos(), mps_fire::i, dqmiolumiharvest::j, tauImpactParameter::LorentzVectorParticle::m, minus, tauImpactParameter::LorentzVectorParticle::NLorentzandVertexPar, tauImpactParameter::PDGInfo::nu_tau, tauImpactParameter::LorentzVectorParticle::NVertex, tauImpactParameter::LorentzVectorParticle::p4(), tauImpactParameter::LorentzVectorParticle::parameter(), plus, MetAnalyzer::pv(), tauImpactParameter::LorentzVectorParticle::px, tauImpactParameter::LorentzVectorParticle::py, tauImpactParameter::LorentzVectorParticle::pz, setTauDirectionatThetaGJMax(), funct::sin(), solveByRotation(), pfDeepBoostedJetPreprocessParams_cfi::sv, metsig::tau, jets_cff::tau1, jets_cff::tau2, theta(), findQualityFiles::v, tauImpactParameter::LorentzVectorParticle::vertex(), tauImpactParameter::LorentzVectorParticle::vertexCov(), tauImpactParameter::LorentzVectorParticle::vx, tauImpactParameter::LorentzVectorParticle::vy, tauImpactParameter::LorentzVectorParticle::vz, and zero.
◆ numericalESolver()
void MultiProngTauSolver::numericalESolver |
( |
TLorentzVector & |
nu_plus, |
|
|
TLorentzVector & |
nu_minus, |
|
|
const TLorentzVector & |
A1, |
|
|
bool & |
isReal |
|
) |
| |
|
static |
Definition at line 32 of file MultiProngTauSolver.cc.
37 zmin(-999),
min(9999), prev(9999);
39 TLorentzVector nu,
tau;
40 for (
int i = 0;
i <= (
int)(rmax - rmin) /
step;
i++) {
41 nu.SetPxPyPzE(-A1.Px(), -A1.Py(),
z,
sqrt(z * z + A1.Pt() * A1.Pt()));
44 if (m2 - mtau2 < 0 && prev - mtau2 >= 0)
46 if (m2 - mtau2 > 0 && prev - mtau2 <= 0)
55 if (z1 != -999 &&
z2 != -999) {
56 nu_plus = TLorentzVector(-A1.Px(), -A1.Py(), z1,
sqrt(z1 * z1 + A1.Pt() * A1.Pt()));
57 nu_minus = TLorentzVector(-A1.Px(), -A1.Py(),
z2,
sqrt(
z2 *
z2 + A1.Pt() * A1.Pt()));
59 nu_plus = TLorentzVector(-A1.Px(), -A1.Py(),
zmin,
sqrt(
zmin *
zmin + A1.Pt() * A1.Pt()));
60 nu_minus = TLorentzVector(-A1.Px(), -A1.Py(),
zmin,
sqrt(
zmin *
zmin + A1.Pt() * A1.Pt()));
References mps_fire::i, createfilelist::int, min(), mathSSE::sqrt(), metsig::tau, tauImpactParameter::PDGInfo::tau_mass(), testProducerWithPsetDescEmpty_cfi::z2, and SiStripMonitorCluster_cfi::zmin.
◆ quadratic()
void MultiProngTauSolver::quadratic |
( |
double & |
x_plus, |
|
|
double & |
x_minus, |
|
|
double |
a, |
|
|
double |
b, |
|
|
double |
c, |
|
|
bool & |
isReal |
|
) |
| |
|
static |
◆ rotateToTauFrame()
TVectorT< double > MultiProngTauSolver::rotateToTauFrame |
( |
const TVectorT< double > & |
inpar | ) |
|
|
static |
◆ setTauDirectionatThetaGJMax()
bool MultiProngTauSolver::setTauDirectionatThetaGJMax |
( |
const TLorentzVector & |
a1, |
|
|
double & |
theta, |
|
|
double & |
phi, |
|
|
double |
scale = 1.0 |
|
) |
| |
|
static |
◆ solveByRotation()
void MultiProngTauSolver::solveByRotation |
( |
const TVector3 & |
TauDir, |
|
|
const TLorentzVector & |
A1, |
|
|
TLorentzVector & |
Tau_plus, |
|
|
TLorentzVector & |
Tau_minus, |
|
|
TLorentzVector & |
nu_plus, |
|
|
TLorentzVector & |
nu_minus, |
|
|
bool & |
isReal, |
|
|
bool |
rotateback = true |
|
) |
| |
|
static |
◆ thetaGJMax()
double MultiProngTauSolver::thetaGJMax |
( |
const TLorentzVector & |
a1 | ) |
|
|
static |
static void solveByRotation(const TVector3 &TauDir, const TLorentzVector &A1, TLorentzVector &Tau_plus, TLorentzVector &Tau_minus, TLorentzVector &nu_plus, TLorentzVector &nu_minus, bool &isReal, bool rotateback=true)
TLorentzVector p4() const
double parameter(int i) const override
virtual double bField() const
TMatrixTSym< double > vertexCov() const