INNER CODE UNIT · Python
EXTRACT_BLAST_HITS
TobyBaril/EarlGrey · scripts/extract_align.py:56
def EXTRACT_BLAST_HITS(GENOME, BLAST, LBUFFER, RBUFFER, HITNUM):
##Read in blast data
BLASTDF = pd.read_table(BLAST, sep='\t', names=['QUERYNAME', 'SCAFFOLD', 'C', 'D', 'E', 'F', 'QUERYSTART', 'QUERYSTOP', 'SCAFSTART', 'SCAFSTOP', 'E-VALUE', 'BITSCORE'])
##Convert to bed format
BLASTBED = BLASTDF[['SCAFFOLD', 'SCAFSTART', 'SCAFSTOP', 'QUERYNAME', 'E-VALUE', 'BITSCORE']]
BLASTBED.insert(5, 'STRAND', '+')
BLASTBED.loc[BLASTBED.SCAFSTOP < BLASTBED.SCAFSTART, 'STRAND'] = '-'
BLASTBED.SCAFSTART, BLASTBED.SCAFSTOP = np.where(BLASTBED.SCAFSTART > BLASTBED.SCAFSTOP, [BLASTBED.SCAFSTOP, BLASTBED.SCAFSTART], [BLASTBED.SCAFSTART, BLASTBED.SCAFSTOP])
##Generate list of query names
QUERYLIST = BLASTBED.QUERYNAME.unique()
LOGGER.info('There are ' + str(len(QUERYLIST)) + ' consensus sequences to process')
# COUNTER = 1
##Sort subsets of df based on query names, keep the top BUFFER hits, make bedfiles, extract, and combine
for QUERY in QUERYLIST:
# LOGGER.info('Extracting for TE: ' + str(COUNTER))
QUERYFRAME = BLASTBED[BLASTBED['QUERYNAME'] == QUERY]
QUERYFRAME = QUERYFRAME.sort_values(by=['E-VALUE', 'BITSCORE'], ascending=[True, False])
QUERYFRAME = QUERYFRAME.head(HITNUM)