source: Sophya/trunk/SophyaLib/HiStats/histerr.cc@ 2603

Last change on this file since 2603 was 2603, checked in by cmv, 21 years ago

add HistoErr pour gestion des erreurs cmv 3/9/04

File size: 3.7 KB
Line 
1#include "machdefs.h"
2#include <string.h>
3#include <stdio.h>
4#include <math.h>
5#include "histinit.h"
6#include "histerr.h"
7#include "perrors.h"
8
9/*!
10 \class SOPHYA::HistoErr
11 \ingroup HiStats
12 Classe d'histogrammes 1D avec erreurs donnees par l'utilisateur
13*/
14
15/********* Methode *********/
16/*! Constructeur par defaut */
17HistoErr::HistoErr(void)
18: Histo(), mNData(NULL)
19{
20}
21
22/********* Methode *********/
23/*! Constructeur d'un histo de nBin bins allant de xMin a xMax */
24HistoErr::HistoErr(r_8 xMin, r_8 xMax, int_4 nBin)
25: Histo(xMin,xMax,nBin), mNData((nBin>0) ? new uint_4[nBin] : NULL)
26{
27 this->Errors();
28 if(mNData) memset(mNData,0,mBins*sizeof(uint_4));
29}
30
31/********* Methode *********/
32/*! Constructeur par copie */
33HistoErr::HistoErr(const HistoErr& H)
34: Histo(H), mNData((H.mBins>0)? new uint_4[H.mBins] : NULL)
35{
36 if(mBins>0) memcpy(mNData,H.mNData,mBins*sizeof(uint_4));
37}
38
39/********* Methode *********/
40/*! Destructeur */
41HistoErr::~HistoErr(void)
42{
43 if(mNData) {delete [] mNData; mNData=NULL;}
44}
45
46/********* Methode *********/
47/*!
48 Remise a zero
49*/
50void HistoErr::Zero(void)
51{
52 if(mNData != NULL) memset(mNData,0,mBins*sizeof(uint_4));
53 Histo::Zero();
54}
55
56/********* Methode *********/
57/*!
58 Addition du contenu de l'histo pour abscisse x poids w et l'erreur e
59*/
60void HistoErr::Add(r_8 x, r_8 w, r_8 e)
61{
62 int_4 numBin = (int_4)floor((x-mMin)/binWidth);
63 if(numBin<0) mUnder += w;
64 else if(numBin>=mBins) mOver += w;
65 else {
66 mData[numBin] += w; mNData[numBin]++; mErr2[numBin] += e*e;
67 nHist += w; nEntries++;
68 }
69}
70
71/********* Methode *********/
72/*!
73 Addition du contenu de l'histo pour le bin numBin poids w et l'erreur e
74*/
75void HistoErr::AddBin(int_4 numBin, r_8 w, r_8 e)
76{
77 if(numBin<0) mUnder += w;
78 else if(numBin>=mBins) mOver += w;
79 else {
80 mData[numBin] += w; mNData[numBin]++; mErr2[numBin] += e*e;
81 nHist += w; nEntries++;
82 }
83}
84
85/*!
86 Remplissage d'un tableau avec les nombres d'entrees dans le bin de l'histo
87*/
88void HistoErr::GetNBin(TVector<int_4>& v) const
89{
90v.Realloc(mBins);
91for(int_4 i=0;i<mBins;i++) v(i) = mNData[i];
92return;
93}
94
95/********* Methode *********/
96/*!
97 Remplissage du nombre d'entrees dans les bins de l'histo avec les valeurs d'un vecteur
98*/
99void HistoErr::PutNBin(TVector<int_4> &v)
100{
101uint_4 n = (v.NElts()<(uint_4) mBins) ? v.NElts(): (uint_4) mBins;
102if(n>0) for(uint_4 i=0;i<n;i++) mNData[i] = v(i);
103return;
104}
105
106///////////////////////////////////////////////////////////
107// --------------------------------------------------------
108// Les objets delegues pour la gestion de persistance
109// --------------------------------------------------------
110///////////////////////////////////////////////////////////
111
112DECL_TEMP_SPEC /* equivalent a template <> , pour SGI-CC en particulier */
113void ObjFileIO<HistoErr>::ReadSelf(PInPersist& is)
114{
115char strg[256];
116
117if(dobj==NULL) dobj=new HistoErr;
118 else dobj->Delete();
119
120// Lecture entete
121is.GetLine(strg, 255);
122
123// Lecture des donnees HistoErr
124is.Get(dobj->mBins);
125is.GetLine(strg, 255);
126is.Get(dobj->mNData, dobj->mBins);
127
128// Lecture de l'histogramme
129is >> (Histo&)(*dobj);
130
131return;
132}
133
134DECL_TEMP_SPEC /* equivalent a template <> , pour SGI-CC en particulier */
135void ObjFileIO<HistoErr>::WriteSelf(POutPersist& os) const
136{
137if(dobj == NULL) return;
138char strg[256];
139
140sprintf(strg,"HistErr");
141os.PutLine(strg);
142
143// Ecriture des valeurs
144os.Put(dobj->mBins);
145
146// Ecriture des donnees HistoErr nombre d entree par bin
147sprintf(strg,"Tableau du nombre d entree par bin");
148os.PutLine(strg);
149os.Put(dobj->mNData, dobj->mBins);
150
151// Ecriture de l'histogramme
152os << (Histo&)(*dobj);
153
154return;
155}
156
157#ifdef __CXX_PRAGMA_TEMPLATES__
158#pragma define_template ObjFileIO<HistoErr>
159#endif
160
161#if defined(ANSI_TEMPLATES) || defined(GNU_TEMPLATES)
162template class ObjFileIO<HistoErr>;
163#endif
Note: See TracBrowser for help on using the repository browser.