import tempfile import shutil from casatasks.private.casa_transition import * if is_CASA6: from casatasks import casalog from casatools import image, imagepol from .ialib import write_image_history else: from taskinit import * from ialib import write_image_history image = iatool imagepol = potool def rmfit( imagename, rm, rmerr, pa0, pa0err, nturns, chisq, sigma, rmfg, rmmax, maxpaerr ): casalog.origin('prom') myia = image() myia.dohistory(False) mypo = imagepol() tmpim = "" try: if len(imagename) == 0: raise ValueError("imagename must be specified.") if type(imagename) == type(['s']): # negative axis value means concatenate along spectral axis tmpim = tempfile.mkdtemp(suffix=".im", prefix="_rmfit_concat") myia = myia.imageconcat( outfile=tmpim, infiles=imagename, relax=True, axis=-1, overwrite=True ) if not myia: raise RuntimeError("Unable to concatenate images.") myia.done() mypo.open(tmpim) else: if not mypo.open(imagename): raise RuntimeError("Cannot create image analysis tool using " + imagename) mypo.rotationmeasure( rm=rm, rmerr=rmerr, pa0=pa0, pa0err=pa0err, nturns=nturns, chisq=chisq, sigma=sigma, rmfg=rmfg, rmmax=rmmax, maxpaerr=maxpaerr ) try: param_names = rmfit.func_code.co_varnames[:rmfit.func_code.co_argcount] param_vals = [eval(p) for p in param_names] for im in [rm, rmerr, pa0, pa0err, nturns, chisq]: write_image_history( im, sys._getframe().f_code.co_name, param_names, param_vals, casalog ) except Exception as instance: casalog.post("*** Error \'%s\' updating HISTORY" % (instance), 'WARN') # tasks no longer return bools finally: if (myia): myia.done() if (mypo): mypo.done() if len(tmpim) > 0: try: shutil.rmtree(tmpim) except Exception as exc: casalog.post("Could not remove " + tmpim + " because " + str(exc))