19 if (!iConfig.
empty()) {
24 if (iConfig.
exists(
"description"))
44 text +=
dump() +
"\n";
49 bool decision =
false;
96 ss <<
"Filter doing an OR of: ";
98 unsigned int size = 0;
101 size_t orPos = filterORlistCopy.find(
"_OR_");
102 if (orPos == std::string::npos && !filterORlistCopy.empty()) {
103 size = filterORlistCopy.size();
111 filterORlistCopy = filterORlistCopy.substr(0 + size + 4);
113 std::map<std::string, Filter*>::const_iterator it = filters.find(filter);
114 if (it == filters.end()) {
115 edm::LogError(
"FilterOR") <<
"cannot do an OR of: " << filter <<
" OR expression is: " << filterORlist;
118 filters_.push_back(std::make_pair(it->first, it->second));
119 ss << it->first <<
" ";
124 for (
unsigned int i = 0;
i !=
filters_.size(); ++
i)
131 std::vector<std::pair<std::string, Filter*> >
filters_;
144 ntuplize_(iConfig.getParameter<bool>(
"ntuplize")),
154 if (iConfig.
exists(
"nMonitor"))
188 std::map<std::string, bool>
ret;
194 bool decision = (*filter)->accept(iEvent);
195 bool inverted = (*filter).inverted();
197 decision = !decision;
198 ret[
fName] = decision;
201 global = global && decision;
208 summary << std::setw(20) <<
name().substr(0, 19) <<
" : " << std::setw(10) << iEvent.
id().
run() <<
" : "
209 << std::setw(10) << iEvent.
id().
event();
212 summary <<
" : " << std::setw(10) << (ret[
fName] ?
"pass" :
"reject");
225 summary << std::setw(20) <<
" selection name "
226 <<
" : " << std::setw(10) <<
" run "
227 <<
" : " << std::setw(10) <<
" event ";
229 summary <<
" : " << std::setw(10) << (*filter)->name().substr(0, 9);
239 unsigned int maxFnameSize = 20;
241 if ((*filter)->name().size() > maxFnameSize)
242 maxFnameSize = (*filter)->name().size() + 1;
248 summary <<
" Summary table for selection: " <<
name() <<
" with: " <<
nSeen_ <<
" events run." << std::endl;
254 summary <<
"filter: " << std::right << std::setw(10) << fName <<
"\n" << (*filter)->descriptionText() <<
"\n";
257 summary <<
" filter stand-alone pass: " << std::endl;
258 summary << std::right << std::setw(maxFnameSize) <<
"total read"
259 <<
": " << std::right << std::setw(10) <<
nSeen_ << std::endl;
263 if ((*filter).inverted())
265 summary << std::right << std::setw(maxFnameSize) << fName <<
": " << std::right << std::setw(10) << count.
nPass_
266 <<
" passed events. " << std::right << std::setw(10) << std::setprecision(5)
267 << (count.
nPass_ / (float)count.
nSeen_) * 100. <<
" [%]" << std::endl;
269 summary <<
" filter cumulative pass:" << std::endl;
270 summary << std::right << std::setw(maxFnameSize) <<
"total read"
271 <<
": " << std::right << std::setw(10) <<
nSeen_ << std::endl;
272 unsigned int lastCount =
nSeen_;
276 if ((*filter).inverted())
278 summary << std::right << std::setw(maxFnameSize) << fName <<
": " << std::right << std::setw(10)
279 << count.
nCumulative_ <<
" passed events. " << std::right << std::setw(10) << std::setprecision(5)
282 summary <<
" (to previous count) " << std::right << std::setw(10) << std::setprecision(5)
283 << (count.
nCumulative_ / (float)lastCount) * 100. <<
" [%]";
284 summary << std::endl;
288 summary <<
"-------------------------------------\n";
327 typedef std::vector<FilterSelection>::iterator
iterator;
335 std::vector<std::string> filterNames;
337 for (
unsigned int iF = 0; iF != nF; iF++) {
339 filters_.insert(std::make_pair(filterNames[iF],
340 new Filter(filterNames[iF], pset, iC)));
344 std::vector<std::string> selectionNames;
345 std::map<std::string, std::vector<std::string> > selectionFilters;
347 for (
unsigned int iS = 0; iS != nS; iS++) {
353 selectionFilters[selectionNames[iS]] = pset.
getParameter<std::vector<std::string> >(
"filterOrder");
360 for (std::map<
std::string, std::vector<std::string> >::
iterator sIt = selectionFilters.begin();
361 sIt != selectionFilters.end();
364 for (std::vector<std::string>::iterator fOrS = sIt->second.begin(); fOrS != sIt->second.end(); ++fOrS) {
367 if (fOrS->find(
"_OR_") != std::string::npos) {
372 std::map<std::string, std::vector<std::string> >
::iterator s = selectionFilters.find(*fOrS);
373 if (s == selectionFilters.end()) {
375 if ((*fOrS)[0] !=
'!') {
376 edm::LogError(
"SelectionHelper") <<
"unresolved filter/selection name: " << *fOrS;
382 std::vector<std::string>::iterator newLoc = sIt->second.erase(fOrS);
384 sIt->second.insert(newLoc, s->second.begin(), s->second.end());
405 std::vector<std::string>& listOfFilters = selectionFilters[sName];
406 for (std::vector<std::string>::iterator fIt = listOfFilters.begin(); fIt != listOfFilters.end(); ++fIt) {
408 bool inverted =
false;
409 if (fOsName[0] ==
'!') {
411 fOsName = fOsName.substr(1);
413 std::map<std::string, Filter*>::iterator filterInstance =
filters_.find(fOsName);
414 if (filterInstance ==
filters_.end()) {
416 bool replaceBySelection =
false;
419 if (fOsName == sit->name_) {
421 replaceBySelection =
true;
424 if (!replaceBySelection) {
426 edm::LogError(
"Selections") <<
"cannot resolve: " << fOsName;
430 selection.
filters_.push_back(
SFilter(filterInstance->second, inverted));
436 sIt->printDetailledPrintoutHeader();
edm::ParameterSet selectionPSet_
Log< level::Info, true > LogVerbatim
EventNumber_t event() const
unsigned long CacheIdentifier_t
std::vector< std::string > description_
tuple ret
prodAgent to be discontinued
std::vector< FilterSelection >::iterator iterator
void printDetailledPrintoutHeader()
bool makeCumulativePlots_
virtual bool accept(edm::Event &iEvent)
std::vector< FilterSelection > selections_
static const char category[]
std::string dump(unsigned int indent=0) const
std::vector< std::pair< std::string, Filter * > > filters_
edm::Event::CacheIdentifier_t eventCacheID_
bool accept(edm::Event &iEvent) override
FilterSelections(const edm::ParameterSet &iConfig, edm::ConsumesCollector &&iC)
std::vector< SFilter > filters_
std::map< std::string, bool > acceptMap(edm::Event &iEvent)
bool exists(std::string const ¶meterName) const
checks if a parameter exists
edm::ParameterSet filtersPSet_
Log< level::Error, false > LogError
FilterSelection & operator=(const FilterSelection &)=delete
const std::string & dump()
std::vector< SFilter >::iterator iterator
std::vector< TPRegexp > filters
const std::string & name()
std::string detailledPrintoutCategory_
U second(std::pair< T, U > const &p)
bool accept(edm::Event &iEvent) override
unsigned int nCumulative_
bool makeCumulativePlots()
CacheIdentifier_t cacheIdentifier() const
FilterOR(const std::string &filterORlist, const std::map< std::string, Filter * > &filters)
const std::vector< std::string > description()
Filter(std::string name, edm::ParameterSet &iConfig, edm::ConsumesCollector &iC)
const std::string & name()
const std::string descriptionText()
std::pair< int, edm::FunctionWithDict > OK
void addUntrackedParameter(std::string const &name, T const &value)
std::unique_ptr< EventSelector > selector_
T getParameter(std::string const &) const
Filter & operator=(const Filter &)=delete
SFilter(Filter *f, bool i)
FilterSelection(std::string name, const edm::ParameterSet &iConfig)
std::map< std::string, Count > counts_
bool makeAllButOnePlots()
size_t getParameterSetNames(std::vector< std::string > &output, bool trackiness=true) const
void print(bool description=true)
bool makeDetailledPrintout_
tuple size
Write out results.
std::map< std::string, Filter * > filters_