ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/System8/s8/Analyzer/src/TriggerAnalyzer.cpp
Revision: 1.2
Committed: Tue May 24 14:43:29 2011 UTC (13 years, 11 months ago) by samvel
Branch: MAIN
CVS Tags: V00-00-04, V00-00-03, V00-00-02-04, V00-00-02-03, V00-00-02-02, V00-00-02-01, V00-00-02, HEAD
Changes since 1.1: +5 -5 lines
Log Message:
Convert Analyzer buildsystem to scram

File Contents

# Content
1 /**
2 * TriggerAnalyzer
3 * s8
4 *
5 * Created by Samvel Khalatian on Nov 18, 2010
6 * Copyright 2010, All rights reserved
7 */
8
9 #include <algorithm>
10 #include <iomanip>
11 #include <iostream>
12 #include <sstream>
13
14 #include <TDirectory.h>
15 #include <TH1I.h>
16
17 #include "s8/IO/interface/Event.h"
18 #include "Tree/System8/interface/S8EventID.h"
19 #include "Tree/System8/interface/S8TriggerCenter.h"
20 #include "Tree/System8/interface/S8Fwd.h"
21
22 #include "s8/Analyzer/interface/TriggerAnalyzer.h"
23
24 using std::cerr;
25 using std::clog;
26 using std::cout;
27 using std::endl;
28 using std::find_if;
29 using std::left;
30 using std::ostringstream;
31 using std::setw;
32
33 using s8::Trigger;
34 using s8::TriggerAnalyzer;
35
36 class TriggerPredicator
37 {
38 public:
39 TriggerPredicator()
40 {
41 _search_trigger = 0;
42 }
43
44 void setSearchTrigger(const Trigger &trigger)
45 {
46 _search_trigger = &trigger;
47 }
48
49 bool operator()(const Trigger *trigger) const
50 {
51 if (!_search_trigger)
52 return false;
53
54 return _search_trigger->hash() == trigger->hash();
55 }
56
57 private:
58 const Trigger *_search_trigger;
59 };
60
61
62
63 TriggerAnalyzer::TriggerCounter::TriggerCounter(const Trigger &hlt):
64 trigger(hlt),
65 counter(0),
66 name("")
67 {
68 ostringstream name;
69 name << "ps_" << trigger.hash();
70
71 prescale.reset(new TH1I(name.str().c_str(), "Prescale vs Run",
72 3000, 147000, 150000));
73 }
74
75
76
77 TriggerAnalyzer::TriggerAnalyzer() throw()
78 {
79 }
80
81 TriggerAnalyzer::~TriggerAnalyzer() throw()
82 {
83 }
84
85
86
87 // Analyzer interface
88 //
89 void TriggerAnalyzer::init()
90 {
91 }
92
93 void TriggerAnalyzer::treeDidLoad(const TreeInfo *,
94 const TriggerCenter *triggerCenter)
95 {
96 using std::setw;
97 using std::left;
98
99 cout << "Triggers List is saved in the log file" << endl
100 << endl;
101
102 clog << "Triggers:" << endl;
103 const TriggerCenter::TriggerMap &triggers = triggerCenter->triggers();
104 for(TriggerCenter::TriggerMap::const_iterator trigger = triggers.begin();
105 triggers.end() != trigger;
106 ++trigger)
107 {
108 clog << " > " << setw(20) << left << trigger->first << " "
109 << trigger->second << endl;
110 }
111 clog << endl;
112
113 for(Triggers::iterator trigger = _triggers.begin();
114 _triggers.end() != trigger;
115 ++trigger)
116 {
117 TriggerCenter::TriggerMap::const_iterator found_trigger =
118 triggers.find(trigger->trigger.hash());
119
120 if (triggers.end() == found_trigger)
121 continue;
122
123 trigger->name = found_trigger->second;
124 }
125 }
126
127 void TriggerAnalyzer::eventDidLoad(const Event *event)
128 {
129 if (_triggers.empty())
130 return;
131
132 TriggerPredicator trigger_predicator;
133
134 for(Triggers::iterator trigger = _triggers.begin();
135 _triggers.end() != trigger;
136 ++trigger)
137 {
138 trigger_predicator.setSearchTrigger(trigger->trigger);
139
140 s8::Triggers::const_iterator found_trigger =
141 find_if(event->triggers()->begin(),
142 event->triggers()->end(),
143 trigger_predicator);
144
145 if (event->triggers()->end() == found_trigger ||
146 !(**found_trigger))
147
148 continue;
149
150 // Trigger is found
151 //
152 ++(trigger->counter);
153 const int bin = trigger->prescale->FindBin(event->id()->run());
154 trigger->prescale->SetBinContent(bin,
155 (*found_trigger)->prescale());
156 }
157 }
158
159 void TriggerAnalyzer::print(std::ostream &out) const
160 {
161 out << "Trigger cutflow (events passed trigger)" << endl;
162 out << " Name" << setw(25) << left << " "
163 << " Hash" << endl;
164 out << "---------------------------------------------------"
165 << endl;
166 for(Triggers::const_iterator trigger = _triggers.begin();
167 _triggers.end() != trigger;
168 ++trigger)
169 {
170 out << " [+] " << setw(30) << left;
171 if (trigger->name.empty())
172 out << trigger->trigger.hash();
173 else
174 out << trigger->name;
175
176 out << trigger->counter << endl;
177 }
178 out << "---------------------------------------------------"
179 << endl;
180 }
181
182 void TriggerAnalyzer::save(TDirectory *directory) const
183 {
184 TDirectory *output = directory->mkdir("TriggerAnalyzer");
185 if (!output)
186 {
187 cerr << "TriggerAnalyzer: Failed to create output folder: "
188 << "no output is saved" << endl;
189
190 return;
191 }
192
193 output->cd();
194
195 for(Triggers::const_iterator trigger = _triggers.begin();
196 _triggers.end() != trigger;
197 ++trigger)
198 {
199 ostringstream title;
200 title << trigger->name << ": Prescale vs Run";
201
202 trigger->prescale->SetTitle(title.str().c_str());
203 trigger->prescale->Write();
204 }
205 }
206
207 // Trigger options
208 //
209 void TriggerAnalyzer::optionTriggerIsSet(const Trigger &trigger)
210 {
211 _triggers.push_back(TriggerCounter(trigger));
212 }