source: Sophya/trunk/SophyaPI/PIext/nomhistadapter.cc@ 2605

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

intro PARTIELLE de HistoErr cmv 3/9/04

File size: 12.1 KB
Line 
1#include "machdefs.h"
2#include <stdlib.h>
3#include <typeinfo>
4#include <iostream>
5#include <string>
6
7#include "nomhistadapter.h"
8#include "pihisto.h"
9#include "pihisto2d.h"
10#include "pipodrw.h"
11#include "servnobjm.h"
12
13#ifndef SANS_EVOLPLANCK
14#include "objfitter.h"
15#include "fitsntuple.h"
16#include "fitsxntuple.h"
17#endif
18
19//-----------------------------------------------------------------------------
20// Class Adaptateur d'objet (Pour NamedObjMgr) d'objet Histo / HProf / HistoErr
21//-----------------------------------------------------------------------------
22
23/* --Methode-- */
24NOMAdapter_Histo::NOMAdapter_Histo(Histo* o)
25 : NObjMgrAdapter(o)
26{
27mHis = o;
28}
29
30/* --Methode-- */
31NOMAdapter_Histo::~NOMAdapter_Histo()
32{
33}
34
35/* --Methode-- */
36NObjMgrAdapter* NOMAdapter_Histo::Clone(AnyDataObj* o)
37{
38Histo* h = dynamic_cast<Histo *>(o);
39if (h) return ( new NOMAdapter_Histo(h) );
40return ( new NObjMgrAdapter(o) );
41}
42
43/* --Methode-- */
44string NOMAdapter_Histo::GetDataObjType()
45{
46HProf * hp = dynamic_cast<HProf *>(mHis);
47HistoErr * herr = dynamic_cast<HistoErr *>(mHis);
48if(hp) return("HProf ");
49else if(herr) return("HistoErr ");
50else return("Histo ");
51}
52
53/* --Methode-- */
54string NOMAdapter_Histo::GetInfoString(int lev)
55{
56 char buff[128];
57 string rs;
58 if (lev > 2) {
59 sprintf(buff, "Histo: NBin=%d XMin=%lg XMax=%lg\n", mHis->NBins(),
60 mHis->XMin(), mHis->XMax());
61 rs += buff;
62 }
63 sprintf(buff, "Entries= %lg \n", mHis->NEntries());
64 rs += buff;
65 if (lev > 0) {
66 sprintf(buff, "Overflow= %lg \n", mHis->NOver());
67 rs += buff;
68 sprintf(buff, "Underflow= %lg \n", mHis->NUnder());
69 rs += buff;
70 }
71 sprintf(buff, "Mean= %lg \n", mHis->Mean());
72 rs += buff;
73 sprintf(buff, "Sigma= %lg \n", mHis->Sigma());
74 rs += buff;
75 return rs;
76}
77
78/* --Methode-- */
79AnyDataObj* NOMAdapter_Histo::CloneDataObj(bool /*share*/)
80{
81mHis->UpdateHisto(); // pour le cas ou c'est un HProf
82HProf * hp = dynamic_cast<HProf *>(mHis);
83HistoErr * herr = dynamic_cast<HistoErr *>(mHis);
84if(hp) return( new HProf(*hp) );
85else if(herr) return( new HistoErr(*herr) );
86else return( new Histo(*mHis) );
87}
88
89/* --Methode-- */
90void NOMAdapter_Histo::SavePPF(POutPersist& pos, string const & nom)
91{
92#ifdef SANS_EVOLPLANCK
93// PEIDA-EROS L'histo est lui-meme PPersist
94string tag = nom; // A cause de const
95mHis->Write(pos,0,tag);
96#else
97ObjFileIO<Histo> fio(mHis);
98fio.Write(pos, nom);
99#endif
100}
101
102/* --Methode-- */
103void NOMAdapter_Histo::Print(ostream& os)
104{
105mHis->Print(60);
106}
107
108/* --Methode-- */
109PIDrawer* NOMAdapter_Histo::GetDrawer(string & dopt)
110{
111if (typeid(*mHis) == typeid(HProf)) dopt = "fcirclemarker5 " + dopt;
112else dopt = "thinline " + dopt;
113PIHisto * pih = new PIHisto(mHis, false);
114return( pih );
115}
116
117/* --Methode-- */
118NTupleInterface* NOMAdapter_Histo::GetNTupleInterface(bool& adel)
119{
120adel = true;
121return( new NTupInt_Histo(mHis) );
122}
123
124/* --Methode-- */
125GeneralFitData* NOMAdapter_Histo::GetGeneralFitData(bool& adel
126 ,GeneralFitData::FitErrType errtype,double errscale,double errmin
127 ,int i1,int i2,int j1,int j2)
128{
129adel = false;
130if(!mHis) return(NULL);
131
132int nx = mHis->NBins();
133if(nx<=0) return(NULL);
134
135i1 = (i1<0||i1>=nx)? 0: i1;
136i2 = (i2<0||i2>=nx||i2<i1)? nx-1: i2;
137
138GeneralFitData* mGData = new GeneralFitData(1,i2-i1+1,0);
139adel = true;
140
141for(int i=i1;i<=i2;i++) {
142 double x = mHis->BinCenter(i);
143 double f = (*mHis)(i);
144 double e = (mHis->HasErrors())? mHis->Error(i) : 1.;
145 e = GeneralFitData::ComputeError(f,e,errtype,errscale,errmin);
146 mGData->AddData1(x,f,e);
147}
148
149return mGData;
150}
151
152AnyDataObj* NOMAdapter_Histo::FitResidusObj(GeneralFit& mfit)
153{
154Histo* h = NULL;
155#ifdef SANS_EVOLPLANCK
156h = mHis->FitResidus(mfit);
157#else
158h = new Histo(ObjectFitter::FitResidus(*mHis,mfit));
159#endif
160return h;
161}
162
163AnyDataObj* NOMAdapter_Histo::FitFunctionObj(GeneralFit& mfit)
164{
165Histo* h = NULL;
166#ifdef SANS_EVOLPLANCK
167h = mHis->FitFunction(mfit);
168#else
169h = new Histo(ObjectFitter::FitFunction(*mHis,mfit));
170#endif
171return h;
172}
173
174// -------------------------------------------------------------
175
176/* --Methode-- */
177NTupInt_Histo::NTupInt_Histo(Histo* h)
178{
179mHis = h;
180}
181
182/* --Methode-- */
183NTupInt_Histo::~NTupInt_Histo()
184{
185}
186
187/* --Methode-- */
188uint_4 NTupInt_Histo::NbLines() const
189{
190return(mHis->NBins());
191}
192
193/* --Methode-- */
194uint_4 NTupInt_Histo::NbColumns() const
195{
196return(4);
197}
198
199/* --Methode-- */
200r_8* NTupInt_Histo::GetLineD(int k) const
201{
202int i;
203if ((k < 0) || (k >= mHis->NBins()))
204 for(i=0; i<4; i++) mRet[i] = 0.;
205else {
206 mRet[0] = k; mRet[1] = mHis->BinCenter(k);
207 mRet[2] = (*mHis)(k); mRet[3] = mHis->Error(k);
208 }
209return(mRet);
210}
211
212/* --Methode-- */
213string NTupInt_Histo::VarList_C(const char* nx) const
214{
215string nomx;
216if (nx) nomx = nx;
217else nomx = "_xh_";
218string vardec = "double i,x,val,err; \n";
219vardec += "i = " + nomx + "[0]; x = " + nomx + "[1]; \n";
220vardec += "val = " + nomx + "[2]; err = " + nomx + "[3]; \n";
221return(vardec);
222}
223
224//-------------------------------------------------------------------------
225// Class Adaptateur d'objet (Pour NamedObjMgr) d'objet Histo2D
226//-------------------------------------------------------------------------
227
228
229/* --Methode-- */
230NOMAdapter_Histo2D::NOMAdapter_Histo2D(Histo2D* o)
231 : NObjMgrAdapter(o)
232{
233mHis = o;
234}
235
236/* --Methode-- */
237NOMAdapter_Histo2D::~NOMAdapter_Histo2D()
238{
239}
240
241/* --Methode-- */
242NObjMgrAdapter* NOMAdapter_Histo2D::Clone(AnyDataObj* o)
243{
244Histo2D* h = dynamic_cast<Histo2D *>(o);
245if (h) return ( new NOMAdapter_Histo2D(h) );
246return ( new NObjMgrAdapter(o) );
247}
248
249/* --Methode-- */
250string NOMAdapter_Histo2D::GetDataObjType()
251{
252return ("Histo2D ");
253}
254
255/* --Methode-- */
256AnyDataObj* NOMAdapter_Histo2D::CloneDataObj(bool /*share*/)
257{
258return ( new Histo2D(*mHis) );
259}
260
261/* --Methode-- */
262void NOMAdapter_Histo2D::SavePPF(POutPersist& pos, string const & nom)
263{
264#ifdef SANS_EVOLPLANCK
265// PEIDA-EROS L'histo est lui-meme PPersist
266string tag = nom; // A cause de const
267mHis->Write(pos,0,tag);
268#else
269ObjFileIO<Histo2D> fio(mHis);
270fio.Write(pos, nom);
271#endif
272}
273
274/* --Methode-- */
275void NOMAdapter_Histo2D::Print(ostream& os)
276{
277mHis->Print();
278}
279
280/* --Methode-- */
281PIDrawer* NOMAdapter_Histo2D::GetDrawer(string & dopt)
282{
283dopt = "thinline " + dopt;
284return( new PIHisto2D(mHis, false) );
285}
286
287/* --Methode-- */
288P2DArrayAdapter* NOMAdapter_Histo2D::Get2DArray(string & dopt)
289{
290return (new POH2DAdapter(mHis, false) );
291}
292
293/* --Methode-- */
294NTupleInterface* NOMAdapter_Histo2D::GetNTupleInterface(bool& adel)
295{
296adel = true;
297return( new NTupInt_Histo2D(mHis) );
298}
299
300
301/* --Methode-- */
302GeneralFitData* NOMAdapter_Histo2D::GetGeneralFitData(bool& adel
303 ,GeneralFitData::FitErrType errtype,double errscale,double errmin
304 ,int i1,int i2,int j1,int j2)
305{
306adel = false;
307if(!mHis) return(NULL);
308
309int nx = mHis->NBinX();
310int ny = mHis->NBinY();
311if(nx<=0 || ny<=0) return(NULL);
312
313i1 = (i1<0||i1>=nx)? 0: i1;
314i2 = (i2<0||i2>=nx||i2<i1)? nx-1: i2;
315j1 = (j1<0||j1>=ny)? 0: j1;
316j2 = (j2<0||j2>=ny||j2<j1)? ny-1: j2;
317
318GeneralFitData* mGData = new GeneralFitData(2,(i2-i1+1)*(j2-j1+1),0);
319adel = true;
320
321for(int i=i1;i<=i2;i++) for(int j=j1;j<=j2;j++) {
322 double x,y; mHis->BinCenter(i,j,x,y);
323 double f = (*mHis)(i,j);
324 double e = (mHis->HasErrors())? mHis->Error(i,j) : 1.;
325 e = GeneralFitData::ComputeError(f,e,errtype,errscale,errmin);
326 mGData->AddData2(x,y,f,e);
327}
328
329return mGData;
330}
331
332AnyDataObj* NOMAdapter_Histo2D::FitResidusObj(GeneralFit& mfit)
333{
334Histo2D* h2 = NULL;
335#ifdef SANS_EVOLPLANCK
336h2 = mHis->FitFunction(mfit);
337#else
338h2 = new Histo2D(ObjectFitter::FitResidus(*mHis,mfit));
339#endif
340return h2;
341}
342
343AnyDataObj* NOMAdapter_Histo2D::FitFunctionObj(GeneralFit& mfit)
344{
345Histo2D* h2 = NULL;
346#ifdef SANS_EVOLPLANCK
347h2 = mHis->FitFunction(mfit);
348#else
349h2 = new Histo2D(ObjectFitter::FitFunction(*mHis,mfit));
350#endif
351return h2;
352}
353
354
355// -------------------------------------------------------------
356
357/* --Methode-- */
358NTupInt_Histo2D::NTupInt_Histo2D(Histo2D* h)
359{
360mHis = h;
361}
362
363/* --Methode-- */
364NTupInt_Histo2D::~NTupInt_Histo2D()
365{
366}
367
368/* --Methode-- */
369uint_4 NTupInt_Histo2D::NbLines() const
370{
371return(mHis->NBinX()*mHis->NBinY());
372}
373
374/* --Methode-- */
375uint_4 NTupInt_Histo2D::NbColumns() const
376{
377return(6);
378}
379
380/* --Methode-- */
381r_8* NTupInt_Histo2D::GetLineD(int n) const
382{
383int i,j;
384r_8 f2,f3;
385if ((n < 0) || (n >= mHis->NBinX()*mHis->NBinY()))
386 for(i=0; i<6; i++) mRet[i] = 0.;
387else {
388 i = n%mHis->NBinX(); j = n/mHis->NBinX();
389 mRet[0] = i; mRet[1] = j;
390 mHis->BinCenter(i,j,f2,f3);
391 mRet[2] = f2; mRet[3] = f3;
392 mRet[4] = (*mHis)(i,j); mRet[5] = mHis->Error(i, j);
393 }
394return(mRet);
395}
396
397/* --Methode-- */
398string NTupInt_Histo2D::VarList_C(const char* nx) const
399{
400string nomx;
401if (nx) nomx = nx;
402else nomx = "_xh_";
403string vardec = "double i,j,x,y,val,err; \n";
404vardec += "i = " + nomx + "[0]; j = " + nomx + "[1]; \n";
405vardec += "x = " + nomx + "[2]; y = " + nomx + "[3]; \n";
406vardec += "val = " + nomx + "[4]; err = " + nomx + "[5]; \n";
407return(vardec);
408}
409
410
411
412//-------------------------------------------------------------------------
413// Class Adaptateur d'objet (Pour NamedObjMgr) d'objet NTuple
414//-------------------------------------------------------------------------
415
416/* --Methode-- */
417NOMAdapter_NTuple::NOMAdapter_NTuple(NTuple* o)
418 : NObjMgrAdapter(o)
419{
420mNt = o;
421}
422
423/* --Methode-- */
424NOMAdapter_NTuple::~NOMAdapter_NTuple()
425{
426}
427
428/* --Methode-- */
429NObjMgrAdapter* NOMAdapter_NTuple::Clone(AnyDataObj* o)
430{
431NTuple* nt = dynamic_cast<NTuple *>(o);
432if (nt) return ( new NOMAdapter_NTuple(nt) );
433return ( new NObjMgrAdapter(o) );
434}
435
436
437/* --Methode-- */
438string NOMAdapter_NTuple::GetDataObjType()
439{
440return ("NTuple ");
441}
442
443/* --Methode-- */
444AnyDataObj* NOMAdapter_NTuple::CloneDataObj(bool /*share*/)
445{
446return ( new NTuple(*mNt) );
447}
448
449/* --Methode-- */
450void NOMAdapter_NTuple::ReadFits(string const & flnm)
451{
452#ifdef SANS_EVOLPLANCK
453 cerr << " NOMAdapter_NTuple::ReadFits() Non disponible !! " << endl;
454#else
455 FitsInFile fis(flnm);
456 fis >> (*mNt);
457#endif
458}
459
460/* --Methode-- */
461void NOMAdapter_NTuple::SaveFits(string const & flnm)
462{
463#ifdef SANS_EVOLPLANCK
464 cerr << " NOMAdapter_NTuple::SaveFits() Non disponible !! " << endl;
465#else
466 FitsOutFile fos(flnm);
467 fos << (*mNt);
468
469#endif
470}
471
472
473/* --Methode-- */
474void NOMAdapter_NTuple::SavePPF(POutPersist& pos, string const & nom)
475{
476#ifdef SANS_EVOLPLANCK
477// PEIDA-EROS L'histo est lui-meme PPersist
478string tag = nom; // A cause de const
479mNt->Write(pos,0,tag);
480#else
481ObjFileIO<NTuple> fio(mNt);
482fio.Write(pos, nom);
483#endif
484}
485
486/* --Methode-- */
487void NOMAdapter_NTuple::Print(ostream& os)
488{
489os << mNt->Info();
490os << *(mNt);
491}
492
493
494/* --Methode-- */
495NTupleInterface* NOMAdapter_NTuple::GetNTupleInterface(bool& adel)
496{
497adel = false;
498return(mNt);
499// return( new NTupInt_NTuple(mNt) );
500}
501
502//-------------------------------------------------------------------------
503// Class Adaptateur d'objet (Pour NamedObjMgr) d'objet XNTuple
504//-------------------------------------------------------------------------
505
506/* --Methode-- */
507NOMAdapter_XNTuple::NOMAdapter_XNTuple(XNTuple* o)
508 : NObjMgrAdapter(o)
509{
510mNt = o;
511}
512
513/* --Methode-- */
514NOMAdapter_XNTuple::~NOMAdapter_XNTuple()
515{
516}
517
518/* --Methode-- */
519NObjMgrAdapter* NOMAdapter_XNTuple::Clone(AnyDataObj* o)
520{
521XNTuple* nt = dynamic_cast<XNTuple *>(o);
522if (nt) return ( new NOMAdapter_XNTuple(nt) );
523return ( new NObjMgrAdapter(o) );
524}
525
526/* --Methode-- */
527string NOMAdapter_XNTuple::GetDataObjType()
528{
529return ("XNTuple ");
530}
531
532/* --Methode-- */
533AnyDataObj* NOMAdapter_XNTuple::CloneDataObj(bool /*share*/)
534{
535return ( new XNTuple(*mNt) );
536}
537
538/* --Methode-- */
539void NOMAdapter_XNTuple::ReadFits(string const & flnm)
540{
541#ifdef SANS_EVOLPLANCK
542 cerr << " NOMAdapter_XNTuple::ReadFits() Non disponible !! " << endl;
543#else
544 FitsInFile fis(flnm);
545 fis >> (*mNt);
546#endif
547}
548
549/* --Methode-- */
550void NOMAdapter_XNTuple::SaveFits(string const & flnm)
551{
552#ifdef SANS_EVOLPLANCK
553 cerr << " NOMAdapter_XNTuple::SaveFits() Non disponible !! " << endl;
554#else
555 FitsOutFile fos(flnm);
556 fos << (*mNt);
557
558#endif
559}
560
561/* --Methode-- */
562void NOMAdapter_XNTuple::SavePPF(POutPersist& pos, string const & nom)
563{
564#ifdef SANS_EVOLPLANCK
565// PEIDA-EROS L'histo est lui-meme PPersist
566string tag = nom; // A cause de const
567mNt->Write(pos,0,tag);
568#else
569ObjFileIO<XNTuple> fio(mNt);
570fio.Write(pos, nom);
571#endif
572}
573
574/* --Methode-- */
575void NOMAdapter_XNTuple::Print(ostream& os)
576{
577// os << mNt->Info();
578mNt->Show(os);
579}
580
581
582/* --Methode-- */
583NTupleInterface* NOMAdapter_XNTuple::GetNTupleInterface(bool& adel)
584{
585adel = false;
586return(mNt);
587}
Note: See TracBrowser for help on using the repository browser.