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

Last change on this file since 2089 was 1971, checked in by ansari, 23 years ago

1/ Basculement de decodage des options de display aux methodes
PIDrawer/PIWdg::DecodeOptionString()
2/ Possibilite de Show/Hide de la partie Zoom/ColorMap/Stat du MainWindow

Reza 30/4/2002

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