CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
CompositeLogicalTrajectoryFilter.h
Go to the documentation of this file.
1 #ifndef CompositeLogicalTrajectoryFilter_H
2 #define CompositeLogicalTrajectoryFilter_H
3 
8 
10 
12 public:
13  enum logic { OR, AND };
15 
17  {
18  //look for VPSet of filters
19  std::vector<edm::ParameterSet> vpset=pset.getParameter<std::vector<edm::ParameterSet> >("filters");
20  for (unsigned int i=0;i!= vpset.size();i++)
21  {
22  std::string ls = vpset[i].getParameter<std::string>("logic");
23  logic l=OR;
24  if (ls == "OR") l=OR;
25  else if (ls == "AND") l=AND;
26  else{
27  edm::LogError("CompositeLogicalTrajectoryFilter")<<"I don't understand the logic: "<<ls
28  ;
29  }
30  filters.emplace_back(l, std::unique_ptr<TrajectoryFilter>(TrajectoryFilterFactory::get()->create(vpset[i].getParameter<std::string>("ComponentName"), vpset[i], iC)));
31 
32  }
33  }
34 
36 
37  void setEvent(const edm::Event& iEvent, const edm::EventSetup& iSetup) override {
38  for(auto& item: filters) {
39  item.second->setEvent(iEvent, iSetup);
40  }
41  }
42 
43  virtual bool qualityFilter( const Trajectory& traj) const { return QF<Trajectory>(traj);}
44  virtual bool qualityFilter( const TempTrajectory& traj) const { return QF<TempTrajectory>(traj);}
45 
46  virtual bool toBeContinued( Trajectory& traj) const { return TBC<Trajectory>(traj);}
47  virtual bool toBeContinued( TempTrajectory& traj) const { return TBC<TempTrajectory>(traj);}
48 
49  virtual std::string name() const {return "CompositeLogicalTrajectoryFilter";}
50 
51 protected:
52  template <class T> bool TBC( T& traj)const{
53  unsigned int i=0;
54  unsigned int n=filters.size();
55  for (;i<n;i++){ if (!filters[i].second->toBeContinued(traj)) return false; }
56  return true;
57  }
58 
59  template <class T> bool QF(const T& traj)const{
60  bool condition=true;
61 
62  unsigned int n=filters.size();
63  if (n==0) { edm::LogError("CompositeLogicalTrajectoryFilter")<<n<<" filters !." ; return false;}
64  condition=filters[0].second->qualityFilter(traj);
65 
66  unsigned int i=1;
67  for (;i<n;i++){
68  bool lcondition =filters[i].second->qualityFilter(traj);
69  if (filters[i].first==OR)
70  condition= condition || lcondition;
71  else if (filters[i].first==AND)
72  condition= condition && lcondition;
73  }
74  return condition;
75  }
76 
77  protected:
78  std::vector< std::pair< logic, std::unique_ptr<TrajectoryFilter> > > filters;
79 };
80 
81 #endif
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
void setEvent(const edm::Event &iEvent, const edm::EventSetup &iSetup) override
virtual bool toBeContinued(TempTrajectory &traj) const
std::vector< std::pair< logic, std::unique_ptr< TrajectoryFilter > > > filters
virtual bool toBeContinued(Trajectory &traj) const
def ls
Definition: eostools.py:348
CompositeLogicalTrajectoryFilter(const edm::ParameterSet &pset, edm::ConsumesCollector &iC)
U second(std::pair< T, U > const &p)
int iEvent
Definition: GenABIO.cc:230
virtual bool qualityFilter(const TempTrajectory &traj) const
virtual bool qualityFilter(const Trajectory &traj) const
long double T
SurfaceDeformation * create(int type, const std::vector< double > &params)
T get(const Candidate &c)
Definition: component.h:55