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

Last change on this file since 2697 was 2697, checked in by ansari, 20 years ago

Ajout adapteur pour DataTable - Reza 26/4/2005

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