def parseShortVariant()

in clns-eTarget_ingest/genomicdata_json.py [0:0]


    def parseShortVariant(self, alteration,  measrumentgenepanelid, tar_id, updateSelection, prev_gene_panel_id):            
        #parse the sections with short variants and add to db
        print('parseShortVariant')
        allelefraction = None
        cdseffect = None
        depth = None
        gene = None
        position = None
        proteineffect = None
        status = None
        transcript = None
        classification = None
        subclonal = None
        
        if not 'gene' in alteration:
            self.log.systemStatusUpdate(self.filename, 'Genomic', self.log.timestamp(), 'Error: gene field is required in short variant alterations')
            self.log.logMessage(self.filename + ' gene field is required in short variant alterations')
            self.errorflag=True
            raise GenomicDataException("gene field is required in short variant alterations")
        gene=alteration['gene']
        if len(gene.strip())==0:
            self.log.systemStatusUpdate(self.filename, 'Genomic', self.log.timestamp(), 'Error: gene field needs a value in short variant alterations')
            self.log.logMessage(self.filename + ' gene field needs a value in short variant alterations')
            self.errorflag=True
            raise GenomicDataException("gene field needs a value in short variant alterations")
        if not 'proteinChange' in alteration:
            self.log.systemStatusUpdate(self.filename, 'Genomic', self.log.timestamp(), 'Error: proteinChange field is required in short variant alterations')
            self.log.logMessage(self.filename + ' proteinChange field is required in short variant alterations')
            self.errorflag=True
            raise GenomicDataException("proteinChange field is required in short variant alterations")
        proteineffect=alteration['proteinChange']
        if len(proteineffect.strip())==0:
            self.log.systemStatusUpdate(self.filename, 'Genomic', self.log.timestamp(), 'Error: proteinChange field needs a value in short variant alterations')
            self.log.logMessage(self.filename + ' proteinChange field needs a value in short variant alterations')
            self.errorflag=True
            raise GenomicDataException("proteinChange field needs a value in short variant alterations")
        if not 'cdsChange' in alteration:
            self.log.systemStatusUpdate(self.filename, 'Genomic', self.log.timestamp(), 'Error: cdsChange field is required in short variant alterations')
            self.log.logMessage(self.filename + ' cdsChange field is required in short variant alterations')
            self.errorflag=True
            raise GenomicDataException("cdsChange field is required in short variant alterations")
        cdseffect=alteration['cdsChange']
        if len(cdseffect.strip())==0:
            self.log.systemStatusUpdate(self.filename, 'Genomic', self.log.timestamp(), 'Error: cdsChange field needs a value in short variant alterations')
            self.log.logMessage(self.filename + ' cdsChange field needs a value in short variant alterations')
            self.errorflag=True
            raise GenomicDataException("cdsChange field needs a value in short variant alterations")
        if not 'readDepth' in alteration:
            self.log.systemStatusUpdate(self.filename, 'Genomic', self.log.timestamp(), 'Error: readDepth field is required in short variant alterations')
            self.log.logMessage(self.filename + ' readDepth field is required in short variant alterations')
            self.errorflag=True
            raise GenomicDataException("readDepth field is required in short variant alterations")
        depth=alteration['readDepth']
        if not 'position' in alteration:
            self.log.systemStatusUpdate(self.filename, 'Genomic', self.log.timestamp(), 'Error: position field is required in short variant alterations')
            self.log.logMessage(self.filename + ' position field is required in short variant alterations')
            self.errorflag=True
            raise GenomicDataException("position field is required in short variant alterations")
        position = alteration['position']
        if len(position.strip())==0:
            self.log.systemStatusUpdate(self.filename, 'Genomic', self.log.timestamp(), 'Error: position field needs a value in short variant alterations')
            self.log.logMessage(self.filename + ' position field needs a value in short variant alterations')
            self.errorflag=True
            raise GenomicDataException("position field needs a value in short variant alterations")
        
        if 'status' in alteration:
            status=alteration['status']
        if 'transcript' in alteration:
            transcript=alteration['transcript']
        
        if not 'variantAlleleFrequency%' in alteration:
            self.log.systemStatusUpdate(self.filename, 'Genomic', self.log.timestamp(), 'Error: variantAlleleFrequency% field is required in short variant alterations')
            self.log.logMessage(self.filename + ' variantAlleleFrequency% field is required in short variant alterations')
            self.errorflag=True
            raise GenomicDataException("variantAlleleFrequency% field is required in short variant alterations")  
        allelefraction=alteration['variantAlleleFrequency%']
        
        
        if not 'functionalEffect' in alteration:
            self.log.systemStatusUpdate(self.filename, 'Genomic', self.log.timestamp(), 'Error: functionalEffect field is required in short variant alterations')
            self.log.logMessage(self.filename + ' functionalEffect field is required in short variant alterations')
            self.errorflag=True
            raise GenomicDataException("functionalEffect field is required in short variant alterations")
        classification=alteration['functionalEffect']
        if len(classification.strip())==0:
            self.log.systemStatusUpdate(self.filename, 'Genomic', self.log.timestamp(), 'Error: functionalEffect field needs a value in short variant alterations')
            self.log.logMessage(self.filename + ' functionalEffect field needs a value in short variant alterations')
            self.errorflag=True
            raise GenomicDataException("functionalEffect field needs a value in short variant alterations")
        
        if 'subclonal' in alteration:
            subclonal=alteration['subclonal']
            if not isinstance(subclonal, bool):
                self.log.systemStatusUpdate(self.filename, 'Genomic', self.log.timestamp(), 'Error: subclonal field needs to be boolean in short variant alterations')
                self.log.logMessage(self.filename + ' subclonal field needs to be boolean in short variant alterations')
                self.errorflag=True
                raise GenomicDataException("subclonal field needs to be boolean in short variant alterations")
            subclonal=str(subclonal)
        print(gene + ' ' + position + ' ' + cdseffect)
        gene_id = self.getGene(gene)
        
        #insert into measurement_gene_variant
        addShortVariant = "INSERT INTO MEASUREMENT_GENE_VARIANT (measurement_gene_panel_id, gene_concept_id, cdna_change, read_depth, variant_allele_frequency, position, amino_acid_change, transcript, status, variant_type, functional_effect, subclonal) VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
        cursor = self.conn.cursor()
        cursor.execute(addShortVariant,(str(measrumentgenepanelid), str(gene_id), cdseffect, depth, allelefraction, position, proteineffect, transcript, status, 'short_variant', classification, subclonal))
        rowid=cursor.lastrowid
        if updateSelection:
            #check whether was ticked before
            findPreviouseSelectionQuery="select type from SELECTED_GENE_VARIANT FULL OUTER JOIN MEASUREMENT_GENE_VARIANT on \
            MEASUREMENT_GENE_VARIANT.measurement_gene_variant_id=SELECTED_GENE_VARIANT.measurement_gene_variant_id \
            FULL OUTER JOIN MEASUREMENT_GENE_PANEL on MEASUREMENT_GENE_PANEL.measurement_gene_panel_id=MEASUREMENT_GENE_VARIANT.measurement_gene_panel_id \
            where person_id=(SELECT person_id FROM PERSON WHERE person.target_id = '"+tar_id+"') and \
            MEASUREMENT_GENE_PANEL.measurement_gene_panel_id=" +str(prev_gene_panel_id)+ " and gene_concept_id=(SELECT TOP 1 gene_concept_id FROM CONCEPT_GENE \
            WHERE gene_name = '"+gene+"') and amino_acid_change = '"+str(proteineffect)+"' and cdna_change ='"+str(cdseffect)+"';"
            findPreviousSelectionCursor = self.conn.cursor()
            findPreviousSelectionCursor.execute(findPreviouseSelectionQuery)
            row=findPreviousSelectionCursor.fetchone()
            findPreviousSelectionCursor.close()
            if row is not None:
                #was previously selected
                insertSelectionQuery="insert into SELECTED_GENE_VARIANT (person_id, measurement_gene_variant_id, type) values((SELECT person_id FROM PERSON WHERE person.target_id = '"+tar_id+"'),"+str(rowid)+",'"+row[0]+"');"
                insertSelectionCursor = self.conn.cursor()
                insertSelectionCursor.execute(insertSelectionQuery)
                insertSelectionCursor.close()
        return