Changeset 3123 in Sophya for trunk/SophyaLib/HiStats/histerr.h


Ignore:
Timestamp:
Jan 10, 2007, 12:53:57 PM (19 years ago)
Author:
cmv
Message:

modif HistoErr Histo2DErr cmv 10/01/07

File:
1 edited

Legend:

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

    r3118 r3123  
    55#include <iostream>
    66#include <stdio.h>
    7 #include "histos.h"
     7#include "tvector.h"
    88
    99namespace SOPHYA {
     
    1212template <class T>  class FitsHandler;
    1313
    14 //! 1 dimension histograms with errors given by user
    15 class HistoErr : public Histo {
     14
     15//! 1 dimensions histograms with errors given by user
     16class HistoErr : public AnyDataObj {
    1617  friend class ObjFileIO<HistoErr>;
    17   friend class FitsHandler<Histo>;
     18  friend class FitsHandler<HistoErr>;
    1819public:
    1920
    20   // CREATOR / DESTRUCTOR
     21  //! Create or destroy
    2122  HistoErr(void);
    22   HistoErr(r_8 xMin, r_8 xMax, int_4 nBin=100);
     23  HistoErr(r_8 xmin,r_8 xmax,int_4 nx);
    2324  HistoErr(const HistoErr& H);
    2425  virtual ~HistoErr(void);
    2526
    26   // UPDATING or SETTING
     27  //! Updating or Setting
     28  void ReCenterBin(void);
    2729  void Zero(void);
    28   //! Addition du contenu de l'histo pour abscisse x poids w et l'erreur e
    29   inline void Add(r_8 x, r_8 w, r_8 e)
    30   {
    31   int_4 numBin = (int_4)floor((x-mMin)/binWidth);
    32   if(numBin<0) mUnder += w;
    33   else if(numBin>=mBins) mOver += w;
    34   else {
    35     mData[numBin] += w; mNData[numBin] += 1.; mErr2[numBin] += e*e;
    36     nHist += w; nEntries++;
    37   }
    38   }
    39   inline void Add(r_8 x, r_8 w) {Add(x,w,1.);}
    40   inline void Add(r_8 x) {Add(x,1.,1.);}
    41   //! Addition du contenu de l'histo pour le bin numBin poids w et l'erreur e
    42   inline void AddBin(int_4 numBin, r_8 w, r_8 e)
    43   {
    44   if(numBin<0) mUnder += w;
    45   else if(numBin>=mBins) mOver += w;
    46   else {
    47     mData[numBin] += w; mNData[numBin] += 1.; mErr2[numBin] += e*e;
    48     nHist += w; nEntries++;
    49   }
    50   }
    51   inline void AddBin(int_4 numBin, r_8 w) {AddBin(numBin,w,1.);}
    52   inline void AddBin(int_4 numBin) {AddBin(numBin,1.,1.);}
    53   //! remplissage contenu de l'histo pour le bin numBin poids w et l'erreur e
    54   void SetBin(int_4 numBin, r_8 w, r_8 e, r_8 nb);
    55   inline void SetBin(int_4 numBin, r_8 w, r_8 e) {SetBin(numBin,w,e,1.);}
    56   inline void SetBin(int_4 numBin, r_8 w) {SetBin(numBin,w,1.,1.);}
    57   inline void SetBin(int_4 numBin) {SetBin(numBin,1.,1.,1.);}
    58   //! remplissage nombre d'entrees pour le bin numBin
    59   void SetNentB(int_4 numBin, r_8 nb=1.);
     30
     31  //! Getting Info
     32  int_4 NBins(void) {return nx_;}
     33  r_8 XMin(void) {return xmin_;}
     34  r_8 XMax(void) {return xmax_;}
     35  r_8 BinWidth(void) {return dx_;}
     36
     37  //! Retourne le contenu du bin
     38  inline r_8 operator()(int_4 i) const
     39    {
     40    if(i<0 || i>=nx_) return 0.;
     41    return data_(i);
     42    }
     43  inline r_8& operator()(int_4 i)
     44    {
     45    return data_(i);
     46    }
     47
     48  //! Retourne le nombre l'erreur au carre dans le bin
     49  inline r_8 Error2(int_4 i) const
     50    {
     51    if(i<0 || i>=nx_) return 0.;
     52    return err2_(i);
     53    }
    6054
    6155  //! Retourne le nombre d'entree dans le bin
    6256  inline r_8 NEntBin(int_4 i) const
    63          {if(mNData) return mNData[i]; else return 0.;}
     57    {
     58    if(i<0 || i>=nx_) return 0.;
     59    return ndata_(i);
     60    }
    6461
    65   //! get/put from/to a vector
    66   void GetNBin(TVector<r_8>& v) const;
    67   void PutNBin(TVector<r_8>& v);
     62  //! Retourne l'abscisse et l'ordonnee du coin inferieur du bin i.
     63  inline r_8 BinLowEdge(int_4 i) const {return xmin_ + i*dx_;}
     64  //! Retourne l'abscisse et l'ordonnee du centre du bin i.
     65  inline r_8 BinCenter(int_4 i) const  {return xmin_ + (i+0.5)*dx_;}
     66  //! Retourne l'abscisse et l'ordonnee du coin superieur du bin i.
     67  inline r_8 BinHighEdge(int_4 i) const {return xmin_ + (i+1)*dx_;}
     68  //! Retourne les numeros du bin contenant l'abscisse et l'ordonnee x,y.
     69  inline int_4 FindBin(r_8 x) const {return (int_4)floor((x-xmin_)/dx_);}
     70
     71  //! Addition du contenu de l'histo pour abscisse x poids w et l'erreur e
     72  inline void Add(r_8 x, r_8 w, r_8 e)
     73    {
     74    int_4 i = FindBin(x);
     75    if(i<0 || i>=nx_) return;
     76    data_(i) += w; ndata_(i) += 1.; err2_(i) += e*e;
     77    }
     78  inline void Add(r_8 x, r_8 w) {Add(x,w,1.);}
     79  inline void Add(r_8 x) {Add(x,1.,1.);}
     80
     81  //! Addition du contenu de l'histo pour le bin i poids w et l'erreur e
     82  inline void AddBin(int_4 i, r_8 w, r_8 e)
     83    {
     84    if(i<0 || i>=nx_) return;
     85    data_(i) += w; ndata_(i) += 1.; err2_(i) += e*e;
     86    }
     87  inline void AddBin(int_4 i, r_8 w) {AddBin(i,w,1.);}
     88  inline void AddBin(int_4 i) {AddBin(i,1.,1.);}
     89
     90  //! remplissage contenu de l'histo pour le bin i poids w et l'erreur e
     91  inline void SetBin(int_4 i, r_8 w, r_8 e, r_8 nb)
     92    {
     93    if(i<0 || i>=nx_) return;
     94    data_(i)  = w;
     95    err2_(i)  = e*e;
     96    ndata_(i) = nb;
     97    }
     98  inline void SetBin(int_4 i, r_8 w, r_8 e) {SetBin(i,w,e,1.);}
     99  inline void SetBin(int_4 i, r_8 w) {SetBin(i,w,1.,1.);}
     100  inline void SetBin(int_4 i) {SetBin(i,1.,1.,1.);}
     101  //! remplissage de l'erreur carree pour le bin i
     102  void SetErr2(int_4 i, r_8 e2)
     103    {
     104    if(i<0 || i>=nx_) return;
     105    err2_(i) = e2;
     106    }
     107  //! remplissage nombre d'entrees pour le bin i
     108  void SetNentB(int_4 i, r_8 nb)
     109    {
     110    if(i<0 || i>=nx_) return;
     111    ndata_(i) = nb;
     112    }
    68113
    69114  //! Compute the correlation histogram
     
    76121  void FillFrHErr(HistoErr& hfrom);
    77122
     123  //! Recuperation des matrices elementaires
     124  inline void GetData(TVector<r_8>& data) {data = data_;}
     125  inline void GetError2(TVector<r_8>& err2) {err2 = err2_;}
     126  inline void GetNData(TVector<r_8>& ndata) {ndata = ndata_;}
     127
    78128  // Operators
    79129  HistoErr& operator = (const HistoErr& h);
     
    84134
    85135protected:
    86   void CreateOrResize(r_8 xMin, r_8 xMax, int_4 nBin);
    87   void Delete(void);
     136  void CreateOrResize(r_8 xmin,r_8 xmax,int_4 nx);
    88137
    89   r_8* mNData;    //!< nombre d'entrees dans chaque bin
     138  r_4 xmin_,xmax_,dx_;
     139  int_4 nx_;
     140  TVector<r_8> data_;
     141  TVector<r_8> err2_;
     142  TVector<r_8> ndata_;
    90143  int_4 mCorrel;  //!< Nombre d'appels a ToCorrel(+1) ou FromCorrel(-1)
    91144};
Note: See TracChangeset for help on using the changeset viewer.