Coverage for /wheeldirectory/casa-6.7.0-12-py3.10.el8/lib/py/lib/python3.10/site-packages/casatasks/private/task_spxfit.py: 73%

44 statements  

« prev     ^ index     » next       coverage.py v7.6.4, created at 2024-11-01 07:19 +0000

1 

2########################################################################## 

3# task_spxfit.py 

4# 

5# Copyright (C) 2008, 2009 

6# Associated Universities, Inc. Washington DC, USA. 

7# 

8# This script is free software; you can redistribute it and/or modify it 

9# under the terms of the GNU Library General Public License as published by 

10# the Free Software Foundation; either version 2 of the License, or (at your 

11# option) any later version. 

12# 

13# This library is distributed in the hope that it will be useful, but WITHOUT 

14# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 

15# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public 

16# License for more details. 

17# 

18# You should have received a copy of the GNU Library General Public License 

19# along with this library; if not, write to the Free Software Foundation, 

20# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA. 

21# 

22# Correspondence concerning AIPS++ should be adressed as follows: 

23# Internet email: casa-feedback@nrao.edu. 

24# Postal address: AIPS++ Project Office 

25# National Radio Astronomy Observatory 

26# 520 Edgemont Road 

27# Charlottesville, VA 22903-2475 USA 

28# 

29# <author> 

30# Dave Mehringer 

31# </author> 

32# 

33# <summary> 

34# Fit spectral index like functions. 

35# </summary> 

36# 

37# <reviewed reviwer="" date="" tests="" demos=""> 

38# </reviewed> 

39# 

40# <prerequisite> 

41# <ul> 

42# 

43# </ul> 

44# </prerequisite> 

45# 

46# <etymology> 

47# spxfit => sp(ectral) (inde)x fit(ter) 

48# but in general it can be used for any image axis 

49# </etymology> 

50# 

51# <synopsis> 

52# spxfit fits models to 1-d profiles. It is built on top of ia.fitprofile() 

53# </synopsis>  

54# 

55# <example> 

56# 

57# </example> 

58# 

59# <motivation> 

60# To make users happy, cf https://bugs.aoc.nrao.edu/browse/CAS-3116 

61# </motivation> 

62# 

63 

64########################################################################### 

65from casatools import image 

66from casatasks import casalog 

67 

68from .ialib import write_image_history, get_created_images 

69import sys 

70import time 

71 

72def spxfit( 

73 imagename, box, region, chans, stokes, 

74 axis, mask, minpts, multifit, spxtype, 

75 spxest, spxfix, div, spxsol, spxerr, 

76 model, residual, wantreturn, 

77 stretch, logresults, logfile, append, 

78 sigma, outsigma 

79): 

80 casalog.origin('spxfit') 

81 myia = image() 

82 myia.dohistory(False) 

83 retval = None 

84 try: 

85 if type(imagename) == list and len(imagename) > 1: 

86 myia = myia.imageconcat(outfile="", infiles=imagename, axis=axis, relax=True) 

87 else: 

88 if type(imagename) == list and len(imagename) == 1: 

89 imagename = imagename[0] 

90 if (not myia.open(imagename)): 

91 raise Exception("Cannot create image analysis tool using " + str(imagename)) 

92 sigmacopy = sigma 

93 if type(sigma) == list and type(sigma) == str: 

94 if len(sigma) == 1: 

95 sigmacopy = sigma[0] 

96 else: 

97 sigia = myia.imageconcat(outfile="", infiles=sigma, axis=axis, relax=True) 

98 sigmacopy = sigia.getchunk() 

99 sigia.done() 

100 target_time = time.time() 

101 retval = myia.fitprofile( 

102 box=box, region=region, chans=chans, 

103 stokes=stokes, axis=axis, mask=mask, 

104 minpts=minpts, ngauss=0, multifit=multifit, 

105 spxtype=spxtype, spxest=spxest, spxfix=spxfix, 

106 div=div, model=model, residual=residual, 

107 stretch=stretch, logresults=logresults, 

108 spxsol=spxsol, spxerr=spxerr, logfile=logfile, 

109 append=append, 

110 sigma=sigmacopy, outsigma=outsigma 

111 ) 

112 try: 

113 param_names = spxfit.__code__.co_varnames[:spxfit.__code__.co_argcount] 

114 local_vars = locals( ) 

115 param_vals = [local_vars[p] for p in param_names] 

116 ims = [model, residual] 

117 for x in [spxsol, spxerr]: 

118 if x: 

119 ims.extend(get_created_images(x, target_time)) 

120 for im in ims: 

121 write_image_history( 

122 im, sys._getframe().f_code.co_name, 

123 param_names, param_vals, casalog 

124 ) 

125 except Exception as instance: 

126 casalog.post("*** Error \'%s\' updating HISTORY" % (instance), 'WARN') 

127 finally: 

128 myia.done() 

129 if (wantreturn): 

130 return retval 

131 if (retval): 

132 del retval 

133 return