CMS 3D CMS Logo

TriggerOutputBranches.cc
Go to the documentation of this file.
4 
5 #include <iostream>
6 
7 void
9 {
10  std::vector<std::string> newNames(triggers.getTriggerNames());
11  if(newNames.empty()) {
12  for(unsigned int j=0;j<triggers.size();j++) {
13  newNames.push_back(names.triggerName(j));
14  }
15  }
16 
17  for(auto & existing : m_triggerBranches)
18  {
19  existing.idx=-1;// reset all triggers as not found
20  for(unsigned int j=0;j<newNames.size();j++) {
21  if(newNames[j]==existing.name) existing.idx=j;
22  }
23  }
24  // Find new ones
25  for(unsigned int j=0;j<newNames.size();j++) {
26  std::string name=newNames[j]; // no const & as it will be modified below!
27  std::size_t vfound = name.rfind("_v");
28  if (vfound!=std::string::npos){
29  name.replace(vfound,name.size()-vfound,"");
30  }
31  bool found=false;
32  if(name.compare(0,3,"HLT")==0 || name.compare(0,4,"Flag")==0 || name.compare(0,2,"L1")==0 ){
33  for(auto & existing : m_triggerBranches) {if(name==existing.name) found=true;}
34  if(!found){
35  NamedBranchPtr nb(name,"Trigger/flag bit"); //FIXME: If the title can be updated we can use it to list the versions _v* that were seen in this file
36  uint8_t backFillValue=-1;
37  nb.branch= tree.Branch(nb.name.c_str(), &backFillValue, (name + "/O").c_str());
38  nb.branch->SetTitle(nb.title.c_str());
39  nb.idx=j;
40  m_triggerBranches.push_back(nb);
41  for(size_t i=0;i<m_fills;i++) nb.branch->Fill(); // Back fill
42  }
43  }
44  }
45 }
46 
49  edm::ParameterSet const* pset=nullptr;
50  if (nullptr!=(pset=psetRegistry->getMapped(triggerResults.parameterSetID()))) {
51 
52  if (pset->existsAs<std::vector<std::string> >("@trigger_paths", true)) {
54 
55  // This should never happen
56  if (triggerNames.size() != triggerResults.size()) {
57  throw cms::Exception("LogicError")
58  << "edm::EventBase::triggerNames_ Encountered vector\n"
59  "of trigger names and a TriggerResults object with\n"
60  "different sizes. This should be impossible.\n"
61  "Please send information to reproduce this problem to\n"
62  "the edm developers.\n";
63  }
64  return triggerNames;
65  }
66  }
67  return edm::TriggerNames();
68 }
69 
71 {
73  iEvent.getByToken(m_token, handle);
74  const edm::TriggerResults & triggers = *handle;
75  const edm::TriggerNames &names = triggerNames(triggers);
76 
77  if(m_lastRun!=iEvent.id().run()) {
78  m_lastRun=iEvent.id().run();
79  updateTriggerNames(tree,names,triggers);
80  }
81  for (auto & pair : m_triggerBranches) fillColumn<uint8_t>(pair, triggers);
82  m_fills++;
83 }
84 
85 
86 
RunNumber_t run() const
Definition: EventID.h:39
EventID const & id() const
bool existsAs(std::string const &parameterName, bool trackiness=true) const
checks if a parameter exists as a given type
Definition: ParameterSet.h:186
static const HistoName names[]
Strings::size_type size() const
Definition: TriggerNames.cc:39
const std::vector< std::string > & getTriggerNames() const
Obsolete.
bool getByToken(EDGetToken token, TypeID const &typeID, BasicHandle &result) const
int iEvent
Definition: GenABIO.cc:230
unsigned int size() const
Get number of paths stored.
bool getMapped(key_type const &k, value_type &result) const
Definition: Registry.cc:19
static std::string const triggerResults
Definition: EdmProvDump.cc:41
edm::TriggerNames triggerNames(const edm::TriggerResults triggerResults)
std::string const & triggerName(unsigned int index) const
Definition: TriggerNames.cc:27
Definition: tree.py:1
void fill(const edm::EventForOutput &iEvent, TTree &tree)
const ParameterSetID & parameterSetID() const
Get stored parameter set id.
void updateTriggerNames(TTree &tree, const edm::TriggerNames &names, const edm::TriggerResults &ta)
std::vector< NamedBranchPtr > m_triggerBranches
static Registry * instance()
Definition: Registry.cc:13