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  if ( theChargeSignificance>0. ) {
37  int qSig(0);
38  // skip first two hits (don't rely on significance of q/p)
39  for( typename T::DataContainer::size_type itm=2; itm<tms.size(); ++itm ) {
40  TrajectoryStateOnSurface tsos = tms[itm].updatedState();
41  if ( !tsos.isValid() ) continue;
42  double significance = tsos.localParameters().vector()(0) /
43  sqrt(tsos.localError().matrix()(0,0));
44  // don't deal with measurements compatible with 0
45  if ( fabs(significance)<theChargeSignificance ) continue;
46  //
47  // if charge not yet defined: store first significant Q
48  //
49  if ( qSig==0 ) {
50  qSig = significance>0 ? 1 : -1;
51  }
52  //
53  // else: invalidate and terminate in case of a change of sign
54  //
55  else {
56  if ( (significance<0.&&qSig>0) || (significance>0.&&qSig<0) ) {
57  traj.invalidate();
58  return false;
59  }
60  }
61  }
62  }
63  return true;
64  }
65 
67 
68 };
69 
70 #endif
const LocalTrajectoryParameters & localParameters() const
uint16_t size_type
virtual bool toBeContinued(Trajectory &traj) const
AlgebraicVector5 vector() const
ChargeSignificanceTrajectoryFilter(const edm::ParameterSet &pset)
T sqrt(T t)
Definition: SSEVec.h:46
const AlgebraicSymMatrix55 & matrix() const
const LocalTrajectoryError & localError() const
virtual bool qualityFilter(const TempTrajectory &traj) const
bool isValid() const
bool isValid() const
Definition: Trajectory.h:259
virtual bool qualityFilter(const Trajectory &traj) const
long double T
virtual bool toBeContinued(TempTrajectory &traj) const