CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
ModelFilter.cc
Go to the documentation of this file.
3 
4 #include <iostream>
5 #include <memory>
6 #include <sstream>
7 #include <stdlib.h>
8 
9 using namespace std;
10 using namespace edm;
11 
12 ModelFilter::ModelFilter(const edm::ParameterSet& iConfig)
13 {
14  tokenSource_ = consumes<LHEEventProduct>(iConfig.getParameter<InputTag>("source"));
15  modelTag_ = iConfig.getParameter<string>("modelTag");
16  parameterMins_ = iConfig.getParameter<vector<double> >("parameterMins");
17  parameterMaxs_ = iConfig.getParameter<vector<double> >("parameterMaxs");
18 }
19 
20 
21 ModelFilter::~ModelFilter()
22 {
23 }
24 
26 {
28  iEvent.getByToken(tokenSource_, product);
30 
31  string tempString;
32  vector<string> parameters;
33 
34  for(comment = product->comments_begin(); comment != product->comments_end();
35  comment++)
36  {
37  if(comment->find(modelTag_) != string::npos)
38  {
39  tempString = comment->substr(comment->find(modelTag_),
40  comment->size());
41  tempString = tempString.substr(0, tempString.find(" "));
42  parameters = split(tempString, "_");
43 
44  if(parameters.size() - 1 != parameterMins_.size())
45  {
46  std::cout<<"Error: number of modeParameters does not match number of parameters in file"<<std::endl;
47  return false;
48  }
49  else if(parameterMins_.size() != parameterMaxs_.size())
50  {
51  std::cout<<"Error: umber of parameter mins != number parameter maxes"<<std::endl;
52  }
53  else
54  {
55  for(unsigned i = 0; i < parameterMins_.size(); i++)
56  {
57  if(parameterMins_[i] > atof(parameters[i +1 ].c_str()) ||
58  parameterMaxs_[i] < atof(parameters[i + 1].c_str()))
59  {
60  return false;
61  }
62  }
63  return true;
64  }
65 
66  }
67  }
68  std::cout<<"FAILED: "<<*comment<<std::endl;
69  return false;
70 
71 }
73 {
74 }
75 
76 void ModelFilter::endJob() {
77 }
78 
79 void ModelFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
81  desc.setUnknown();
82  descriptions.addDefault(desc);
83 }
84 vector<string> ModelFilter::split(string fstring, string splitter)
85 {
86  vector<string> returnVector;
87  size_t cursor;
88  string beforeSplitter;
89  string afterSplitter = fstring;
90  if(fstring.find(splitter) == string::npos)
91  {
92  std::cout<<"No "<<splitter<<" found"<<std::endl;
93  returnVector.push_back(fstring);
94  return returnVector;
95  }
96  else
97  {
98  while(afterSplitter.find(splitter) != string::npos)
99  {
100  cursor = afterSplitter.find(splitter);
101 
102  beforeSplitter = afterSplitter.substr(0, cursor);
103  afterSplitter = afterSplitter.substr(cursor +1, afterSplitter.size());
104 
105  returnVector.push_back(beforeSplitter);
106 
107  if(afterSplitter.find(splitter) == string::npos)
108  returnVector.push_back(afterSplitter);
109  }
110  return returnVector;
111  }
112 }
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
dictionary parameters
Definition: Parameters.py:2
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:464
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
void beginJob()
Definition: Breakpoints.cc:15
def splitter
Definition: confdb.py:11
int iEvent
Definition: GenABIO.cc:230
void addDefault(ParameterSetDescription const &psetDescription)
std::vector< std::string >::const_iterator comments_const_iterator
Definition: ModelFilter.h:30
tuple cout
Definition: gather_cfg.py:121
double split
Definition: MVATrainer.cc:139
#define comment(par)
Definition: vmac.h:161