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))
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))
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, ))