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

Last change on this file since 2460 was 2383, checked in by ansari, 22 years ago

Ajout methode GetInfoString() aux ObjAdapter + attributs de gestion de position de stat pour PINtuple/PIHisto + positionnement par defaut de stat (statposoff=) lors de disp same - Reza 16/5/2003

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