Skip to content

Commit 4f2f4d5

Browse files
Update sample-name validation (#88)
* Update sample-name validation Update sample-name column validation in sample-sheet to accept sample-name or tube-ids (but not a mix of both). * Updated tests, updated functionality * cleanup
1 parent 4af1593 commit 4f2f4d5

File tree

6 files changed

+210
-71
lines changed

6 files changed

+210
-71
lines changed

qp_klp/Step.py

Lines changed: 105 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -711,9 +711,9 @@ def _get_tube_ids_from_qiita(self, qclient):
711711
# sample-names are used as keys and tube-ids are their values.
712712
qsam, tids = self.get_samples_in_qiita(qclient, qiita_id)
713713

714-
if tids is None:
715-
sample_names_by_qiita_id[str(qiita_id)] = qsam
716-
else:
714+
sample_names_by_qiita_id[str(qiita_id)] = qsam
715+
716+
if tids is not None:
717717
# fix values in tids to be a string instead of a list of one.
718718
# also, remove the qiita_id prepending each sample-name.
719719
tids = {k.replace(f'{qiita_id}.', ''): tids[k][0] for k in
@@ -733,59 +733,132 @@ def _get_tube_ids_from_qiita(self, qclient):
733733

734734
def _compare_samples_against_qiita(self, qclient):
735735
projects = self.pipeline.get_project_info(short_names=True)
736-
self._get_tube_ids_from_qiita(qclient)
737736

738737
results = []
739738
for project in projects:
740-
project_name = project['project_name']
739+
msgs = []
740+
self._get_tube_ids_from_qiita(qclient)
741+
p_name = project['project_name']
741742
qiita_id = str(project['qiita_id'])
743+
contains_replicates = project['contains_replicates']
742744

743745
# get list of samples as presented by the sample-sheet or mapping
744746
# file and confirm that they are all registered in Qiita.
745-
samples = set(self.pipeline.get_sample_names(project_name))
747+
if contains_replicates:
748+
# don't match against sample-names with a trailing well-id
749+
# if project contains replicates.
750+
msgs.append("This sample-sheet contains replicates. sample-"
751+
"names will be sourced from orig_name column.")
752+
samples = set(self.pipeline.get_orig_names_from_sheet(p_name))
753+
else:
754+
samples = set(self.pipeline.get_sample_names(p_name))
746755

747756
# do not include BLANKs. If they are unregistered, we will add
748757
# them downstream.
749758
samples = {smpl for smpl in samples
750759
if not smpl.startswith('BLANK')}
751760

752-
# just get a list of the tube-ids themselves, not what they map
753-
# to.
754-
if qiita_id in self.tube_id_map:
755-
# if map is not empty
756-
tids = [self.tube_id_map[qiita_id][sample] for sample in
757-
self.tube_id_map[qiita_id]]
761+
msgs.append(f"The total number of samples found in {p_name} that "
762+
f"aren't BLANK is: {len(samples)}")
763+
764+
results_sn = self._process_sample_names(p_name, qiita_id,
765+
samples)
758766

759-
not_in_qiita = samples - set(tids)
767+
msgs.append("Number of values in sheet that aren't sample-names in"
768+
" Qiita: %s" % len(results_sn[0]))
760769

761-
if not_in_qiita:
762-
# strip any leading zeroes from the sample-ids. Note that
763-
# if a sample-id has more than one leading zero, all of
764-
# them will be removed.
765-
not_in_qiita = set([x.lstrip('0') for x in samples]) - \
766-
set(tids)
770+
use_tids = False
767771

768-
examples = tids[:5]
769-
used_tids = True
772+
if len(results_sn[0]) == 0:
773+
msgs.append(f"All values in sheet matched sample-names "
774+
f"registered with {p_name}")
770775
else:
771-
# assume project is in samples_in_qiita
772-
not_in_qiita = samples - set(self.samples_in_qiita[qiita_id])
773-
examples = list(samples)[:5]
774-
used_tids = False
776+
# not all values were matched to sample-names.
777+
# check for possible match w/tube-ids, if defined in project.
778+
results_tid = self._process_tube_ids(p_name, qiita_id,
779+
samples)
780+
if results_tid:
781+
msgs.append("Number of values in sheet that aren't "
782+
"tube-ids in Qiita: %s" % len(results_tid[0]))
783+
784+
if len(results_tid[0]) == 0:
785+
# all values were matched to tube-ids.
786+
use_tids = True
787+
msgs.append(f"All values in sheet matched tube-ids "
788+
f"registered with {p_name}")
789+
else:
790+
# we have sample-names and tube-ids and neither is
791+
# a perfect match.
792+
if len(results_tid[0]) < len(results_sn[0]):
793+
# more tube-ids matched than sample-names.
794+
use_tids = True
795+
msgs.append(f"More values in sheet matched tube-"
796+
f"ids than sample-names with {p_name}")
797+
elif len(results_tid[0]) == len(results_sn[0]):
798+
msgs.append("Sample-names and tube-ids were "
799+
"equally non-represented in the "
800+
"sample-sheet")
801+
else:
802+
msgs.append(f"More values in sheet matched sample-"
803+
f"names than tube-ids with {p_name}")
804+
else:
805+
msgs.append("there are no tube-ids registered with "
806+
f"{p_name}")
775807

776-
# convert to strings before returning
777-
examples = [str(example) for example in examples]
808+
if use_tids:
809+
not_in_qiita = results_tid[0]
810+
examples = results_tid[1]
811+
total_in_qiita = results_tid[2]
812+
else:
813+
not_in_qiita = results_sn[0]
814+
examples = results_sn[1]
815+
total_in_qiita = results_sn[2]
778816

779817
# return an entry for all projects, even when samples_not_in_qiita
780818
# is an empty list, as the information is still valuable.
781-
782819
results.append({'samples_not_in_qiita': not_in_qiita,
783820
'examples_in_qiita': examples,
784-
'project_name': project_name,
785-
'tids': used_tids})
821+
'project_name': p_name,
822+
'total_in_qiita': total_in_qiita,
823+
'used_tids': use_tids,
824+
'messages': msgs})
786825

