1 |
grimes |
1.1 |
#ifndef l1menu_TriggerRatePlot_h
|
2 |
|
|
#define l1menu_TriggerRatePlot_h
|
3 |
|
|
|
4 |
|
|
#include <memory>
|
5 |
|
|
#include <string>
|
6 |
|
|
|
7 |
|
|
//
|
8 |
|
|
// Forward declarations
|
9 |
|
|
//
|
10 |
|
|
class TH1;
|
11 |
|
|
namespace l1menu
|
12 |
|
|
{
|
13 |
|
|
class ITrigger;
|
14 |
|
|
class IEvent;
|
15 |
|
|
}
|
16 |
|
|
|
17 |
|
|
|
18 |
|
|
namespace l1menu
|
19 |
|
|
{
|
20 |
|
|
/** @brief Class that plots trigger rates versus threshold.
|
21 |
|
|
*
|
22 |
|
|
* @author Mark Grimes (mark.grimes@bristol.ac.uk)
|
23 |
|
|
* @date 24/May/2013
|
24 |
|
|
*/
|
25 |
|
|
class TriggerRatePlot
|
26 |
|
|
{
|
27 |
|
|
public:
|
28 |
|
|
/** @brief Constructor that sets the trigger to plot for, the histogram to plot into, and the trigger parameter to vary.
|
29 |
|
|
*
|
30 |
|
|
* Note that the title of the histogram is modified to record the state of the trigger (all other parameters).
|
31 |
|
|
*
|
32 |
|
|
* @param[in] trigger The trigger that the plot will be created for. The trigger should be set exactly as you want
|
33 |
|
|
* the plots made for it, e.g. with the correct eta cuts already set. The other thresholds are
|
34 |
|
|
* not modified so you should set these to zero beforehand if that's what you want. The trigger
|
35 |
|
|
* is copied so these cannot be changed afterwards.
|
36 |
|
|
* @param[in] pHistogram The root histogram to fill with the rates. This should be set up with the required binning
|
37 |
|
|
* beforehand. The title is changed to record the trigger name, version, parameter plotted against
|
38 |
|
|
* and other parameter values.
|
39 |
|
|
* @param[in] versusParameter The trigger parameter to plot along the x-axis. Defaults to "threshold1".
|
40 |
|
|
*/
|
41 |
|
|
TriggerRatePlot( const l1menu::ITrigger& trigger, std::unique_ptr<TH1> pHistogram, const std::string versusParameter="threshold1" );
|
42 |
|
|
|
43 |
|
|
/** @brief Explicit rvalue constructor to allow moving of TriggerRatePlot objects. */
|
44 |
|
|
TriggerRatePlot( l1menu::TriggerRatePlot&& otherTriggerRatePlot ) noexcept;
|
45 |
|
|
/** @brief Explicit rvalue assignment operator to allow moving of TriggerRatePlot objects. */
|
46 |
|
|
TriggerRatePlot& operator=( l1menu::TriggerRatePlot&& otherTriggerRatePlot ) noexcept;
|
47 |
|
|
|
48 |
|
|
virtual ~TriggerRatePlot();
|
49 |
|
|
void addEvent( const l1menu::IEvent& event ) const;
|
50 |
|
|
|
51 |
|
|
/** @brief Returns the internal pointer to the root histogram. Ownership is retained by TriggerRatePlot. */
|
52 |
|
|
TH1* getPlot();
|
53 |
|
|
|
54 |
|
|
/** @brief Tells TriggerRatePlot to relinquish ownership of the internal root histogram. A pointer to the
|
55 |
|
|
* histogram is also returned.
|
56 |
|
|
*
|
57 |
|
|
* Note that the pointer is still held so that further operations on this object are still valid,
|
58 |
|
|
* just that the TH1 won't be deleted when the instance goes out of scope. */
|
59 |
|
|
TH1* relinquishOwnershipOfPlot();
|
60 |
|
|
protected:
|
61 |
|
|
std::unique_ptr<l1menu::ITrigger> pTrigger_;
|
62 |
|
|
std::unique_ptr<TH1> pHistogram_;
|
63 |
|
|
/// The parameter to plot against, usually "threshold1";
|
64 |
|
|
std::string versusParameter_;
|
65 |
|
|
/// Flag to say whether the histogram should be deleted when this instance goes out of scope.
|
66 |
|
|
bool histogramOwnedByMe_;
|
67 |
|
|
};
|
68 |
|
|
}
|
69 |
|
|
#endif
|