source: Sophya/trunk/SophyaExt/FitsIOServer/fitslocalmap.cc@ 1181

Last change on this file since 1181 was 1181, checked in by ansari, 25 years ago

nouvelle classe fits_localmap

File size: 4.9 KB
Line 
1#include "machdefs.h"
2#include "fitslocalmap.h"
3///////////////////////////////////////////////////////////
4// Les objets delegues pour la gestion de persistance sur fichiers fits
5// pout LocalMap
6///////////////////////////////////////////////////////////
7
8using namespace SOPHYA;
9
10template <class T>
11FITS_LocalMap<T>::FITS_LocalMap()
12{
13 dobj_= NULL;
14 ownobj_=false;
15}
16
17template <class T>
18FITS_LocalMap<T>::FITS_LocalMap(char inputfile[],int hdunum)
19{
20 dobj_=NULL;
21 ownobj_=false;
22 Read(inputfile,hdunum);
23}
24
25template <class T>
26FITS_LocalMap<T>::FITS_LocalMap(const LocalMap<T> & obj)
27{
28 dobj_ = new LocalMap<T>(obj);
29 ownobj_=true;
30}
31
32template <class T>
33FITS_LocalMap<T>::FITS_LocalMap(LocalMap<T> *obj)
34{
35 dobj_ = obj;
36 ownobj_=false;
37}
38
39
40template <class T>
41FITS_LocalMap<T>::~FITS_LocalMap()
42{
43 if (ownobj_ && dobj_) delete dobj_;
44}
45
46
47template <class T>
48AnyDataObj* FITS_LocalMap<T>::DataObj()
49{
50 return(dobj_);
51}
52
53
54template <class T>
55void FITS_LocalMap<T>::SetDataObj(AnyDataObj & o)
56 {
57 LocalMap<T>* po = dynamic_cast< LocalMap<T>* >(& o);
58 if (po == NULL) return;
59 if (ownobj_ && dobj_) delete dobj_;
60 dobj_ = po;
61 ownobj_ = false;
62 }
63
64template <class T>
65void FITS_LocalMap<T>::ReadFromFits(FitsInFile& is)
66{
67 if(dobj_ == NULL)
68 {
69 dobj_= new LocalMap<T>;
70 ownobj_= true;
71 }
72 int nbcols, nbentries;
73 nbcols = is.NbColsFromFits();
74 if (nbcols != 1)
75 {
76 throw IOExc("le fichier fits n'est pas une LocalMap");
77 }
78 DVList dvl=is.DVListFromFits();
79
80 nbentries = is.NentriesFromFits(0);
81 int_4 nSzX = dvl.GetI("NSZX");
82 int_4 nSzY = dvl.GetI("NSZY");
83 int_4 nPix = dvl.GetI("NPIX");
84 if (nPix != nbentries)
85 {
86 throw IOExc("longueur datablock incompatible avec nPix");
87 }
88 dobj_->ReSize(nSzX, nSzY);
89 int_4 localMappingDone = dvl.GetI("LCMP");
90 if (localMappingDone)
91 {
92 int_4 x0 = dvl.GetI("X0");
93 int_4 y0 = dvl.GetI("Y0");
94 double theta = dvl.GetD("THETA");
95 double phi = dvl.GetD("PHI");
96 double angle = dvl.GetD("ANGLE");
97 dobj_->SetOrigin(theta, phi, x0, y0, angle);
98 double angleX = dvl.GetD("ANGLEX");
99 double angleY = dvl.GetD("ANGLEY");
100 dobj_->SetSize(angleX, angleY);
101 }
102 // On lit les DataBlocks;
103 dobj_->DataBlock().ReSize(nPix);
104 is.GetSingleColumn(dobj_->DataBlock().Data(),nPix);
105
106 // dvlist de LocalMap
107 dobj_->Info() = is.DVListFromFits();
108}
109
110template <class T>
111void FITS_LocalMap<T>::WriteToFits(FitsOutFile& os)
112{
113 if(dobj_ == NULL)
114 {
115 cout << " WriteToFits:: dobj_= null " << endl;
116 return;
117 }
118
119 DVList dvl( dobj_->Info() );
120 dvl["NSZX"] = dobj_->Size_x();
121 dvl.SetComment("NSZX", "number of pixels in x direction");
122 dvl["NSZY"] = dobj_->Size_y();
123 dvl.SetComment("NSZY", "number of pixels in y direction");
124 dvl["NPIX"] = dobj_->NbPixels();
125 dvl.SetComment("NPIX", "number of pixels in local map");
126
127 if(dobj_->LocalMap_isDone())
128 {
129 dvl["LCMP"] = 1;
130 dvl.SetComment("LCMP", "local mapping 1= done, 0= not done");
131 int_4 x0 = 0;
132 int_4 y0 = 0;
133 double theta = 0.;
134 double phi = 0.;
135 double angle = 0.;
136 dobj_->Origin(theta, phi, x0, y0, angle);
137 dvl["X0"] = x0;
138 dvl.SetComment("X0", "number of pixel of the origin, x direction");
139 dvl["Y0"] = y0;
140 dvl.SetComment("Y0", "number of pixel of the origin, y direction");
141 dvl["THETA"] = theta;
142 dvl.SetComment("THETA", "theta position of the map-origin");
143 dvl["PHI"] = phi;
144 dvl.SetComment("PHI", "phi position of the map origin");
145 dvl["ANGLE"] = angle;
146 dvl.SetComment("ANGLE", "angle between max x axis and sphere phi-axis");
147
148 double angleX =0.;
149 double angleY = 0.;
150 dobj_->Aperture(angleX, angleY);
151 dvl["ANGLEX"] = angleX;
152 dvl.SetComment("ANGLEX", "sphere angle covered by map x-extension ");
153 dvl["ANGLEY"] = angleY;
154 dvl.SetComment("ANGLEY", "sphere angle covered by map y-extension ");
155 }
156 else
157 {
158 dvl["LCMP"] = 0;
159 }
160 dvl["Content"]= "LocalMap";
161 // On ecrit les dataBlocks
162 char** Noms = new char*[1];
163 Noms[0]= new char[15];
164 strncpy(Noms[0],dvl.GetS("Content").c_str(),15);
165 char extname[15] = "SIMULATION";
166
167 char Type[2];
168 if (typeid(T) == typeid(r_8) ) Type[0]='D';
169 else
170 if (typeid(T) == typeid(r_4) ) Type[0]='E';
171 else
172 {
173 cout << " type de la LocalMap = " << typeid(T).name() << endl;
174 throw IOExc("FITS_LocalMap:: unknown type");
175 }
176 Type[1]='\0';
177 vector<int> dummy;
178 os.makeHeaderBntblOnFits(Type, Noms, dobj_->NbPixels(), 1, dvl, extname, dummy);
179 delete [] Noms[0];
180 delete [] Noms;
181 os.putColToFits(0, dobj_->NbPixels(), dobj_->DataBlock().Data());
182
183}
184
185#ifdef __CXX_PRAGMA_TEMPLATES__
186#pragma define_template FITS_LocalMap<r_8>
187#pragma define_template FITS_LocalMap<r_4>
188#endif
189#if defined(ANSI_TEMPLATES) || defined(GNU_TEMPLATES)
190template class FITS_LocalMap<r_8>;
191template class FITS_LocalMap<r_4>;
192#endif
Note: See TracBrowser for help on using the repository browser.