CMS 3D CMS Logo

TriggerOutputBranches.cc
Go to the documentation of this file.
5 
6 #include <iostream>
7 
8 void
10 {
11  std::vector<std::string> newNames(triggers.getTriggerNames());
12  if(newNames.empty()) {
13  for(unsigned int j=0;j<triggers.size();j++) {
14  newNames.push_back(names.triggerName(j));
15  }
16  }
17 
18  for(auto & existing : m_triggerBranches)
19  {
20  existing.idx = -1; // reset all triggers as not found and zero buffer
21  existing.buffer = 0; // reset all triggers as not found and zero buffer
22  for(unsigned int j=0;j<newNames.size();j++) {
23  std::string name=newNames[j]; // no const & as it will be modified below!
24  std::size_t vfound = name.rfind("_v");
25  if (vfound!=std::string::npos && (name.compare(0, 3, "HLT") == 0 || name.compare(0, 2, "L1") == 0)){
26  name.replace(vfound,name.size()-vfound,"");
27  }
28  if(name==existing.name) existing.idx=j;
29  }
30  }
31  // Find new ones
32  for(unsigned int j=0;j<newNames.size();j++) {
33  std::string name=newNames[j]; // no const & as it will be modified below!
34  std::size_t vfound = name.rfind("_v");
35  if (vfound!=std::string::npos && (name.compare(0, 3, "HLT") == 0 || name.compare(0, 2, "L1") == 0)){
36  name.replace(vfound,name.size()-vfound,"");
37  }
38  bool found=false;
39  if(name.compare(0,3,"HLT")==0 || name.compare(0,4,"Flag")==0 || name.compare(0,2,"L1")==0 ){
40  for(auto & existing : m_triggerBranches) {if(name==existing.name) found=true;}
41  if(!found){
42  NamedBranchPtr nb(name,
43  std::string("Trigger/flag bit (process: ") + m_processName +
44  ")"); //FIXME: If the title can be updated we can use it to list the versions _v* that were seen in this file
45  uint8_t backFillValue=0;
46  bool found_duplicate = verifyBranchUniqueName(tree, nb.name);
47  std::string brname = nb.name + (found_duplicate ? (std::string("_p") + m_processName) : "");
48  nb.branch = tree.Branch(brname.c_str(), &backFillValue, (brname + "/O").c_str());
49  nb.branch->SetTitle(nb.title.c_str());
50  nb.idx=j;
51  m_triggerBranches.push_back(nb);
52  for(size_t i=0;i<m_fills;i++) nb.branch->Fill(); // Back fill
53  }
54  }
55  }
56 }
57 
60  edm::ParameterSet const* pset=nullptr;
61  if (nullptr!=(pset=psetRegistry->getMapped(triggerResults.parameterSetID()))) {
62 
63  if (pset->existsAs<std::vector<std::string> >("@trigger_paths", true)) {
65 
66  // This should never happen
67  if (triggerNames.size() != triggerResults.size()) {
68  throw cms::Exception("LogicError")
69  << "edm::EventBase::triggerNames_ Encountered vector\n"
70  "of trigger names and a TriggerResults object with\n"
71  "different sizes. This should be impossible.\n"
72  "Please send information to reproduce this problem to\n"
73  "the edm developers.\n";
74  }
75  return triggerNames;
76  }
77  }
78  return edm::TriggerNames();
79 }
80 
82 {
84  iEvent.getByToken(m_token, handle);
85  const edm::TriggerResults & triggers = *handle;
86  const edm::TriggerNames &names = triggerNames(triggers);
87 
88  if(m_lastRun!=iEvent.id().run()) {
89  m_lastRun=iEvent.id().run();
90  updateTriggerNames(tree,names,triggers);
91  }
92  for (auto & pair : m_triggerBranches) fillColumn<uint8_t>(pair, triggers);
93  m_fills++;
94 }
95 
97  auto const branches = tree.GetListOfBranches();
98  for (int i = 0; i < branches->GetEntries(); i++) {
99  if (name == std::string(branches->At(i)->GetName())) {
100  edm::LogWarning("TriggerOutputBranches")
101  << "Found a branch with name " << std::string(branches->At(i)->GetName()) << " already present with title "
102  << std::string(branches->At(i)->GetTitle()) << ": will add suffix _p" << m_processName
103  << " to the new branch.\n";
104  return true;
105  }
106  }
107  return false;
108 }
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:161
BasicHandle getByToken(EDGetToken token, TypeID const &typeID) const
Strings::size_type size() const
Definition: TriggerNames.cc:31
const std::string names[nVars_]
const std::vector< std::string > & getTriggerNames() const
Obsolete.
int iEvent
Definition: GenABIO.cc:224
unsigned int size() const
Get number of paths stored.
bool getMapped(key_type const &k, value_type &result) const
Definition: Registry.cc:17
bool verifyBranchUniqueName(TTree &, std::string) const
static std::string const triggerResults
Definition: EdmProvDump.cc:45
edm::TriggerNames triggerNames(const edm::TriggerResults triggerResults)
std::string const & triggerName(unsigned int index) const
Definition: TriggerNames.cc:22
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:12