package org.seqcode.data.pegr; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; /** * Represents a sample in the PughLab DB * @author mahony * * CREATE TABLE `PughLabSampleInfo` ( `SAMPLE_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, `PROJECT_ID` char(40) DEFAULT NULL, `RUN_ID` char(10) DEFAULT NULL, `NAME` char(255) DEFAULT NULL, `TARGET` char(40) DEFAULT NULL, `ANTIBODY` char(40) DEFAULT NULL, `ANTIBODY_VOLUME` char(10) DEFAULT NULL, `STRAIN` char(40) DEFAULT NULL, `MUTATION` char(40) DEFAULT NULL, `MEDIA` char(40) DEFAULT NULL, `PERTURB` char(40) DEFAULT NULL, `ASSAY_CODE` char(10) DEFAULT NULL, `REP_CODE` char(10) DEFAULT NULL, `USERID` char(10) DEFAULT NULL, `SEQ_DATE` char(10) DEFAULT NULL, `UNIQ_ID` char(40) NOT NULL DEFAULT '', `PRI_GENOME` char(20) DEFAULT NULL, `SEQ_BY` char(20) DEFAULT NULL, `COMMENT` blob, `REF_GENOME` char(80) DEFAULT NULL, `SUCCESS` enum('Good','Failed','Pending') DEFAULT 'Pending', `INDEX_COUNT` int(11) unsigned NOT NULL DEFAULT '0', `PUBLIC_FLAG` enum('Y','N') DEFAULT 'N', `SRA_ID` char(15) DEFAULT NULL, PRIMARY KEY (`SAMPLE_ID`,`UNIQ_ID`) ) ENGINE=MyISAM AUTO_INCREMENT=7106 DEFAULT CHARSET=utf8 * * */ public class PughLabSampleInfo implements Comparable<PughLabSampleInfo>{ private int sample_id; private String project_id; private String run_id; private String name; private String target; private String antibody; private String antibody_volume; private String strain; private String mutation; private String media; private String perturb; private String assay_code; private String rep_code; private String userid; private String seq_date; private String uniq_id; private String pri_genome; private String seq_by; private String comment; private String ref_genome; private String success; private int index_count; private String public_flag; private String sra_id; public PughLabSampleInfo(ResultSet rs) throws SQLException { sample_id = rs.getInt(1); project_id = rs.getString(2); run_id = rs.getString(3); name = rs.getString(4); target = rs.getString(5); antibody = rs.getString(6); antibody_volume = rs.getString(7); strain = rs.getString(8); mutation = rs.getString(9); media = rs.getString(10); perturb = rs.getString(11); assay_code = rs.getString(12); rep_code = rs.getString(13); userid = rs.getString(14); seq_date = rs.getString(15); uniq_id = rs.getString(16); pri_genome = rs.getString(17); seq_by = rs.getString(18); comment = rs.getString(19); ref_genome = rs.getString(20); success = rs.getString(21); index_count = rs.getInt(22); public_flag = rs.getString(23); sra_id = rs.getString(24); } public int getSampleID() {return sample_id;} public String getProjectID() {return project_id;} public String getRunID() {return run_id;} public String getName() {return name;} public String getTarget() {return target;} public String getAntibody() {return antibody;} public String getAntibodyVol() {return antibody_volume;} public String getStrain() {return strain;} public String getMutation() {return mutation;} public String getMedia() { return media;} public String getPerturb() {return perturb;} public String getAssayCode() {return assay_code;} public String getRepCode() {return rep_code;} public String getUserID() {return userid;} public String getSeqDate() {return seq_date;} public String getUniqID() {return uniq_id;} public String getGenome() {return pri_genome;} public String getSeqBy() {return seq_by;} public String getComment() {return comment;} public String getRefGenome() {return ref_genome;} public String getSuccess() {return success;} public int getIndexCount() {return index_count;} public String getPublicFlag() {return public_flag;} public String getSRAID() {return sra_id;} /** * Remake name here - as I'm not sure if database entries always reflect updates */ public String buildName(){ String ab = antibody_volume==null ? antibody : antibody+"-"+antibody_volume; String repID = assay_code+rep_code; return target+"_"+ab+"_"+strain+"_"+mutation+"_"+media+"_"+perturb+"_"+repID+"_"+userid+"-"+seq_date+"_"+uniq_id; } /** * Returns Pugh Lab format experiment name */ public String toString() { return buildName(); } //Below are some SeqData naming translations public String getSeqDataTargetName() { String ab = antibody_volume==null ? antibody : antibody+"-"+antibody_volume; String tname = target+"_"+ab; while(tname.endsWith("_-")){ tname = tname.substring(0,tname.lastIndexOf("_-"));} while(tname.startsWith("-_")){ tname = tname.replaceFirst("-_", "");} return tname; } public String getSeqDataConditionName() { String cname = strain+"_"+mutation+"_"+media+"_"+perturb; while(cname.endsWith("_-")){ cname = cname.substring(0,cname.lastIndexOf("_-"));} while(cname.startsWith("-_")){ cname = cname.replaceFirst("-_", "");} return cname; } public String getSeqDataCelllineName() { String cname= strain+"_"+mutation; while(cname.endsWith("_-")){ cname = cname.substring(0,cname.lastIndexOf("_-"));} while(cname.startsWith("-_")){ cname = cname.replaceFirst("-_", "");} return cname; } public String getSeqDataReplicateName() { String repID = assay_code+rep_code; String rname = repID+"_"+userid+"-"+seq_date+"_"+uniq_id; while(rname.endsWith("_-")){ rname = rname.substring(0,rname.lastIndexOf("_-"));} while(rname.startsWith("-_")){ rname = rname.replaceFirst("-_", "");} return rname; } public String convertAssayCode(){ String assay = "UNKNOWN"; if(assay_code.equals("XO")){ assay = "CHIPEXO"; }else if(assay_code.equals("CS")){ assay = "CHIPSEQ"; }else if(assay_code.equals("IN") || assay_code.equals("NA")){ assay = "INPUT"; }else if(assay_code.equals("KS")){ assay = "KWIKSEQ"; }else if(assay_code.equals("BS")){ assay = "BISSEQ"; }else if(assay_code.equals("CT")){ assay = "CHIPTOPO"; }else if(assay_code.equals("PS")){ assay = "PERMSEQ"; }else if(assay_code.equals("MN")){ assay = "MNASECHIPSEQ"; } if(target.toLowerCase().matches("no-tag") || target.toLowerCase().matches("no-ab") || target.toLowerCase().matches("None") || target.toLowerCase().matches("IgG")){ assay = "CONTROL"; } return assay; } public int compareTo(PughLabSampleInfo o){ //String name = buildName(); //String oname = o.buildName(); return uniq_id.compareTo(o.uniq_id); } public boolean equals(Object o) { if(!(o instanceof PughLabSampleInfo)) { return false; } PughLabSampleInfo c = (PughLabSampleInfo)o; if(sample_id != c.sample_id) { return false; } return true; } public int hashCode() { int code = 17; code += sample_id; code *= 37; return code; } public static PreparedStatement createLoadAll(java.sql.Connection c) throws SQLException { return c.prepareStatement("select sample_id, project_id, run_id, name, target, antibody, antibody_volume, strain, mutation, media, perturb, assay_code, rep_code, userid, seq_date, uniq_id, pri_genome, seq_by, comment, ref_genome, success, index_count, public_flag, sra_id " + "from PughLabSampleInfo"); } public static PreparedStatement createLoadBySampleID(java.sql.Connection c) throws SQLException { return c.prepareStatement("select sample_id, project_id, run_id, name, target, antibody, antibody_volume, strain, mutation, media, perturb, assay_code, rep_code, userid, seq_date, uniq_id, pri_genome, seq_by, comment, ref_genome, success, index_count, public_flag, sra_id " + "from PughLabSampleInfo where sample_id=?"); } public static PreparedStatement createLoadByUniqID(java.sql.Connection c) throws SQLException { return c.prepareStatement("select sample_id, project_id, run_id, name, target, antibody, antibody_volume, strain, mutation, media, perturb, assay_code, rep_code, userid, seq_date, uniq_id, pri_genome, seq_by, comment, ref_genome, success, index_count, public_flag, sra_id " + "from PughLabSampleInfo where uniqid=?"); } }