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

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

changement de char* en string

File size: 4.8 KB
RevLine 
[1181]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
[1194]162 vector<string> Noms;
163 Noms.push_back(dvl.GetS("Content"));
164 string extname("SIMULATION");
[1181]165
[1194]166 string Type;
167 if (typeid(T) == typeid(r_8) ) Type+='D';
[1181]168 else
[1194]169 if (typeid(T) == typeid(r_4) ) Type+='E';
[1181]170 else
171 {
172 cout << " type de la LocalMap = " << typeid(T).name() << endl;
173 throw IOExc("FITS_LocalMap:: unknown type");
174 }
175 vector<int> dummy;
176 os.makeHeaderBntblOnFits(Type, Noms, dobj_->NbPixels(), 1, dvl, extname, dummy);
177 os.putColToFits(0, dobj_->NbPixels(), dobj_->DataBlock().Data());
178
179}
180
181#ifdef __CXX_PRAGMA_TEMPLATES__
182#pragma define_template FITS_LocalMap<r_8>
183#pragma define_template FITS_LocalMap<r_4>
184#endif
185#if defined(ANSI_TEMPLATES) || defined(GNU_TEMPLATES)
186template class FITS_LocalMap<r_8>;
187template class FITS_LocalMap<r_4>;
188#endif
Note: See TracBrowser for help on using the repository browser.