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

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

Ajout flag int lev ds les adaptateurs NObjMgrAdapter::Print(ostream& os, int lev=0) et NamedObjMgr::Print() + modif commande print - Reza 20 Juin 2006

File size: 13.5 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, int lev)
106{
107mHis->Show(os);
108if (lev > 0) mHis->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, int lev)
279{
280mHis->Show(os);
281if (lev > 0) mHis->Print();
282}
283
284/* --Methode-- */
285PIDrawer* NOMAdapter_Histo2D::GetDrawer(string & dopt)
286{
287dopt = "thinline " + dopt;
288return( new PIHisto2D(mHis, false) );
289}
290
291/* --Methode-- */
292P2DArrayAdapter* NOMAdapter_Histo2D::Get2DArray(string & dopt)
293{
294return (new POH2DAdapter(mHis, false) );
295}
296
297/* --Methode-- */
298NTupleInterface* NOMAdapter_Histo2D::GetNTupleInterface(bool& adel)
299{
300adel = true;
301return( new NTupInt_Histo2D(mHis) );
302}
303
304
305/* --Methode-- */
306GeneralFitData* NOMAdapter_Histo2D::GetGeneralFitData(bool& adel
307 ,GeneralFitData::FitErrType errtype,double errscale,double errmin
308 ,int i1,int i2,int j1,int j2)
309{
310adel = false;
311if(!mHis) return(NULL);
312
313int nx = mHis->NBinX();
314int ny = mHis->NBinY();
315if(nx<=0 || ny<=0) return(NULL);
316
317i1 = (i1<0||i1>=nx)? 0: i1;
318i2 = (i2<0||i2>=nx||i2<i1)? nx-1: i2;
319j1 = (j1<0||j1>=ny)? 0: j1;
320j2 = (j2<0||j2>=ny||j2<j1)? ny-1: j2;
321
322GeneralFitData* mGData = new GeneralFitData(2,(i2-i1+1)*(j2-j1+1),0);
323adel = true;
324
325for(int i=i1;i<=i2;i++) for(int j=j1;j<=j2;j++) {
326 double x,y; mHis->BinCenter(i,j,x,y);
327 double f = (*mHis)(i,j);
328 double e = (mHis->HasErrors())? mHis->Error(i,j) : 1.;
329 e = GeneralFitData::ComputeError(f,e,errtype,errscale,errmin);
330 mGData->AddData2(x,y,f,e);
331}
332
333return mGData;
334}
335
336AnyDataObj* NOMAdapter_Histo2D::FitResidusObj(GeneralFit& mfit)
337{
338Histo2D* h2 = NULL;
339#ifdef SANS_EVOLPLANCK
340h2 = mHis->FitFunction(mfit);
341#else
342h2 = new Histo2D(ObjectFitter::FitResidus(*mHis,mfit));
343#endif
344return h2;
345}
346
347AnyDataObj* NOMAdapter_Histo2D::FitFunctionObj(GeneralFit& mfit)
348{
349Histo2D* h2 = NULL;
350#ifdef SANS_EVOLPLANCK
351h2 = mHis->FitFunction(mfit);
352#else
353h2 = new Histo2D(ObjectFitter::FitFunction(*mHis,mfit));
354#endif
355return h2;
356}
357
358
359// -------------------------------------------------------------
360
361/* --Methode-- */
362NTupInt_Histo2D::NTupInt_Histo2D(Histo2D* h)
363{
364mHis = h;
365}
366
367/* --Methode-- */
368NTupInt_Histo2D::~NTupInt_Histo2D()
369{
370}
371
372/* --Methode-- */
373sa_size_t NTupInt_Histo2D::NbLines() const
374{
375return(mHis->NBinX()*mHis->NBinY());
376}
377
378/* --Methode-- */
379sa_size_t NTupInt_Histo2D::NbColumns() const
380{
381return(6);
382}
383
384/* --Methode-- */
385r_8* NTupInt_Histo2D::GetLineD(sa_size_t n) const
386{
387int i,j;
388r_8 f2,f3;
389if ((n < 0) || (n >= mHis->NBinX()*mHis->NBinY()))
390 for(i=0; i<6; i++) mRet[i] = 0.;
391else {
392 i = n%mHis->NBinX(); j = n/mHis->NBinX();
393 mRet[0] = i; mRet[1] = j;
394 mHis->BinCenter(i,j,f2,f3);
395 mRet[2] = f2; mRet[3] = f3;
396 mRet[4] = (*mHis)(i,j); mRet[5] = mHis->Error(i, j);
397 }
398return(mRet);
399}
400
401/* --Methode-- */
402string NTupInt_Histo2D::VarList_C(const char* nx) const
403{
404string nomx;
405if (nx) nomx = nx;
406else nomx = "_xh_";
407string vardec = "double i,j,x,y,val,err; \n";
408vardec += "i = " + nomx + "[0]; j = " + nomx + "[1]; \n";
409vardec += "x = " + nomx + "[2]; y = " + nomx + "[3]; \n";
410vardec += "val = " + nomx + "[4]; err = " + nomx + "[5]; \n";
411return(vardec);
412}
413
414
415
416//-------------------------------------------------------------------------
417// Class Adaptateur d'objet (Pour NamedObjMgr) d'objet NTuple
418//-------------------------------------------------------------------------
419
420/* --Methode-- */
421NOMAdapter_NTuple::NOMAdapter_NTuple(NTuple* o)
422 : NObjMgrAdapter(o)
423{
424mNt = o;
425}
426
427/* --Methode-- */
428NOMAdapter_NTuple::~NOMAdapter_NTuple()
429{
430}
431
432/* --Methode-- */
433NObjMgrAdapter* NOMAdapter_NTuple::Clone(AnyDataObj* o)
434{
435NTuple* nt = dynamic_cast<NTuple *>(o);
436if (nt) return ( new NOMAdapter_NTuple(nt) );
437return ( new NObjMgrAdapter(o) );
438}
439
440
441/* --Methode-- */
442string NOMAdapter_NTuple::GetDataObjType()
443{
444return ("NTuple ");
445}
446
447/* --Methode-- */
448AnyDataObj* NOMAdapter_NTuple::CloneDataObj(bool /*share*/)
449{
450return ( new NTuple(*mNt) );
451}
452
453
454
455/* --Methode-- */
456void NOMAdapter_NTuple::SavePPF(POutPersist& pos, string const & nom)
457{
458#ifdef SANS_EVOLPLANCK
459// PEIDA-EROS L'histo est lui-meme PPersist
460string tag = nom; // A cause de const
461mNt->Write(pos,0,tag);
462#else
463ObjFileIO<NTuple> fio(mNt);
464fio.Write(pos, nom);
465#endif
466}
467
468/* --Methode-- */
469void NOMAdapter_NTuple::Print(ostream& os, int lev)
470{
471mNt->Show(os);
472if (lev > 0) os << mNt->Info();
473}
474
475
476/* --Methode-- */
477NTupleInterface* NOMAdapter_NTuple::GetNTupleInterface(bool& adel)
478{
479adel = false;
480return(mNt);
481// return( new NTupInt_NTuple(mNt) );
482}
483
484//-------------------------------------------------------------------------
485// Class Adaptateur d'objet (Pour NamedObjMgr) d'objet XNTuple
486//-------------------------------------------------------------------------
487
488/* --Methode-- */
489NOMAdapter_XNTuple::NOMAdapter_XNTuple(XNTuple* o)
490 : NObjMgrAdapter(o)
491{
492mNt = o;
493}
494
495/* --Methode-- */
496NOMAdapter_XNTuple::~NOMAdapter_XNTuple()
497{
498}
499
500/* --Methode-- */
501NObjMgrAdapter* NOMAdapter_XNTuple::Clone(AnyDataObj* o)
502{
503XNTuple* nt = dynamic_cast<XNTuple *>(o);
504if (nt) return ( new NOMAdapter_XNTuple(nt) );
505return ( new NObjMgrAdapter(o) );
506}
507
508/* --Methode-- */
509string NOMAdapter_XNTuple::GetDataObjType()
510{
511return ("XNTuple ");
512}
513
514/* --Methode-- */
515AnyDataObj* NOMAdapter_XNTuple::CloneDataObj(bool /*share*/)
516{
517return ( new XNTuple(*mNt) );
518}
519
520/* --Methode-- */
521void NOMAdapter_XNTuple::SavePPF(POutPersist& pos, string const & nom)
522{
523#ifdef SANS_EVOLPLANCK
524// PEIDA-EROS L'histo est lui-meme PPersist
525string tag = nom; // A cause de const
526mNt->Write(pos,0,tag);
527#else
528ObjFileIO<XNTuple> fio(mNt);
529fio.Write(pos, nom);
530#endif
531}
532
533/* --Methode-- */
534void NOMAdapter_XNTuple::Print(ostream& os, int lev)
535{
536// os << mNt->Info();
537mNt->Show(os);
538}
539
540
541/* --Methode-- */
542NTupleInterface* NOMAdapter_XNTuple::GetNTupleInterface(bool& adel)
543{
544adel = false;
545return(mNt);
546}
547
548
549//-------------------------------------------------------------------------
550// Class Adaptateur d'objet (Pour NamedObjMgr) d'objet BaseDataTable
551//-------------------------------------------------------------------------
552
553/* --Methode-- */
554NOMAdapter_DataTable::NOMAdapter_DataTable(BaseDataTable* o)
555 : NObjMgrAdapter(o)
556{
557mDT = o;
558}
559
560/* --Methode-- */
561NOMAdapter_DataTable::~NOMAdapter_DataTable()
562{
563}
564
565/* --Methode-- */
566NObjMgrAdapter* NOMAdapter_DataTable::Clone(AnyDataObj* o)
567{
568 BaseDataTable* dt = dynamic_cast<BaseDataTable *>(o);
569 if (dt) return ( new NOMAdapter_DataTable(dt) );
570 else return ( new NObjMgrAdapter(o) );
571}
572
573/* --Methode-- */
574string NOMAdapter_DataTable::GetDataObjType()
575{
576 DataTable* dt = dynamic_cast<DataTable *>(mDT);
577 if (dt) return ("DataTable ");
578 else {
579 SwPPFDataTable* swdt = dynamic_cast<SwPPFDataTable *>(mDT);
580 if (swdt) return ("SwPPFDataTable ");
581 return ("BaseDataTable ");
582 }
583}
584
585/* --Methode-- */
586AnyDataObj* NOMAdapter_DataTable::CloneDataObj(bool share)
587{
588 DataTable* dt = dynamic_cast<DataTable *>(mDT);
589 if (dt) return new DataTable(*dt, share);
590 else {
591 SwPPFDataTable* swdt = dynamic_cast<SwPPFDataTable *>(mDT);
592 if (swdt) cout << "NOMAdapter_DataTable::CloneDataObj() Object type SwPPFDataTable can not be cloned !" << endl;
593 return NULL;
594 }
595}
596
597
598/* --Methode-- */
599void NOMAdapter_DataTable::SavePPF(POutPersist& pos, string const & nom)
600{
601 DataTable* dt = dynamic_cast<DataTable *>(mDT);
602 SwPPFDataTable* swdt = dynamic_cast<SwPPFDataTable *>(mDT);
603 if (dt) {
604 ObjFileIO<BaseDataTable> fio(dt);
605 fio.Write(pos, nom);
606 }
607 else if (swdt) {
608 ObjFileIO<BaseDataTable> fio(swdt);
609 fio.Write(pos, nom);
610 }
611 else {
612 cerr << " NOMAdapter_DataTable::SavePPF() Objet pas de type DataTable/SwPPFDataTable (nom="
613 << nom << ")" << endl;
614 }
615}
616
617/* --Methode-- */
618void NOMAdapter_DataTable::Print(ostream& os, int lev)
619{
620mDT->Show(os);
621if (lev < 1) return;
622if (lev < 5) mDT->Print(os, 0, lev*10);
623else mDT->Print(os);
624}
625
626
627/* --Methode-- */
628NTupleInterface* NOMAdapter_DataTable::GetNTupleInterface(bool& adel)
629{
630adel = false;
631return(mDT);
632}
Note: See TracBrowser for help on using the repository browser.