84 def get_config_fab(self):
85 aodict = OrderedDict()
90 if (root.config.p_tel
is not None):
91 aodict.update({
"teldiam": root.config.p_tel.diam})
92 aodict.update({
"telobs": root.config.p_tel.cobs})
93 aodict.update({
"pixsize": root.config.p_geom._pixsize})
95 aodict.update({
"r0": root.config.p_atmos.r0})
96 aodict.update({
"Fe": 1 / root.config.p_loop.ittime})
97 aodict.update({
"nbTargets": len(root.config.p_targets)})
99 aodict.update({
"nbTargets": 1})
102 aodict.update({
"nbWfs": len(root.config.p_wfss)})
103 aodict.update({
"nbCam": aodict[
"nbWfs"]})
104 aodict.update({
"nbOffaxis": 0})
105 aodict.update({
"nbNgsWFS": 1})
106 aodict.update({
"nbLgsWFS": 0})
107 aodict.update({
"nbFigSensor": 0})
108 aodict.update({
"nbSkyWfs": aodict[
"nbWfs"]})
109 aodict.update({
"nbOffNgs": 0})
112 aodict.update({
"nbDms": len(root.config.p_dms)})
113 aodict.update({
"Nactu": root.rtc.d_control[0].nactu})
115 aodict.update({
"list_NgsOffAxis": []})
116 aodict.update({
"list_Fig": []})
117 aodict.update({
"list_Cam": [0]})
118 aodict.update({
"list_SkyWfs": [0]})
119 aodict.update({
"list_ITS": []})
120 aodict.update({
"list_Woofer": []})
121 aodict.update({
"list_Tweeter": []})
122 aodict.update({
"list_Steering": []})
124 listOfNstatesPerController = []
125 listOfcontrolLawTypePerController = []
126 for control
in self.config.p_controllers:
127 listOfNstatesPerController.append(control.nstates)
128 listOfcontrolLawTypePerController.append(control.type)
129 aodict.update({
"list_nstatesPerController": listOfNstatesPerController})
130 aodict.update({
"list_controllerType": listOfcontrolLawTypePerController})
138 pyrModulationList = []
155 for i
in range(aodict[
"nbWfs"]):
158 dataDict[
"wfsValid_" + str(i)] = root.config.p_wfss[i]._isvalid
160 xytab = np.zeros((2, root.config.p_wfss[i]._validsubsx.shape[0]))
161 xytab[0, :] = root.config.p_wfss[i]._validsubsx
162 xytab[1, :] = root.config.p_wfss[i]._validsubsy
163 dataDict[
"wfsValidXY_" + str(i)] = xytab
167 pixsize.append(root.config.p_wfss[i].pixsize)
169 if (root.config.p_centroiders[i].type == "maskedpix"):
174 root.config.p_wfss[i]._nvalid * factor) # slopes per wfs
176 listCentroType.append(
177 root.config.p_centroiders[i].
179 NsubapList.append(root.config.p_wfss[i]._nvalid)
180 listWfsType.append(root.config.p_wfss[i].type)
181 xPosList.append(root.config.p_wfss[i].xpos)
182 yPosList.append(root.config.p_wfss[i].ypos)
183 fstopsize.append(root.config.p_wfss[i].fssize)
184 fstoptype.append(root.config.p_wfss[i].fstop)
185 nxsubList.append(root.config.p_wfss[i].nxsub)
186 nysubList.append(root.config.p_wfss[i].nxsub)
187 lambdaList.append(root.config.p_wfss[i].Lambda)
188 if (root.config.p_wfss[i].dms_seen
is not None):
189 dms_seen.append(list(root.config.p_wfss[i].dms_seen))
190 noise.append(root.config.p_wfss[i].noise)
192 if (root.config.p_centroiders[i].type == CentroiderType.MASKEDPIX):
193 NslopesList.append(root.config.p_wfss[i]._nvalid * 4)
195 NslopesList.append(root.config.p_wfss[i]._nvalid * 2)
197 if (root.config.p_wfss[i].type ==
"pyrhr"):
198 pyrModulationList.append(root.config.p_wfss[i].pyr_ampl)
199 pyr_npts.append(root.config.p_wfss[i].pyr_npts)
200 pyr_pupsep.append(root.config.p_wfss[i].pyr_pup_sep)
203 pyrModulationList.append(0)
206 npixPerSub.append(root.config.p_wfss[i].npix)
208 confname = filepath.split("/")[-1].split('.conf')[0]
209 print(filepath.split(".conf")[0] + '_wfsConfig.fits')
211 filepath.split(".conf")[0] + '_wfsConfig.fits', overwrite=True)
212 new_hduwfsSubapXY.writeto(
213 filepath.split(".conf")[0] + '_wfsValidXYConfig.fits', overwrite=True)
215 if (len(dms_seen) != 0):
216 aodict.update({
"listWFS_dms_seen": dms_seen})
218 aodict.update({
"listWFS_NslopesList": NslopesList})
219 aodict.update({
"listWFS_NsubapList": NsubapList})
220 aodict.update({
"listWFS_CentroType": listCentroType})
221 aodict.update({
"listWFS_WfsType": listWfsType})
222 aodict.update({
"listWFS_pixarc": pixsize})
223 aodict.update({
"listWFS_pyrModRadius": pyrModulationList})
224 aodict.update({
"listWFS_pyrModNPts": pyr_npts})
225 aodict.update({
"listWFS_pyrPupSep": pyr_pupsep})
226 aodict.update({
"listWFS_fstopsize": fstopsize})
227 aodict.update({
"listWFS_fstoptype": fstoptype})
228 aodict.update({
"listWFS_NsubX": nxsubList})
229 aodict.update({
"listWFS_NsubY": nysubList})
230 aodict.update({
"listWFS_Nsub": nysubList})
231 aodict.update({
"listWFS_NpixPerSub": npixPerSub})
232 aodict.update({
"listWFS_Lambda": lambdaList})
233 if (len(noise) != 0):
234 aodict.update({
"listWFS_noise": noise})
245 for j
in range(aodict[
"nbDms"]):
246 listDmsType.append(root.config.p_dms[j].type)
248 root.config.p_dms[j].nact)
249 Nactu.append(root.config.p_dms[j]._ntotact)
250 unitPerVolt.append(root.config.p_dms[j].unitpervolt)
251 push4imat.append(root.config.p_dms[j].push4imat)
252 coupling.append(root.config.p_dms[j].coupling)
254 if (root.config.p_dms[j]._i1
is
256 if (root.config.p_dms[j].type !=
'tt'):
257 tmpdata = np.zeros((4, len(root.config.p_dms[j]._i1)))
258 tmpdata[0, :] = root.config.p_dms[j]._j1
259 tmpdata[1, :] = root.config.p_dms[j]._i1
260 tmpdata[2, :] = root.config.p_dms[j]._xpos
261 tmpdata[3, :] = root.config.p_dms[j]._ypos
263 tmpdata = np.zeros((4, 2))
265 dataDict[
"dmData" + str(j)] = tmpdata
267 new_hdudmsl.append(pfits.ImageHDU(tmpdata)) # Valid subap array
268 new_hdudmsl[j].header["DATATYPE"] = "valid_dm%d" % j
273 push4iMatArcSec.append(tmp)
276 if (len(push4iMatArcSec) != 0):
277 aodict.update({
"listDMS_push4iMat": push4imat})
278 aodict.update({
"listDMS_unitPerVolt": unitPerVolt})
279 aodict.update({
"listDMS_Nxactu": NactuX})
280 aodict.update({
"listDMS_Nyactu": NactuX})
281 aodict.update({
"listDMS_Nactu": Nactu})
283 aodict.update({
"listDMS_type": listDmsType})
284 aodict.update({
"listDMS_coupling": coupling})
286 if (root.config.p_targets
is not None):
287 listTargetsLambda = []
290 listTargetsDmsSeen = []
292 listTARGETS_pixsize = []
293 for k
in range(aodict[
"nbTargets"]):
294 listTargetsLambda.append(root.config.p_targets[k].Lambda)
295 listTargetsXpos.append(root.config.p_targets[k].xpos)
296 listTargetsYpos.append(root.config.p_targets[k].ypos)
297 listTargetsMag.append(root.config.p_targets[k].mag)
298 listTargetsDmsSeen.append(list(root.config.p_targets[k].dms_seen))
299 PSFPixsize = (root.config.p_targets[k].Lambda * 1e-6) / (
300 root.config.p_geom._pixsize *
301 root.config.p_geom.get_ipupil().shape[0]) * 206265.
302 listTARGETS_pixsize.append(PSFPixsize)
304 aodict.update({
"listTARGETS_Lambda": listTargetsLambda})
305 aodict.update({
"listTARGETS_Xpos": listTargetsXpos})
306 aodict.update({
"listTARGETS_Ypos": listTargetsYpos})
307 aodict.update({
"listTARGETS_Mag": listTargetsMag})
308 aodict.update({
"listTARGETS_DmsSeen": listTargetsDmsSeen})
309 aodict.update({
"listTARGETS_pixsize": listTARGETS_pixsize})
312 Nslopes = sum(NslopesList)
313 Nsubap = sum(NsubapList)
314 aodict.update({
"Nslopes": Nslopes})
315 aodict.update({
"Nsubap": Nsubap})
316 return aodict, dataDict