예제 #1
0
    def _run_interface(self, runtime):
        if not isdefined(self.inputs.out_file):
            fname = os.path.splitext(os.path.basename(self.inputs.in_file))[0]
            dname = os.getcwd()  #os.path.dirname(self.inputs.nativeT1)
            self.inputs.out_file = dname + os.sep + fname + self._suffix
        try:
            os.remove(self.inputs.out_file)
        except OSError:
            pass

        class InfoOptions:
            def __init__(self, command, variable, attribute, type_):
                self.command = command
                self.variable = variable
                self.attribute = attribute
                self.type_ = type_

        temp_out_file = os.getcwd() + os.sep + "temp.json"

        try:
            img = pyezminc.Image(self.inputs.in_file, metadata_only=True)
            hd = img.get_MINC_header()
            for key in hd.keys():
                self._params[key] = {}
                for subkey in hd[key].keys():
                    self._params[key][subkey] = {}
                    data_in = hd[key][subkey]
                    var = str(key)
                    attr = str(subkey)
                    #Populate dictionary with some useful image parameters (e.g., world coordinate start values of dimensions)
                    self._params[key][subkey] = data_in
                    update_minchd_json(temp_out_file, data_in, var, attr)
        except RuntimeError:
            print("Warning: Could not read header file from",
                  self.inputs.in_file)

        header = json.load(open(temp_out_file, "r+"))

        minc_input = True
        if not isdefined(self.inputs.json_header):
            print("Error: could not find json file", self.inputs.json_header)
            exit(1)

        json_header = json.load(open(self.inputs.json_header, "r+"))
        header.update(json_header)
        minc_input = False

        header = set_frame_duration(header, minc_input)
        header = set_isotope_halflife(header, self.inputs.halflife, 'halflife')

        fp = open(self.inputs.out_file, "w+")
        fp.seek(0)
        json.dump(header, fp, sort_keys=True, indent=4)
        fp.close()

        self._params = header

        return runtime
예제 #2
0
    def _run_interface(self, runtime):

        if not isdefined(self.inputs.out_file):
            fname, ext = os.path.splitext(self.inputs.in_file)
            self.inputs.out_file = fname + self._suffix

        # if os.path.exists(self.inputs.out_file):
        #     os.remove(self.inputs.out_file)
        try:
            os.remove(self.inputs.out_file)
        except OSError:
            pass

        class InfoOptions:
            def __init__(self, command, variable, attribute, type_):
                self.command = command
                self.variable = variable
                self.attribute = attribute
                self.type_ = type_

        options = [
            InfoOptions('-dimnames', 'time', 'dimnames', 'string'),
            InfoOptions('-varvalue time', 'time', 'frames-time', 'integer'),
            InfoOptions('-varvalue time-width', 'time', 'frames-length',
                        'integer')
        ]

        for opt in options:
            run_mincinfo = InfoCommand()
            run_mincinfo.inputs.in_file = self.inputs.in_file
            run_mincinfo.inputs.out_file = self.inputs.out_file
            run_mincinfo.inputs.opt_string = opt.command
            run_mincinfo.inputs.json_var = opt.variable
            run_mincinfo.inputs.json_attr = opt.attribute
            run_mincinfo.inputs.json_type = opt.type_
            run_mincinfo.inputs.error = 'unknown'

            if self.inputs.verbose:
                print run_mincinfo.cmdline
            if self.inputs.run:
                run_mincinfo.run()

        img = minc.Image(self.inputs.in_file, metadata_only=True)
        hd = img.get_MINC_header()
        for key in hd.keys():
            for subkey in hd[key].keys():
                data_in = hd[key][subkey]
                var = str(key)
                attr = str(subkey)
                print key, subkey, var, attr
                update_minchd_json(self.inputs.out_file, data_in, var, attr)

        return runtime
