CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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  virtual bool qualityFilter( const Trajectory& traj) const { return traj.isValid();}
23  virtual bool qualityFilter( const TempTrajectory& traj)const { return traj.isValid();}
24 
25  virtual bool toBeContinued( Trajectory& traj)const { return TBC<Trajectory>(traj);}
26  virtual bool toBeContinued( TempTrajectory& traj) const { return TBC<TempTrajectory>(traj);}
27 
28  virtual std::string name() const {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
50  if ( std::abs(significance)<theChargeSignificance ) continue;
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  return false;
63  }
64  }
65  }
66  return true;
67  }
68 
70 
71 };
72 
73 #endif
const LocalTrajectoryParameters & localParameters() const
uint16_t size_type
virtual bool toBeContinued(Trajectory &traj) const
AlgebraicVector5 vector() const
T sqrt(T t)
Definition: SSEVec.h:48
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const AlgebraicSymMatrix55 & matrix() const
const LocalTrajectoryError & localError() const
virtual bool qualityFilter(const TempTrajectory &traj) const
bool isValid() const
bool isValid() const
Definition: Trajectory.h:269
virtual bool qualityFilter(const Trajectory &traj) const
long double T
virtual bool toBeContinued(TempTrajectory &traj) const
ChargeSignificanceTrajectoryFilter(const edm::ParameterSet &pset, edm::ConsumesCollector &iC)