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

# User Rev Content
1 grimes 1.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     }