5 |
|
#include <TTree.h> |
6 |
|
#include "MitAna/DataTree/interface/Names.h" |
7 |
|
#include "MitAna/DataTree/interface/TriggerName.h" |
8 |
+ |
#include "MitAna/DataTree/interface/TriggerMask.h" |
9 |
|
#include "MitAna/DataTree/interface/TriggerObject.h" |
10 |
+ |
#include "MitAna/DataTree/interface/TriggerObjectCol.h" |
11 |
+ |
#include "MitAna/DataTree/interface/TriggerObjectsTable.h" |
12 |
|
|
13 |
|
using namespace mithep; |
14 |
|
|
18 |
|
HLTMod::HLTMod(const char *name, const char *title) : |
19 |
|
BaseMod(name,title), |
20 |
|
fAbort(kTRUE), |
21 |
+ |
fPrintTable(kFALSE), |
22 |
+ |
fIgnoreBits(kFALSE), |
23 |
+ |
fObjMode(kHlt), |
24 |
|
fBitsName(Names::gkHltBitBrn), |
25 |
< |
fMyObjsNamePub(Form("%sObjsadafafa", name)), |
25 |
> |
fMyObjsNamePub(Form("%sTrigObjs", name)), |
26 |
|
fBits(0), |
27 |
|
fMyTrgObjs(0), |
28 |
|
fTriggers(0), |
49 |
|
// "A", "!A", "A&B", "A&!B" or "A&B&C" |
50 |
|
|
51 |
|
string tname(expr); |
52 |
< |
fTrigNames.AddCopy(tname); |
52 |
> |
fTrigNames.push_back(tname); |
53 |
|
} |
54 |
|
|
55 |
|
//-------------------------------------------------------------------------------------------------- |
57 |
|
{ |
58 |
|
// Add trigger objects corresponding to trigger id. |
59 |
|
|
60 |
< |
const BitMask256 &ba = fTrigBitsAnd.Ref(tid); |
61 |
< |
const BitMask256 &bm = fTrigBitsCmp.Ref(tid); |
60 |
> |
const BitMask256 &ba = fTrigBitsAnd.at(tid); |
61 |
> |
const BitMask256 &bm = fTrigBitsCmp.at(tid); |
62 |
|
for (UInt_t i=0; i<bm.Size(); ++i) { |
63 |
< |
if (ba.TestBit(i)==0) |
63 |
> |
if (ba.TestBit(i)==0 && !fIgnoreBits) |
64 |
|
continue; // not an active trigger bit |
65 |
|
if (fBitsDone.TestBit(i)) |
66 |
|
continue; // objects for this bit are already obtained |
68 |
|
continue; // excluded trigger bit (ie a !trgname) |
69 |
|
|
70 |
|
const TList *list = fTrigObjs->GetList(i); |
71 |
< |
fMyTrgObjs->Add(list); |
71 |
> |
|
72 |
> |
TIter iter(list->MakeIterator()); |
73 |
> |
const TriggerObject *to = dynamic_cast<const TriggerObject*>(iter.Next()); |
74 |
> |
while (to) { |
75 |
> |
if ( (fObjMode == kAll) || |
76 |
> |
((fObjMode==kHlt) && (to->IsHLT())) || |
77 |
> |
((fObjMode==kL1) && (to->IsL1())) ) |
78 |
> |
fMyTrgObjs->Add(to); |
79 |
> |
to = dynamic_cast<const TriggerObject*>(iter.Next()); |
80 |
> |
} |
81 |
|
fBitsDone.SetBit(i); |
82 |
|
} |
83 |
|
} |
87 |
|
{ |
88 |
|
// Get HLT tree and set branches. Compute bitmasks to be used when comparing to the HLT bits. |
89 |
|
|
90 |
< |
fTrigBitsAnd.Reset(); |
91 |
< |
fTrigBitsCmp.Reset(); |
90 |
> |
fTrigBitsAnd.clear(); |
91 |
> |
fTrigBitsCmp.clear(); |
92 |
|
|
93 |
|
if (fPrintTable) |
94 |
|
fTriggers->Print(); |
95 |
|
|
96 |
< |
for (UInt_t i=0; i<fTrigNames.Entries(); ++i) { |
96 |
> |
for (UInt_t i=0; i<fTrigNames.size(); ++i) { |
97 |
|
BitMask256 tmask; //trigger mask |
98 |
|
BitMask256 amask; //bitand mask |
99 |
< |
TString names(fTrigNames.At(i)->c_str()); |
99 |
> |
Bool_t gotamask = 0; |
100 |
> |
TString names(fTrigNames.at(i).c_str()); |
101 |
> |
|
102 |
|
TObjArray *arr = names.Tokenize("&"); |
103 |
|
if (arr) { |
104 |
|
for(Int_t j=0; j<arr->GetEntries(); j++){ |
113 |
|
} |
114 |
|
const TriggerName *tn = fTriggers->Get(sptr); |
115 |
|
if (!tn) { |
116 |
< |
Warning("BeginRun", "Trigger %s not found.", tn->Name()); |
116 |
> |
Warning("BeginRun", "Trigger %s not found.", sptr); |
117 |
|
continue; |
118 |
|
} |
119 |
+ |
gotamask = 1; |
120 |
|
UShort_t bit = tn->Id(); |
121 |
|
amask.SetBit(bit); //always set and-mask bit |
122 |
|
if (!invert) |
124 |
|
} |
125 |
|
delete arr; |
126 |
|
} |
127 |
< |
fTrigBitsAnd.AddCopy(amask); |
128 |
< |
fTrigBitsCmp.AddCopy(tmask); |
127 |
> |
if (gotamask) { |
128 |
> |
fTrigBitsAnd.push_back(amask); |
129 |
> |
fTrigBitsCmp.push_back(tmask); |
130 |
> |
} |
131 |
|
} |
132 |
|
} |
133 |
|
|
146 |
|
fMyTrgObjs->SetOwner(kFALSE); // the objects are owned by the object table |
147 |
|
fBitsDone.Clear(); |
148 |
|
Bool_t accept = kFALSE; |
149 |
< |
for (UInt_t i = 0; i<fTrigBitsAnd.Entries(); ++i) { |
150 |
< |
BitMask256 bitmask(*fBits); |
151 |
< |
bitmask &= fTrigBitsAnd.Ref(i); |
152 |
< |
if (bitmask==fTrigBitsCmp.Ref(i)) { |
149 |
> |
for (UInt_t i = 0; i<fTrigBitsAnd.size(); ++i) { |
150 |
> |
BitMask256 bitmask(fBits->Get()); |
151 |
> |
bitmask &= fTrigBitsAnd.at(i); |
152 |
> |
if (bitmask==fTrigBitsCmp.at(i)) { |
153 |
|
accept = kTRUE; |
154 |
|
AddTrigObjs(i); |
155 |
|
} |
168 |
|
|
169 |
|
// take action if accepted |
170 |
|
++fNAcceped; |
171 |
+ |
IncNEventsProcessed(); |
172 |
|
OnAccepted(); |
173 |
|
if (!AddObjThisEvt(fMyTrgObjs)) { |
174 |
|
SendError(kAbortAnalysis, "Process", |
197 |
|
return; |
198 |
|
} |
199 |
|
} |
200 |
+ |
|
201 |
+ |
//-------------------------------------------------------------------------------------------------- |
202 |
+ |
void HLTMod::SlaveTerminate() |
203 |
+ |
{ |
204 |
+ |
// Save number of accepted events. |
205 |
+ |
|
206 |
+ |
SaveNEventsProcessed("hDHLTEvents"); |
207 |
+ |
} |