CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
ImpactParameterAlgorithm.cc
Go to the documentation of this file.
2 
5 
8 
10  ip_min = -9999;
11  ip_max = 9999;
12  sip_min = 0;
13  use_sign = false;
14  use3D = false;
15 }
16 
18  ip_min = parameters.getParameter<double>("TauImpactParameterMin");
19  ip_max = parameters.getParameter<double>("TauImpactParameterMax");
20  sip_min = parameters.getParameter<double>("TauImpactParameterSignificanceMin");
21  use_sign = parameters.getParameter<bool>("UseTauImpactParameterSign");
22  use3D = parameters.getParameter<bool>("UseTau3DImpactParameter");
23 }
24 
26  transientTrackBuilder = builder;
27 }
28 
29 std::pair<float, reco::TauImpactParameterInfo> ImpactParameterAlgorithm::tag(const reco::IsolatedTauTagInfoRef& tauRef,
30  const reco::Vertex& pv) {
31  if (transientTrackBuilder == nullptr) {
32  throw cms::Exception("NullTransientTrackBuilder") << "Transient track builder is 0. ";
33  }
34 
35  reco::TauImpactParameterInfo resultExtended;
36  resultExtended.setIsolatedTauTag(tauRef);
37 
38  const reco::Jet* jet = tauRef->jet().get();
39  GlobalVector direction(jet->px(), jet->py(), jet->pz());
40 
41  const reco::TrackRefVector& tracks = tauRef->selectedTracks();
42 
44  for (iTrack = tracks.begin(); iTrack != tracks.end(); iTrack++) {
45  const reco::TransientTrack transientTrack = (transientTrackBuilder->build(&(**iTrack)));
46 
48  Measurement1D ip = stip.apply(transientTrack, direction, pv).second;
49 
50  SignedImpactParameter3D signed_ip3D;
51  Measurement1D ip3D = signed_ip3D.apply(transientTrack, direction, pv).second;
52  LogDebug("ImpactParameterAlgorithm::tag") << "check pv,ip3d " << pv.z() << " " << ip3D.value();
53  if (!use_sign) {
54  Measurement1D tmp2D(fabs(ip.value()), ip.error());
55  ip = tmp2D;
56 
57  Measurement1D tmp3D(fabs(ip3D.value()), ip3D.error());
58  ip3D = tmp3D;
59  }
60 
62 
63  theData.transverseIp = ip;
64  theData.ip3D = ip3D;
65  resultExtended.storeTrackData(*iTrack, theData);
66  }
67 
68  float discriminator = resultExtended.discriminator(ip_min, ip_max, sip_min, use_sign, use3D);
69 
70  return std::make_pair(discriminator, resultExtended);
71 }
void setIsolatedTauTag(const IsolatedTauTagInfoRef &)
double pz() const final
z coordinate of momentum vector
std::pair< bool, Measurement1D > apply(const reco::TransientTrack &, const GlobalVector &, const reco::Vertex &) const
Base class for all types of Jets.
Definition: Jet.h:20
float discriminator(double, double, double, bool, bool) const
reco::TransientTrack build(const reco::Track *p) const
tuple discriminator
double error() const
Definition: Measurement1D.h:27
auto const & tracks
cannot be loose
double px() const final
x coordinate of momentum vector
void setTransientTrackBuilder(const TransientTrackBuilder *)
double z() const
z coordinate
Definition: Vertex.h:133
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:232
double py() const final
y coordinate of momentum vector
const TransientTrackBuilder * transientTrackBuilder
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
double value() const
Definition: Measurement1D.h:25
std::pair< float, reco::TauImpactParameterInfo > tag(const reco::IsolatedTauTagInfoRef &, const reco::Vertex &)
void storeTrackData(const reco::TrackRef &, const TauImpactParameterTrackData &)
std::pair< bool, Measurement1D > apply(const reco::TransientTrack &, const GlobalVector &direction, const reco::Vertex &vertex) const
#define LogDebug(id)