Analysis  version 7.0 - august 2014
SpecOper.hh
Go to the documentation of this file.
1 //======================================================================
2 /*! \file SpecOper.hh
3  *
4  * Déclaration des fonctions de la classe SpecOper classe de base
5  * pour les spectres opérant sur d'autres spectres.
6  */
7 //======================================================================
8 
9 #ifndef SPEC_OPER_HH
10 #define SPEC_OPER_HH
11 
12 #include "SpecCalc.hh"
13 
14 //======================================================================
15 /*! \class SpecOper
16  *
17  * Classe de base des spectres opérant sur d'autres spectres.
18  * Ces spectres représentent des opérations sur d'autres spectres
19  * (qui doivent être de même dimension), en prenant éventuellement
20  * en compte des coefficients.
21  */
22 class SpecOper : public SpecCalc
23 {
24 //----------------------------------------------------------------------
25  /*! \object_doc */
27 //----------------------------------------------------------------------
28 
29  public:
30  static Double_t epsilon; ///< Limite de test des divisions par zéro
31 
32  protected:
33  Int_t oper_num; ///< Nombre de spectres opérandes
34  Int_t coef_num; ///< Nombre de coefficients
35 
36  #ifndef __MAKECINT__
37  Spectrum ** oper; ///< Table des pointeurs des spectres opérandes
38  Double_t * coef; ///< Table des coefficients
39  #endif
40 
41  public:
42 
43 //----------------------------------------------------------------------
44 // CONSTRUCTEUR / AFFECTATION / DESTRUCTEUR
45 //----------------------------------------------------------------------
46 
47  // Constructeur
48  SpecOper ( const string & spec_name, const Int_t ncoef = 0 );
49 
50  // Constructeur de recopie
51  SpecOper ( const SpecOper & original );
52 
53  // Destructeur
54  virtual ~SpecOper ();
55 
56 //----------------------------------------------------------------------
57 
58  protected:
59  static Int_t SetOperData ( const string & def_str,
60  const EventManager * evt_mgr,
61  Int_t & nop,
62  Spectrum ** & op,
63  Int_t & nco,
64  Double_t * & co );
65 
66  virtual Int_t SetOperData ( const string & defstr, const EventManager * evt_mgr );
67 
68  // définition de l'histo résultat à partir d'une opérande
69  virtual void SetHistoBad ( );
70  virtual void SetHisto ( const Int_t op = 0 );
71 
72  // pas d'incrémentation auto du spectre
73  virtual void IncrementSpectrum ( );
74 
75  public:
76 
77  //----------------------------------------------------------
78  /*! Fonction qui vérifie que les spectres opérandes sont compatible
79  * avec le type de spectre-opération, et que les opérandes sont compatibles
80  * entre elles (dimensions, binning, ...).
81  */
82  virtual bool CheckOperands ( ) const = 0;
83 
84  //----------------------------------------------------------
85 
86  virtual void Increment ( );
87  virtual bool IsUpdated ( ) const;
88 
89  // Retourne une chaîne décrivant le spectre.
90  virtual string Definition ( ) const;
91 
92  // Ecriture des données du spectre dans une chaîne de définition.
93  virtual string DefinitionString ( ) const;
94 
95  //----------------------------------------------------------
96  // fonctions spécifiques
97  virtual Int_t GetCoefficientNumber ( ) const;
98  virtual Int_t GetOperandNumber ( ) const;
99 
100  virtual Spectrum * GetOperand ( const Int_t n ) const;
101  virtual Double_t GetCoefficient ( const Int_t n ) const;
102 
103  virtual bool UsesSpectrum ( const Spectrum *sp, const bool rec = true ) const;
104 
105 
106 //----------------------------------------------------------------------
107 // pour ROOT...
108  public:
109  /*! Définition à usage de ROOT... */
110  ClassDef(SpecOper,0);
111 } ;
112 
113 
114 //======================================================================
115 // FONCTIONS INLINE
116 //======================================================================
117 
118 /*! Incrémentation automatique du spectre: on retire le bit
119  * indiquant que le spectre est à jour.
120  * Il doit être recalculé avant sauvegarde ou affichage.
121  */
123  {
124  // on retire le bit indiquant que le spectre a été calculé status = status - (status & spectrumUpdated); } /*! Fonction générique pour l'incrémentation d'un spectre: on retire le bit * indiquant que le spectre est à jour. * Il doit être recalculé avant sauvegarde ou affichage. */ inline void SpecOper::Increment ( ) { // on retire le bit indiquant que le spectre a été calculé status = status - (status & spectrumUpdated); } /*! Fonction qui renvoit le nombre de coefficients pour le calcul du spectre. */ inline Int_t SpecOper::GetCoefficientNumber ( ) const { return (coef_num); } /*! Fonction qui renvoit le nombre de spectres operandes. */ inline Int_t SpecOper::GetOperandNumber ( ) const { return (oper_num); } /*! Retourne le pointeur sur un spectre opérande. * \param n numéro de l'opérande */ inline Spectrum * SpecOper::GetOperand ( const Int_t n ) const { return ( ((n >= 0) && (n < oper_num)) ? oper[n] : NULL ); } /*! Retourne la valeur d'un coefficient. * \param n numéro du coefficient */ inline Double_t SpecOper::GetCoefficient ( const Int_t n ) const { return ( ((n >= 0) && (n < coef_num)) ? coef[n] : 0. ); } //====================================================================== #endif
125  status = status - (status & spectrumUpdated);
126  }
127 
128 /*! Fonction générique pour l'incrémentation d'un spectre: on retire le bit
129  * indiquant que le spectre est à jour.
130  * Il doit être recalculé avant sauvegarde ou affichage.
131  */
132 inline void SpecOper::Increment ( )
133  {
134  // on retire le bit indiquant que le spectre a été calculé status = status - (status & spectrumUpdated); } /*! Fonction qui renvoit le nombre de coefficients pour le calcul du spectre. */ inline Int_t SpecOper::GetCoefficientNumber ( ) const { return (coef_num); } /*! Fonction qui renvoit le nombre de spectres operandes. */ inline Int_t SpecOper::GetOperandNumber ( ) const { return (oper_num); } /*! Retourne le pointeur sur un spectre opérande. * \param n numéro de l'opérande */ inline Spectrum * SpecOper::GetOperand ( const Int_t n ) const { return ( ((n >= 0) && (n < oper_num)) ? oper[n] : NULL ); } /*! Retourne la valeur d'un coefficient. * \param n numéro du coefficient */ inline Double_t SpecOper::GetCoefficient ( const Int_t n ) const { return ( ((n >= 0) && (n < coef_num)) ? coef[n] : 0. ); } //====================================================================== #endif
135  status = status - (status & spectrumUpdated);
136  }
137 
138 
139 /*! Fonction qui renvoit le nombre de coefficients pour le calcul du spectre.
140  */
141 inline Int_t SpecOper::GetCoefficientNumber ( ) const
142  { return (coef_num); }
143 
144 /*! Fonction qui renvoit le nombre de spectres operandes.
145  */
146 inline Int_t SpecOper::GetOperandNumber ( ) const
147  { return (oper_num); }
148 
149 
150 /*! Retourne le pointeur sur un spectre opérande.
151  * \param n numéro de l'opérande
152  */
153 inline Spectrum * SpecOper::GetOperand ( const Int_t n ) const
154  { return ( ((n >= 0) && (n < oper_num)) ? oper[n] : NULL ); }
155 
156 /*! Retourne la valeur d'un coefficient.
157  * \param n numéro du coefficient
158  */
159 inline Double_t SpecOper::GetCoefficient ( const Int_t n ) const
160  { return ( ((n >= 0) && (n < coef_num)) ? coef[n] : 0. ); }
161 
162 //======================================================================
163 #endif
virtual void SetHisto(const Int_t op=0)
Definition: SpecOper.cpp:310
virtual Int_t GetOperandNumber() const
Definition: SpecOper.hh:146
Int_t oper_num
Nombre de spectres opérandes.
Definition: SpecOper.hh:33
ClassDef(SpecOper, 0)
static Double_t epsilon
Limite de test des divisions par zéro
Definition: SpecOper.hh:30
virtual bool UsesSpectrum(const Spectrum *sp, const bool rec=true) const
Definition: SpecOper.cpp:387
virtual ~SpecOper()
Definition: SpecOper.cpp:65
Definition: Spectrum.hh:222
GObjectV(SpecOper)
u_int status
Mot d&#39;état du spectre.
Definition: Spectrum.hh:241
virtual Spectrum * GetOperand(const Int_t n) const
Definition: SpecOper.hh:153
Int_t coef_num
Nombre de coefficients.
Definition: SpecOper.hh:34
Double_t * coef
Table des coefficients.
Definition: SpecOper.hh:38
virtual void Increment()
Definition: SpecOper.hh:132
virtual Double_t GetCoefficient(const Int_t n) const
Definition: SpecOper.hh:159
Definition: SpecCalc.hh:26
virtual Int_t GetCoefficientNumber() const
Definition: SpecOper.hh:141
virtual void SetHistoBad()
Definition: SpecOper.cpp:292
virtual string DefinitionString() const
Definition: SpecOper.cpp:143
virtual bool CheckOperands() const =0
Spectrum ** oper
Table des pointeurs des spectres opérandes.
Definition: SpecOper.hh:37
virtual void IncrementSpectrum()
Definition: SpecOper.hh:122
static Int_t SetOperData(const string &def_str, const EventManager *evt_mgr, Int_t &nop, Spectrum **&op, Int_t &nco, Double_t *&co)
Definition: SpecOper.cpp:176
SpecOper(const string &spec_name, const Int_t ncoef=0)
Definition: SpecOper.cpp:23
Definition: EventManager.hh:59
Definition: SpecOper.hh:22
virtual bool IsUpdated() const
Definition: SpecOper.cpp:88
virtual string Definition() const
Definition: SpecOper.cpp:117