Skip to content

Commit

Permalink
Misc
Browse files Browse the repository at this point in the history
  • Loading branch information
cmdcolin committed Sep 7, 2023
1 parent fd03834 commit 0050666
Show file tree
Hide file tree
Showing 3 changed files with 95 additions and 75 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,10 @@ export default class PAFAdapter extends BaseFeatureDataAdapter {
return assemblyNames
}

public async hasDataForRefName() {
return true
}

async getRefNames(opts: BaseOptions & { regions?: Region[] } = {}) {
const r1 = opts.regions?.[0].assemblyName
if (!r1) {
Expand Down Expand Up @@ -87,7 +91,7 @@ export default class PAFAdapter extends BaseFeatureDataAdapter {
const refName = r.qname.slice(1)
const start = r.qstart
const end = r.qend
const mateName = r.tname.slice(1)
const mateName = r.tname
const mateStart = r.tstart
const mateEnd = r.tend

Expand Down
155 changes: 81 additions & 74 deletions plugins/linear-comparative-view/src/LGVSyntenyDisplay/model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,86 +44,93 @@ function findPosInCigar(cigar: string[], startX: number) {
return [featX, mateX]
}

const floor = (n: number) => Math.floor(n)

async function navToSynteny(feature: Feature, self: IAnyStateTreeNode) {
const session = getSession(self)
const track = getContainingTrack(self)
const view = getContainingView(self)
const reg = view.dynamicBlocks.contentBlocks[0]
const cigar = feature.get('CIGAR')
const strand = feature.get('strand')
const regStart = reg.start
const regEnd = reg.end
const featStart = feature.get('start')
const featEnd = feature.get('end')
const mate = feature.get('mate')
const mateStart = mate.start
const mateEnd = mate.end
const mateAsm = mate.assemblyName
const mateRef = mate.refName
const featAsm = reg.assemblyName
const featRef = reg.refName
try {
const track = getContainingTrack(self)
const view = getContainingView(self)
const reg = view.dynamicBlocks.contentBlocks[0]
const cigar = feature.get('CIGAR')
const strand = feature.get('strand')
const inverted = strand === -1
const regStart = reg.start
const regEnd = reg.end
const featStart = feature.get('start')
const featEnd = feature.get('end')
const mate = feature.get('mate')
const mateStart = mate.start
const mateEnd = mate.end
const mateAsm = mate.assemblyName
const mateRef = mate.refName
const featAsm = reg.assemblyName
const featRef = reg.refName

let rMateStart: number
let rMateEnd: number
let rFeatStart: number
let rFeatEnd: number
let rMateStart: number
let rMateEnd: number
let rFeatStart: number
let rFeatEnd: number

if (cigar) {
const p = parseCigar(cigar)
const [fStartX, mStartX] = findPosInCigar(p, regStart - featStart)
const [fEndX, mEndX] = findPosInCigar(p, regEnd - featStart)
if (cigar) {
const p = parseCigar(cigar)
const [fStartX, mStartX] = findPosInCigar(p, regStart - featStart)
const [fEndX, mEndX] = findPosInCigar(p, regEnd - featStart)

// avoid multiply by 0 with strand undefined
const flipper = strand === -1 ? -1 : 1
rFeatStart = featStart + fStartX
rFeatEnd = featStart + fEndX
rMateStart = (strand === -1 ? mateEnd : mateStart) + mStartX * flipper
rMateEnd = (strand === -1 ? mateEnd : mateStart) + mEndX * flipper
} else {
rFeatStart = featStart
rFeatEnd = featEnd
rMateStart = mateStart
rMateEnd = mateEnd
}
const trackId = track.configuration.trackId
// avoid multiply by 0 with strand undefined
const flipper = strand === -1 ? -1 : 1
rFeatStart = featStart + fStartX
rFeatEnd = featStart + fEndX
rMateStart = (strand === -1 ? mateEnd : mateStart) + mStartX * flipper
rMateEnd = (strand === -1 ? mateEnd : mateStart) + mEndX * flipper
} else {
rFeatStart = featStart
rFeatEnd = featEnd
rMateStart = mateStart
rMateEnd = mateEnd
}
const trackId = track.configuration.trackId

const view2 = session.addView('LinearSyntenyView', {
type: 'LinearSyntenyView',
views: [
{
id: `${Math.random()}`,
type: 'LinearGenomeView',
hideHeader: true,
},
{
id: `${Math.random()}`,
type: 'LinearGenomeView',
hideHeader: true,
},
],
tracks: [
{
configuration: trackId,
type: 'SyntenyTrack',
displays: [
{
type: 'LinearSyntenyDisplay',
configuration: `${trackId}-LinearSyntenyDisplay`,
},
],
},
],
}) as LSV
const f = (n: number) => Math.floor(n)
const l1 = `${featRef}:${f(rFeatStart)}-${f(rFeatEnd)}`
const m1 = Math.min(rMateStart, rMateEnd)
const m2 = Math.max(rMateStart, rMateEnd)
const l2 = `${mateRef}:${f(m1)}-${f(m2)}${strand === -1 ? '[rev]' : ''}`
await when(() => view2.width !== undefined)
await Promise.all([
view2.views[0].navToLocString(l1, featAsm),
view2.views[1].navToLocString(l2, mateAsm),
])
const view2 = session.addView('LinearSyntenyView', {
type: 'LinearSyntenyView',
views: [
{
id: `${Math.random()}`,
type: 'LinearGenomeView',
hideHeader: true,
},
{
id: `${Math.random()}`,
type: 'LinearGenomeView',
hideHeader: true,
},
],
tracks: [
{
configuration: trackId,
type: 'SyntenyTrack',
displays: [
{
type: 'LinearSyntenyDisplay',
configuration: `${trackId}-LinearSyntenyDisplay`,
},
],
},
],
}) as LSV
const l1 = `${featRef}:${floor(rFeatStart)}-${floor(rFeatEnd)}`
const m1 = Math.min(rMateStart, rMateEnd)
const m2 = Math.max(rMateStart, rMateEnd)
const l2 = `${mateRef}:${floor(m1)}-${floor(m2)}${inverted ? '[rev]' : ''}`
await when(() => view2.width !== undefined)
await Promise.all([
view2.views[0].navToLocString(l1, featAsm),
view2.views[1].navToLocString(l2, mateAsm),
])
} catch (e) {
console.error(e)
session.notify(`${e}`, 'error')
}
}

/**
Expand Down
9 changes: 9 additions & 0 deletions test_data/hs1_vs_mm39/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,15 @@
"uri": "https://hgdownload.soe.ucsc.edu/goldenPath/hs1/bigZips/hs1.chrom.sizes.txt"
}
}
},
"refNameAliases": {
"adapter": {
"type": "RefNameAliasAdapter",
"location": {
"uri": "https://hgdownload.soe.ucsc.edu/goldenPath/hs1/bigZips/hs1.chromAlias.txt",
"locationType": "UriLocation"
}
}
}
},
{
Expand Down

0 comments on commit 0050666

Please sign in to comment.