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

Last change on this file since 2683 was 2683, checked in by ansari, 20 years ago

Adaptation au changement de int par sa_size_t ds la classe interface NTuple NTupInterface - Reza 21/4/2005

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