Skip to content
This repository has been archived by the owner on Jan 22, 2024. It is now read-only.

Commit

Permalink
Merge pull request #442 from TeselaGen/td-alignmentdemo-and-fixes
Browse files Browse the repository at this point in the history
alignment demo and fixes
  • Loading branch information
tiffanydai authored Jan 12, 2019
2 parents 1d69ff9 + b7ef63e commit e8b852f
Show file tree
Hide file tree
Showing 8 changed files with 355 additions and 145 deletions.
170 changes: 118 additions & 52 deletions demo/src/AlignmentDemo.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,28 @@ import {
} from "../../src/withEditorProps/index";
import { caretPositionUpdate } from "../../src/redux/caretPosition";
import renderToggle from "./utils/renderToggle";
import jbeiPairwiseAlignmnent232018 from "./exampleData/jbeiPairwiseAlignmnent_23_2018.json";
import { BPSelect } from "teselagen-react-components";

// import { upsertPart } from "../../src/redux/sequenceData";
// import { MenuItem } from "@blueprintjs/core";

// Use the line below because using the full 30 sequences murders Redux dev tools.
alignmentRunData.alignmentTracks = alignmentRunData.alignmentTracks.slice(0, 5);
alignmentRunData.alignmentTracks = alignmentRunData.alignmentTracks.slice(0, 20);
let alignmentDataToUse = alignmentRunData
// let alignmentDataToUse = jbeiPairwiseAlignmnent232018
const defaultState = {
showOptions: true
showOptions: true,
alignmentDataToUse: alignmentRunData,
forceHeightMode: false,
isFullyZoomedOut: false,
setMinimapLaneHeight: false,
setMinimapLaneSpacing: false,
setAlignmentName: false,
noClickDragHandlers: false,
hasTemplate: false,
noVisibilityOptions: false,
setTickSpacing: false
};

