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

Last change on this file since 1808 was 1624, checked in by cmv, 24 years ago

On enleve les SetTemp() inutiles cmv 6/8/01

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