source: Sophya/trunk/SophyaLib/SkyMap/fiospherehealpix.cc@ 1954

Last change on this file since 1954 was 1954, checked in by ansari, 24 years ago

protection/lancement exception ds HEALPix::xxx et FIO_SphereHEALPix<T>::SetDataObj() - Reza 28/3/2002

File size: 4.4 KB
Line 
1// G. Le Meur 04/2000
2
3#include "fiospherehealpix.h"
4#include "pexceptions.h"
5#include "fiondblock.h"
6#include "datatype.h"
7#include <typeinfo>
8
9//*******************************************************************
10// Class FIO_SphereHEALPix<T>
11// Les objets delegues pour la gestion de persistance
12//*******************************************************************
13
14template <class T>
15FIO_SphereHEALPix<T>::FIO_SphereHEALPix()
16{
17 dobj_= new SphereHEALPix<T>;
18 ownobj= true;
19}
20
21template <class T>
22FIO_SphereHEALPix<T>::FIO_SphereHEALPix(string const& filename)
23{
24 dobj_= new SphereHEALPix<T>;
25 ownobj= true;
26 Read(filename);
27}
28
29template <class T>
30FIO_SphereHEALPix<T>::FIO_SphereHEALPix(const SphereHEALPix<T>& obj)
31{
32 dobj_= new SphereHEALPix<T>(obj, true);
33 ownobj= true;
34}
35
36template <class T>
37FIO_SphereHEALPix<T>::FIO_SphereHEALPix(SphereHEALPix<T>* obj)
38{
39 dobj_= obj;
40 ownobj= false;
41}
42
43template <class T>
44FIO_SphereHEALPix<T>::~FIO_SphereHEALPix()
45{
46 if (ownobj && dobj_) delete dobj_;
47}
48
49template <class T>
50AnyDataObj* FIO_SphereHEALPix<T>::DataObj()
51{
52 return(dobj_);
53}
54
55template <class T>
56void FIO_SphereHEALPix<T>::SetDataObj(AnyDataObj & o)
57{
58 SphereHEALPix<T> * po = dynamic_cast< SphereHEALPix<T> * >(&o);
59 if (po == NULL) {
60 char buff[160];
61 sprintf(buff,"FIO_SphereHEALPix<%s>::SetDataObj(%s) - Object type error ! ",
62 DataTypeInfo<T>::getTypeName().c_str(), typeid(o).name());
63 throw TypeMismatchExc(PExcLongMessage(buff));
64 }
65 if (ownobj && dobj_) delete dobj_;
66 dobj_ = po; ownobj = false;
67}
68
69template <class T>
70void FIO_SphereHEALPix<T>::ReadSelf(PInPersist& is)
71{
72
73 if(dobj_ == NULL)
74 {
75 dobj_= new SphereHEALPix<T>;
76 ownobj= true;
77 }
78
79// On lit les 3 premiers uint_8
80uint_8 itab[3];
81is.Get(itab, 3);
82// Let's Read the SphereCoordSys object -- ATTENTIOn - $CHECK$
83 FIO_SphereCoordSys fio_scs( dobj_->GetCoordSys());
84 fio_scs.Read(is);
85 // Pour savoir s'il y avait un DVList Infodobj->Info(); associe
86 char strg[256];
87 is.GetLine(strg, 255);
88 bool hadinfo= false;
89 if(strncmp(strg+strlen(strg)-7, "HasInfo", 7) == 0) hadinfo= true;
90 if(hadinfo)
91 { // Lecture eventuelle du DVList Info
92 is >> dobj_->Info();
93 }
94
95 int_4 nSide;
96 is.GetI4(nSide);
97 int_4 nPix;
98 is.GetI4(nPix);
99 double Omega;
100 is.GetR8(Omega);
101 dobj_->setParameters(nSide,nPix, Omega);
102 cout << " DBG-FIO_SphereHEALPix<T> nSide=" << nSide << " nPix=" << nPix << endl;
103// On lit les DataBlocks;
104 FIO_NDataBlock<T> fio_nd(&dobj_->pixels_);
105 fio_nd.Read(is);
106 FIO_NDataBlock<int_4> fio_ndi1(&dobj_->sliceBeginIndex_);
107 fio_ndi1.Read(is);
108 FIO_NDataBlock<int_4> fio_ndi2(&dobj_->sliceLenght_);
109 fio_ndi2.Read(is);
110
111 cout << " DBG-2 SizeIndex()= " << dobj_->SizeIndex()
112 << " NbPixels()= " << dobj_->NbPixels() << endl;
113}
114
115template <class T>
116void FIO_SphereHEALPix<T>::WriteSelf(POutPersist& os) const
117{
118 if(dobj_ == NULL)
119 {
120 cout << " WriteSelf:: dobj_= null " << endl;
121 return;
122 }
123
124// On ecrit 3 uint_8
125// 0 : Numero de version, 1 : Size index, 2 reserve a l
126uint_8 itab[3];
127itab[0] = 1;
128itab[1] = dobj_->SizeIndex();
129itab[2] = 0;
130os.Put(itab, 3);
131// Let's write the SphereCoordSys object
132 FIO_SphereCoordSys fio_scs( dobj_->GetCoordSys());
133 fio_scs.Write(os);
134
135 char strg[256];
136 int_4 nSide= dobj_->SizeIndex();
137 int_4 nPix = dobj_->NbPixels();
138
139 if(dobj_->ptrInfo())
140 {
141 sprintf(strg,"SphereHEALPix: NSide=%6d NPix=%9d HasInfo",nSide,nPix);
142 os.PutLine(strg);
143 os << dobj_->Info();
144 }
145 else
146 {
147 sprintf(strg,"SphereHEALPix: NSide=%6d NPix=%9d ",nSide,nPix);
148 os.PutLine(strg);
149 }
150
151 os.PutI4(nSide);
152 os.PutI4(nPix);
153 os.PutR8(dobj_->PixSolAngle());
154// On ecrit les dataBlocks
155 FIO_NDataBlock<T> fio_nd(&dobj_->pixels_);
156 fio_nd.Write(os);
157 FIO_NDataBlock<int_4> fio_ndi1(&dobj_->sliceBeginIndex_);
158 fio_ndi1.Write(os);
159 FIO_NDataBlock<int_4> fio_ndi2(&dobj_->sliceLenght_);
160 fio_ndi2.Write(os);
161}
162
163//*******************************************************************
164
165#ifdef __CXX_PRAGMA_TEMPLATES__
166#pragma define_template FIO_SphereHEALPix<r_8>
167#pragma define_template FIO_SphereHEALPix<r_4>
168#pragma define_template FIO_SphereHEALPix< complex<r_4> >
169#pragma define_template FIO_SphereHEALPix< complex<r_8> >
170#endif
171#if defined(ANSI_TEMPLATES) || defined(GNU_TEMPLATES)
172template class FIO_SphereHEALPix<r_8>;
173template class FIO_SphereHEALPix<r_4>;
174template class FIO_SphereHEALPix< complex<r_4> >;
175template class FIO_SphereHEALPix< complex<r_8> >;
176#endif
Note: See TracBrowser for help on using the repository browser.