Changeset 1092 in Sophya for trunk/SophyaLib/HiStats/histos2.h


Ignore:
Timestamp:
Jul 26, 2000, 3:15:52 PM (25 years ago)
Author:
ansari
Message:

Histos/Hprof/Histo2D en r_8 cmv 26/7/00

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaLib/HiStats/histos2.h

    r1053 r1092  
    2828
    2929  // CREATOR / DESTRUCTOR
    30   Histo2D(float xMin, float xMax, int nxBin
    31          ,float yMin, float yMax, int nyBin);
     30  Histo2D(r_8 xMin,r_8 xMax,int_4 nxBin,r_8 yMin,r_8 yMax,int_4 nyBin);
     31  Histo2D(r_4 xMin,r_4 xMax,int_4 nxBin,r_4 yMin,r_4 yMax,int_4 nyBin);
    3232  Histo2D(const Histo2D& h);
    3333  Histo2D();
    34   virtual  ~Histo2D();
     34  virtual ~Histo2D();
    3535
    3636  // OPTIONS
    37   void   Errors(); 
     37  void Errors(); 
    3838 
    3939  // UPDATING
    40   void   Zero();
    41   void   Add(float x, float y, float w = 1.);
     40  void Zero();
     41  void Add(r_8 x, r_8 y, r_8 w = 1.);
    4242
    4343  // Operators
    4444  Histo2D& operator = (const Histo2D& h);
    45   Histo2D& operator *= (double b);
    46   Histo2D& operator /= (double b);
    47   Histo2D& operator += (double b);
    48   Histo2D& operator -= (double b);
     45  Histo2D& operator *= (r_8 b);
     46  Histo2D& operator /= (r_8 b);
     47  Histo2D& operator += (r_8 b);
     48  Histo2D& operator -= (r_8 b);
    4949  Histo2D& operator += (const Histo2D& a);
    5050  Histo2D& operator -= (const Histo2D& a);
     
    5858  void GetError2(TMatrix<r_8>& v);
    5959  void GetError(TMatrix<r_8>& v);
    60   void PutValue(TMatrix<r_8>& v, int ierr=0);
    61   void PutValueAdd(TMatrix<r_8>& v, int ierr=0);
     60  void PutValue(TMatrix<r_8>& v, int_4 ierr=0);
     61  void PutValueAdd(TMatrix<r_8>& v, int_4 ierr=0);
    6262  void PutError2(TMatrix<r_8>& v);
    6363  void PutError2Add(TMatrix<r_8>& v);
     
    6666  // INLINES
    6767  //! Retourne l'abscisse minimum.
    68   inline float   XMin() const {return xmin;}
     68  inline r_8 XMin() const {return mXmin;}
    6969  //! Retourne l'abscisse maximum.
    70   inline float   XMax() const {return xmax;}
     70  inline r_8 XMax() const {return mXmax;}
    7171  //! Retourne l'ordonnee minimum.
    72   inline float   YMin() const {return ymin;}
     72  inline r_8 YMin() const {return mYmin;}
    7373  //! Retourne l'ordonnee maximum.
    74   inline float   YMax() const {return ymax;}
     74  inline r_8 YMax() const {return mYmax;}
    7575  //! Retourne le nombre de bins selon X.
    76   inline int_4   NBinX() const {return nx;}
     76  inline int_4 NBinX() const {return mNx;}
    7777  //! Retourne le nombre de bins selon Y.
    78   inline int_4   NBinY() const {return ny;}
     78  inline int_4 NBinY() const {return mNy;}
    7979  //! Retourne la largeur du bin selon X.
    80   inline float   WBinX() const {return wbinx;}
     80  inline r_8 WBinX() const {return mWBinx;}
    8181  //! Retourne la largeur du bin selon Y.
    82   inline float   WBinY() const {return wbiny;}
     82  inline r_8 WBinY() const {return mWBiny;}
    8383  //! Retourne le pointeur sur le tableaux des contenus.
    84   inline float*  Bins() const  {return data;}
     84  inline r_8* Bins() const  {return mData;}
    8585  //! Retourne le contenu du bin i,j.
    86   inline float   operator()(int i,int j) const {return data[j*nx+i];}
     86  inline r_8 operator()(int_4 i,int_4 j) const {return mData[j*mNx+i];}
    8787  //! Remplit le contenu du bin i,j.
    88   inline float&  operator()(int i,int j)       {return data[j*nx+i];}
     88  inline r_8& operator()(int_4 i,int_4 j)      {return mData[j*mNx+i];}
    8989  //! retourne "true" si il y a des erreurs stoquees
    90   inline bool    HasErrors() { if(err2) return true; else return false;}
     90  inline bool HasErrors() { if(mErr2) return true; else return false;}
    9191  //! Retourne l'erreur du bin i,j.
    92   inline float   Error(int i,int j)  const
    93                    {if(err2)
    94                       {if(err2[j*nx+i]>0.) return sqrt(err2[j*nx+i]); else return 0.;}
    95                     else return 0.;}
     92  inline r_8 Error(int_4 i,int_4 j)  const
     93    {if(mErr2)
     94       {if(mErr2[j*mNx+i]>0.) return sqrt(mErr2[j*mNx+i]); else return 0.;}
     95     else return 0.;}
    9696  //! Remplit l'erreur au carre du bin i,j.
    97   inline double  Error2(int i,int j) const
    98                    {if(err2) return err2[j*nx+i]; else return 0.;}
     97  inline r_8 Error2(int_4 i,int_4 j) const
     98             {if(mErr2) return mErr2[j*mNx+i]; else return 0.;}
    9999  //! Remplit l'erreur au carre du bin i,j.
    100   inline double& Error2(int i,int j) {return err2[j*nx+i];}
     100  inline r_8& Error2(int_4 i,int_4 j) {return mErr2[j*mNx+i];}
    101101  //! Retourne la somme ponderee.
    102   inline float   NData() const    {return (float) nHist;}
     102  inline r_8 NData() const    {return nHist;}
    103103  //! Retourne le nombre d'entrees.
    104   inline int_4   NEntries() const {return nEntries;}
     104  inline int_4 NEntries() const {return nEntries;}
    105105  //! Retourne l'abscisse et l'ordonnee du coin inferieur du bin i,j.
    106   inline void BinLowEdge(int i,int j,float& x,float& y)
    107                  {x = xmin + i*wbinx; y = ymin + j*wbiny;}
     106  inline void BinLowEdge(int_4 i,int_4 j,r_8& x,r_8& y)
     107              {x = mXmin + i*mWBinx; y = mYmin + j*mWBiny;}
     108  //! Retourne l'abscisse et l'ordonnee du coin inferieur du bin i,j.
     109  inline void BinLowEdge(int_4 i,int_4 j,r_4& xf,r_4& yf)
     110              {r_8 x,y; BinLowEdge(i,j,x,y); xf=x; yf=y;}
    108111  //! Retourne l'abscisse et l'ordonnee du centre du bin i,j.
    109   inline void BinCenter(int i,int j,float& x,float& y)
    110                  {x = xmin + (i+0.5)*wbinx; y = ymin + (j+0.5)*wbiny;}
     112  inline void BinCenter(int_4 i,int_4 j,r_8& x,r_8& y)
     113              {x = mXmin + (i+0.5)*mWBinx; y = mYmin + (j+0.5)*mWBiny;}
     114  //! Retourne l'abscisse et l'ordonnee du centre du bin i,j.
     115  inline void BinCenter(int_4 i,int_4 j,r_4& xf,r_4& yf)
     116              {r_8 x,y; BinCenter(i,j,x,y); xf=x; yf=y;}
    111117  //! Retourne l'abscisse et l'ordonnee du coin superieur du bin i,j.
    112   inline void BinHighEdge(int i,int j,float& x,float& y)
    113                  {x = xmin + (i+1)*wbinx; y = ymin + (j+1)*wbiny;}
     118  inline void BinHighEdge(int_4 i,int_4 j,r_8& x,r_8& y)
     119              {x = mXmin + (i+1)*mWBinx; y = mYmin + (j+1)*mWBiny;}
     120  //! Retourne l'abscisse et l'ordonnee du coin superieur du bin i,j.
     121  inline void BinHighEdge(int_4 i,int_4 j,r_4& xf,r_4& yf)
     122              {r_8 x,y; BinHighEdge(i,j,x,y); xf=x; yf=y;}
    114123  //! Retourne les numeros du bin contenant l'abscisse et l'ordonnee x,y.
    115   inline void FindBin(float x,float y,int& i,int& j)
    116     { i = (int) floorf((x - xmin)/wbinx); j = (int) floorf((y - ymin)/wbiny);}
     124  inline void FindBin(r_8 x,r_8 y,int_4& i,int_4& j)
     125    {i=(int_4) floor((x-mXmin)/mWBinx); j=(int_4) floor((y-mYmin)/mWBiny);}
    117126
    118127  // Info, statistique et calculs sur les histogrammes
    119   float   NOver(int i=-1,int j=-1) const;
    120   int    BinNonNul() const;
    121   int    ErrNonNul() const;
    122   void    IJMax(int& imax,int& jmax,int il=1,int ih= -1,int jl=1,int jh= -1);
    123   void    IJMin(int& imax,int& jmax,int il=1,int ih= -1,int jl=1,int jh= -1);
    124   float   VMax(int il=1,int ih= -1,int jl=1,int jh= -1) const;
    125   float   VMin(int il=1,int ih= -1,int jl=1,int jh= -1) const;
    126   int     EstimeMax(float& xm,float& ym,int SzPav = 3
    127                    ,int il=1,int ih= -1,int jl=1,int jh= -1);
    128   int     EstimeMax(int im,int jm,float& xm,float& ym,int SzPav = 3);
    129   int     FindMax(int& im,int& jm,int SzPav = 3,float Dz = 0.
    130                  ,int il=1,int ih= -1,int jl=1,int jh= -1);
     128  r_8   NOver(int_4 i=-1,int_4 j=-1) const;
     129  int_4 BinNonNul() const;
     130  int_4 ErrNonNul() const;
     131  void IJMax(int_4& imax,int_4& jmax,int_4 il=1,int_4 ih= -1,int_4 jl=1,int_4 jh= -1);
     132  void IJMin(int_4& imax,int_4& jmax,int_4 il=1,int_4 ih= -1,int_4 jl=1,int_4 jh= -1);
     133  r_8 VMax(int_4 il=1,int_4 ih= -1,int_4 jl=1,int_4 jh= -1) const;
     134  r_8 VMin(int_4 il=1,int_4 ih= -1,int_4 jl=1,int_4 jh= -1) const;
     135  int_4 EstimeMax(r_8& xm,r_8& ym,int_4 SzPav = 3
     136                 ,int_4 il=1,int_4 ih= -1,int_4 jl=1,int_4 jh= -1);
     137  int_4 EstimeMax(int_4 im,int_4 jm,r_8& xm,r_8& ym,int_4 SzPav = 3);
     138  int_4 FindMax(int_4& im,int_4& jm,int_4 SzPav = 3,r_8 Dz = 0.
     139               ,int_4 il=1,int_4 ih= -1,int_4 jl=1,int_4 jh= -1);
    131140
    132141  // Fit
    133   int      Fit(GeneralFit& gfit,unsigned short typ_err=0);
    134   Histo2D  FitResidus(GeneralFit& gfit);
    135   Histo2D  FitFunction(GeneralFit& gfit);
     142  int_4   Fit(GeneralFit& gfit,unsigned short typ_err=0);
     143  Histo2D FitResidus(GeneralFit& gfit);
     144  Histo2D FitFunction(GeneralFit& gfit);
    136145
    137146  // Print et Display ASCII
    138   void    PrintStatus();
    139   void    Print(float min=1.,float max=-1.
    140                ,int il=1,int ih= -1,int jl=1,int jh= -1);
     147  void PrintStatus();
     148  void Print(r_8 min=1.,r_8 max=-1.
     149               ,int_4 il=1,int_4 ih= -1,int_4 jl=1,int_4 jh= -1);
    141150
    142151  // PROJECTIONS
    143   void           SetProjX();
    144   void           SetProjY();
    145   void           SetProj();
    146   void           DelProjX();
    147   void           DelProjY();
    148   void           DelProj();
    149   void           ZeroProjX();
    150   void           ZeroProjY();
    151   void           ZeroProj();
     152  void SetProjX();
     153  void SetProjY();
     154  void SetProj();
     155  void DelProjX();
     156  void DelProjY();
     157  void DelProj();
     158  void ZeroProjX();
     159  void ZeroProjY();
     160  void ZeroProj();
    152161  //! Retourne le pointeur sur l'histo 1D de la projection selon X.
    153   inline Histo*  HProjX() const {return hprojx;}
     162  inline Histo* HProjX() const {return mHprojx;}
    154163  //! Retourne le pointeur sur l'histo 1D de la projection selon Y.
    155   inline Histo*  HProjY() const {return hprojy;}
    156   void           ShowProj();
     164  inline Histo* HProjY() const {return mHprojy;}
     165  void ShowProj();
    157166
    158167  // BANDES
    159168  //! Retourne le nombre de bandes selon X
    160   inline int     NBandX() const {return lbandx.size();}
     169  inline int_4 NBandX() const {return mLBandx.size();}
    161170  //! Retourne le nombre de bandes selon Y
    162   inline int     NBandY() const {return lbandy.size();}
    163   int            SetBandX(float ybmin,float ybmax);
    164   int            SetBandY(float xbmin,float xbmax);
    165   void           DelBandX();
    166   void           DelBandY();
    167   void           ZeroBandX();
    168   void           ZeroBandY();
    169   Histo*         HBandX(int n) const;
    170   Histo*         HBandY(int n) const;
    171   void           GetBandX(int n,float& ybmin,float& ybmax) const;
    172   void           GetBandY(int n,float& xbmin,float& xbmax) const;
    173   void           ShowBand(int lp = 0);
     171  inline int_4 NBandY() const {return mLBandy.size();}
     172  int_4 SetBandX(r_8 ybmin,r_8 ybmax);
     173  int_4 SetBandY(r_8 xbmin,r_8 xbmax);
     174  void DelBandX();
     175  void DelBandY();
     176  void ZeroBandX();
     177  void ZeroBandY();
     178  Histo* HBandX(int_4 n) const;
     179  Histo* HBandY(int_4 n) const;
     180  void GetBandX(int_4 n,r_8& ybmin,r_8& ybmax) const;
     181  void GetBandY(int_4 n,r_8& xbmin,r_8& xbmax) const;
     182  void ShowBand(int_4 lp = 0);
    174183
    175184  // SLICES
    176185  //! Retourne le nombre de slices selon X
    177   inline int     NSliX() const {return lslix.size();}
     186  inline int_4 NSliX() const {return mLSlix.size();}
    178187  //! Retourne le nombre de slices selon Y
    179   inline int     NSliY() const {return lsliy.size();}
    180   int            SetSliX(int nsli);
    181   int            SetSliY(int nsli);
    182   void           DelSliX();
    183   void           DelSliY();
    184   void           ZeroSliX();
    185   void           ZeroSliY();
    186   Histo*         HSliX(int n) const;
    187   Histo*         HSliY(int n) const;
    188   void           ShowSli(int lp = 0);
     188  inline int_4 NSliY() const {return mLSliy.size();}
     189  int_4 SetSliX(int_4 nsli);
     190  int_4 SetSliY(int_4 nsli);
     191  void DelSliX();
     192  void DelSliY();
     193  void ZeroSliX();
     194  void ZeroSliY();
     195  Histo* HSliX(int_4 n) const;
     196  Histo* HSliY(int_4 n) const;
     197  void ShowSli(int_4 lp = 0);
    189198
    190199#ifndef __DECCXX
     
    193202  //! structure de definition des bandes
    194203  struct bande_slice {
    195     int num;   //!< nombre de bandes
    196     float min; //!< limite minimum pour remplir la bande
    197     float max; //!< limite maximum pour remplir la bande
    198     Histo* H;  //!< pointer sur l Histo 1D de la bande
     204    int_4 num;   //!< nombre de bandes
     205    r_8 min;    //!< limite minimum pour remplir la bande
     206    r_8 max;    //!< limite maximum pour remplir la bande
     207    Histo* H;    //!< pointer sur l Histo 1D de la bande
    199208    STRUCTCOMP(bande_slice)
    200209  };
     
    205214  void Delete();
    206215
    207   float*         data; //!< donnees
    208   double*        err2; //!< erreurs carrees
    209 
    210   float          over[3][3]; //!< overflow table
    211   double         nHist;      //!< somme ponderee des entrees
    212   int_4          nEntries;   //!< nombre d'entrees
    213 
    214   int_4          nx;    //!< nombre de bins en X
    215   int_4          ny;    //!< nombre de bins en Y
    216   int_4          nxy;   //!< nombre de bins total
    217   float          xmin;  //!< abscisse minimum
    218   float          xmax;  //!< abscisse maximum
    219   float          ymin;  //!< ordonnee minimum
    220   float          ymax;  //!< ordonnee maximum
    221   float          wbinx; //!< largeur du bin en X
    222   float          wbiny; //!< largeur du bin en Y
    223 
    224   bande_slice    b_s;
    225 
    226   Histo*         hprojx; //!< pointer sur Histo des proj X
    227   Histo*         hprojy; //!< pointer sur Histo des proj Y
    228 
    229   list<bande_slice>  lbandx; //!< liste des bandes selon X
    230   list<bande_slice>  lbandy; //!< liste des bandes selon Y
     216  r_8*        mData; //!< donnees
     217  r_8*        mErr2; //!< erreurs carrees
     218
     219  r_8         mOver[3][3]; //!< overflow table
     220  r_8         nHist;       //!< somme ponderee des entrees
     221  int_4       nEntries;    //!< nombre d'entrees
     222
     223  int_4       mNx;    //!< nombre de bins en X
     224  int_4       mNy;    //!< nombre de bins en Y
     225  int_4       mNxy;   //!< nombre de bins total
     226  r_8         mXmin;  //!< abscisse minimum
     227  r_8         mXmax;  //!< abscisse maximum
     228  r_8         mYmin;  //!< ordonnee minimum
     229  r_8         mYmax;  //!< ordonnee maximum
     230  r_8         mWBinx; //!< largeur du bin en X
     231  r_8         mWBiny; //!< largeur du bin en Y
     232
     233  bande_slice mB_s;
     234
     235  Histo*      mHprojx; //!< pointer sur Histo des proj X
     236  Histo*      mHprojy; //!< pointer sur Histo des proj Y
     237
     238  list<bande_slice>  mLBandx; //!< liste des bandes selon X
     239  list<bande_slice>  mLBandy; //!< liste des bandes selon Y
    231240 
    232   list<bande_slice>  lslix; //!< liste des slices selon X
    233   list<bande_slice>  lsliy; //!< liste des slices selon Y
     241  list<bande_slice>  mLSlix; //!< liste des slices selon X
     242  list<bande_slice>  mLSliy; //!< liste des slices selon Y
    234243
    235244};
     
    250259// ObjFileIO<Histo2D>
    251260
    252 /*! \ingroup HiStats \fn operator*(const Histo2D&,double)
     261/*! \ingroup HiStats \fn operator*(const Histo2D&,r_8)
    253262  \brief Operateur H2 = H1 * b */
    254 inline Histo2D operator * (const Histo2D& a, double b)
     263inline Histo2D operator * (const Histo2D& a, r_8 b)
    255264{
    256265  Histo2D result(a);
     
    258267}
    259268
    260 /*! \ingroup HiStats \fn operator*(double,const Histo2D&)
     269/*! \ingroup HiStats \fn operator*(r_8,const Histo2D&)
    261270  \brief Operateur H2 = b * H1 */
    262 inline Histo2D operator * (double b, const Histo2D& a)
     271inline Histo2D operator * (r_8 b, const Histo2D& a)
    263272{
    264273  Histo2D result(a);
     
    266275}
    267276
    268 /*! \ingroup HiStats \fn operator/(const Histo2D&,double)
     277/*! \ingroup HiStats \fn operator/(const Histo2D&,r_8)
    269278  \brief Operateur H2 = H1 / b */
    270 inline Histo2D operator / (const Histo2D& a, double b)
     279inline Histo2D operator / (const Histo2D& a, r_8 b)
    271280{
    272281  Histo2D result(a);
     
    274283}
    275284
    276 /*! \ingroup HiStats \fn operator+(const Histo2D&,double)
     285/*! \ingroup HiStats \fn operator+(const Histo2D&,r_8)
    277286  \brief Operateur H2 = H1 + b */
    278 inline Histo2D operator + (const Histo2D& a, double b)
     287inline Histo2D operator + (const Histo2D& a, r_8 b)
    279288{
    280289  Histo2D result(a);
     
    282291}
    283292
    284 /*! \ingroup HiStats \fn operator+(double,const Histo2D&)
     293/*! \ingroup HiStats \fn operator+(r_8,const Histo2D&)
    285294  \brief Operateur H2 = b + H1 */
    286 inline Histo2D operator + (double b, const Histo2D& a)
     295inline Histo2D operator + (r_8 b, const Histo2D& a)
    287296{
    288297  Histo2D result(a);
     
    290299}
    291300
    292 /*! \ingroup HiStats \fn operator-(const Histo2D&,double)
     301/*! \ingroup HiStats \fn operator-(const Histo2D&,r_8)
    293302  \brief Operateur H2 = H1 - b */
    294 inline Histo2D operator - (const Histo2D& a, double b)
     303inline Histo2D operator - (const Histo2D& a, r_8 b)
    295304{
    296305  Histo2D result(a);
     
    298307}
    299308
    300 /*! \ingroup HiStats \fn operator-(double,const Histo2D&)
     309/*! \ingroup HiStats \fn operator-(r_8,const Histo2D&)
    301310  \brief Operateur H2 = b - H1 */
    302 inline Histo2D operator - (double b, const Histo2D& a)
     311inline Histo2D operator - (r_8 b, const Histo2D& a)
    303312{
    304313  Histo2D result(a);
Note: See TracChangeset for help on using the changeset viewer.