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 "pexceptions.h"
|
---|
15 |
|
---|
16 | #include "phistwrapper.h"
|
---|
17 |
|
---|
18 | namespace SOPHYA {
|
---|
19 |
|
---|
20 | //! Wrapper class for SOPHYA::Histo , SOPHYA::HProf
|
---|
21 | class HistoWrapper : public P1DHistoWrapper
|
---|
22 | {
|
---|
23 | public:
|
---|
24 | HistoWrapper(Histo* h, bool ad=true)
|
---|
25 | {
|
---|
26 | if (h == NULL) throw NullPtrError("HistoWrapper(Histo* h = NULL)");
|
---|
27 | mHis = h;
|
---|
28 | mHpr = dynamic_cast<HProf*>(h);
|
---|
29 | mAD = ad;
|
---|
30 | }
|
---|
31 | ~HistoWrapper() { if (mAD) delete mHis; }
|
---|
32 |
|
---|
33 | virtual int_4 NBins() { return mHis->NBins(); }
|
---|
34 | virtual r_8 XMin() { return mHis->XMin() ; }
|
---|
35 | virtual r_8 XMax() { return mHis->XMax() ; }
|
---|
36 | virtual r_8 BinWidth() { return mHis->BinWidth() ; }
|
---|
37 |
|
---|
38 | virtual r_8 BinLowEdge(int_4 i) { return mHis->BinLowEdge(i) ; }
|
---|
39 | virtual r_8 BinCenter(int_4 i) { return mHis->BinCenter(i) ; }
|
---|
40 | virtual r_8 BinHighEdge(int_4 i) { return mHis->BinHighEdge(i) ; }
|
---|
41 |
|
---|
42 | virtual r_8 Value(int_4 i) { return (*mHis)(i) ; }
|
---|
43 | virtual r_8 Error(int_4 i) { return mHis->Error(i) ; }
|
---|
44 | virtual r_8 NbEntries(int_4 i) { if(mHpr) return mHpr->SumW(i); else return 0.; }
|
---|
45 |
|
---|
46 | virtual void Update() { mHis->UpdateHisto(); }
|
---|
47 |
|
---|
48 | // ajoute des lignes de texte avec les infos statistiques
|
---|
49 | virtual int GetStatInfoAsText(vector<string> & text)
|
---|
50 | {
|
---|
51 | char label[64];
|
---|
52 | string s;
|
---|
53 | sprintf(label, "N= %-g",mHis->NData());
|
---|
54 | s = label; text.push_back(s);
|
---|
55 | sprintf(label, "m= %-g",mHis->Mean());
|
---|
56 | s = label; text.push_back(s);
|
---|
57 | sprintf(label, "s= %-g",mHis->Sigma());
|
---|
58 | s = label; text.push_back(s);
|
---|
59 | return 3;
|
---|
60 | }
|
---|
61 |
|
---|
62 | // pointeur sur l'objet histo
|
---|
63 | inline Histo* getHisto() { return mHis; }
|
---|
64 |
|
---|
65 | protected:
|
---|
66 | Histo* mHis;
|
---|
67 | HProf* mHpr;
|
---|
68 | bool mAD;
|
---|
69 | };
|
---|
70 |
|
---|
71 |
|
---|
72 | //! Wrapper class for SOPHYA::HistoErr
|
---|
73 | class HistoErrWrapper : public P1DHistoWrapper
|
---|
74 | {
|
---|
75 | public:
|
---|
76 | HistoErrWrapper(HistoErr* h, bool ad=false)
|
---|
77 | {
|
---|
78 | if (h == NULL) throw NullPtrError("HistoWrapper(HistoErr* h = NULL)");
|
---|
79 | mHis = h; mAD = ad;
|
---|
80 | }
|
---|
81 | ~HistoErrWrapper() { if (mAD) delete mHis; }
|
---|
82 |
|
---|
83 | virtual int_4 NBins() { return mHis->NBins(); }
|
---|
84 | virtual r_8 XMin() { return mHis->XMin() ; }
|
---|
85 | virtual r_8 XMax() { return mHis->XMax() ; }
|
---|
86 | virtual r_8 BinWidth() { return mHis->BinWidth() ; }
|
---|
87 |
|
---|
88 | virtual r_8 BinLowEdge(int_4 i) { return mHis->BinLowEdge(i) ; }
|
---|
89 | virtual r_8 BinCenter(int_4 i) { return mHis->BinCenter(i) ; }
|
---|
90 | virtual r_8 BinHighEdge(int_4 i) { return mHis->BinHighEdge(i) ; }
|
---|
91 |
|
---|
92 | virtual r_8 Value(int_4 i) { return (*mHis)(i) ; }
|
---|
93 | virtual r_8 Error(int_4 i) { return mHis->Error(i) ; }
|
---|
94 | virtual r_8 NbEntries(int_4 i) { return mHis->NEntBin(i) ; }
|
---|
95 |
|
---|
96 | // ajoute des lignes de texte avec les infos statistiques
|
---|
97 | virtual int GetStatInfoAsText(vector<string> & text)
|
---|
98 | {
|
---|
99 | char label[64]; string s;
|
---|
100 |
|
---|
101 | sprintf(label, "NCor= %d",mHis->NCorrel());
|
---|
102 | s = label; text.push_back(s);
|
---|
103 |
|
---|
104 | return 1;
|
---|
105 | }
|
---|
106 |
|
---|
107 | // pointeur sur l'objet histo
|
---|
108 | inline HistoErr* getHistoErr() { return mHis; }
|
---|
109 |
|
---|
110 | protected:
|
---|
111 | HistoErr* mHis;
|
---|
112 | bool mAD;
|
---|
113 | };
|
---|
114 |
|
---|
115 | } // Fin du namespace
|
---|
116 |
|
---|
117 | #endif
|
---|