787826
return results
788827

828+
def _process_sample_names(self, project_name, qiita_id, samples):
829+
not_in_qiita = samples - set(self.samples_in_qiita[qiita_id])
830+
examples = list(samples)[:5]
831+
832+
# convert to strings before returning
833+
examples = [str(example) for example in examples]
834+
835+
number_in_project = len(set(self.samples_in_qiita[qiita_id]))
836+
837+
return not_in_qiita, examples, number_in_project
838+
839+
def _process_tube_ids(self, project_name, qiita_id, samples):
840+
if qiita_id in self.tube_id_map:
841+
tids = [self.tube_id_map[qiita_id][sample] for sample in
842+
self.tube_id_map[qiita_id]]
843+
844+
not_in_qiita = samples - set(tids)
845+
846+
if not_in_qiita:
847+
# strip any leading zeroes from the sample-ids. Note that
848+
# if a sample-id has more than one leading zero, all of
849+
# them will be removed.
850+
not_in_qiita = set([x.lstrip('0') for x in samples]) - \
851+
set(tids)
852+
853+
# convert examples to strings before returning
854+
examples = [str(example) for example in tids[:5]]
855+
856+
number_in_project = len(set(tids))
857+
858+
return not_in_qiita, examples, number_in_project
859+
860+
# return None otherwise
861+
789862
@classmethod
790863
def _replace_with_tube_ids(cls, prep_file_path, tube_id_map):
791864
# passing tube_id_map as a parameter allows for easier testing.
@@ -899,23 +972,8 @@ def precheck(self, qclient):
899972

900973
if missing_counts:
901974
msgs = []
902-
for comparison in results:
903-
not_in_qiita = list(comparison['samples_not_in_qiita'])
904-
not_in_qiita_count = len(not_in_qiita)
905-
examples_in_qiita = ', '.join(comparison['examples_in_qiita'])
906-
p_name = comparison['project_name']
907-
uses_tids = comparison['tids']
908-
909-
msgs.append(
910-
f"<br/><b>Project '{p_name}'</b> has {not_in_qiita_count} "
911-
f"samples not registered in Qiita: {not_in_qiita[:5]}")
912-
913-
msgs.append(f"Some registered samples in Project '{p_name}'"
914-
f" include: {examples_in_qiita}")
915-
916-
if uses_tids:
917-
msgs.append(f"Project '{p_name}' is using tube-ids. You "
918-
"may be using sample names in your file.")
975+
for result in results:
976+
msgs += result['messages']
919977

