44 std::vector<TFile*>& inputFilesToDelete) {
46 throw cms::Exception(
"PFRecoTauDiscriminationByIsolationMVA2::loadMVA")
47 <<
" Failed to find File = " << inputFileName <<
" !!\n";
53 throw cms::Exception(
"PFRecoTauDiscriminationByIsolationMVA2::loadMVA")
54 <<
" Failed to load MVA = " << mvaName.data() <<
" from file = " << inputFileName.
fullPath().data()
57 inputFilesToDelete.push_back(inputFile);
82 if (!loadMVAfromDB_) {
86 if (mvaOpt_string ==
"oldDMwoLT")
88 else if (mvaOpt_string ==
"oldDMwLT")
90 else if (mvaOpt_string ==
"newDMwoLT")
92 else if (mvaOpt_string ==
"newDMwLT")
94 else if (mvaOpt_string ==
"DBoldDMwLT")
96 else if (mvaOpt_string ==
"DBnewDMwLT")
98 else if (mvaOpt_string ==
"PWoldDMwLT")
100 else if (mvaOpt_string ==
"PWnewDMwLT")
102 else if (mvaOpt_string ==
"DBoldDMwLTwGJ")
104 else if (mvaOpt_string ==
"DBnewDMwLTwGJ")
108 <<
" Invalid Configuration Parameter 'mvaOpt' = " << mvaOpt_string <<
" !!\n";
135 produces<PFTauDiscriminator>(
"category");
216 if (tau->leadChargedHadrCand().
isNull())
219 int tauDecayMode = tau->decayMode();
223 (tauDecayMode == 0 || tauDecayMode == 1 || tauDecayMode == 2 || tauDecayMode == 10)) ||
226 (tauDecayMode == 0 || tauDecayMode == 1 || tauDecayMode == 2 || tauDecayMode == 5 || tauDecayMode == 6 ||
227 tauDecayMode == 10 || tauDecayMode == 11))) {
239 float decayDistMag =
std::sqrt(decayDistX * decayDistX + decayDistY * decayDistY + decayDistZ * decayDistZ);
250 float gjAngleDiff = -999;
251 if (tauDecayMode == 10) {
252 double mTau = 1.77682;
253 double mAOne = tau->p4().M();
254 double pAOneMag = tau->p();
255 double argumentThetaGJmax = (
std::pow(mTau, 2) -
std::pow(mAOne, 2)) / (2 * mTau * pAOneMag);
256 double argumentThetaGJmeasured =
257 (tau->p4().px() * decayDistX + tau->p4().py() * decayDistY + tau->p4().pz() * decayDistZ) /
258 (pAOneMag * decayDistMag);
259 if (
std::abs(argumentThetaGJmax) <= 1. &&
std::abs(argumentThetaGJmeasured) <= 1.) {
260 double thetaGJmax = std::asin(argumentThetaGJmax);
261 double thetaGJmeasured = std::acos(argumentThetaGJmeasured);
262 gjAngleDiff = thetaGJmeasured - thetaGJmax;
272 mvaInput_[5] = tauDecayMode;
279 mvaInput_[5] = tauDecayMode;
280 mvaInput_[6] = std::copysign(+1.
f, (
float)tauLifetimeInfo.
dxy());
293 mvaInput_[6] = tauDecayMode;
295 mvaInput_[8] =
std::min(0.5
f, ptWeightedDetaStrip);
296 mvaInput_[9] =
std::min(0.5
f, ptWeightedDphiStrip);
297 mvaInput_[10] =
std::min(0.5
f, ptWeightedDrSignal);
298 mvaInput_[11] =
std::min(0.5
f, ptWeightedDrIsolation);
299 mvaInput_[12] =
std::min(100.
f, leadingTrackChi2);
301 mvaInput_[14] = std::copysign(+1.
f, (
float)tauLifetimeInfo.
dxy());
304 mvaInput_[17] = std::copysign(+1.
f, (
float)tauLifetimeInfo.
ip3d());
317 mvaInput_[6] = tauDecayMode;
319 mvaInput_[8] =
std::min(0.5
f, ptWeightedDetaStrip);
320 mvaInput_[9] =
std::min(0.5
f, ptWeightedDphiStrip);
321 mvaInput_[10] =
std::min(0.5
f, ptWeightedDrSignal);
322 mvaInput_[11] =
std::min(0.5
f, ptWeightedDrIsolation);
323 mvaInput_[12] =
std::min(100.
f, leadingTrackChi2);
325 mvaInput_[14] = std::copysign(+1.
f, (
float)tauLifetimeInfo.
dxy());
328 mvaInput_[17] = std::copysign(+1.
f, (
float)tauLifetimeInfo.
ip3d());
341 mvaInput_[6] = tauDecayMode;
343 mvaInput_[8] =
std::min(0.5
f, ptWeightedDetaStrip);
344 mvaInput_[9] =
std::min(0.5
f, ptWeightedDphiStrip);
345 mvaInput_[10] =
std::min(0.5
f, ptWeightedDrSignal);
346 mvaInput_[11] =
std::min(0.5
f, ptWeightedDrIsolation);
348 mvaInput_[13] = std::copysign(+1.
f, (
float)tauLifetimeInfo.
dxy());
351 mvaInput_[16] = std::copysign(+1.
f, (
float)tauLifetimeInfo.
ip3d());
357 mvaInput_[22] =
std::max(-1.
f, gjAngleDiff);
362 edm::LogPrint(
"PFTauDiscByMVAIsol2") <<
"<PFRecoTauDiscriminationByMVAIsolationRun2::discriminate>:";
363 edm::LogPrint(
"PFTauDiscByMVAIsol2") <<
" tau: Pt = " << tau->pt() <<
", eta = " << tau->eta();
364 edm::LogPrint(
"PFTauDiscByMVAIsol2") <<
" isolation: charged = " << chargedIsoPtSum
365 <<
", neutral = " << neutralIsoPtSum <<
", PUcorr = " <<
puCorrPtSum;
366 edm::LogPrint(
"PFTauDiscByMVAIsol2") <<
" decay mode = " << tauDecayMode;
367 edm::LogPrint(
"PFTauDiscByMVAIsol2") <<
" impact parameter: distance = " << tauLifetimeInfo.
dxy()
368 <<
", significance = " << tauLifetimeInfo.
dxy_Sig();
371 <<
" distance = " << decayDistMag <<
", significance = " << tauLifetimeInfo.
flightLengthSig();
372 edm::LogPrint(
"PFTauDiscByMVAIsol2") <<
"--> mvaValue = " << mvaValue;
390 desc.
add<
bool>(
"loadMVAfromDB");
402 desc.
add<
int>(
"verbosity", 0);
406 descriptions.
add(
"pfRecoTauDiscriminationByMVAIsolationRun2", desc);
T getParameter(std::string const &) const
edm::EDGetTokenT< reco::PFTauDiscriminator > FootprintCorrection_token
unsigned int n_photons_total(const reco::PFTau &tau)
return total number of pf photon candidates with pT>500 MeV, which are associated to signal ...
~PFRecoTauDiscriminationByMVAIsolationRun2() override
bool hasSecondaryVertex() const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
edm::EDGetTokenT< reco::PFTauDiscriminator > PhotonPtSumOutsideSignalCone_token
ParameterDescriptionBase * addOptional(U const &iLabel, T const &value)
const GBRForest * mvaReader_
edm::Handle< PFTauTIPAssociationByRef > tauLifetimeInfos
edm::RefProd< TauCollection > TauRefProd
float pt_weighted_dr_signal(const reco::PFTau &tau, int dm)
edm::Handle< reco::PFTauDiscriminator > footprintCorrection_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
edm::Handle< reco::PFTauDiscriminator > puCorrPtSums_
double discriminate(const PFTauRef &) const override
edm::Handle< reco::PFTauDiscriminator > neutralIsoPtSums_
PFRecoTauDiscriminationByMVAIsolationRun2(const edm::ParameterSet &cfg)
edm::EDGetTokenT< reco::PFTauDiscriminator > ChargedIsoPtSum_token
void endEvent(edm::Event &) override
#define DEFINE_FWK_MODULE(type)
double flightLengthSig() const
static void fillProducerDescriptions(edm::ParameterSetDescription &desc)
edm::Handle< TauCollection > taus_
const Vector & flightLength() const
float pt_weighted_deta_strip(const reco::PFTau &tau, int dm)
Abs< T >::type abs(const T &t)
float pt_weighted_dr_iso(const reco::PFTau &tau, int dm)
edm::Handle< reco::PFTauDiscriminator > photonPtSumOutsideSignalCone_
LocationCode location() const
Where was the file found?
ParameterDescriptionBase * add(U const &iLabel, T const &value)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
std::unique_ptr< PFTauDiscriminator > category_output_
bool isNull() const
Checks for null.
edm::AssociationVector< reco::PFTauRefProd, std::vector< reco::PFTauTransverseImpactParameterRef > > PFTauTIPAssociationByRef
photonPtSumOutsideSignalCone
edm::EDGetTokenT< TauCollection > Tau_token
edm::EDGetTokenT< PFTauTIPAssociationByRef > TauTransverseImpactParameters_token
float pt_weighted_dphi_strip(const reco::PFTau &tau, int dm)
float eratio(const reco::PFTau &tau)
return ratio of energy in ECAL over sum of energy in ECAL and HCAL
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void beginEvent(const edm::Event &, const edm::EventSetup &) override
edm::EDGetTokenT< reco::PFTauDiscriminator > PUcorrPtSum_token
std::string fullPath() const
float lead_track_chi2(const reco::PFTau &tau)
return chi2 of the leading track ==> deprecated? <==
edm::FileInPath inputFileName_
double GetClassifier(const float *vector) const
T const * product() const
Power< A, B >::type pow(const A &a, const B &b)
std::vector< TFile * > inputFilesToDelete_
edm::Handle< reco::PFTauDiscriminator > chargedIsoPtSums_
edm::EDGetTokenT< reco::PFTauDiscriminator > NeutralIsoPtSum_token