diff --git a/Eplant/views/InteractionsViewer/FilterDialog.1.tsx b/Eplant/views/InteractionsViewer/FilterDialog.1.tsx new file mode 100644 index 0000000..0931a56 --- /dev/null +++ b/Eplant/views/InteractionsViewer/FilterDialog.1.tsx @@ -0,0 +1,241 @@ +import { FC, useState } from 'react' +import Box from '@mui/material/Box' +import Button from '@mui/material/Button' +import Checkbox from '@mui/material/Checkbox' +import FormControlLabel from '@mui/material/FormControlLabel' +import FormGroup from '@mui/material/FormGroup' +import { applyFilter, cleanNodes } from './scripts/filterLogic' +import { FilterProps, NumberInput } from './FilterDialog' + +export const FilterDialog: FC = ({ cy }) => { + const [eppiSelected, setEppiSelected] = useState(false) + const [eppiCorrSelected, setEppiCorrSelected] = useState(false) + const [eppiCorrValue, setEppiCorrValue] = useState() + const [pppiSelected, setPppiSelected] = useState(false) + const [pppiCorrSelected, setPppiCorrSelected] = useState(false) + const [pppiCorrValue, setPppiCorrValue] = useState() + const [pppiConfSelected, setPppiConfSelected] = useState(false) + const [pppiConfValue, setPppiConfValue] = useState() + const [epdiSelected, setEpdiSelected] = useState(false) + const [ppdiSelected, setPpdiSelected] = useState(false) + const [ppdiConfSelected, setPpdiConfSelected] = useState(false) + const [ppdiConfValue, setPpdiConfValue] = useState() + const selectors = { + EPPISelector: '[type = "PPI"][method = "E"]', // checkbox + corrSelector: '[correlation <= ', // eppi-correlation spinner + checkbox + PPPISelector: '[type = "PPI"][method = "P"]', // checkbox + interConfSelector: '[interolog_conf <=', // PPPI correlation + EPDISelector: '[type = "PDI"][method = "E"]', + PPDISelector: '[type = "PDI"][method = "P"]', + fimoConfSelector: '[fimo_conf >= ', + } + + const applyFilters = () => {} + + const handleSubmit = () => { + const filterStatus = [ + eppiSelected, + eppiCorrSelected, + pppiSelected, + pppiCorrSelected, + pppiConfSelected, + epdiSelected, + ppdiSelected, + ppdiConfSelected, + ] + + // Create selectors + const eppiCorr = + selectors.EPPISelector + selectors.corrSelector + eppiCorrValue + ']' + const pppiCorr = + selectors.PPPISelector + selectors.corrSelector + pppiCorrValue + ']' + const pppiConf = + selectors.PPPISelector + selectors.interConfSelector + pppiConfValue + ']' + const ppdiConf = + selectors.PPDISelector + + selectors.fimoConfSelector + + '1e-' + + ppdiConfValue + + ']' + + const filters = [ + selectors.EPPISelector, + eppiCorr, + selectors.PPPISelector, + pppiCorr, + pppiConf, + selectors.EPDISelector, + selectors.PPDISelector, + ppdiConf, + ] + for (let i = 0; i < filterStatus.length; i++) { + console.log(i) + applyFilter(cy, filterStatus[i], filters[i]) + } + // Hide orphaned nodes + cleanNodes() + // Hide parent nodes + cleanCompoundNode('COMPOUND_DNA') + cleanCompoundNode('COMPOUND_PROTEIN') + } + + return ( + + setEppiSelected(!eppiSelected)} + /> + } + label='Hide ALL experimentally determined Protein-Protein interactions' + /> + + setEppiCorrSelected(!eppiCorrSelected)} + /> + } + label='Hide only with correlation less than: ' + /> + {eppiCorrSelected && ( + { + let value = parseFloat(event.target.value) + if (value > 1) { + value = 1 + } else if (value < -1) { + value = -1 + } + setEppiCorrValue(value) + }} + /> + )} + + + setPppiSelected(!pppiSelected)} + /> + } + label='Hide ALL predicted Protein-Protein interactions' + /> + + {/* pppi (correlation <=) */} + setPppiCorrSelected(!pppiCorrSelected)} + /> + } + label='Hide only with correlation less than: ' + /> + {/* pppi corr number input */} + {pppiCorrSelected && ( + { + let value = parseFloat(event.target.value) + if (value > 1) { + value = 1 + } else if (value < -1) { + value = -1 + } + setPppiCorrValue(value) + }} + /> + )} + + + {/* pppi (interolog_conf <=)*/} + setPppiConfSelected(!pppiConfSelected)} + /> + } + label='Hide only with confidence less than: ' + /> + {/* pppi conf number input */} + {pppiConfSelected && ( + { + let value = parseFloat(event.target.value) + if (value > 1) { + value = 1 + } else if (value < -1) { + value = -1 + } + setEppiCorrValue(value) + }} + /> + )} + + + setEpdiSelected(!epdiSelected)} + /> + } + label='Hide ALL experimentall determined Protein-DNA interactions' + /> + + setPpdiSelected(!ppdiSelected)} + /> + } + label='Hide ALL predicted Protien-DNA interactions' + /> + + {/* ppdi (interolog_conf <=)*/} + setPpdiConfSelected(!ppdiConfSelected)} + /> + } + label='Hide only with confidence greater than' + /> + {/* ppdi conf number input */} + {ppdiConfSelected && ( + { + let value = parseFloat(event.target.value) + if (value > 1) { + value = 1 + } else if (value < -1) { + value = -1 + } + setPpdiConfValue(value) + }} + prefix='1e-' + /> + )} + + + + ) +} diff --git a/Eplant/views/InteractionsViewer/FilterDialog.tsx b/Eplant/views/InteractionsViewer/FilterDialog.tsx index 7f54de8..6df8f1d 100644 --- a/Eplant/views/InteractionsViewer/FilterDialog.tsx +++ b/Eplant/views/InteractionsViewer/FilterDialog.tsx @@ -1,4 +1,5 @@ import { FC, useState } from 'react' +import { Core } from 'cytoscape' import Box from '@mui/material/Box' import Button from '@mui/material/Button' @@ -8,6 +9,15 @@ import FormGroup from '@mui/material/FormGroup' import InputAdornment from '@mui/material/InputAdornment' import TextField from '@mui/material/TextField' +import { + applyFilter, + cleanCompoundNode, + cleanNodes, +} from './scripts/filterLogic' + +interface FilterProps { + cy: Core +} type numberInputProps = { label: string changeFunc: (event: object) => void @@ -47,7 +57,7 @@ const NumberInput = (props: numberInputProps) => { ) } -const FilterDialog: FC = () => { +const FilterDialog: FC = ({ cy }) => { const [eppiSelected, setEppiSelected] = useState(false) const [eppiCorrSelected, setEppiCorrSelected] = useState(false) const [eppiCorrValue, setEppiCorrValue] = useState() @@ -70,7 +80,20 @@ const FilterDialog: FC = () => { fimoConfSelector: '[fimo_conf >= ', } - const applyFilters = () => { + const applyFilters = () => {} + + const handleSubmit = () => { + const filterStatus = [ + eppiSelected, + eppiCorrSelected, + pppiSelected, + pppiCorrSelected, + pppiConfSelected, + epdiSelected, + ppdiSelected, + ppdiConfSelected, + ] + // Create selectors const eppiCorr = selectors.EPPISelector + selectors.corrSelector + eppiCorrValue + ']' @@ -84,172 +107,187 @@ const FilterDialog: FC = () => { '1e-' + ppdiConfValue + ']' + + const filters = [ + selectors.EPPISelector, + eppiCorr, + selectors.PPPISelector, + pppiCorr, + pppiConf, + selectors.EPDISelector, + selectors.PPDISelector, + ppdiConf, + ] + cy.elements().show() + for (let i = 0; i < filterStatus.length; i++) { + console.log(i) + applyFilter(cy, filterStatus[i], filters[i]) + } + // Hide orphaned nodes + cleanNodes(cy) + // Hide parent nodes + cleanCompoundNode(cy, 'COMPOUND_DNA') + cleanCompoundNode(cy, 'COMPOUND_PROTEIN') } return ( - - ({ - maxWidth: 600, - padding: 3, - mr: 10, - bgcolor: theme.palette.background.transparentOverlay, - color: 'white', - })} - > + + setEppiSelected(!eppiSelected)} + /> + } + label='Hide ALL experimentally determined Protein-Protein interactions' + /> + setEppiSelected(!eppiSelected)} + checked={eppiCorrSelected} + onChange={() => setEppiCorrSelected(!eppiCorrSelected)} /> } - label='Hide ALL experimentally determined Protein-Protein interactions' + label='Hide only with correlation less than: ' /> - - setEppiCorrSelected(!eppiCorrSelected)} - /> - } - label='Hide only with correlation less than: ' + {eppiCorrSelected && ( + { + let value = parseFloat(event.target.value) + if (value > 1) { + value = 1 + } else if (value < -1) { + value = -1 + } + setEppiCorrValue(value) + }} /> - {eppiCorrSelected && ( - { - let value = parseFloat(event.target.value) - if (value > 1) { - value = 1 - } else if (value < -1) { - value = -1 - } - setEppiCorrValue(value) - }} - /> - )} - + )} + + setPppiSelected(!pppiSelected)} + /> + } + label='Hide ALL predicted Protein-Protein interactions' + /> + + {/* pppi (correlation <=) */} setPppiSelected(!pppiSelected)} + checked={pppiCorrSelected} + onChange={() => setPppiCorrSelected(!pppiCorrSelected)} /> } - label='Hide ALL predicted Protein-Protein interactions' + label='Hide only with correlation less than: ' /> - - {/* pppi (correlation <=) */} - setPppiCorrSelected(!pppiCorrSelected)} - /> - } - label='Hide only with correlation less than: ' - /> - {/* pppi corr number input */} - {pppiCorrSelected && ( - { - let value = parseFloat(event.target.value) - if (value > 1) { - value = 1 - } else if (value < -1) { - value = -1 - } - setPppiCorrValue(value) - }} - /> - )} - - - {/* pppi (interolog_conf <=)*/} - setPppiConfSelected(!pppiConfSelected)} - /> - } - label='Hide only with confidence less than: ' + {/* pppi corr number input */} + {pppiCorrSelected && ( + { + let value = parseFloat(event.target.value) + if (value > 1) { + value = 1 + } else if (value < -1) { + value = -1 + } + setPppiCorrValue(value) + }} /> - {/* pppi conf number input */} - {pppiConfSelected && ( - { - let value = parseFloat(event.target.value) - if (value > 1) { - value = 1 - } else if (value < -1) { - value = -1 - } - setEppiCorrValue(value) - }} - /> - )} - - + )} + + + {/* pppi (interolog_conf <=)*/} setEpdiSelected(!epdiSelected)} + checked={pppiConfSelected} + onChange={() => setPppiConfSelected(!pppiConfSelected)} /> } - label='Hide ALL experimentall determined Protein-DNA interactions' + label='Hide only with confidence less than: ' /> + {/* pppi conf number input */} + {pppiConfSelected && ( + { + let value = parseFloat(event.target.value) + if (value > 1) { + value = 1 + } else if (value < -1) { + value = -1 + } + setEppiCorrValue(value) + }} + /> + )} + + + setEpdiSelected(!epdiSelected)} + /> + } + label='Hide ALL experimentall determined Protein-DNA interactions' + /> + setPpdiSelected(!ppdiSelected)} + /> + } + label='Hide ALL predicted Protien-DNA interactions' + /> + + {/* ppdi (interolog_conf <=)*/} setPpdiSelected(!ppdiSelected)} + checked={ppdiConfSelected} + onChange={() => setPpdiConfSelected(!ppdiConfSelected)} /> } - label='Hide ALL predicted Protien-DNA interactions' + label='Hide only with confidence greater than' /> - - {/* ppdi (interolog_conf <=)*/} - setPpdiConfSelected(!ppdiConfSelected)} - /> - } - label='Hide only with confidence greater than' + {/* ppdi conf number input */} + {ppdiConfSelected && ( + { + let value = parseFloat(event.target.value) + if (value > 1) { + value = 1 + } else if (value < -1) { + value = -1 + } + setPpdiConfValue(value) + }} + prefix='1e-' /> - {/* ppdi conf number input */} - {ppdiConfSelected && ( - { - let value = parseFloat(event.target.value) - if (value > 1) { - value = 1 - } else if (value < -1) { - value = -1 - } - setPpdiConfValue(value) - }} - prefix='1e-' - /> - )} - - {/* Hide only with confidence greater than */} - - - - + )} + + + ) } export default FilterDialog diff --git a/Eplant/views/InteractionsViewer/Topbar.tsx b/Eplant/views/InteractionsViewer/Topbar.tsx index 4f29e01..8415534 100644 --- a/Eplant/views/InteractionsViewer/Topbar.tsx +++ b/Eplant/views/InteractionsViewer/Topbar.tsx @@ -1,66 +1,44 @@ import { FC, useRef, useState } from 'react' +import { Core } from 'cytoscape' import { Unstable_Popup as Popup } from '@mui/base/Unstable_Popup' -import { Filter, FilterAlt, QuestionMark } from '@mui/icons-material' -import Add from '@mui/icons-material/Add' -import Remove from '@mui/icons-material/Remove' -import { ListItemText, ListSubheader, Switch } from '@mui/material' +import { Close, FilterAlt, QuestionMark } from '@mui/icons-material' import AppBar from '@mui/material/AppBar' import Box from '@mui/material/Box' import Button from '@mui/material/Button' import ButtonGroup from '@mui/material/ButtonGroup' -import List from '@mui/material/List' -import ListItem from '@mui/material/ListItem' +import IconButton from '@mui/material/IconButton' +import Popover from '@mui/material/Popover' import Toolbar from '@mui/material/Toolbar' import Typography from '@mui/material/Typography' -import FilterDialog from './FilterDialog' +import FilterDialog from './FilterDialog.1' interface TopbarProps { + cy: Core gene: string } -const Topbar: FC = ({ gene }) => { +const Topbar: FC = ({ cy, gene }) => { const [showLegend, setShowLegend] = useState(false) const legendRef = useRef(null) - const [showFilter, setShowFilter] = useState(false) + const [showFilters, setShowFilters] = useState(false) const filterRef = useRef(null) - const selectors = { - EPPISelector: '[type = "PPI"][method = "E"]', // checkbox - corrSelector: '[correlation <= ', // eppi-correlation spinner + checkbox - PPPISelector: '[type = "PPI"][method = "P"]', // checkbox - interConfSelector: '[interolog_conf <=', // PPPI correlation - EPDISelector: '[type = "PDI"][method = "E"]', - PPDISelector: '[type = "PDI"][method = "P"]', - fimoConfSelector: '[fimo_conf >= ', - } - const zoomValue = 1000 - const applyFilters = () => { - // Create selectors - const eppiCorr = - selectors.EPPISelector + selectors.corrSelector + EPPICorrValue + ']' - const pppiCorr = - selectors.PPPISelector + selectors.corrSelector + PPPICorrValue + ']' - const pppiConf = - selectors.PPPISelector + selectors.interConfSelector + PPPIConfValue + ']' - const ppdiConf = - selectors.PPDISelector + selectors.fimoConfSelector + PPDIConfValue + ']' - } const handleLegendClick = () => { setShowLegend(!showLegend) } const handleFilterClick = () => { - setShowFilter(!showFilter) + setShowFilters(!showFilters) } return ( - + {/* VIEW TITLE */} - + Interactions Viewer: {gene} - +