source: Sophya/trunk/SophyaPI/PIext/sohiswrap.h@ 3914

Last change on this file since 3914 was 3149, checked in by cmv, 19 years ago

suite adaptation travail reza 2D et adapteur + adaptation aux modifs HistoErr cmv 18/01/2007

File size: 7.1 KB
Line 
1// This may look like C code, but it is really -*- C++ -*-
2// Classes d'emballage (wrapper) d'histos SOPHYA/HiStats
3// pour trace par PIHisto
4// C. Magneville / R. Ansari 2007
5// (C) CEA-DAPNIA LAL-IN2P3/CNRS
6
7#ifndef SOHISWRAP_H
8#define SOHISWRAP_H
9
10#include "histos.h"
11#include "hisprof.h"
12#include "histerr.h"
13
14#include "histos2.h"
15#include "hist2err.h"
16
17#include "pexceptions.h"
18
19#include "phistwrapper.h"
20
21namespace SOPHYA {
22
23//! Wrapper class for SOPHYA::Histo , SOPHYA::HProf , for use by PIHisto
24class HistoWrapper : public P1DHistoWrapper
25{
26public:
27 HistoWrapper(Histo* h, bool ad=true)
28 : P1DHistoWrapper(h->NBins())
29 {
30 if (h == NULL) throw NullPtrError("HistoWrapper(Histo* h = NULL)");
31 mHis = h;
32 mHpr = dynamic_cast<HProf*>(h);
33 mAD = ad;
34 DefineXCoordinate(h->XMin(), h->BinWidth()); // Pour P1DArrayAdapter
35 }
36 ~HistoWrapper() { if (mAD) delete mHis; }
37
38 virtual int_4 NBins() { return mHis->NBins(); }
39 virtual r_8 XMin() { return mHis->XMin() ; }
40 virtual r_8 XMax() { return mHis->XMax() ; }
41 virtual r_8 BinWidth() { return mHis->BinWidth() ; }
42
43 virtual r_8 BinLowEdge(int_4 i) { return mHis->BinLowEdge(i) ; }
44 virtual r_8 BinCenter(int_4 i) { return mHis->BinCenter(i) ; }
45 virtual r_8 BinHighEdge(int_4 i) { return mHis->BinHighEdge(i) ; }
46
47 virtual r_8 Content(int_4 i) { return (*mHis)(i) ; }
48 virtual r_8 Error(int_4 i) { return mHis->Error(i) ; }
49 virtual r_8 NbEntries(int_4 i) { if(mHpr) return mHpr->SumW(i); else return 0.; }
50
51 virtual void Update() { mHis->UpdateHisto(); }
52
53 // ajoute des lignes de texte avec les infos statistiques
54 virtual int GetStatInfoAsText(vector<string> & text)
55 {
56 char label[64];
57 string s;
58 sprintf(label, "N= %-g",mHis->NData());
59 s = label; text.push_back(s);
60 sprintf(label, "m= %-g",mHis->Mean());
61 s = label; text.push_back(s);
62 sprintf(label, "s= %-g",mHis->Sigma());
63 s = label; text.push_back(s);
64 return 3;
65 }
66
67 // pointeur sur l'objet histo
68 inline Histo* getHisto() { return mHis; }
69
70protected:
71 Histo* mHis;
72 HProf* mHpr;
73 bool mAD;
74};
75
76
77//! Wrapper class for SOPHYA::HistoErr for use by PIHisto
78class HistoErrWrapper : public P1DHistoWrapper
79{
80public:
81 HistoErrWrapper(HistoErr* h, bool ad=false)
82 : P1DHistoWrapper(h->NBins())
83 {
84 if (h == NULL) throw NullPtrError("HistoErrWrapper(HistoErr* h = NULL)");
85 mHis = h; mAD = ad;
86 DefineXCoordinate(h->XMin(), h->BinWidth()); // Pour P1DArrayAdapter
87 }
88 ~HistoErrWrapper() { if (mAD) delete mHis; }
89
90 virtual int_4 NBins() { return mHis->NBins(); }
91 virtual r_8 XMin() { return mHis->XMin() ; }
92 virtual r_8 XMax() { return mHis->XMax() ; }
93 virtual r_8 BinWidth() { return mHis->BinWidth() ; }
94
95 virtual r_8 BinLowEdge(int_4 i) { return mHis->BinLowEdge(i) ; }
96 virtual r_8 BinCenter(int_4 i) { return mHis->BinCenter(i) ; }
97 virtual r_8 BinHighEdge(int_4 i) { return mHis->BinHighEdge(i) ; }
98
99 virtual r_8 Content(int_4 i) { return (*mHis)(i) ; }
100 virtual r_8 Error(int_4 i) { return mHis->Error(i) ; }
101 virtual r_8 NbEntries(int_4 i) { return mHis->NEntBin(i) ; }
102
103 // ajoute des lignes de texte avec les infos statistiques
104 virtual int GetStatInfoAsText(vector<string> & text)
105 {
106 char label[64]; string s;
107
108 sprintf(label, "NMean= %d",mHis->NMean());
109 s = label; text.push_back(s);
110
111 return 1;
112 }
113
114 // pointeur sur l'objet histo
115 inline HistoErr* getHistoErr() { return mHis; }
116
117protected:
118 HistoErr* mHis;
119 bool mAD;
120};
121
122
123//! Wrapper class for SOPHYA::Histo2D for use by PIHisto2D
124class Histo2DWrapper : public P2DHistoWrapper
125{
126public:
127 Histo2DWrapper(Histo2D* h, bool ad=true)
128 : P2DHistoWrapper(h->NBinX(), h->NBinY())
129 {
130 if (h == NULL) throw NullPtrError("Histo2DWrapper(Histo2D* h = NULL)");
131 mHis = h; mAD = ad;
132 DefineXYCoordinates(h->XMin(), h->YMin(), h->WBinX(), h->WBinY() ); // pour P2DArrayAdapter
133 }
134
135 virtual ~Histo2DWrapper() { if (mAD) delete mHis; }
136
137 virtual int_4 NBinX() { return mHis->NBinX(); }
138 virtual int_4 NBinY() { return mHis->NBinY(); }
139 virtual r_8 XMin() { return mHis->XMin() ; }
140 virtual r_8 XMax() { return mHis->XMax() ; }
141 virtual r_8 YMin() { return mHis->YMin() ; }
142 virtual r_8 YMax() { return mHis->YMax() ; }
143 virtual r_8 WBinX() { return mHis->WBinX() ; }
144 virtual r_8 WBinY() { return mHis->WBinY() ; }
145
146 virtual void BinLowEdge(int_4 i, int_4 j, r_8& xr, r_8& yr)
147 { mHis->BinLowEdge(i, j, xr, yr); return; }
148 virtual void BinCenter(int_4 i, int_4 j, r_8& xr, r_8& yr)
149 { mHis->BinCenter(i, j, xr, yr); return; }
150 virtual void BinHighEdge(int_4 i, int_4 j, r_8& xr, r_8& yr)
151 { mHis->BinHighEdge(i, j, xr, yr); return; }
152
153 // Renvoie contenu du bin i
154 virtual r_8 Content(int_4 i, int_4 j) { return (*mHis)(i,j) ; }
155 virtual r_8 Error(int_4 i, int_4 j) { return mHis->Error(i,j) ; }
156 virtual r_8 NbEntries(int_4 i, int_4 j) { return 0.; }
157
158 // ajoute des lignes de texte avec les infos statistiques (dans text)
159 // renvoie le nombre de lignes ajoutees - avec implementation par defaut
160 virtual int GetStatInfoAsText(vector<string> & text )
161 {
162 char label[64];
163 string s;
164 sprintf(label,"N= %-g", mHis->NData());
165 s = label; text.push_back(s);
166 return 1;
167 }
168
169 inline Histo2D* getHisto2D() { return mHis; }
170
171protected:
172 Histo2D* mHis;
173 bool mAD;
174};
175
176
177
178//! Wrapper class for SOPHYA::Histo2DErr for use by PIHisto2D
179class Histo2DErrWrapper : public P2DHistoWrapper
180{
181public:
182 Histo2DErrWrapper(Histo2DErr* h, bool ad=true)
183 : P2DHistoWrapper(h->NBinX(), h->NBinY())
184 {
185 if (h == NULL) throw NullPtrError("Histo2DErrWrapper(Histo2DErr* h = NULL)");
186 mHis = h; mAD = ad;
187 DefineXYCoordinates(h->XMin(), h->YMin(), h->WBinX(), h->WBinY() ); // pour P2DArrayAdapter
188 }
189
190 virtual ~Histo2DErrWrapper() { if (mAD) delete mHis; }
191
192 virtual int_4 NBinX() { return mHis->NBinX(); }
193 virtual int_4 NBinY() { return mHis->NBinY(); }
194 virtual r_8 XMin() { return mHis->XMin() ; }
195 virtual r_8 XMax() { return mHis->XMax() ; }
196 virtual r_8 YMin() { return mHis->YMin() ; }
197 virtual r_8 YMax() { return mHis->YMax() ; }
198 virtual r_8 WBinX() { return mHis->WBinX() ; }
199 virtual r_8 WBinY() { return mHis->WBinY() ; }
200
201 virtual void BinLowEdge(int_4 i, int_4 j, r_8& xr, r_8& yr)
202 { mHis->BinLowEdge(i, j, xr, yr); return; }
203 virtual void BinCenter(int_4 i, int_4 j, r_8& xr, r_8& yr)
204 { mHis->BinCenter(i, j, xr, yr); return; }
205 virtual void BinHighEdge(int_4 i, int_4 j, r_8& xr, r_8& yr)
206 { mHis->BinHighEdge(i, j, xr, yr); return; }
207
208 // Renvoie contenu du bin i
209 virtual r_8 Content(int_4 i, int_4 j) { return (*mHis)(i,j) ; }
210 virtual r_8 Error(int_4 i, int_4 j) { return mHis->Error(i,j) ; }
211 virtual r_8 NbEntries(int_4 i, int_4 j) { return mHis->NEntBin(i,j) ; }
212
213 // ajoute des lignes de texte avec les infos statistiques (dans text)
214 // renvoie le nombre de lignes ajoutees - avec implementation par defaut
215 virtual int GetStatInfoAsText(vector<string> & text )
216 {
217 char label[64];
218 string s;
219 sprintf(label,"NMean= %d", mHis->NMean());
220 text.push_back(label);
221 return 1;
222 }
223
224 inline Histo2DErr* getHisto2DErr() { return mHis; }
225
226protected:
227 Histo2DErr* mHis;
228 bool mAD;
229};
230
231} // Fin du namespace
232
233#endif
Note: See TracBrowser for help on using the repository browser.