Analysis  version 7.0 - august 2014
Filter.hh
Go to the documentation of this file.
1 //======================================================================
2 /*! \file Filter.hh
3  *
4  * Fichier de déclaration de la classe de base Filter.
5  */
6 //======================================================================
7 
8 #ifndef FILTER_HH
9 #define FILTER_HH
10 
11 #include "FilterBase.hh"
12 #include "GNamed.hh"
13 #include "RPointerList.hh"
14 
15 #define FILTER_ID "FILTER: " ///< Texte identifiant un contour dans un fichier
16 #define FILTER_NONAME "unnamed" ///< Texte par défaut du nom de filtre
17 
18 #define FILTER_TYPE_TXT_FALSE "FALSE" ///< Nom du type de filtre
19 #define FILTER_TYPE_TXT_TRUE "TRUE" ///< Nom du type de filtre
20 #define FILTER_TYPE_TXT_NOT "NOT" ///< Nom du type de filtre
21 #define FILTER_TYPE_TXT_AND "AND" ///< Nom du type de filtre
22 #define FILTER_TYPE_TXT_OR "OR" ///< Nom du type de filtre
23 #define FILTER_TYPE_TXT_XOR "XOR" ///< Nom du type de filtre
24 #define FILTER_TYPE_TXT_MULTI_AND "MULTI_AND" ///< Nom du type de filtre
25 #define FILTER_TYPE_TXT_MULTI_OR "MULTI_OR" ///< Nom du type de filtre
26 #define FILTER_TYPE_TXT_GATE "GATE" ///< Nom du type de filtre
27 #define FILTER_TYPE_TXT_CONTOUR "CONTOUR" ///< Nom du type de filtre
28 #define FILTER_TYPE_TXT_UNDEFINED "UNDEFINED" ///< Nom du type de filtre
29 
30 //======================================================================
31 /*! \class Filter
32  *
33  * Classe générique pour le traitement des filtres. Cette classe ne
34  * définit pas un filtre, mais y fait référence par un pointeur.
35  * Les filtres eux-mêmes sont définis à partir des classes dérivées
36  * de la classe FilterBase.
37  *
38  * Un filtre définit une condition sur un événement: soit par une
39  * combinaison logique de filtres, soit par des conditions sur des
40  * paramètres.
41  *
42  * Un filtre est validé par la méthode Ok(), qui teste les contours
43  * où autres filtres impliqués. Cette méthode peut être longue lors
44  * de l'utilisation de filtres compliqués et/ou appliqués à de
45  * nombreux spectres.
46  * C'est pourquoi la validité d'un filtre peut être précalculée,
47  * avant l'incrémentation des spectres notemment: c'est l'intérêt
48  * des fonction GetInternalValue et SetInternalValue.
49  */
50 class Filter: virtual public GNamed
51 {
52 //----------------------------------------------------------------------
53  /*! \object_doc */
54  GObject(Filter);
55 //----------------------------------------------------------------------
56 
57  friend class FilterList;
58  friend class Spectrum;
59  friend class TreeInfo;
60 
61  public:
62 
63  /// Identification des types de contours
64  enum FTypes
65  {
66  typeFalse = 0, // type des filtres logiques
67  typeTrue = 1,
68  typeNot = 2,
69  typeAnd = 3,
70  typeOr = 4,
71  typeXOr = 5,
72  typeMultiAnd = 6,
73  typeMultiOr = 7,
74 
75  typeGate = 16, // type des filtres numériques
76  typeContour = 17,
77 
78  typeUndefined = -1
79  } ;
80 
81  protected:
82  FilterBase *filter_ptr; ///< Pointeur sur une instance de base d'un filtre
83 
84  #ifndef __MAKECINT__
85  bool *value; ///< Valeur courante du filtre (mise à jour par Ok())
86  #endif
87 
88  public:
89 
90 //----------------------------------------------------------------------
91 // CONSTRUCTEUR / AFFECTATION / DESTRUCTEUR
92 
93  // constructeurs
94  Filter ( const string & f_name = FILTER_NONAME );
95  Filter ( const string & f_name, const FilterBase & f_base );
96  Filter ( const string & f_name, FilterBase * f_base );
97  Filter ( const Filter & f, const string &f_name );
98  Filter ( const Filter & f );
99 
100  // opérateur d'affectation
101  Filter & operator = ( const Filter & f );
102  Filter & operator = ( const FilterBase & f_base );
103 
104  // destructeur
105  virtual ~Filter ( );
106 
107 //----------------------------------------------------------------------
108 // Méthode provenant des filtres
109  virtual int Type ( ) const;
110  virtual string TypeName ( ) const;
111 
112  virtual bool Ok ( ) const;
113 
114  virtual void Rename ( const string & ct_name );
115 
116 //----------------------------------------------------------------------
117  // Ecriture du contour.
118  virtual bool Write ( ostream &os ) const;
119  virtual bool Write ( FILE *fptr ) const;
120 
121  // Lecture du contour.
122  virtual Int_t Read ( istream & is, const EventManager * mgr );
123  virtual Int_t Read ( FILE * fptr, const EventManager * mgr );
124  virtual Int_t Read ( const string & str, const EventManager * mgr );
125 
126 //----------------------------------------------------------------------
127  const FilterBase * GetFilterBase ( ) const;
128 
129  // test si un filtre utilise un contour ou un autre filtre
130  // pour vérifier qu'il peut être effacé dans les listes.
131  virtual bool UsesContour ( const RContour *ct, const bool rec = true ) const;
132  virtual bool UsesFilter ( const Filter *f, const bool rec = true ) const;
133 
134  private:
135  // méthodes pour ne par recalculer tous les filtres
136  virtual void SetInternalValue ( const bool b ) const;
137  virtual bool GetInternalValue ( ) const;
138 
139 //----------------------------------------------------------------------
140 // pour ROOT...
141 
142  public:
143  /*! Définition à usage de ROOT... */
144  ClassDef(Filter,0);
145 };
146 
147 
148 //======================================================================
149 // METHODES INLINE
150 
151 /*! Teste la validité d'un filtre (celà met à valeur le résultat interne). */
152 inline bool Filter::Ok ( ) const
153  { *value = (filter_ptr != NULL) ? filter_ptr->Ok() : false; return (*value); }
154 
155 /*! Retourne le type de contour. */
156 inline int Filter::Type ( ) const
157  { return ((filter_ptr != NULL) ? filter_ptr->Type() : Filter::typeUndefined); }
158 
159 /*! Retourne le type de contour, sous forme textuelle. */
160 inline string Filter::TypeName ( ) const
161  { return ((filter_ptr != NULL) ? filter_ptr->TypeName() : "undefined"); }
162 
163 
164 /*! Retourne le pointeur de base sur le contour. */
165 inline const FilterBase * Filter::GetFilterBase ( ) const
166  { return (filter_ptr); }
167 
168 /*! Test si un filtre utilise un contour (en particulier pour savoir si le
169  * contour peut-être effacé).
170  * \param ct pointeur sur le contour
171  * \param rec indique si on doit chercher récursivement dans les filtres
172  */
173 inline bool Filter::UsesContour ( const RContour *ct, const bool rec ) const
174  { return ( (filter_ptr != NULL) ? filter_ptr->UsesContour(ct,rec) : false ); }
175 
176 /*! Test si un filtre utilise un autre filtre (en particulier pour savoir
177  * si le filtre peut-être effacé).
178  * \param f pointeur sur le filtre
179  * \param rec indique si on doit chercher récursivement dans les filtres
180  */
181 inline bool Filter::UsesFilter ( const Filter *f, const bool rec ) const
182  { return ( (filter_ptr != NULL) ? filter_ptr->UsesFilter(f,rec) : false ); }
183 
184 /*! Renomme un contour (cette fonction est publique, à la différence
185  * de GNamed::SetName).
186  * \param f_name nouveau nom du filtre
187  */
188 inline void Filter::Rename ( const string & f_name )
189  { GNamed::SetName ( f_name ); }
190 
191 /*! Mise à valeur du résultat du filtre: usage interne seulement: cette
192  * méthode sert à ne pas recalculer les filtres plusieurs fois dans les
193  * incrémentations de spectres.
194  * \param b nouveau nom du filtre
195  */
196 inline void Filter::SetInternalValue ( const bool b ) const
197  { *value = b; }
198 
199 /*! Retourne le résultat du filtre: usage interne seulement: cette
200  * méthode sert à ne pas recalculer les filtres plusieurs fois dans les
201  * incrémentations de spectres.
202  */
203 inline bool Filter::GetInternalValue ( ) const
204  { return (*value); }
205 
206 
207 //======================================================================
208 #endif
virtual Int_t Read(istream &is, const EventManager *mgr)
Definition: Filter.cpp:186
Definition: FilterBase.hh:42
virtual ~Filter()
Definition: Filter.cpp:128
virtual bool Ok() const =0
virtual bool UsesFilter(const Filter *f, const bool rec=true) const =0
Definition: TreeInfo.hh:95
Definition: Filter.hh:50
Filter(const string &f_name="unnamed")
Definition: Filter.cpp:19
virtual string TypeName() const
Definition: Filter.hh:160
Definition: Spectrum.hh:222
FilterBase * filter_ptr
Pointeur sur une instance de base d&#39;un filtre.
Definition: Filter.hh:82
virtual bool GetInternalValue() const
Definition: Filter.hh:203
virtual int Type() const =0
GObject(Filter)
FTypes
Identification des types de contours.
Definition: Filter.hh:64
Definition: FilterList.hh:37
virtual bool UsesFilter(const Filter *f, const bool rec=true) const
Definition: Filter.hh:181
#define FILTER_NONAME
Texte par défaut du nom de filtre.
Definition: Filter.hh:16
virtual string TypeName() const =0
ClassDef(Filter, 0)
Filter & operator=(const Filter &f)
Definition: Filter.cpp:92
virtual int Type() const
Definition: Filter.hh:156
const FilterBase * GetFilterBase() const
Definition: Filter.hh:165
virtual bool UsesContour(const RContour *ct, const bool rec=true) const =0
bool * value
Valeur courante du filtre (mise à jour par Ok())
Definition: Filter.hh:85
virtual void Rename(const string &ct_name)
Definition: Filter.hh:188
virtual bool Ok() const
Definition: Filter.hh:152
virtual void SetInternalValue(const bool b) const
Definition: Filter.hh:196
virtual bool Write(ostream &os) const
Definition: Filter.cpp:140
Definition: EventManager.hh:59
virtual bool UsesContour(const RContour *ct, const bool rec=true) const
Definition: Filter.hh:173