CMS 3D CMS Logo

ChargeSignificanceTrajectoryFilter.h
Go to the documentation of this file.
1 #ifndef ChargeSignificanceTrajectoryFilter_H
2 #define ChargeSignificanceTrajectoryFilter_H
3 
7 
15 public:
16 
18 
20  theChargeSignificance(pset.getParameter<double>("chargeSignificance")) {}
21 
22  bool qualityFilter( const Trajectory& traj) const override { return traj.isValid();}
23  bool qualityFilter( const TempTrajectory& traj)const override { return traj.isValid();}
24 
25  bool toBeContinued( Trajectory& traj)const override { return TBC<Trajectory>(traj);}
26  bool toBeContinued( TempTrajectory& traj) const override { return TBC<TempTrajectory>(traj);}
27 
28  std::string name() const override {return "ChargeSignificanceTrajectoryFilter";}
29 
30 protected:
31 
32  template <class T> bool TBC(T & traj) const{
33  const typename T::DataContainer & tms = traj.measurements();
34  // Check flip in q-significance. The loop over all TMs could be
35  // avoided by storing the current significant q in the trajectory
36 
37  if ( theChargeSignificance>0. ) {
38 
39  float qSig = 0;
40 
41  // skip first two hits (don't rely on significance of q/p)
42  for( typename T::DataContainer::size_type itm=2; itm<tms.size(); ++itm ) {
43  TrajectoryStateOnSurface const & tsos = tms[itm].updatedState();
44  if ( !tsos.isValid() ) continue;
45 
46  auto significance = tsos.localParameters().vector()(0) /
47  std::sqrt(float(tsos.localError().matrix()(0,0)));
48 
49  // don't deal with measurements compatible with 0
51 
52  //
53  // if charge not yet defined: store first significant Q
54  //
55  if ( qSig==0 ) qSig = significance;
56 
57  //
58  // invalidate and terminate in case of a change of sign
59  //
60  if (significance*qSig<0) {
61  traj.invalidate();
62  traj.setStopReason(StopReason::CHARGE_SIGNIFICANCE);
63  return false;
64  }
65  }
66  }
67  return true;
68  }
69 
71 
72 };
73 
74 #endif
bool qualityFilter(const Trajectory &traj) const override
const LocalTrajectoryParameters & localParameters() const
bool toBeContinued(Trajectory &traj) const override
uint16_t size_type
AlgebraicVector5 vector() const
T sqrt(T t)
Definition: SSEVec.h:18
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const AlgebraicSymMatrix55 & matrix() const
bool qualityFilter(const TempTrajectory &traj) const override
const LocalTrajectoryError & localError() const
bool isValid() const
bool isValid() const
Definition: Trajectory.h:279
bool toBeContinued(TempTrajectory &traj) const override
significance
Definition: met_cff.py:19
long double T
ChargeSignificanceTrajectoryFilter(const edm::ParameterSet &pset, edm::ConsumesCollector &iC)