Source code for asap.lens_correction.apply_lens_correction

#!/usr/bin/env python
import os

import renderapi

from asap.module.render_module import StackTransitionModule
from asap.lens_correction.schemas import \
        ApplyLensCorrectionOutput, ApplyLensCorrectionParameters
from asap.dataimport.create_mipmaps import create_mipmaps_uri
from asap.utilities import uri_utils

example_input = {
    "render": {
        "host": "em-131fs",
        "port": 8080,
        "owner": "samk",
        "project": "RENDERAPI_TEST",
        "client_scripts": (
            "/allen/programs/celltypes/workgroups/"
            "em-connectomics/russelt/render_mc.old/render-ws-java-client/"
            "src/main/scripts")
    },
    "inputStack": "test_noLC",
    "outputStack": "test_LC",
    "pool_size": 10,
    "close_stack": True,
    "zs": [2266],
    "transform": {
        "type": "leaf",
        "className": "lenscorrection.NonLinearTransform",
        "dataString": (
            "5 21 1078.539787490504 5.9536401731869155 "
            "18.082459176969103 1078.355487979244 3.5307003058070348 "
            "11.64046339965791 -2.0439286697147363 -24.64074017045258 "
            "-41.26811513301735 -9.491349156078 -1.6954196055547417 "
            "-9.185363883704582 3.2959653136929163 16.063471152021727 "
            "16.294847510892705 11.433417367508135 31.814503296730077 "
            "8.568546283786144 1.1875763257283882 1.8390027135003706 "
            "4.811216491589896 -6.951845669522106 -12.267142955347461 "
            "-15.925381113080153 -14.870929614388771 -1.4936338107986824 "
            "-14.329785142195151 -10.312907851336057 -0.42262010802849903 "
            "-1.009175398784258 -3.2394612925182904 1.1172748871012366 "
            "3.675506795700918 4.147928095339033 4.180779006453825 "
            "2.3467092081149583 3.126555229782104 -0.7606672639855052 "
            "4.694244302355039 4.905604855794568 19.42462457061161 "
            "17.804784158940837 1942.4644352489915 1780.4747249033032 "
            "4947240.512601199 3472086.434895099 4297903.568850483 "
            "1.4156910200690086E10 8.869224932399399E9 8.401913335029685E9 "
            "1.184452643883111E10 4.326915271956289E13 "
            "2.5462360962795074E13 2.1493026326968934E13 "
            "2.3188186000529023E13 3.519602640946822E13 "
            "1.3795333182608984E17 7.805152532090952E16 "
            "6.180627842946396E16 5.937108087578708E16 "
            "6.8994694539978896E16 1.09803035347323568E17 100.0 "
            "1083.561059814147 1062.000092490804 4335259.912658479 "
            "3072116.6105437097 4089560.9959054096 1.588497037768282E10 "
            "1.054070313855633E10 1.0306317022320707E10 "
            "1.463025351609144E10 5.735536632714905E13 "
            "3.677632888097447E13 3.3248028854072227E13 "
            "3.53752851004701E13 5.205228949477172E13 "
            "2.06753448194955584E17 1.29851821487233248E17 "
            "1.12997804746083296E17 1.1130902498005392E17 "
            "1.23651446458254E17 1.85995206005396736E17 0.0 3840 3840 ")
    },
    "refId": None
}


[docs]class ApplyLensCorrection(StackTransitionModule): default_schema = ApplyLensCorrectionParameters default_output_schema = ApplyLensCorrectionOutput
[docs] def run(self): outputStack = self.output_stack r = self.render refId = (r.run(renderapi.stack.likelyUniqueId) if self.args['refId'] is None else self.args['refId']) lc_tform = renderapi.transform.load_transform_json( self.args['transform']) lc_tform.transformId = refId ref_lc = renderapi.transform.ReferenceTransform( refId=lc_tform.transformId) if lc_tform.labels is None: lc_tform.labels = self.args['labels'] else: for label in self.args['labels']: if label not in lc_tform.labels: lc_tform.labels.append(label) tspecs = renderapi.tilespec.get_tile_specs_from_z( self.input_stack, self.zValues[0], render=r) levels = [int(lvl) for lvl in tspecs[0].ip.levels] # make mask mipmaps mask_mm_list = {} if self.args['maskUrl_uri'] is not None: fmt = os.path.splitext( uri_utils.uri_basename( self.args["maskUrl_uri"]))[-1].lstrip(".") mask_mm_list = create_mipmaps_uri( self.args['maskUrl_uri'], outputDirectory=uri_utils.uri_prefix(self.args['maskUrl_uri']), mipmaplevels=levels, outputformat=fmt, convertTo8bit=False, force_redo=True, block_func="min") # new tile specs for each z selected new_tspecs = [] for z in self.zValues: tspecs = renderapi.tilespec.get_tile_specs_from_z( self.input_stack, z, render=r) for ts in tspecs: ts.tforms = [ref_lc] + ts.tforms for lvl, maskUrl in mask_mm_list.items(): ts.ip[lvl].maskUrl = maskUrl new_tspecs.append(ts) renderapi.stack.create_stack(outputStack, render=r) renderapi.stack.set_stack_state(outputStack, 'LOADING', render=r) self.output_tilespecs_to_stack(new_tspecs, sharedTransforms=[lc_tform]) missing_ts_zs = [] for z in self.zValues: job_success = self.validate_tilespecs( self.input_stack, outputStack, z) if not job_success: missing_ts_zs.append(z) # output dict output = {} output['stack'] = outputStack output['refId'] = refId output['missing_ts_zs'] = missing_ts_zs try: self.output(output) except AttributeError as e: self.logger.error(e)
if __name__ == '__main__': module = ApplyLensCorrection() module.run()