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

Last change on this file since 1207 was 1207, checked in by ercodmgr, 25 years ago
  • refonte de piaffiting avec les fits adapteurs
  • addapteur de fit pour les objets existants
  • entree des Image<T> dans les fits (retour !!!)

cmv 29/9/00

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