920978
if msgs:
921979
raise PipelineError('\n'.join(msgs))
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
experiment_design_description well_description library_construction_protocol platform run_center run_date run_prefix sequencing_meth center_name center_project_name instrument_model runid lane sample_project sample_well sample_name index i7_index_id sample_plate index2 i5_index_id raw_reads_r1r2 quality_filtered_reads_r1r2 non_host_reads fraction_passing_quality_filter fraction_non_human old_sample_name
2+
test description 13059.SP331130A04 Knight Lab Kapa HyperPlus Illumina IGM 2017-09-02 SAMPLE sequencing by synthesis UCSD SAMPLE Illumina HiSeq 4000 211021_A00000_0000_SAMPLE 1 NYU_BMS_Melanoma_13059 G17 SP331130A04 GGAAGGAT iTru7_110_08 SAMPLE CACAAGTC iTru5_01_E SP331130A-4
3+
test description 13059.AP481403B02 Knight Lab Kapa HyperPlus Illumina IGM 2017-09-02 SAMPLE sequencing by synthesis UCSD SAMPLE Illumina HiSeq 4000 211021_A00000_0000_SAMPLE 1 NYU_BMS_Melanoma_13059 O8 AP481403B02 TCCGTATG iTru7_111_08 SAMPLE ACAGCTCA iTru5_03_B AP481403B-2
4+
test description 13059.LP127829A02 Knight Lab Kapa HyperPlus Illumina IGM 2017-09-02 SAMPLE sequencing by synthesis UCSD SAMPLE Illumina HiSeq 4000 211021_A00000_0000_SAMPLE 1 NYU_BMS_Melanoma_13059 D24 LP127829A02 CCGGAATT iTru7_112_06 SAMPLE TTCGTACC iTru5_05_A LP127829A-2
5+
test description 13059.BLANK3.3B Knight Lab Kapa HyperPlus Illumina IGM 2017-09-02 SAMPLE sequencing by synthesis UCSD SAMPLE Illumina HiSeq 4000 211021_A00000_0000_SAMPLE 1 NYU_BMS_Melanoma_13059 H18 BLANK3.3B GGAAGGAT iTru7_110_08 SAMPLE CTACAGTG iTru5_02_C BLANK3.3B
6+
test description 13059.EP529635B02 Knight Lab Kapa HyperPlus Illumina IGM 2017-09-02 SAMPLE sequencing by synthesis UCSD SAMPLE Illumina HiSeq 4000 211021_A00000_0000_SAMPLE 1 NYU_BMS_Melanoma_13059 B19 EP529635B02 CGATAGAG iTru7_111_01 SAMPLE AGCGTGTT iTru5_02_F EP529635B-2
7+
test description 13059.EP542578B04 Knight Lab Kapa HyperPlus Illumina IGM 2017-09-02 SAMPLE sequencing by synthesis UCSD SAMPLE Illumina HiSeq 4000 211021_A00000_0000_SAMPLE 1 NYU_BMS_Melanoma_13059 O22 EP542578B04 AGTCTCAC iTru7_112_04 SAMPLE GTTCATGG iTru5_04_C EP542578B-4
8+
test description 13059.EP446602B01 Knight Lab Kapa HyperPlus Illumina IGM 2017-09-02 SAMPLE sequencing by synthesis UCSD SAMPLE Illumina HiSeq 4000 211021_A00000_0000_SAMPLE 1 NYU_BMS_Melanoma_13059 L3 EP446602B01 AACCGTTC iTru7_110_02 SAMPLE TTGCCACT iTru5_01_B EP446602B-1
9+
test description 13059.EP121011B01 Knight Lab Kapa HyperPlus Illumina IGM 2017-09-02 SAMPLE sequencing by synthesis UCSD SAMPLE Illumina HiSeq 4000 211021_A00000_0000_SAMPLE 1 NYU_BMS_Melanoma_13059 B24 EP121011B01 AGTTGGCT iTru7_112_05 SAMPLE TGGCACTA iTru5_04_H EP121011B-1
10+
test description 13059.EP636802A01 Knight Lab Kapa HyperPlus Illumina IGM 2017-09-02 SAMPLE sequencing by synthesis UCSD SAMPLE Illumina HiSeq 4000 211021_A00000_0000_SAMPLE 1 NYU_BMS_Melanoma_13059 I2 EP636802A01 AAGTCGAG iTru7_109_05 SAMPLE TGGCATGT iTru5_05_G EP636802A-1
11+
test description 13059.SP573843A04 Knight Lab Kapa HyperPlus Illumina IGM 2017-09-02 SAMPLE sequencing by synthesis UCSD SAMPLE Illumina HiSeq 4000 211021_A00000_0000_SAMPLE 1 NYU_BMS_Melanoma_13059 F9 SP573843A04 CTTCGTTC iTru7_111_11 SAMPLE CGTTATGC iTru5_03_G SP573843A-4

