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

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

1/ Prise en charge de DataTable et SwPPFDataTable pour piapp (NObjMgrAdapter) :
nomhistadapter.cc et piiinit.cc
2/ Lecture de tous les objets ds un fichier PPF par NamedObjMgr::ReadAll() pour
fichier PPF sans nametag.
3/ Ajout bloc try/catch ds PIStdImgApp::Run() (boucle d'evenements)

Reza , 27 Avril 2005

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