3 |
|
#include "MitAna/TreeMod/interface/HLTFwkMod.h" |
4 |
|
#include <TFile.h> |
5 |
|
#include <TTree.h> |
6 |
+ |
#include "MitAna/DataUtil/interface/Debug.h" |
7 |
|
#include "MitAna/DataTree/interface/Names.h" |
8 |
|
#include "MitAna/DataTree/interface/TriggerName.h" |
9 |
< |
#include "MitAna/DataTree/interface/TriggerObject.h" |
9 |
> |
#include "MitAna/DataTree/interface/TriggerTable.h" |
10 |
> |
#include "MitAna/DataTree/interface/TriggerObjectBaseCol.h" |
11 |
> |
#include "MitAna/DataTree/interface/TriggerObjectRelCol.h" |
12 |
> |
#include "MitAna/DataTree/interface/TriggerObjectCol.h" |
13 |
> |
#include "MitAna/DataTree/interface/TriggerObjectsTable.h" |
14 |
|
|
15 |
|
using namespace mithep; |
16 |
|
|
28 |
|
fHLTTabNamePub(Form("%sFwk",fHLTTabName.Data())), |
29 |
|
fHLTLabNamePub(Form("%sFwk",fHLTLabName.Data())), |
30 |
|
fObjsNamePub(Form("%sFwk",fObjsName.Data())), |
31 |
< |
fNMaxTriggers(256), |
31 |
> |
fL1ATabNamePub("L1AlgoTableFwk"), |
32 |
> |
fL1TTabNamePub("L1TechTableFwk"), |
33 |
> |
fNMaxTriggers(1024), |
34 |
|
fObjs(0), |
35 |
|
fRels(0), |
36 |
|
fReload(0), |
40 |
|
fCurEnt(-2), |
41 |
|
fTriggers(new TriggerTable(fNMaxTriggers)), |
42 |
|
fLabels(new TriggerTable(fNMaxTriggers*16)), |
43 |
< |
fTrigObjs(new TriggerObjectsTable(fTriggers,fNMaxTriggers)) |
43 |
> |
fTrigObjs(new TriggerObjectsTable(fTriggers,fNMaxTriggers)), |
44 |
> |
fL1Algos(new TriggerTable(fNMaxTriggers)), |
45 |
> |
fL1Techs(new TriggerTable(fNMaxTriggers)) |
46 |
|
{ |
47 |
|
// Constructor. |
48 |
|
|
52 |
|
fLabels->SetOwner(); |
53 |
|
fTrigObjs->SetName(fObjsNamePub); |
54 |
|
fTrigObjs->SetOwner(); |
55 |
+ |
fL1Algos->SetName(fL1ATabNamePub); |
56 |
+ |
fL1Algos->SetOwner(); |
57 |
+ |
fL1Techs->SetName(fL1TTabNamePub); |
58 |
+ |
fL1Techs->SetOwner(); |
59 |
|
} |
60 |
|
|
61 |
|
//-------------------------------------------------------------------------------------------------- |
74 |
|
fLabels = 0; |
75 |
|
delete fTrigObjs; |
76 |
|
fTrigObjs = 0; |
77 |
+ |
delete fL1Algos; |
78 |
+ |
|
79 |
|
} |
80 |
|
|
81 |
|
//-------------------------------------------------------------------------------------------------- |
102 |
|
fHLTTree = dynamic_cast<TTree*>(file->Get(fHLTTreeName)); |
103 |
|
if (!fHLTTree) { |
104 |
|
SendError(kAbortAnalysis, "BeginRun", |
105 |
< |
"Can not find HLT tree with name %s", fHLTTreeName.Data()); |
105 |
> |
"Cannot find HLT tree with name %s.", fHLTTreeName.Data()); |
106 |
|
} |
107 |
|
|
108 |
|
// get HLT trigger name branch |
110 |
|
fHLTTree->SetBranchAddress(fHLTTabName, &fHLTTab); |
111 |
|
} else { |
112 |
|
SendError(kAbortAnalysis, "BeginRun", |
113 |
< |
"Can not find HLT tree branch with name %s", fHLTTabName.Data()); |
113 |
> |
"Cannot find HLT tree branch with name %s.", fHLTTabName.Data()); |
114 |
|
} |
115 |
|
|
116 |
|
// get HLT module labels branch |
118 |
|
fHLTTree->SetBranchAddress(fHLTLabName, &fHLTLab); |
119 |
|
} else { |
120 |
|
SendError(kAbortAnalysis, "BeginRun", |
121 |
< |
"Can not find HLT tree branch with name %s", fHLTLabName.Data()); |
121 |
> |
"Cannot find HLT tree branch with name %s.", fHLTLabName.Data()); |
122 |
|
} |
123 |
|
} |
124 |
|
|
126 |
|
const RunInfo *runinfo = GetRunInfo(); |
127 |
|
if (!runinfo) { |
128 |
|
SendError(kAbortAnalysis, "BeginRun", |
129 |
< |
"Can not obtain run info object from selector"); |
129 |
> |
"Cannot obtain run info object from selector."); |
130 |
|
return; |
131 |
|
} |
132 |
|
|
133 |
|
// load trigger table |
134 |
|
if (runinfo->HltEntry()!=fCurEnt) { |
135 |
+ |
MDB(kAnalysis, 1) |
136 |
+ |
Info("BeginRun", "Loading trigger table for run %u", runinfo->RunNum()); |
137 |
+ |
|
138 |
|
fCurEnt = runinfo->HltEntry(); |
139 |
|
Bool_t load = LoadTriggerTable(); |
140 |
|
if (!load) { |
141 |
|
SendError(kAbortAnalysis, "BeginRun", |
142 |
< |
"Can not obtain load trigger table info"); |
142 |
> |
"Cannot load trigger table for next entry (%ld).", fCurEnt); |
143 |
|
return; |
144 |
|
} |
145 |
+ |
|
146 |
+ |
MDB(kAnalysis, 2) { |
147 |
+ |
Info("BeginRun", "Printing tables for run %u", runinfo->RunNum()); |
148 |
+ |
cout << " --- Trigger table ---" << endl; |
149 |
+ |
fTriggers->Print(); |
150 |
+ |
cout << " --- Module lables ---" << endl; |
151 |
+ |
fLabels->Print(); |
152 |
+ |
if (fL1Algos->GetEntries()) { |
153 |
+ |
cout << " --- L1 Algos ---" << endl; |
154 |
+ |
fL1Algos->Print(); |
155 |
+ |
} |
156 |
+ |
if (fL1Techs->GetEntries()) { |
157 |
+ |
cout << " --- L1 Techs ---" << endl; |
158 |
+ |
fL1Techs->Print(); |
159 |
+ |
} |
160 |
+ |
} |
161 |
|
} |
162 |
|
} |
163 |
|
|
172 |
|
// delete old tables |
173 |
|
fTriggers->Delete(); |
174 |
|
fLabels->Delete(); |
175 |
+ |
fL1Algos->Delete(); |
176 |
+ |
fL1Techs->Delete(); |
177 |
|
|
178 |
|
// load next event in HLT tree |
179 |
|
fHLTTab = 0; |
180 |
|
fHLTLab = 0; |
181 |
|
Int_t ret = fHLTTree->GetEvent(fCurEnt); |
182 |
|
if (ret<0 || fHLTTab==0 || fHLTTab==0 ) { |
183 |
< |
::Error("LoadTriggerTable", "Could not get entries for next event %ud", fCurEnt); |
183 |
> |
SendError(kAbortAnalysis, "LoadTriggerTable", |
184 |
> |
"Could not get trigger data for next entry (%ld).", fCurEnt); |
185 |
|
return kFALSE; |
186 |
|
} |
187 |
|
|
188 |
|
// check size of trigger table |
189 |
< |
if (fHLTTab->Entries()>fNMaxTriggers) { |
189 |
> |
if (fHLTTab->size()>fNMaxTriggers) { |
190 |
|
SendError(kAbortAnalysis, "LoadTriggerTable", |
191 |
< |
"Size of trigger table (%d) larger than maximum (%d)", |
192 |
< |
fHLTTab->Entries(), fNMaxTriggers); |
191 |
> |
"Size of trigger table (%ld) larger than maximum (%ld).", |
192 |
> |
fHLTTab->size(), fNMaxTriggers); |
193 |
|
return kFALSE; |
194 |
|
} |
195 |
|
|
196 |
|
// add trigger names |
197 |
< |
for (UInt_t i=0; i<fHLTTab->Entries(); ++i) { |
198 |
< |
TriggerName *tname = new TriggerName(*fHLTTab->At(i),i); |
197 |
> |
for (UInt_t i=0; i<fHLTTab->size(); ++i) { |
198 |
> |
TriggerName *tname = new TriggerName(fHLTTab->at(i),i); |
199 |
|
fTriggers->Add(tname); |
200 |
|
} |
201 |
|
|
202 |
|
// add module labels |
203 |
< |
for (UInt_t i=0; i<fHLTLab->Entries(); ++i) { |
204 |
< |
TriggerName *tname = new TriggerName(*fHLTLab->At(i),i); |
205 |
< |
fLabels->Add(tname); |
203 |
> |
UInt_t counter = 0; |
204 |
> |
UInt_t bitnum = 0; |
205 |
> |
UInt_t which = 0; |
206 |
> |
while (counter<fHLTLab->size()) { |
207 |
> |
TString tmpn(fHLTLab->at(counter)); |
208 |
> |
++counter; |
209 |
> |
if (tmpn.CompareTo("xxx-L1AlgoNames-xxx",TString::kIgnoreCase)==0) { |
210 |
> |
bitnum = 0; |
211 |
> |
which = 1; |
212 |
> |
continue; |
213 |
> |
} else if (tmpn.CompareTo("xxx-L1TechNames-xxx",TString::kIgnoreCase)==0) { |
214 |
> |
bitnum = 0; |
215 |
> |
which = 2; |
216 |
> |
continue; |
217 |
> |
} |
218 |
> |
TriggerName *tname = new TriggerName(tmpn,bitnum); |
219 |
> |
if (which==0) |
220 |
> |
fLabels->Add(tname); |
221 |
> |
else if (which==1) |
222 |
> |
fL1Algos->Add(tname); |
223 |
> |
else |
224 |
> |
fL1Techs->Add(tname); |
225 |
> |
++bitnum; |
226 |
|
} |
227 |
|
|
228 |
|
return kTRUE; |
244 |
|
|
245 |
|
fTrigObjs->Delete(); |
246 |
|
|
247 |
< |
LoadBranch(fObjsName.Data()); |
248 |
< |
LoadBranch(fRelsName.Data()); |
247 |
> |
LoadBranch(fObjsName); |
248 |
> |
LoadBranch(fRelsName); |
249 |
|
|
250 |
< |
for (UInt_t i=0; i<fRels->Entries(); ++i) { |
250 |
> |
const UInt_t n = fRels->GetEntries(); |
251 |
> |
for (UInt_t i=0; i<n; ++i) { |
252 |
|
const TriggerObjectRel *rel = fRels->At(i); |
253 |
< |
if(!rel) continue; |
253 |
> |
if (!rel) continue; |
254 |
|
|
255 |
|
const TriggerObjectBase *ob = fObjs->At(rel->ObjInd()); |
256 |
< |
if(!ob) continue; |
256 |
> |
if (!ob) continue; |
257 |
|
|
258 |
|
TriggerObject *obj = new TriggerObject(rel->TrgId(), rel->Type(), ob->Id(), |
259 |
|
ob->Pt(), ob->Eta(), ob->Phi(), ob->Mass()); |
260 |
|
|
261 |
< |
obj->SetTrigName(fHLTTab->Ref(rel->TrgId()).c_str()); |
262 |
< |
obj->SetModuleName(fHLTLab->Ref(rel->ModInd()).c_str()); |
263 |
< |
obj->SetFilterName(fHLTLab->Ref(rel->FilterInd()).c_str()); |
261 |
> |
obj->SetTrigName(fHLTTab->at(rel->TrgId()).c_str()); |
262 |
> |
obj->SetModuleName(fHLTLab->at(rel->ModInd()).c_str()); |
263 |
> |
obj->SetFilterName(fHLTLab->at(rel->FilterInd()).c_str()); |
264 |
> |
if (obj->TagInd()>=0) |
265 |
> |
obj->SetTagName(fHLTLab->at(obj->TagInd()).c_str()); |
266 |
> |
else |
267 |
> |
obj->SetTagName("Unknown"); |
268 |
> |
|
269 |
|
fTrigObjs->Add(obj); |
270 |
|
} |
271 |
|
} |
275 |
|
{ |
276 |
|
// Request branches for trigger objects and relation, and publish our tables. |
277 |
|
|
278 |
< |
ReqBranch(fObjsName.Data(), fObjs); |
279 |
< |
ReqBranch(fRelsName.Data(), fRels); |
278 |
> |
if (fObjsName != Names::gkHltObjBrn) |
279 |
> |
fRelsName = Form("%sRelation",fObjsName.Data()); |
280 |
> |
|
281 |
> |
ReqBranch(fObjsName, fObjs); |
282 |
> |
ReqBranch(fRelsName, fRels); |
283 |
|
|
284 |
|
if (!PublishObj(fTriggers)) { |
285 |
|
SendError(kAbortAnalysis, "SlaveBegin", |
296 |
|
"Could not publish HLT labels with name %s.", fLabels->GetName()); |
297 |
|
return; |
298 |
|
} |
299 |
+ |
if (!PublishObj(fL1Algos)) { |
300 |
+ |
SendError(kAbortAnalysis, "SlaveBegin", |
301 |
+ |
"Could not publish L1 algo table with name %s.", fL1Algos->GetName()); |
302 |
+ |
return; |
303 |
+ |
} |
304 |
+ |
if (!PublishObj(fL1Techs)) { |
305 |
+ |
SendError(kAbortAnalysis, "SlaveBegin", |
306 |
+ |
"Could not publish L1 tech table with name %s.", fL1Techs->GetName()); |
307 |
+ |
return; |
308 |
+ |
} |
309 |
|
} |
310 |
|
|
311 |
|
//-------------------------------------------------------------------------------------------------- |
316 |
|
RetractObj(fTriggers->GetName()); |
317 |
|
RetractObj(fLabels->GetName()); |
318 |
|
RetractObj(fTrigObjs->GetName()); |
319 |
+ |
RetractObj(fL1Algos->GetName()); |
320 |
+ |
RetractObj(fL1Techs->GetName()); |
321 |
|
} |