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

Last change on this file since 1287 was 1214, checked in by ercodmgr, 25 years ago

bugs et oublis dans GetDataObjType cmv 30/9/00

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