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

Last change on this file since 2933 was 2933, checked in by ansari, 19 years ago

Suppression de toute reference a FITS (en particulier NObjMgrAdapter::ReadFits/SaveFits supprime) dans le module PIext - Makefile et smakefile refait , Reza 3 Avril 2006

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