qp_klp/tests/data/good-sample-prep.tsv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ test description 13059.SP331130A04 Knight Lab Kapa HyperPlus Illumina IGM 2017-0
33
test description 13059.AP481403B02 Knight Lab Kapa HyperPlus Illumina IGM 2017-09-02 SAMPLE sequencing by synthesis UCSD SAMPLE Illumina HiSeq 4000 211021_A00000_0000_SAMPLE 1 NYU_BMS_Melanoma_13059 O8 AP481403B-2 TCCGTATG iTru7_111_08 SAMPLE ACAGCTCA iTru5_03_B
44
test description 13059.LP127829A02 Knight Lab Kapa HyperPlus Illumina IGM 2017-09-02 SAMPLE sequencing by synthesis UCSD SAMPLE Illumina HiSeq 4000 211021_A00000_0000_SAMPLE 1 NYU_BMS_Melanoma_13059 D24 LP127829A-2 CCGGAATT iTru7_112_06 SAMPLE TTCGTACC iTru5_05_A
55
test description 13059.BLANK3.3B Knight Lab Kapa HyperPlus Illumina IGM 2017-09-02 SAMPLE sequencing by synthesis UCSD SAMPLE Illumina HiSeq 4000 211021_A00000_0000_SAMPLE 1 NYU_BMS_Melanoma_13059 H18 BLANK3.3B GGAAGGAT iTru7_110_08 SAMPLE CTACAGTG iTru5_02_C
6-
test description 13059.EP529635B02 Knight Lab Kapa HyperPlus Illumina IGM 2017-09-02 SAMPLE sequencing by synthesis UCSD SAMPLE Illumina HiSeq 4000 211021_A00000_0000_SAMPLE 1 NYU_BMS_Melanoma_13059 B19 EP529635B02 CGATAGAG iTru7_111_01 SAMPLE AGCGTGTT iTru5_02_F
6+
test description 13059.EP529635B02 Knight Lab Kapa HyperPlus Illumina IGM 2017-09-02 SAMPLE sequencing by synthesis UCSD SAMPLE Illumina HiSeq 4000 211021_A00000_0000_SAMPLE 1 NYU_BMS_Melanoma_13059 B19 EP529635B-2 CGATAGAG iTru7_111_01 SAMPLE AGCGTGTT iTru5_02_F
77
test description 13059.EP542578B04 Knight Lab Kapa HyperPlus Illumina IGM 2017-09-02 SAMPLE sequencing by synthesis UCSD SAMPLE Illumina HiSeq 4000 211021_A00000_0000_SAMPLE 1 NYU_BMS_Melanoma_13059 O22 EP542578B-4 AGTCTCAC iTru7_112_04 SAMPLE GTTCATGG iTru5_04_C
88
test description 13059.EP446602B01 Knight Lab Kapa HyperPlus Illumina IGM 2017-09-02 SAMPLE sequencing by synthesis UCSD SAMPLE Illumina HiSeq 4000 211021_A00000_0000_SAMPLE 1 NYU_BMS_Melanoma_13059 L3 EP446602B-1 AACCGTTC iTru7_110_02 SAMPLE TTGCCACT iTru5_01_B
99
test description 13059.EP121011B01 Knight Lab Kapa HyperPlus Illumina IGM 2017-09-02 SAMPLE sequencing by synthesis UCSD SAMPLE Illumina HiSeq 4000 211021_A00000_0000_SAMPLE 1 NYU_BMS_Melanoma_13059 B24 EP121011B-1 AGTTGGCT iTru7_112_05 SAMPLE TGGCACTA iTru5_04_H

