Esempio n. 1
0
def samplesheet_pool_samples(lims, process_id, output_file):
    """Create manual pipetting samplesheet for pooling samples."""
    process = Process(lims, id=process_id)

    # print header
    output_file.write('Sample\tContainer\tWell\tPool\n')

    # Get all input artifact and store per container
    input_containers = {}
    for input_artifact in process.all_inputs(resolve=True):
        container = input_artifact.location[0].name
        well = ''.join(input_artifact.location[1].split(':'))

        if container not in input_containers:
            input_containers[container] = {}

        input_containers[container][well] = input_artifact

    # print pool scheme per input artifact
    # sort on container and well
    for input_container in sorted(input_containers.keys()):
        input_artifacts = input_containers[input_container]
        for well in clarity_epp.export.utils.sort_96_well_plate(
                input_artifacts.keys()):
            output_file.write('{sample}\t{container}\t{well}\t{pool}\n'.format(
                sample=input_artifacts[well].name,
                container=input_artifacts[well].location[0].name,
                well=well,
                pool=process.outputs_per_input(input_artifacts[well].id,
                                               Analyte=True)[0].name))
Esempio n. 2
0
def samplesheet_normalization(lims, process_id, output_file):
    """Create manual pipetting samplesheet for normalizing (MIP) samples."""
    output_file.write(
        'Sample\tConcentration (ng/ul)\tVolume sample (ul)\tVolume water (ul)\tOutput (ng)\tIndampen\n'
    )
    process = Process(lims, id=process_id)

    # Find all QC process types
    qc_process_types = clarity_epp.export.utils.get_process_types(
        lims, ['Dx Qubit QC', 'Dx Tecan Spark 10M QC'])

    for input_artifact in process.all_inputs(resolve=True):
        artifact = process.outputs_per_input(
            input_artifact.id,
            Analyte=True)[0]  # assume one artifact per input
        sample = input_artifact.samples[
            0]  # asume one sample per input artifact

        # Find last qc process for artifact
        qc_process = sorted(
            lims.get_processes(type=qc_process_types,
                               inputartifactlimsid=input_artifact.id),
            key=lambda process: int(process.id.split('-')[-1]))[-1]

        # Find concentration measurement
        for qc_artifact in qc_process.outputs_per_input(input_artifact.id):
            if qc_artifact.name.split(' ')[0] == artifact.name:
                concentration = float(
                    qc_artifact.udf['Dx Concentratie fluorescentie (ng/ul)'])

        final_volume = float(artifact.udf['Dx Eindvolume (ul)'])
        input_ng = float(artifact.udf['Dx Input (ng)'])
        if 'Dx pipetteervolume (ul)' in artifact.udf:
            input_ng = concentration * float(
                artifact.udf['Dx pipetteervolume (ul)'])
        sample_volume = input_ng / concentration
        water_volume = final_volume - sample_volume
        evaporate = 'N'

        if sample_volume < 0.5:
            sample_volume = 0.5
            water_volume = final_volume - sample_volume
        elif sample_volume > final_volume:
            evaporate = 'J'
            water_volume = 0

        output_file.write(
            '{sample}\t{concentration:.1f}\t{sample_volume:.1f}\t{water_volume:.1f}\t{output:.1f}\t{evaporate}\n'
            .format(sample=sample.name,
                    concentration=concentration,
                    sample_volume=sample_volume,
                    water_volume=water_volume,
                    output=input_ng,
                    evaporate=evaporate))
Esempio n. 3
0
def samplesheet_dilute(lims, process_id, output_file):
    """Create Caliper samplesheet for diluting samples."""
    output_file.write(
        'Monsternummer\tPlate_Id_input\tWell\tPlate_Id_output\tPipetteervolume DNA (ul)\tPipetteervolume H2O (ul)\n'
    )
    process = Process(lims, id=process_id)

    output = {}  # save output data to dict, to be able to sort on well.
    nM_pool = process.udf['Dx Pool verdunning (nM)']
    output_ul = process.udf['Eindvolume (ul)']

    for input_artifact in process.all_inputs():
        output_artifact = process.outputs_per_input(input_artifact.id,
                                                    Analyte=True)[0]

        # Get QC stats
        size = float(input_artifact.udf['Dx Fragmentlengte (bp)'])
        concentration = float(
            input_artifact.udf['Dx Concentratie fluorescentie (ng/ul)'])

        # Calculate dilution
        nM_dna = (concentration * 1000 * (1 / 660.0) * (1 / size)) * 1000
        ul_sample = (nM_pool / nM_dna) * output_ul
        ul_water = output_ul - ul_sample

        # Store output lines by well
        well = ''.join(input_artifact.location[1].split(':'))
        output[
            well] = '{name}\t{plate_id_input}\t{well}\t{plate_id_output}\t{volume_dna:.1f}\t{volume_water:.1f}\n'.format(
                name=input_artifact.name,
                plate_id_input=input_artifact.location[0].name,
                well=well,
                plate_id_output=output_artifact.location[0].name,
                volume_dna=ul_sample,
                volume_water=ul_water)

    wells = []
    for col in range(1, 13):
        wells.extend([
            '{}{}'.format(row, str(col)) for row in string.ascii_uppercase[:8]
        ])

    for well in wells:
        if well in output:
            output_file.write(output[well])
        else:
            output_file.write(
                'Leeg\tNone\t{well}\t{plate_id_output}\t0\t0\n'.format(
                    well=well,
                    plate_id_output=output_artifact.location[0].name,
                ))