예제 #3
0
    def aggregate_outputs(self, runtime=None, needed_outputs=None):
        outputs = self._outputs()

        if runtime is None:
            try:
                out_info = load_json(self.inputs.out_file)[
                    self.inputs.json_attr][self.inputs.json_var]
            except IOError:
                return self.run().outputs
        else:
            out_info = []
            for line in runtime.stdout.split('\n'):
                if line:
                    values = line.split()

                    if self.inputs.json_type == 'float':
                        if len(values) > 1:
                            #out_info.append([float(val) for val in values])
                            out_info.append([val for val in values])
                        else:
                            #out_info.extend([float(val) for val in values])
                            out_info.extend([val for val in values])

                    elif self.inputs.json_type == 'integer':
                        if len(values) > 1:
                            #out_info.append([int(val) for val in values])
                            out_info.append([val for val in values])
                        else:
                            #out_info.extend([int(val) for val in values])
                            out_info.extend([val for val in values])

                    else:
                        if len(values) > 1:
                            out_info.append([val for val in values])
                        else:
                            out_info.extend([val for val in values])

            if len(out_info) == 1:
                out_info = out_info[0]
            if os.path.exists(self.inputs.out_file):
                update_minchd_json(self.inputs.out_file, out_info,
                                   self.inputs.json_var, self.inputs.json_attr)
            else:
                save_json(
                    self.inputs.out_file,
                    dict(((self.inputs.json_var,
                           dict(((self.inputs.json_attr, out_info), ))), )))

        outputs.out_file = out_info
        return outputs
예제 #4
0
    def _run_interface(self, runtime):
        if not isdefined(self.inputs.out_file):
            fname = os.path.splitext(os.path.basename(self.inputs.in_file))[0]
            dname = os.getcwd()  #os.path.dirname(self.inputs.nativeT1)
            self.inputs.out_file = dname + os.sep + fname + self._suffix
        try:
            os.remove(self.inputs.out_file)
        except OSError:
            pass

        #pettot1_4d_header_fixed = pe.Node(interface=FixHeaderCommand(), name="pettot1_4d_header_fixed")
        #pettot1_4d_header_fixed.inputs.time_only=True
        #pettot1_4d_header_fixed.inputs.in_file = fixIrregular.inputs.out_file
        #pettot1_4d_header_fixed.inputs.header = self.inputs.header

        class InfoOptions:
            def __init__(self, command, variable, attribute, type_):
                self.command = command
                self.variable = variable
                self.attribute = attribute
                self.type_ = type_

        #options = [ InfoOptions('-dimnames','time','dimnames','string'),
        #        InfoOptions('-varvalue time','time','frames-time','integer'),
        #        InfoOptions('-varvalue time-width','time','frames-length','integer') ]
        temp_out_file = os.getcwd() + os.sep + "temp.json"
        #for opt in options:
        #    run_mincinfo=InfoCommand()
        #    run_mincinfo.inputs.in_file = self.inputs.in_file
        #    run_mincinfo.inputs.out_file = temp_out_file
        #    run_mincinfo.inputs.opt_string = opt.command
        #    run_mincinfo.inputs.json_var = opt.variable
        #    run_mincinfo.inputs.json_attr = opt.attribute
        #    run_mincinfo.inputs.json_type = opt.type_
        #    run_mincinfo.inputs.error = 'unknown'

        #    print run_mincinfo.cmdline
        #    if self.inputs.run:
        #        run_mincinfo.run()

        img = pyezminc.Image(self.inputs.in_file, metadata_only=True)
        hd = img.get_MINC_header()
        for key in hd.keys():
            self._params[key] = {}
            for subkey in hd[key].keys():
                self._params[key][subkey] = {}
                data_in = hd[key][subkey]
                var = str(key)
                attr = str(subkey)
                #Populate dictionary with some useful image parameters (e.g., world coordinate start values of dimensions)
                self._params[key][subkey] = data_in
                update_minchd_json(temp_out_file, data_in, var, attr)

        header = json.load(open(temp_out_file, "r"))
        #fp.close()

        minc_input = True
        if not isdefined(self.inputs.json_header):
            print("Error: could not find json file", self.inputs.json_header)
            exit(1)

        print("\n\nMINC INPUT =", minc_input, self.inputs.json_header)
        json_header = json.load(open(self.inputs.json_header, "r+"))
        header.update(json_header)
        minc_input = False

        header = set_frame_duration(header, minc_input)
        header = set_isotope_halflife(header, self.inputs.halflife, 'halflife')

        fp = open(self.inputs.out_file, "w+")
        fp.seek(0)
        json.dump(header, fp, sort_keys=True, indent=4)
        fp.close()

        self._params = header

        return runtime