Example #1
0
def generate_ome_fromimc(imc_acquisition):
    """

    :param imc_acquisition:
    :return:
    """

    y, x, c = imc_acquisition.shape
    print(x, y, c)
    metadata = MetadataTools.createOMEXMLMetadata()
    filename = '/home/vitoz/temp/test.ome.tiff'
    MetadataTools.populateMetadata(metadata, 0, filename, True, "XYZTC",
                                   FormatTools.getPixelTypeString(6), x, y, 1,
                                   c, 1, 1)
    if imc_acquisition.origin == 'mcd':
        ac_id = imc_acquisition.image_ID
        meta_xml = et.XML(imc_acquisition.original_metadata)
        ns = '{' + meta_xml.tag.split('}')[0].strip('{') + '}'

        channel_xml = [
            channel_xml
            for channel_xml in meta_xml.findall(ns + 'AcquisitionChannel')
            if channel_xml.find(ns + 'AcquisitionID').text == ac_id
        ]

        ac_xml = [
            tx for tx in meta_xml.findall(ns + 'Acquisition')
            if tx.find(ns + 'ID').text == ac_id
        ][0]
        # AcquisitionDate = ac_xml.find(ns+'StartTimeStamp').text
        # Description = ac_xml.find(ns+'Description').text
        # AblationPower = ac_xml.find(ns + 'AblationPower').text
        # AblationDistanceBetweenShots = ac_xml.find(ns + 'AblationDistanceBetweenShots').text
        # AblationFrequency = ac_xml.find(ns + 'AblationFrequency').text
        # ROIID = ac_xml.find(ns + 'ROIID').text
        # OrderNumber = ac_xml.find(ns + 'OrderNumber').text
        # SignalType = ac_xml.find(ns + 'SignalType').text
        # DataStartOffset = ac_xml.find(ns + 'DataStartOffset').text
        # DataEndOffset = ac_xml.find(ns + 'DataEndOffset').text
        # StartTimeStamp = ac_xml.find(ns + 'StartTimeStamp').text
        # EndTimeStamp = ac_xml.find(ns + 'EndTimeStamp').text
        # SegmentDataFormat = ac_xml.find(ns + 'SegmentDataFormat').text
        # ValueBytes = ac_xml.find(ns + 'ValueBytes').text
        #
        # chan_order = [int(cxml.find(ns+'OrderNumber').text) for cxml in channel_xml]
        metadata.setImageID(ac_id, 0)
        metadata.setImageName(ac_id, 0)
        metadata.setPixelsDimensionOrder(DimensionOrder.XYCZT, 0)
        metadata.setPixelsSizeX(PositiveInteger(x), 0)
        metadata.setPixelsSizeY(PositiveInteger(y), 0)
        metadata.setPixelsSizeC(PositiveInteger(c), 0)
        metadata.setPixelsSizeZ(PositiveInteger(1), 0)
        metadata.setPixelsSizeT(PositiveInteger(1), 0)

        metadata.setPixelsPhysicalSizeX(Length(1, units.MICROM), 0)
        metadata.setPixelsPhysicalSizeY(Length(1, units.MICROM), 0)
        metadata.setPixelsPhysicalSizeZ(Length(1, units.MICROM), 0)

        metadata.setPixelsID(ac_id, 0)
        metadata.setPixelsType(PixelType.FLOAT, 0)
        metadata.setPixelsInterleaved(False, 0)

        # metadata.setTiffDataFirstC(NonNegativeInteger(0), 0, 0)
        # metadata.setTiffDataFirstZ(NonNegativeInteger(0), 0, 0)
        # metadata.setTiffDataFirstT(NonNegativeInteger(0), 0, 0)
        print(c)
        for i in range(c):
            metadata.setChannelSamplesPerPixel(PositiveInteger(1), 0, i)
        for cxml in channel_xml:
            cnr = int(cxml.find(ns + 'OrderNumber').text) - 3
            if cnr >= 0:
                name = cxml.find(ns + 'ChannelName').text
                label = cxml.find(ns + 'ChannelLabel')
                if label.text is None:
                    label = name
                else:
                    print(label.text)
                    label = label.text
                print(label)
                print(name)
                cid = '_'.join([label, name])
                cid = cid.strip('(').strip(')')
                name = name.replace('(', '').strip(')')
                metadata.setChannelFluor(name, 0, cnr)
                metadata.setChannelName(cid, 0, cnr)
                metadata.setChannelID(cid, 0, cnr)
        # for i in range(c):
        #     metadata.setPlaneTheC(NonNegativeInteger(i),0,i)
        #     metadata.setPlaneTheZ(NonNegativeInteger(0), 0, i)
        #     metadata.setPlaneTheT(NonNegativeInteger(0), 0, i)

        return metadata

    else:
        ac_id = imc_acquisition.image_ID
        metadata.setImageID(ac_id, 0)
        metadata.setImageName(ac_id, 0)
        metadata.setPixelsDimensionOrder(DimensionOrder.XYCZT, 0)
        metadata.setPixelsSizeX(PositiveInteger(x), 0)
        metadata.setPixelsSizeY(PositiveInteger(y), 0)
        metadata.setPixelsSizeC(PositiveInteger(c), 0)
        metadata.setPixelsSizeZ(PositiveInteger(1), 0)
        metadata.setPixelsSizeT(PositiveInteger(1), 0)

        metadata.setPixelsPhysicalSizeX(Length(1, units.MICROM), 0)
        metadata.setPixelsPhysicalSizeY(Length(1, units.MICROM), 0)
        metadata.setPixelsPhysicalSizeZ(Length(1, units.MICROM), 0)

        metadata.setPixelsID(ac_id, 0)
        metadata.setPixelsType(PixelType.FLOAT, 0)
        metadata.setPixelsInterleaved(False, 0)

        # metadata.setTiffDataFirstC(NonNegativeInteger(0), 0, 0)
        # metadata.setTiffDataFirstZ(NonNegativeInteger(0), 0, 0)
        # metadata.setTiffDataFirstT(NonNegativeInteger(0), 0, 0)
        print(c)
        for i in range(c):
            metadata.setChannelSamplesPerPixel(PositiveInteger(1), 0, i)
        for cnr, metal, label in zip(range(c), imc_acquisition.channel_metals,
                                     imc_acquisition.channel_labels):
            metadata.setChannelFluor(metal, 0, cnr)
            metadata.setChannelName(label, 0, cnr)
            metadata.setChannelID(label, 0, cnr)

        return metadata