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

Last change on this file since 2668 was 2629, checked in by cmv, 21 years ago

Because NEntries has gone from int_4 to uint_8 cmv 13/10/04

File size: 12.1 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#include "fitsntuple.h"
17#include "fitsxntuple.h"
18#endif
19
20//-----------------------------------------------------------------------------
21// Class Adaptateur d'objet (Pour NamedObjMgr) d'objet Histo / HProf / HistoErr
22//-----------------------------------------------------------------------------
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
44/* --Methode-- */
45string NOMAdapter_Histo::GetDataObjType()
46{
47HProf * hp = dynamic_cast<HProf *>(mHis);
48HistoErr * herr = dynamic_cast<HistoErr *>(mHis);
49if(hp) return("HProf ");
50else if(herr) return("HistoErr ");
51else return("Histo ");
52}
53
54/* --Methode-- */
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 }
64 sprintf(buff, "Entries= %llu \n",mHis->NEntries());
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-- */
80AnyDataObj* NOMAdapter_Histo::CloneDataObj(bool /*share*/)
81{
82mHis->UpdateHisto(); // pour le cas ou c'est un HProf
83HProf * hp = dynamic_cast<HProf *>(mHis);
84HistoErr * herr = dynamic_cast<HistoErr *>(mHis);
85if(hp) return( new HProf(*hp) );
86else if(herr) return( new HistoErr(*herr) );
87else return( new Histo(*mHis) );
88}
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
98ObjFileIO<Histo> fio(mHis);
99fio.Write(pos, nom);
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{
112if (typeid(*mHis) == typeid(HProf)) dopt = "fcirclemarker5 " + dopt;
113else dopt = "thinline " + dopt;
114PIHisto * pih = new PIHisto(mHis, false);
115return( pih );
116}
117
118/* --Methode-- */
119NTupleInterface* NOMAdapter_Histo::GetNTupleInterface(bool& adel)
120{
121adel = true;
122return( new NTupInt_Histo(mHis) );
123}
124
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);
132
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
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-- */
189uint_4 NTupInt_Histo::NbLines() const
190{
191return(mHis->NBins());
192}
193
194/* --Methode-- */
195uint_4 NTupInt_Histo::NbColumns() const
196{
197return(4);
198}
199
200/* --Methode-- */
201r_8* NTupInt_Histo::GetLineD(int k) const
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-- */
214string NTupInt_Histo::VarList_C(const char* nx) const
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
250/* --Methode-- */
251string NOMAdapter_Histo2D::GetDataObjType()
252{
253return ("Histo2D ");
254}
255
256/* --Methode-- */
257AnyDataObj* NOMAdapter_Histo2D::CloneDataObj(bool /*share*/)
258{
259return ( new Histo2D(*mHis) );
260}
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
270ObjFileIO<Histo2D> fio(mHis);
271fio.Write(pos, nom);
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{
284dopt = "thinline " + dopt;
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-- */
295NTupleInterface* NOMAdapter_Histo2D::GetNTupleInterface(bool& adel)
296{
297adel = true;
298return( new NTupInt_Histo2D(mHis) );
299}
300
301
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);
309
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
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-- */
370uint_4 NTupInt_Histo2D::NbLines() const
371{
372return(mHis->NBinX()*mHis->NBinY());
373}
374
375/* --Methode-- */
376uint_4 NTupInt_Histo2D::NbColumns() const
377{
378return(6);
379}
380
381/* --Methode-- */
382r_8* NTupInt_Histo2D::GetLineD(int n) const
383{
384int i,j;
385r_8 f2,f3;
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-- */
399string NTupInt_Histo2D::VarList_C(const char* nx) const
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
437
438/* --Methode-- */
439string NOMAdapter_NTuple::GetDataObjType()
440{
441return ("NTuple ");
442}
443
444/* --Methode-- */
445AnyDataObj* NOMAdapter_NTuple::CloneDataObj(bool /*share*/)
446{
447return ( new NTuple(*mNt) );
448}
449
450/* --Methode-- */
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-- */
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
482ObjFileIO<NTuple> fio(mNt);
483fio.Write(pos, nom);
484#endif
485}
486
487/* --Methode-- */
488void NOMAdapter_NTuple::Print(ostream& os)
489{
490os << mNt->Info();
491os << *(mNt);
492}
493
494
495/* --Methode-- */
496NTupleInterface* NOMAdapter_NTuple::GetNTupleInterface(bool& adel)
497{
498adel = false;
499return(mNt);
500// return( new NTupInt_NTuple(mNt) );
501}
502
503//-------------------------------------------------------------------------
504// Class Adaptateur d'objet (Pour NamedObjMgr) d'objet XNTuple
505//-------------------------------------------------------------------------
506
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
527/* --Methode-- */
528string NOMAdapter_XNTuple::GetDataObjType()
529{
530return ("XNTuple ");
531}
532
533/* --Methode-- */
534AnyDataObj* NOMAdapter_XNTuple::CloneDataObj(bool /*share*/)
535{
536return ( new XNTuple(*mNt) );
537}
538
539/* --Methode-- */
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-- */
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
570ObjFileIO<XNTuple> fio(mNt);
571fio.Write(pos, nom);
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.