qp_klp/tests/data/good-sample-sheet.csv

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,7 @@ Lane,Sample_ID,Sample_Name,Sample_Plate,well_id_384,I7_Index_ID,index,I5_Index_I
438438
1,SP464350A04,SP464350A04,NYU_BMS_Melanoma_13059_P1,A5,iTru7_109_01,CTCGTCTT,iTru5_05_B,AAGCATCG,NYU_BMS_Melanoma_13059,pool2,SP464350A04
439439
1,C9,C9,NYU_BMS_Melanoma_13059_P1,C5,iTru7_109_02,CGAACTGT,iTru5_06_B,TACTCCAG,NYU_BMS_Melanoma_13059,pool1,C9
440440
1,ep256643b01,ep256643b01,NYU_BMS_Melanoma_13059_P1,E5,iTru7_109_03,CATTCGGT,iTru5_07_B,GATACCTG,NYU_BMS_Melanoma_13059,pool2,ep256643b01
441-
1,EP121011B01,EP121011B01,NYU_BMS_Melanoma_13059_P1,G5,iTru7_109_04,TCGGTTAC,iTru5_08_B,ACCTCTTC,NYU_BMS_Melanoma_13059,pool1,EP121011B01
441+
1,EP121011B01,EP121011B-1,NYU_BMS_Melanoma_13059_P1,G5,iTru7_109_04,TCGGTTAC,iTru5_08_B,ACCTCTTC,NYU_BMS_Melanoma_13059,pool1,EP121011B-1
442442
1,AP616837B04,AP616837B04,NYU_BMS_Melanoma_13059_P1,I5,iTru7_109_05,AAGTCGAG,iTru5_09_B,ACGGACTT,NYU_BMS_Melanoma_13059,pool2,AP616837B04
443443
1,SP506933A04,SP506933A04,NYU_BMS_Melanoma_13059_P1,K5,iTru7_109_06,TATCGGTC,iTru5_10_B,CATGTGTG,NYU_BMS_Melanoma_13059,pool1,SP506933A04
444444
1,EP159695B01,EP159695B01,NYU_BMS_Melanoma_13059_P1,M5,iTru7_109_07,TATTCGCC,iTru5_11_B,TGCCTCAA,NYU_BMS_Melanoma_13059,pool2,EP159695B01
@@ -492,7 +492,7 @@ Lane,Sample_ID,Sample_Name,Sample_Plate,well_id_384,I7_Index_ID,index,I5_Index_I
492492
1,EP320438B01,EP320438B01,NYU_BMS_Melanoma_13059_P1,M17,iTru7_113_07,AAGTGTCG,iTru5_11_F,ACAACAGC,NYU_BMS_Melanoma_13059,pool2,EP320438B01
493493
1,SP612495A04,SP612495A04,NYU_BMS_Melanoma_13059_P1,O17,iTru7_113_08,GAACGCTT,iTru5_12_F,TGTGGCTT,NYU_BMS_Melanoma_13059,pool1,SP612495A04
494494
1,EP446604B03,EP446604B03,NYU_BMS_Melanoma_13059_P1,A19,iTru7_113_09,TCAAGGAC,iTru5_01_G,GTTCCATG,NYU_BMS_Melanoma_13059,pool2,EP446604B03
495-
1,EP446602B01,EP446602B01,NYU_BMS_Melanoma_13059_P1,C19,iTru7_113_10,TCAACTGG,iTru5_02_G,TGGATGGT,NYU_BMS_Melanoma_13059,pool1,EP446602B01
495+
1,EP446602B01,EP446602B-1,NYU_BMS_Melanoma_13059_P1,C19,iTru7_113_10,TCAACTGG,iTru5_02_G,TGGATGGT,NYU_BMS_Melanoma_13059,pool1,EP446602B-1
496496
1,EP182243B02,EP182243B02,NYU_BMS_Melanoma_13059_P1,E19,iTru7_113_11,GGTTGATG,iTru5_03_G,GCATAACG,NYU_BMS_Melanoma_13059,pool2,EP182243B02
497497
1,EP333541B04,EP333541B04,NYU_BMS_Melanoma_13059_P1,G19,iTru7_113_12,AAGGACAC,iTru5_04_G,TCGAACCT,NYU_BMS_Melanoma_13059,pool1,EP333541B04
498498
1,EP238034B01,EP238034B01,NYU_BMS_Melanoma_13059_P1,I19,iTru7_114_01,TTGATCCG,iTru5_05_G,ACATGCCA,NYU_BMS_Melanoma_13059,pool2,EP238034B01
@@ -673,7 +673,7 @@ Lane,Sample_ID,Sample_Name,Sample_Plate,well_id_384,I7_Index_ID,index,I5_Index_I
673673
1,EP554501B04,EP554501B04,NYU_BMS_Melanoma_13059_P3,H15,iTru7_304_08,GGTCAGAT,iTru5_112_E,AGTGCATC,NYU_BMS_Melanoma_13059,pool1,EP554501B04
674674
1,EP542577B04,EP542577B04,NYU_BMS_Melanoma_13059_P3,J15,iTru7_304_09,TCGTGGAT,iTru5_101_F,TTGGACTG,NYU_BMS_Melanoma_13059,pool2,EP542577B04
675675
1,EP487995B04,EP487995B04,NYU_BMS_Melanoma_13059_P3,L15,iTru7_304_10,CGTGTGTA,iTru5_102_F,GTCGATTG,NYU_BMS_Melanoma_13059,pool1,EP487995B04
676-
1,EP542578B04,EP542578B04,NYU_BMS_Melanoma_13059_P3,N15,iTru7_304_11,GTGTCTGA,iTru5_103_F,GGCATTCT,NYU_BMS_Melanoma_13059,pool2,EP542578B04
676+
1,EP542578B04,EP542578B-4,NYU_BMS_Melanoma_13059_P3,N15,iTru7_304_11,GTGTCTGA,iTru5_103_F,GGCATTCT,NYU_BMS_Melanoma_13059,pool2,EP542578B-4
677677
1,EP573310B01,EP573310B01,NYU_BMS_Melanoma_13059_P3,P15,iTru7_304_12,GAATCGTG,iTru5_104_F,TGGTATCC,NYU_BMS_Melanoma_13059,pool1,EP573310B01
678678
1,EP244366B01,EP244366B01,NYU_BMS_Melanoma_13059_P3,B17,iTru7_305_01,GCGATAGT,iTru5_105_F,GGCAAGTT,NYU_BMS_Melanoma_13059,pool2,EP244366B01
679679
1,EP533389B03,EP533389B03,NYU_BMS_Melanoma_13059_P3,D17,iTru7_305_02,GGCTATTG,iTru5_106_F,GTCTGAGT,NYU_BMS_Melanoma_13059,pool1,EP533389B03
@@ -778,7 +778,7 @@ Lane,Sample_ID,Sample_Name,Sample_Plate,well_id_384,I7_Index_ID,index,I5_Index_I
778778
1,SP388683A02,SP388683A02,NYU_BMS_Melanoma_13059_P4,J18,iTru7_105_05,TCTCTTCC,iTru5_121_F,GATGTCGA,NYU_BMS_Melanoma_13059,pool2,SP388683A02
779779
1,SP232309A01,SP232309A01,NYU_BMS_Melanoma_13059_P4,L18,iTru7_105_06,AGTGTTGG,iTru5_122_F,GAAGTGCT,NYU_BMS_Melanoma_13059,pool1,SP232309A01
780780
1,EP899038A04,EP899038A04,NYU_BMS_Melanoma_13059_P4,N18,iTru7_105_07,TGGCATGT,iTru5_123_F,TCACTCGA,NYU_BMS_Melanoma_13059,pool2,EP899038A04
781-
1,EP636802A01,EP636802A01,NYU_BMS_Melanoma_13059_P4,P18,iTru7_105_08,AGAAGCGT,iTru5_124_F,ACGCAGTA,NYU_BMS_Melanoma_13059,pool1,EP636802A01
781+
1,EP636802A01,EP636802A-1,NYU_BMS_Melanoma_13059_P4,P18,iTru7_105_08,AGAAGCGT,iTru5_124_F,ACGCAGTA,NYU_BMS_Melanoma_13059,pool1,EP636802A-1
782782
1,AP046327B02,AP046327B02,NYU_BMS_Melanoma_13059_P4,B20,iTru7_105_09,AGCGGAAT,iTru5_113_G,ATCTCCTG,NYU_BMS_Melanoma_13059,pool2,AP046327B02
783783
1,EP905975A04,EP905975A04,NYU_BMS_Melanoma_13059_P4,D20,iTru7_105_10,TAACCGGT,iTru5_114_G,ATGTGGAC,NYU_BMS_Melanoma_13059,pool1,EP905975A04
784784
1,SP410796A02,SP410796A02,NYU_BMS_Melanoma_13059_P4,F20,iTru7_105_11,CATGGAAC,iTru5_115_G,CAAGCCAA,NYU_BMS_Melanoma_13059,pool2,SP410796A02

0 commit comments

Comments
 (0)