34 |
|
class ReducedMenuSamplePrivateMembers |
35 |
|
{ |
36 |
|
public: |
37 |
< |
ReducedMenuSamplePrivateMembers( size_t newNumberOfEvents, size_t numberOfParameters, const l1menu::TriggerMenu newTriggerMenu ) |
38 |
< |
: thresholdsForAllEvents( newNumberOfEvents, std::vector<float>(numberOfParameters) ), |
39 |
< |
weights( newNumberOfEvents ), numberOfEvents( newNumberOfEvents ), triggerMenu( newTriggerMenu ) |
37 |
> |
ReducedMenuSamplePrivateMembers( size_t newNumberOfEvents, size_t newNumberOfParameters, const l1menu::TriggerMenu newTriggerMenu ) |
38 |
> |
: numberOfEvents( newNumberOfEvents ), numberOfParameters( newNumberOfParameters ), |
39 |
> |
thresholdsForAllEvents( numberOfEvents, std::vector<float>(numberOfParameters) ), |
40 |
> |
weights( newNumberOfEvents, 1 ), triggerMenu( newTriggerMenu ) |
41 |
|
{ |
42 |
< |
// Run through every event and default every weight to 1. |
43 |
< |
for( auto& eventWeight : weights ) |
44 |
< |
{ |
45 |
< |
eventWeight=1; |
46 |
< |
} |
42 |
> |
// No operation besides the initialiser list |
43 |
> |
} |
44 |
> |
ReducedMenuSamplePrivateMembers( size_t newNumberOfParameters, const l1menu::TriggerMenu newTriggerMenu ) |
45 |
> |
: numberOfEvents( 0 ), numberOfParameters( newNumberOfParameters ), triggerMenu( newTriggerMenu ) |
46 |
> |
{ |
47 |
> |
// No operation besides the initialiser list |
48 |
|
} |
49 |
+ |
size_t numberOfEvents; |
50 |
+ |
const size_t numberOfParameters; |
51 |
|
std::vector< std::vector<float> > thresholdsForAllEvents; |
52 |
|
std::vector<float> weights; |
53 |
|
::ReducedEventImplementation event; |
50 |
– |
size_t numberOfEvents; |
54 |
|
const l1menu::TriggerMenu triggerMenu; |
55 |
|
}; |
56 |
|
} |
57 |
|
|
55 |
– |
#include <iostream> |
58 |
|
l1menu::ReducedMenuSample::ReducedMenuSample( const l1menu::MenuSample& originalSample, const l1menu::TriggerMenu& triggerMenu ) |
59 |
|
{ |
60 |
|
size_t numberOfEvents=originalSample.numberOfEvents(); |
112 |
|
} // end of loop over events |
113 |
|
} |
114 |
|
|
115 |
+ |
l1menu::ReducedMenuSample::ReducedMenuSample( const l1menu::TriggerMenu& triggerMenu ) |
116 |
+ |
{ |
117 |
+ |
// Need to find out how many parameters there are for each event. Basically the sum |
118 |
+ |
// of the number of thresholds for all triggers. |
119 |
+ |
size_t numberOfParameters=0; |
120 |
+ |
for( size_t triggerNumber=0; triggerNumber<triggerMenu.numberOfTriggers(); ++triggerNumber ) |
121 |
+ |
{ |
122 |
+ |
const l1menu::ITrigger& trigger=triggerMenu.getTrigger(triggerNumber); |
123 |
+ |
numberOfParameters+=l1menu::getThresholdNames(trigger).size(); |
124 |
+ |
} |
125 |
+ |
|
126 |
+ |
// Now I know how many events there are and how many parameters, I can create the pimple |
127 |
+ |
// with the correct parameters. |
128 |
+ |
// I get a bad_alloc exception if I pass 0 numberOfEvents, so I'll |
129 |
+ |
pImple_.reset( new l1menu::ReducedMenuSamplePrivateMembers( numberOfParameters, triggerMenu ) ); |
130 |
+ |
} |
131 |
+ |
|
132 |
|
l1menu::ReducedMenuSample::~ReducedMenuSample() |
133 |
|
{ |
134 |
|
// No operation. Just need one defined otherwise the default one messes up |
136 |
|
// defined elsewhere. |
137 |
|
} |
138 |
|
|
139 |
+ |
void l1menu::ReducedMenuSample::addSample( const l1menu::MenuSample& originalSample ) |
140 |
+ |
{ |
141 |
+ |
size_t oldNumberEvents=pImple_->numberOfEvents; |
142 |
+ |
pImple_->numberOfEvents=oldNumberEvents+originalSample.numberOfEvents(); |
143 |
+ |
|
144 |
+ |
// Resize the containers to make space for the new events |
145 |
+ |
pImple_->thresholdsForAllEvents.resize( pImple_->numberOfEvents, std::vector<float>(pImple_->numberOfParameters) ); |
146 |
+ |
pImple_->weights.resize( pImple_->numberOfEvents, 1 ); |
147 |
+ |
|
148 |
+ |
// |
149 |
+ |
// Now I've set the storage to the correct size, run through each event |
150 |
+ |
// and fill with the correct values. |
151 |
+ |
// |
152 |
+ |
for( size_t eventNumber=0; eventNumber<originalSample.numberOfEvents(); ++eventNumber ) |
153 |
+ |
{ |
154 |
+ |
size_t bufferEventNumber=eventNumber+oldNumberEvents; |
155 |
+ |
|
156 |
+ |
const l1menu::IEvent& event=originalSample.getEvent( eventNumber ); |
157 |
+ |
std::vector<float>& parameters=pImple_->thresholdsForAllEvents[bufferEventNumber]; |
158 |
+ |
|
159 |
+ |
size_t parameterNumber=0; |
160 |
+ |
// Loop over all of the triggers |
161 |
+ |
for( size_t triggerNumber=0; triggerNumber<pImple_->triggerMenu.numberOfTriggers(); ++triggerNumber ) |
162 |
+ |
{ |
163 |
+ |
std::unique_ptr<l1menu::ITrigger> pTrigger=pImple_->triggerMenu.getTriggerCopy(triggerNumber); |
164 |
+ |
std::vector<std::string> thresholdNames=getThresholdNames(*pTrigger); |
165 |
+ |
|
166 |
+ |
try |
167 |
+ |
{ |
168 |
+ |
setTriggerThresholdsAsTightAsPossible( event, *pTrigger, 0.001 ); |
169 |
+ |
// Set all of the parameters to match the thresholds in the trigger |
170 |
+ |
for( const auto& thresholdName : thresholdNames ) |
171 |
+ |
{ |
172 |
+ |
parameters[parameterNumber]=pTrigger->parameter(thresholdName); |
173 |
+ |
++parameterNumber; |
174 |
+ |
} |
175 |
+ |
} |
176 |
+ |
catch( std::exception& error ) |
177 |
+ |
{ |
178 |
+ |
// setTriggerThresholdsAsTightAsPossible() couldn't find thresholds so record |
179 |
+ |
// -1 for everything. |
180 |
+ |
for( size_t index=0; index<thresholdNames.size(); ++index ) |
181 |
+ |
{ |
182 |
+ |
parameters[parameterNumber]=-1; |
183 |
+ |
++parameterNumber; |
184 |
+ |
} |
185 |
+ |
} // end of try block that sets the trigger thresholds |
186 |
+ |
|
187 |
+ |
} // end of loop over triggers |
188 |
+ |
} // end of loop over events |
189 |
+ |
|
190 |
+ |
} |
191 |
+ |
|
192 |
|
l1menu::ReducedMenuSample::ReducedMenuSample( const std::string& filename ) |
193 |
|
{ |
194 |
|
GOOGLE_PROTOBUF_VERIFY_VERSION; |
224 |
|
totalNumberOfThresholds+=inputTrigger.threshold_size(); |
225 |
|
} |
226 |
|
|
227 |
+ |
|
228 |
|
// Now I have the menu set up as much as I need it (thresholds aren't set |
229 |
|
// but I don't care about those). I can initialise the ReducedMenuSamplePrivateMembers |
230 |
|
// pImple_ with the menu and the correct sizes for the data buffer. |