00001 #ifndef QUICK_ANA__SELECTION_DATA_H
00002 #define QUICK_ANA__SELECTION_DATA_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include <QuickAna/Global.h>
00015
00016 #include <QuickAna/SelectionStep.h>
00017 #include <QuickAna/xAODInclude.h>
00018
00019 namespace ana
00020 {
00023
00024 class SelectionData
00025 {
00026
00027
00028
00029
00033 public:
00034 void testInvariant () const;
00035
00036
00042 public:
00043 SelectionData ();
00044
00045
00052 public:
00053 void registerCut (SelectionStep step, const std::string& name,
00054 SelectionCut& cut);
00055
00056
00060 public:
00061 std::size_t size () const;
00062
00063
00071 public:
00072 StatusCode initialize (const InternalConfiguration& configuration,
00073 const std::string& workingPoint);
00074
00075
00079 public:
00080 bool isInitialized () const;
00081
00082
00089 public:
00090 StatusCode prepare (SG::AuxElement *particle);
00091
00092
00101 public:
00102 bool needSelectionTool ();
00103
00104
00110 public:
00111 SelectionChoice getCut (std::size_t cut);
00112
00113
00119 public:
00120 void setCut (std::size_t cut, SelectionChoice choice);
00121
00122
00129 public:
00130 void apply ();
00131
00132
00133
00134
00135
00136
00137
00139 private:
00140 typedef SG::AuxElement::Accessor<SelectType> AccessorType;
00141
00143 private:
00144 enum class State
00145 {
00147 BROKEN,
00148
00150 INITIAL,
00151
00153 RUNNING
00154 };
00155
00157 private:
00158 State m_state;
00159
00160
00162 private:
00163 struct CutInfo
00164 {
00166 public:
00167 SelectionStep step;
00168
00170 public:
00171 std::string name;
00172
00174 public:
00175 AccessorType accessor;
00176
00178 public:
00179 SelectionChoice selection;
00180
00181 CutInfo ();
00182 };
00183
00185 private:
00186 std::vector<CutInfo> m_cuts;
00187
00188
00190 struct SelectionInfo
00191 {
00193 public:
00194 AccessorType accessor;
00195
00197 public:
00198 bool select;
00199
00200 SelectionInfo ();
00201 };
00202
00204 private:
00205 SelectionInfo m_selections [EnumSize<SelectionStep>::dataSize];
00206
00207
00209 private:
00210 SelectionStep m_firstStep;
00211
00212
00214 private:
00215 SG::AuxElement *m_particle;
00216 };
00217 }
00218
00219 #endif