def process_primer(self): source = UCSCSequenceSource() left_padding = 1000 right_padding = 1000 sequences = source.sequences_for_primers( self.form_result["primer_fwd"], self.form_result["primer_rev"], left_padding, right_padding ) # TODO: better selective update method c.primer_fwd = self.form_result["primer_fwd"] c.primer_rev = self.form_result["primer_rev"] c.left_padding = left_padding c.right_padding = right_padding c.sequences = sequences for seq in c.sequences: seq.snps = self._get_snps(seq.chromosome, seq.start, seq.end) self.__add_sequence_primer_display_attrs( seq, primer_fwd=self.form_result["primer_fwd"], primer_rev=self.form_result["primer_rev"] ) assayutil.set_amplicon_snps(c.sequences) c.assay_form = h.LiteralForm( value={"primer_fwd": self.form_result["primer_fwd"], "primer_rev": self.form_result["primer_rev"]} ) return render("/assay/primer_output.html")
def process_location(self): source = UCSCSequenceSource() left_padding = 1000 right_padding = 1000 sequence = source.sequence_around_loc( self.form_result["chromosome"], self.form_result["location"], self.form_result["width"], left_padding, right_padding, ) # TODO: better selective update method c.chromosome = self.form_result["chromosome"] c.location = self.form_result["location"] c.width = self.form_result["width"] c.left_padding = left_padding c.right_padding = right_padding c.sequence = sequence c.sequences = [sequence] for seq in c.sequences: seq.snps = self._get_snps(seq.chromosome, seq.start, seq.end) seq.positive_display_sequence = seq.amplicon.positive_strand_sequence.lower() seq.negative_display_sequence = seq.amplicon.negative_strand_sequence.lower() assayutil.set_amplicon_snps(c.sequences) c.assay_form = h.LiteralForm() return render("/assay/location_output.html")
def process_snp(self): snp_source = HG19Source() seq_source = UCSCSequenceSource() left_padding = 1000 right_padding = 1000 snps = snp_source.snps_by_rsid(self.form_result["snp_rsid"]) c.assay_form = h.LiteralForm() c.snp_rsid = self.form_result["snp_rsid"] c.width = self.form_result["width"] # override if not snps or len(snps) == 0: # TODO: figure out how to make this appear on the field error instead session["flash"] = "Could not find a SNP with the name %s" % self.form_result["snp_rsid"] session["flash_class"] = "error" session.save() return render("/assay/snp_output.html") sequences = [] for snp in snps: chromStart = snp["chromStart"] chromEnd = snp["chromEnd"] # handle insertions and single variations, normally the chromStart # refers to the gap just before the base # if snp["chromStart"] == snp["chromEnd"]: chromStart = chromEnd else: chromStart += 1 sequence = seq_source.sequence_around_region( snp["chrom"][3:], chromStart, chromEnd, self.form_result["width"], left_padding, right_padding ) # sequence.snps = self._get_snps(sequence.chromosome, sequence.start, sequence.end) sequences.append(sequence) c.left_padding = left_padding c.right_padding = right_padding c.sequences = sequences for seq in c.sequences: seq.snps = self._get_snps(seq.chromosome, seq.start, seq.end) seq.positive_display_sequence = seq.amplicon.positive_strand_sequence.lower() seq.negative_display_sequence = seq.amplicon.negative_strand_sequence.lower()[::-1] assayutil.set_amplicon_snps(c.sequences) return render("/assay/snp_output.html")
def create(self): assay = Assay() for k, v in self.form_result.items(): if k not in ("seq_padding_pos5", "seq_padding_pos3", "sequences"): setattr(assay, k, v) # avoids double lookup if lookup has already been done if self.form_result["sequences"]: # add 1000-padding sequence and snps to each. seq_source = UCSCSequenceSource() snp_source = HG19Source() for seq in self.form_result["sequences"]: # TODO: just call sequences_for_assay here? logic the same. if not seq["positive_sequence"] or seq["negative_sequence"]: sequence = seq_source.sequence( seq["chromosome"], seq["start_pos"] - self.form_result["seq_padding_pos5"], seq["end_pos"] + self.form_result["seq_padding_pos3"], ) cache_rec = HG19AssayCache( chromosome=sequence.chromosome, start_pos=seq["start_pos"], end_pos=seq["end_pos"], seq_padding_pos5=self.form_result["seq_padding_pos5"], seq_padding_pos3=self.form_result["seq_padding_pos3"], positive_sequence=sequence.positive_strand_sequence, ) else: cache_rec = HG19AssayCache( chromosome=seq["chromosome"], start_pos=seq["start_pos"], end_pos=seq["end_pos"], seq_padding_pos5=seq["padding_pos5"], seq_padding_pos3=seq["padding_pos3"], positive_sequence=seq["positive_sequence"] or None, negative_sequence=seq["negative_sequence"] or None, ) for snp in seq["snps"]: cache_rec.snps.append( SNP131AssayCache( bin=snp["bin"], chrom=snp["chrom"], chromStart=snp["chromStart"], chromEnd=snp["chromEnd"], name=snp["name"], score=snp["score"], strand=snp["strand"], refNCBI=snp["refNCBI"], refUCSC=snp["refUCSC"], observed=snp["observed"], molType=snp["molType"], class_=snp["class_"], valid=snp["valid"], avHet=snp["avHet"], avHetSE=snp["avHetSE"], func=snp["func"], locType=snp["locType"], weight=snp["weight"], ) ) assay.cached_sequences.append(cache_rec) Session.add(assay) self.__update_tms(assay) Session.commit() redirect(url(controller="assay", action="view", id=assay.id))