const basicActions = { selectionLayerUpdate, caretPositionUpdate };
Expand All @@ -36,7 +50,7 @@ export default connect(
return {
...getCombinedActions(
times(
alignmentRunData.alignmentTracks.length,
alignmentDataToUse.alignmentTracks ? alignmentDataToUse.alignmentTracks.length : alignmentDataToUse.pairwiseAlignments.length,
i => "alignmentView" + i
),
basicActions,
Expand All @@ -55,36 +69,34 @@ export default connect(
});
}

componentDidUpdate() {
componentDidUpdate(prevProps, prevState) {
setParamsIfNecessary({ that: this, defaultState });
if (this.state.alignmentDataToUse !== prevState.alignmentDataToUse) {
addAlignment(store, { ...this.state.alignmentDataToUse });
}
}

componentDidMount() {
addAlignment(store, { ...alignmentRunData });
addAlignment(store, { ...this.state.alignmentDataToUse });

alignmentRunData.alignmentTracks.forEach((at, i) => {
// We need to do this or else the sequence data will be
// updated with some default sequence data when we select
// stuff.
updateEditor(store, "alignmentView" + i, {
readOnly: true,
sequenceData: at.alignmentData,
annotationVisibility: {
features: false,
translations: false,
parts: true,
orfs: false,
orfTranslations: false,
cdsFeatureTranslations: true,
axis: false,
cutsites: false,
primers: false,
reverseSequence: false,
lineageLines: false,
axisNumbers: false
}
if (this.state.alignmentDataToUse.alignmentTracks) {
this.state.alignmentDataToUse.alignmentTracks.forEach((at, i) => {
// We need to do this or else the sequence data will be
// updated with some default sequence data when we select
// stuff.
updateEditor(store, "alignmentView" + i, {
readOnly: true,
sequenceData: at.alignmentData,
});
});
});
} else {
this.state.alignmentDataToUse.pairwiseAlignments.forEach((at, i) => {
updateEditor(store, "alignmentView" + i, {
readOnly: true,
sequenceData: at.alignmentData,
});
});
}
}
render() {
return (
Expand All @@ -111,7 +123,7 @@ export default connect(
left: 0,
paddingTop: 10,
width: 250,
height: "100%",
// height: "100%",
minWidth: 250,
maxWidth: 250,
display: "flex",
Expand All @@ -120,46 +132,100 @@ export default connect(
borderRight: "1px solid lightgrey"
}}
>
<BPSelect
onChange={val => {
val === "msa" ? this.setState({alignmentDataToUse: alignmentRunData}) : this.setState({alignmentDataToUse: jbeiPairwiseAlignmnent232018})
}}
options={[
{ label: "Multiple Sequence Alignment", value: "msa" },
{ label: "Pairwise Alignment", value: "pairwise" }
]}
/>
<br/>
{renderToggle({
that: this,
type: "forceHeightMode",
label: "Force Height 500px",
description:
"You can force a height for the editor by passing height:500 (same for width) "
"You can force a height for the editor by passing height:500 (same for width)"
})}
{renderToggle({
that: this,
type: "setAlignmentName",
label: "Set Alignment Name",
description:
"You can give the alignment a name by setting alignmentName:'Ref Seq Name'"
})}
{renderToggle({
that: this,
type: "isFullyZoomedOut",
label: "View Zoomed-Out Alignment",
description:
"You can view the alignment zoomed-out by setting isFullyZoomedOut:true"
})}
{renderToggle({
that: this,
type: "setMinimapLaneHeight",
label: "Set Minimap Lane Height 13px",
description:
"You can set a height for the minimap lanes by passing minimapLaneHeight:13"
})}
{renderToggle({
that: this,
type: "setMinimapLaneSpacing",
label: "Set Minimap Lane Spacing 3px",
description:
"You can set a height for the space between minimap lanes by passing minimapLaneSpacing:3"
})}
{renderToggle({
that: this,
type: "noClickDragHandlers",
label: "Disable Click-Drag Highlighting",
description:
"You can disable click-drag highlighting by setting noClickDragHandlers:true"
})}
{renderToggle({
that: this,
type: "hasTemplate",
label: "Specify Alignment with Template",
description:
"You can specify that the first sequence in an alignment is a template sequence by setting hasTemplate:true"
})}
{renderToggle({
that: this,
type: "setTickSpacing",
label: "Set Tick Spacing 10 bps",
description:
"You can set spacing of tick marks on the axis by setting linearViewOptions:{tickSpacing:10}"
})}
{renderToggle({
that: this,
type: "noVisibilityOptions",
label: "Disable Visibility Options",
description:
"You can disable the visibility options menu by setting noVisibilityOptions:true"
})}
</div>
)}
</div>
<AlignmentView
style={{
// display: "flex",
// flexDirection: "column",
// flexGrow: 1,
...(this.state.showOptions && { paddingLeft: 250 })
}}
{...{
editorName: "MppViewer",
id: alignmentRunData.id,
minimapLaneHeight: 10,
id: this.state.alignmentDataToUse.id,
alignmentType: this.state.alignmentDataToUse.alignmentType,
height: this.state.forceHeightMode ? 500 : undefined,
minimapLaneSpacing: 2,
linearViewOptions: ({
index,
alignmentVisibilityToolOptions
}) => {
const toReturn = {
// tickSpacing: 10,
ignoreYWhenSelecting: true,
linearViewAnnotationVisibilityOverrides: {
...alignmentVisibilityToolOptions.alignmentAnnotationVisibility,
parts: true
}
};
if (index === alignmentRunData.alignmentTracks.length - 1) {
toReturn.linearViewAnnotationVisibilityOverrides.axis = true;
}

return toReturn;
isFullyZoomedOut: this.state.isFullyZoomedOut,
minimapLaneHeight: this.state.setMinimapLaneHeight ? 13 : undefined,
minimapLaneSpacing: this.state.setMinimapLaneSpacing ? 3 : undefined,
alignmentName: this.state.setAlignmentName ? 'Ref Seq Name' : undefined,
noClickDragHandlers: this.state.noClickDragHandlers,
hasTemplate: this.state.hasTemplate,
noVisibilityOptions: this.state.noVisibilityOptions,
linearViewOptions: {
tickSpacing: this.state.setTickSpacing ? 10 : undefined
}
}}
/>
Expand Down
6 changes: 3 additions & 3 deletions demo/src/StandaloneAlignmentDemo.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,13 @@ import {generateSequenceData} from "ve-sequence-utils";

// import exampleSequenceData from './exampleData/simpleSequenceData';

const exampleAlignmentData = {alignmentTracks: times(100).map(() => {
const exampleAlignmentData = {alignmentTracks: times(10).map(() => {
return {
sequenceData: {
...generateSequenceData(100)
...generateSequenceData(10)
},
alignmentData: {
...generateSequenceData(100)
...generateSequenceData(10)
}
}
})}
Expand Down
27 changes: 25 additions & 2 deletions demo/src/exampleData/alignmentRunData.json
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
{
"id": "d598e5bd-81fb-42f6-bffe-637bce154680",
"alignmentType": "Multiple Sequence Alignment",
"alignmentTracks": [
{
"sequenceData": {
"id": "0bd61b29-d822-474f-86e1-877c476fb5dc",
"features": [{
"start": 5,
"end": 10,
"name": "7491",
"name": "misc_feature",
"type": "misc_feature",
"id": "5ac3f0a199aae6653c0e7d41",
"forward": true,
Expand All @@ -18,7 +19,7 @@
{
"start": 20,
"end": 35,
"name": "33665",
"name": "misc_feature",
"type": "misc_feature",
"id": "5ac3f0a199aae6653c0e7d42",
"forward": false,
Expand Down Expand Up @@ -48,6 +49,17 @@
"sequenceData": {
"id": "21e4b5e2-af95-4073-9d98-7318e56623c9",
"name": "F05207",
"features": [{
"start": 8,
"end": 25,
"name": "misc_feature",
"type": "misc_feature",
"id": "5ac3f0a199aae6653c0e7d41",
"forward": true,
"notes": {},
"strand": 1,
"color": "#006FEF"
}],
"sequence":
"ATGCATCACCATCATCACCACGGAAGCGGCAGTATGGCAGTTGACTCGCCAGATGAACGCCTCCAGCGTCGTATCGCCCAACTGTTCGCCGAAGATGAACAGGTGAAAGCCGCCCGTCCGTTAGAAGCGGTGAGTGCGGCAGTGAGTGCACCAGGTATGCGTCTGGCACAGATTGCGGCGACTGTGATGGCTGGCTATGCTGATCGTCCCGCAGCGGGTCAGCGGGCGTTTGAACTGAATACCGACGATGCGACGGGTCGTACCAGCCTGCGTTTACTGCCACGCTTTGAAACGATTACCTATCGTGAACTGTGGCAGCGTGTTGGCGAAGTGGCAGCGGCGTGGCATCACGACCCAGAAAACCCGCTGCGTGCTGGCGATTTCGTTGCCCTGCTGGGCTTTACCAGCATTGATTATGCCACCCTGGATTTGGCAGACATTCATCTGGGTGCGGTGACGGTGCCGTTACAGGCGAGTGCGGCAGTGAGCCAGTTGATTGCCATTCTGACCGAAACCAGCCCACGCCTGCTGGCGTCTACCCCAGAACATCTGGATGCGGCAGTGGAATGCCTGCTGGCGGGCACCACGCCAGAACGCCTGGTTGTGTTTGATTACCATCCAGAAGACGATGACCAGCGTGCGGCGTTTGAAAGTGCCCGCCGTCGCTTAGCGGATGCGGGTTCGCTGGTGATTGTGGAAACCCTGGATGCTGTTCGTGCCCGTGGTCGTGACCTGCCCGCTGCTCCGCTGTTTGTGCCAGATACCGATGACGACCCGCTGGCACTTCTGATTTACACCAGCGGCAGCACGGGCACCCCGAAAGGTGCGATGTATACCAACCGCCTGGCGGCAACGATGTGGCAGGGCAACAGTATGCTCCAGGGCAATAGCCAGCGTGTTGGCATCAACCTGAACTACATGCCGATGAGCCACAACGCGGGTCGTGTGAGCCTGTTTGGCGTGTTAGCCCGTGGCGGCACCGCCTATTTTGCCGCTAAATCCGATATGAGCACCCTGTTTGAAGACATCGGTCTGGTGCGTCCGACGGAGATTTTCTTTGTTCCTCGTGTTTGCGATATGGTGTTTCAGCGTTATCAGAGCGAACTGGACCGTCGTAGCGTGGCGGGTGCGGACCTGGATACCCTGGACCGTGAGGTGAAAGCGGATTTACGCCAGAACTACCTGGGCGGTCGTTTTCTGGTAGCGGTTGTGGGCAGTGCCCCGCTGGCGGCAGAAATGAAAACCTTTATGGAAAGCGTGCTGGACCTGCCGCTCCACGATGGCTATGGCAGCACCGAAGCGGGAGCCAGCGTTCTGCTGGATAACCAGATTCAGCGTCCGCCAGTGCTGGATTACAAACTGGTGGATGTGCCTGAACTGGGCTATTTTCGCACGGACCGTCCGCATCCTCGTGGCGAACTGTTGCTGAAAGCGGAAACCACGATTCCTGGCTATTACAAACGCCCAGAAGTGACGGCGGAAATCTTTGATGAAGATGGCTTCTACAAAACGGGCGACATTGTGGCGGAACTGGAACACGACCGCCTGGTGTATGTGGACCGTCGTAACAATGTCCTGAAACTGAGCCAGGGCGAGTTTGTCACCGTTGCCCATCTGGAAGCCGTGTTTGCCAGTAGCCCGCTGATTCGCCAGATTTTCATTTATGGTTCCAGCGAACGCAGTTATCTGCTGGCGGTGATTGTGCCGACTGACGATGCCCTGCGTGGTCGTGATACGGCGACCCTGAAAAGTGCCCTGGCGGAAAGCATTCAGCGTATTGCCAAAGATGCCAACCTCCAGCCGTATGAGATTCCTCGTGATTTCCTGATTGAAACGGAACCGTTTACCATTGCCAACGGTCTGCTGAGCGGCATTGCCAAACTGCTTCGCCCGAACCTGAAAGAACGCTATGGTGCCCAGTTGGAACAGATGTATACCGATTTAGCGACGGGTCAGGCGGATGAACTGCTGGCGTTACGCCGTGAAGCAGCCGACCTGCCAGTGCTGGAAACCGTGAGCCGTGCGGCGAAAGCGATGCTTGGTGTTGCGTCGGCGGATATGCGTCCAGATGCCCATTTCACCGACCTGGGTGGCGATAGCCTGTCTGCCCTGTCGTTTTCCAACCTGTTACACGAAATCTTTGGTGTGGAAGTGCCAGTGGGTGTTGTGGTGAGCCCAGCAAACGAACTGCGTGATTTAGCCAACTACATTGAAGCGGAACGCAACAGCGGTGCGAAACGCCCGACCTTTACCAGCGTTCACGGCGGTGGCAGCGAAATCCGTGCGGCAGACCTGACCCTGGATAAGTTTATTGATGCCCGCACCCTGGCAGCGGCAGACAGCATTCCGCACGCCCCAGTGCCAGCCCAGACCGTTCTGCTGACGGGTGCGAACGGTTATCTGGGTCGTTTTCTGTGCCTGGAATGGCTGGAACGCCTGGATAAAACGGGCGGCACCCTGATTTGTGTTGTCCGTGGCAGCGATGCTGCCGCAGCCCGTAAACGCCTGGATTCGGCGTTTGATAGCGGCGACCCAGGTCTGCTGGAACATTACCAGCAACTGGCGGCTCGCACCCTGGAAGTGCTGGCGGGTGATATCGGTGACCCGAACCTGGGTCTGGATGACGCCACCTGGCAGCGTCTGGCTGAAACCGTTGACCTGATTGTTCACCCCGCAGCACTGGTGAATCATGTGCTGCCTTACACCCAACTGTTTGGTCCGAATGTGGTTGGCACCGCCGAAATCGTGCGTCTGGCGATTACCGCTCGCCGCAAACCTGTCACCTATCTGAGCACCGTTGGCGTAGCGGACCAGGTGGACCCTGCCGAATACCAGGAAGATAGCGATGTGCGTGAAATGTCGGCGGTGCGTGTGGTGCGTGAAAGTTATGCGAACGGCTATGGCAATAGCAAATGGGCGGGTGAAGTGTTGCTGCGTGAAGCCCACGACCTGTGCGGTCTGCCAGTGGCGGTGTTTCGCAGCGATATGATTCTGGCACATAGCCGCTATGCGGGTCAACTGAATGTTCAGGATGTGTTTACCCGCCTGATTCTGAGCCTGGTGGCGACTGGCATTGCCCCGTATTCGTTTTATCGCACCGATGCGGATGGCAACCGTCAGCGTGCCCATTATGACGGTCTGCCAGCGGATTTTACCGCAGCGGCGATTACCGCCCTGGGCATTCAGGCGACGGAAGGCTTTCGCACCTATGATGTGCTGAATCCGTATGACGATGGTATTAGCCTGGATGAGTTTGTGGATTGGCTGGTGGAAAGCGGTCACCCGATTCAGCGTATTACCGATTACAGCGATTGGTTTCATCGCTTTGAAACGGCGATTCGTGCCCTGCCAGAGAAACAGCGTCAGGCGTCGGTGCTGCCGTTGCTGGATGCGTATCGCAACCCGTGCCCAGCGGTTCGTGGTGCGATTCTGCCAGCGAAAGAGTTTCAGGCAGCGGTTCAGACCGCCAAAATCGGTCCAGAACAGGACATTCCGCATCTGTCGGCACCGCTGATTGACAAATATGTGAGCGACCTGGAACTGTTACAACTGCTGTAA"
},
Expand All @@ -69,6 +81,17 @@
"sequenceData": {
"id": "75b4dbaf-1435-4862-9d76-b67bbf6e3cf3",
"name": "F05208",
"features": [{
"start": 2,
"end": 12,
"name": "misc_feature",
"type": "misc_feature",
"id": "5ac3f0a199aae6653c0e7d41",
"forward": true,
"notes": {},
"strand": 1,
"color": "#006FEF"
}],
"sequence":
"ATGCATCACCATCATCACCACGGAAGCGGCAGTATGGCAGTTGACTCGCCAGATGAACGCCTCCAGCGTCGTATCGCCCAACTGTTCGCCGAAGATGAACAGGTGAAAGCCGCCCGTCCGTTAGAAGCGGTGAGTGCGGCAGTGAGTGCACCAGGTATGCGTCTGGCACAGATTGCGGCGACTGTGATGGCTGGCTATGCTGATCGTCCCGCAGCGGGTCAGCGGGCGTTTGAACTGAATACCGACGATGCGACGGGTCGTACCAGCCTGCGTTTACTGCCACGCTTTGAAACGATTACCTATCGTGAACTGTGGCAGCGTGTTGGCGAAGTGGCAGCGGCGTGGCATCACGACCCAGAAAACCCGCTGCGTGCTGGCGATTTCGTTGCCCTGCTGGGCTTTACCAGCATTGATTATGCCACCCTGGATTTGGCAGACATTCATCTGGGTGCGGTGACGGTGCCGTTACAGGCGAGTGCGGCAGTGAGCCAGTTGATTGCCATTCTGACCGAAACCAGCCCACGCCTGCTGGCGTCTACCCCAGAACATCTGGATGCGGCAGTGGAATGCCTGCTGGCGGGCACCACGCCAGAACGCCTGGTTGTGTTTGATTACCATCCAGAAGACGATGACCAGCGTGCGGCGTTTGAAAGTGCCCGCCGTCGCTTAGCGGATGCGGGTTCGCTGGTGATTGTGGAAACCCTGGATGCTGTTCGTGCCCGTGGTCGTGACCTGCCCGCTGCTCCGCTGTTTGTGCCAGATACCGATGACGACCCGCTGGCACTTCTGATTTACACCAGCGGCAGCACGGGCACCCCGAAAGGTGCGATGTATACCAACCGCCTGGCGGCAACGATGTGGCAGGGCAACAGTATGCTCCAGGGCAATAGCCAGCGTGTTGGCATCAACCTGAACTACATGCCGATGAGCCACAATGCGGGTCGTGTGAGCCTGTTTGGCGTGTTAGCCCGTGGCGGCACCGCCTATTTTGCCGCTAAATCCGATATGAGCACCCTGTTTGAAGACATCGGTCTGGTGCGTCCGACGGAGATTTTCTTTGTTCCTCGTGTTTGCGATATGGTGTTTCAGCGTTATCAGAGCGAACTGGACCGTCGTAGCGTGGCGGGTGCGGACCTGGATACCCTGGACCGTGAGGTGAAAGCGGATTTACGCCAGAACTACCTGGGCGGTCGTTTTCTGGTAGCGGTTGTGGGCAGTGCCCCGCTGGCGGCAGAAATGAAAACCTTTATGGAAAGCGTGCTGGACCTGCCGCTCCACGATGGCTATGGCAGCACCGAAGCGGGAAGCAGCGTTCTGCTGGATAACCAGATTCAGCGTCCGCCAGTGCTGGATTACAAACTGGTGGATGTGCCTGAACTGGGCTATTTTCGCACGGACCGTCCGCATCCTCGTGGCGAACTGTTGCTGAAAGCGGAAACCACGATTCCTGGCTATTACAAACGCCCAGAAGTGACGGCGGAAATCTTTGATGAAGATGGCTTCTACAAAACGGGCGACATTGTGGCGGAACTGGAACACGACCGCCTGGTGTATGTGGACCGTCGTAACAATGTCCTGAAACTGAGCCAGGGCGAGTTTGTCACCGTTGCCCATCTGGAAGCCGTGTTTGCCAGTAGCCCGCTGATTCGCCAGATTTTCATTTATGGTTCCAGCGAACGCAGTTATCTGCTGGCGGTGATTGTGCCGACTGACGATGCCCTGCGTGGTCGTGATACGGCGACCCTGAAAAGTGCCCTGGCGGAAAGCATTCAGCGTATTGCCAAAGATGCCAACCTCCAGCCGTATGAGATTCCTCGTGATTTCCTGATTGAAACGGAACCGTTTACCATTGCCAACGGTCTGCTGAGCGGCATTGCCAAACTGCTTCGCCCGAACCTGAAAGAACGCTATGGTGCCCAGTTGGAACAGATGTATACCGATTTAGCGACGGGTCAGGCGGATGAACTGCTGGCGTTACGCCGTGAAGCAGCCGACCTGCCAGTGCTGGAAACCGTGAGCCGTGCGGCGAAAGCGATGCTTGGTGTTGCGTCGGCGGATATGCGTCCAGATGCCCATTTCACCGACCTGGGTGGCGATAGCCTGTCTGCCCTGTCGTTTTCCAACCTGTTACACGAAATCTTTGGTGTGGAAGTGCCAGTGGGTGTTGTGGTGAGCCCAGCAAACGAACTGCGTGATTTAGCCAACTACATTGAAGCGGAACGCAACAGCGGTGCGAAACGCCCGACCTTTACCAGCGTTCACGGCGGTGGCAGCGAAATCCGTGCGGCAGACCTGACCCTGGATAAGTTTATTGATGCCCGCACCCTGGCAGCGGCAGACAGCATTCCGCACGCCCCAGTGCCAGCCCAGACCGTTCTGCTGACGGGTGCGAACGGTTATCTGGGTCGTTTTCTGTGCCTGGAATGGCTGGAACGCCTGGATAAAACGGGCGGCACCCTGATTTGTGTTGTCCGTGGCAGCGATGCTGCCGCAGCCCGTAAACGCCTGGATTCGGCGTTTGATAGCGGCGACCCAGGTCTGCTGGAACATTACCAGCAACTGGCGGCTCGCACCCTGGAAGTGCTGGCGGGTGATATCGGTGACCCGAACCTGGGTCTGGATGACGCCACCTGGCAGCGTCTGGCTGAAACCGTTGACCTGATTGTTCACCCCGCAGCACTGGTGAATCATGTGCTGCCTTACACCCAACTGTTTGGTCCGAATGTGGTTGGCACCGCCGAAATCGTGCGTCTGGCGATTACCGCTCGCCGCAAACCTGTCACCTATCTGAGCACCGTTGGCGTAGCGGACCAGGTGGACCCTGCCGAATACCAGGAAGATAGCGATGTGCGTGAAATGTCGGCGGTGCGTGTGGTGCGTGAAAGTTATGCGAACGGCTATGGCAATAGCAAATGGGCGGGTGAAGTGTTGCTGCGTGAAGCCCACGACCTGTGCGGTCTGCCAGTGGCGGTGTTTCGCAGCGATATGATTCTGGCACATAGCCGCTATGCGGGTCAACTGAATGTTCAGGATGTGTTTACCCGCCTGATTCTGAGCCTGGTGGCGACTGGCATTGCCCCGTATTCGTTTTATCGCACCGATGCGGATGGCAACCGTCAGCGTGCCCATTATGACGGTCTGCCAGCGGATTTTACCGCAGCGGCGATTACCGCCCTGGGCATTCAGGCGACGGAAGGCTTTCGCACCTATGATGTGCTGAATCCGTATGACGATGGTATTAGCCTGGATGAGTTTGTGGATTGGCTGGTGGAAAGCGGTCACCCGATTCAGCGTATTACCGATTACAGCGATTGGTTTCATCGCTTTGAAACGGCGATTCGTGCCCTGCCAGAGAAACAGCGTCAGGCGTCGGTGCTGCCGTTGCTGGATGCGTATCGCAACCCGTGCCCAGCGGTTCGTGGTGCGATTCTGCCAGCGAAAGAGTTTCAGGCAGCGGTTCAGACCGCCAAAATCGGTCCAGAACAGGACATTCCGCATCTGTCGGCACCGCTGATTGACAAATATGTGAGCGACCTGGAACTGTTACAACTGCTGTAA"
},
Expand Down
Loading

0 comments on commit e8b852f

Please sign in to comment.