38 s.erase(
std::remove(s.begin(), s.end(),
' '), s.end());
39 s.erase(
std::remove(s.begin(), s.end(),
'\t'), s.end());
42 void test_remove_whitespace() {
54 typedef std::pair<std::string, std::string> parsed_path_spec_t;
56 parsed_path_spec_t&
output) {
58 remove_whitespace(trimmed_path_spec);
61 if(colon == std::string::npos) {
62 output.first = trimmed_path_spec;
64 output.first = trimmed_path_spec.substr(0, colon);
65 output.second = trimmed_path_spec.substr(colon + 1,
66 trimmed_path_spec.size());
70 void test_parse_path_spec() {
71 std::vector<std::string>
paths;
72 paths.push_back(
"a:p1");
73 paths.push_back(
"b:p2");
74 paths.push_back(
" c");
75 paths.push_back(
"ddd\t:p3");
76 paths.push_back(
"eee: p4 ");
78 std::vector<parsed_path_spec_t> parsed(paths.size());
79 for(
size_t i = 0;
i < paths.size(); ++
i) {
80 parse_path_spec(paths[
i], parsed[i]);
83 assert(parsed[0].
first ==
"a");
84 assert(parsed[0].
second ==
"p1");
85 assert(parsed[1].
first ==
"b");
86 assert(parsed[1].
second ==
"p2");
87 assert(parsed[2].
first ==
"c");
88 assert(parsed[2].
second ==
"");
89 assert(parsed[3].
first ==
"ddd");
90 assert(parsed[3].
second ==
"p3");
91 assert(parsed[4].
first ==
"eee");
92 assert(parsed[4].
second ==
"p4");
99 test_remove_whitespace();
100 test_parse_path_spec();
107 remainingEvents_(maxEvents_),
109 hasNewlyDroppedBranch_(),
111 productSelectorRules_(pset,
"outputCommands",
"OutputModule"),
113 moduleDescription_(),
116 wantAllEvents_(
false),
118 selector_config_id_(),
119 droppedBranchIDToKeptBranchID_(),
140 if(selectevents.
empty()) {
146 std::vector<std::string> path_specs =
147 selectevents.
getParameter<std::vector<std::string> >(
"SelectEvents");
149 if(path_specs.empty()) {
157 std::vector<parsed_path_spec_t> parsed_paths(path_specs.size());
158 for(
size_t i = 0;
i < path_specs.size(); ++
i) {
159 parse_path_spec(path_specs[
i], parsed_paths[i]);
177 std::map<BranchID, BranchDescription const*> trueBranchIDToKeptBranchDesc;
192 std::map<BranchID, BranchDescription const*>::const_iterator iter = trueBranchIDToKeptBranchDesc.find(trueBranchID);
193 if(iter != trueBranchIDToKeptBranchDesc.end()) {
195 <<
"Two (or more) equivalent branches have been selected for output.\n"
197 <<
"#2: " <<
BranchKey(*iter->second) <<
"\n"
198 <<
"Please drop at least one of them.\n";
200 trueBranchIDToKeptBranchDesc.insert(std::make_pair(trueBranchID, &desc));
244 std::map<BranchID, BranchDescription const*>::const_iterator iter = trueBranchIDToKeptBranchDesc.find(branchID);
245 if(iter != trueBranchIDToKeptBranchDesc.end()) {
247 BranchID const& keptBranchID = iter->second->branchID();
248 if(keptBranchID != branchID) {
276 Event ev(const_cast<EventPrincipal&>(ep),
290 detail::CachedProducts&
p;
293 PVSentry(PVSentry
const&);
294 PVSentry& operator=(PVSentry
const&);
305 FDEBUG(2) <<
"writeEvent called\n";
344 FDEBUG(2) <<
"beginRun called\n";
354 FDEBUG(2) <<
"endRun called\n";
361 FDEBUG(2) <<
"writeRun called\n";
370 FDEBUG(2) <<
"beginLuminosityBlock called\n";
380 FDEBUG(2) <<
"endLuminosityBlock called\n";
386 FDEBUG(2) <<
"writeLuminosityBlock called\n";
458 branchID = iter->second;
462 return branchIDLists_.get();
508 bool anyProductProduced) {
512 selectEventsInfo.
addParameter<
bool>(
"InProcessHistory", anyProductProduced);
514 std::vector<std::string> endPaths;
515 std::vector<int> endPathPositions;
519 if (!label.empty()) {
520 std::map<std::string, std::vector<std::pair<std::string, int> > >::const_iterator iter = outputModulePathPositions.find(label);
521 assert(iter != outputModulePathPositions.end());
522 for (std::vector<std::pair<std::string, int> >::const_iterator
i = iter->second.begin(),
e = iter->second.end();
524 endPaths.push_back(
i->first);
525 endPathPositions.push_back(
i->second);
528 selectEventsInfo.
addParameter<std::vector<std::string> >(
"EndPaths", endPaths);
529 selectEventsInfo.
addParameter<std::vector<int> >(
"EndPathPositions", endPathPositions);
530 if (!selectEventsInfo.
exists(
"SelectEvents")) {
531 selectEventsInfo.
addParameter<std::vector<std::string> >(
"SelectEvents", std::vector<std::string>());
541 if((*
i) && (*i)->productProvenancePtr() != 0) {
542 BranchID const& bid = (*i)->branchDescription().branchID();
545 it =
branchParents_.insert(std::make_pair(bid, std::set<ParentageID>())).first;
547 it->second.insert((*i)->productProvenancePtr()->parentageID());
558 std::set<ParentageID>
const& eIds =
i->second;
559 for(std::set<ParentageID>::const_iterator it = eIds.begin(), itEnd = eIds.end();
564 for(std::vector<BranchID>::const_iterator
j = parents.begin(), jEnd = parents.end();
std::array< bool, NumBranchTypes > hasNewlyDroppedBranch_
void doPostForkReacquireResources(unsigned int iChildIndex, unsigned int iNumberOfChildren)
T getParameter(std::string const &) const
virtual void doOpenFile()
std::map< BranchID::value_type, BranchID::value_type > droppedBranchIDToKeptBranchID_
virtual void writeProductDependencies()
bool selected(BranchDescription const &desc) const
virtual void respondToCloseOutputFiles(FileBlock const &)
static void fillDescription(ParameterSetDescription &desc, char const *parameterName)
BranchType const & branchType() const
std::vector< BranchIDList > BranchIDLists
void selectProducts(ProductRegistry const &preg)
ModuleDescription moduleDescription_
virtual void writeFileFormatVersion()
bool doEndLuminosityBlock(LuminosityBlockPrincipal const &lbp, EventSetup const &c, CurrentProcessingContext const *cpc)
const_iterator end() const
ModuleDescription const * moduleDescription() const
handle_t getOneTriggerResults(Event const &e)
ParameterSetID id() const
static ThreadSafeRegistry * instance()
CurrentProcessingContext const * current_context_
virtual void respondToOpenOutputFiles(FileBlock const &)
detail::CachedProducts selectors_
ParameterSet const & getParameterSet(ParameterSetID const &id)
virtual void writeIndexIntoFile()
virtual void endRun(RunPrincipal const &)
bool exists(std::string const ¶meterName) const
checks if a parameter exists
void insertEmpty(BranchID parent)
bool getMapped(key_type const &k, value_type &result) const
void insertChild(BranchID parent, BranchID child)
static const std::string & baseType()
void updateBranchParents(EventPrincipal const &ep)
virtual void beginRun(RunPrincipal const &)
std::string const & processName() const
virtual void finishEndFile()
bool selected(BranchDescription const &desc) const
BranchIDLists const * origBranchIDLists_
virtual void writeParentageRegistry()
std::string const & moduleLabel() const
void doCloseFile()
Tell the OutputModule that is must end the current file.
BranchIDLists const * branchIDLists_
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
std::vector< BranchID > const & parents() const
ProductList const & productList() const
U second(std::pair< T, U > const &p)
void setEventSelectionInfo(std::map< std::string, std::vector< std::pair< std::string, int > > > const &outputModulePathPositions, bool anyProductProduced)
void run_all_output_module_tests()
std::string process_name_
virtual void endLuminosityBlock(LuminosityBlockPrincipal const &)
virtual void writeProcessConfigurationRegistry()
void addDefault(ParameterSetDescription const &psetDescription)
static void fillDescriptions(ConfigurationDescriptions &descriptions)
bool doEvent(EventPrincipal const &ep, EventSetup const &c, CurrentProcessingContext const *cpc)
std::string const & moduleLabel() const
std::string const & productInstanceName() const
ParameterSet const & getUntrackedParameterSet(std::string const &name, ParameterSet const &defaultValue) const
SelectionsArray keptProducts_
void addParameter(std::string const &name, T const &value)
TypeID unwrappedTypeID() const
void doWriteLuminosityBlock(LuminosityBlockPrincipal const &lbp)
void doPreForkReleaseResources()
std::unique_ptr< BranchIDLists > branchIDLists_
virtual void beginLuminosityBlock(LuminosityBlockPrincipal const &)
std::vector< BranchDescription const * > allBranchDescriptions() const
void doRespondToCloseOutputFiles(FileBlock const &fb)
BranchID const & branchID() const
static void fillDescription(ParameterSetDescription &desc)
void copyForModify(ParameterSet const &other)
virtual void write(EventPrincipal const &e)=0
virtual bool isFileOpen() const
void doRespondToCloseInputFile(FileBlock const &fb)
virtual void writeFileIdentifier()
void fillDependencyGraph()
void setup(std::vector< parsed_path_spec_t > const &path_specs, std::vector< std::string > const &triggernames, const std::string &process_name)
virtual void postForkReacquireResources(unsigned int, unsigned int)
static void prevalidate(ConfigurationDescriptions &)
CurrentProcessingContext const * currentContext() const
virtual void writeRun(RunPrincipal const &)=0
const_iterator begin() const
void doWriteRun(RunPrincipal const &rp)
virtual void respondToOpenInputFile(FileBlock const &)
static void fillDescription(ParameterSetDescription &desc)
static const std::string kBaseType("EDAnalyzer")
std::vector< BranchID::value_type > BranchIDList
bool doBeginLuminosityBlock(LuminosityBlockPrincipal const &lbp, EventSetup const &c, CurrentProcessingContext const *cpc)
ProductSelector productSelector_
std::vector< std::string > const & getAllTriggerNames()
BranchChildren branchChildren_
Trig getTriggerResults(Event const &ep) const
virtual void writeParameterSetRegistry()
boost::filter_iterator< FilledProductPtr, ProductHolderCollection::const_iterator > const_iterator
void initialize(ProductSelectorRules const &rules, std::vector< BranchDescription const * > const &branchDescriptions)
Strings const & getTrigPaths() const
BranchIDLists const * branchIDLists() const
ProductSelectorRules productSelectorRules_
BranchID const & originalBranchID() const
void doRespondToOpenInputFile(FileBlock const &fb)
virtual void respondToCloseInputFile(FileBlock const &)
bool doEndRun(RunPrincipal const &rp, EventSetup const &c, CurrentProcessingContext const *cpc)
void configure(OutputModuleDescription const &desc)
virtual void openFile(FileBlock const &)
void setupDefault(std::vector< std::string > const &triggernames)
bool doBeginRun(RunPrincipal const &rp, EventSetup const &c, CurrentProcessingContext const *cpc)
virtual void startEndFile()
ParameterSet const & registerIt()
virtual void writeBranchMapper()
virtual void writeLuminosityBlock(LuminosityBlockPrincipal const &)=0
ModuleDescription const & description() const
BranchParents branchParents_
virtual void preForkReleaseResources()
OutputModule(ParameterSet const &pset)
bool wantEvent(Event const &e)
virtual void writeBranchIDListRegistry()
virtual void writeProcessHistoryRegistry()
void doRespondToOpenOutputFiles(FileBlock const &fb)
virtual void writeProductDescriptionRegistry()
ParameterSetID selector_config_id_