CMS 3D CMS Logo

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  bool qualityFilter( const Trajectory& traj) const override { return QF<Trajectory>(traj);}
44  bool qualityFilter( const TempTrajectory& traj) const override { return QF<TempTrajectory>(traj);}
45 
46  bool toBeContinued( Trajectory& traj) const override { return TBC<Trajectory>(traj);}
47  bool toBeContinued( TempTrajectory& traj) const override { return TBC<TempTrajectory>(traj);}
48 
49  std::string name() const override {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
void setEvent(const edm::Event &iEvent, const edm::EventSetup &iSetup) override
def create(alignables, pedeDump, additionalData, outputFile, config)
std::vector< std::pair< logic, std::unique_ptr< TrajectoryFilter > > > filters
CompositeLogicalTrajectoryFilter(const edm::ParameterSet &pset, edm::ConsumesCollector &iC)
U second(std::pair< T, U > const &p)
bool qualityFilter(const TempTrajectory &traj) const override
int iEvent
Definition: GenABIO.cc:224
def ls(path, rec=False)
Definition: eostools.py:349
bool toBeContinued(TempTrajectory &traj) const override
bool qualityFilter(const Trajectory &traj) const override
long double T
bool toBeContinued(Trajectory &traj) const override
T get(const Candidate &c)
Definition: component.h:55