ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/grimes/L1Menu/src/ReducedMenuSample.cpp
Revision: 1.1
Committed: Wed May 29 00:01:02 2013 UTC (11 years, 11 months ago) by grimes
Branch: MAIN
Log Message:
Initial commit

File Contents

# Content
1 #include "l1menu/ReducedMenuSample.h"
2
3 #include <vector>
4 #include "l1menu/IReducedEvent.h"
5 #include "l1menu/MenuSample.h"
6 #include "l1menu/TriggerMenu.h"
7 #include "l1menu/tools.h"
8
9 namespace // unnamed namespace
10 {
11 class ReducedEventImplementation : public l1menu::IReducedEvent
12 {
13 public:
14 virtual ~ReducedEventImplementation() {}
15 virtual float parameterValue( size_t parameterNumber ) { return pThresholdValues->at(parameterNumber); }
16 virtual size_t parameterNumber( const l1menu::ITrigger& trigger, const std::string& parameterName ) { return 0; }
17 virtual float weight() const { return 1; }
18 std::vector<float>* pThresholdValues;
19 };
20 }
21
22 namespace l1menu
23 {
24 /** @brief Private members for the ReducedMenuSample class
25 *
26 * @author Mark Grimes (mark.grimes@bristol.ac.uk)
27 * @date 28/May/2013
28 */
29 class ReducedMenuSamplePrivateMembers
30 {
31 public:
32 ReducedMenuSamplePrivateMembers( size_t newNumberOfEvents, size_t numberOfParameters )
33 : thresholdsForAllEvents( newNumberOfEvents, std::vector<float>(numberOfParameters) )
34 {
35 // No operation besides the initialiser list
36 }
37 std::vector< std::vector<float> > thresholdsForAllEvents;
38 ::ReducedEventImplementation event;
39 size_t numberOfEvents;
40 };
41 }
42
43 l1menu::ReducedMenuSample::ReducedMenuSample( const l1menu::MenuSample& originalSample, const l1menu::TriggerMenu& triggerMenu )
44 {
45 size_t numberOfEvents=originalSample.numberOfEvents();
46 // Need to find out how many parameters there are for each event. Basically the sum
47 // of the number of thresholds for all triggers.
48 size_t numberOfParameters=0;
49 for( size_t triggerNumber=0; triggerNumber<triggerMenu.numberOfTriggers(); ++triggerNumber )
50 {
51 const l1menu::ITrigger& trigger=triggerMenu.getTrigger(triggerNumber);
52 numberOfParameters+=l1menu::getThresholdNames(trigger).size();
53 }
54
55 // Now I know how many events there are and how many parameters, I can create the pimple
56 // with the correct parameters.
57 pImple_.reset( new l1menu::ReducedMenuSamplePrivateMembers( numberOfEvents, numberOfParameters ) );
58 }
59
60 size_t l1menu::ReducedMenuSample::numberOfEvents() const
61 {
62 return pImple_->numberOfEvents;
63 }
64
65 const l1menu::IReducedEvent& l1menu::ReducedMenuSample::getEvent( size_t eventNumber ) const
66 {
67 pImple_->event.pThresholdValues=&pImple_->thresholdsForAllEvents[eventNumber];
68 return pImple_->event;
69 }