Commit f499ae63 authored by Matus Talcik's avatar Matus Talcik
Browse files

automatically create selections of chromosomes when found in file

parent e950aba2
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -457,6 +457,7 @@ function App(): JSX.Element {
        hidden={newXYZDataDialogHidden}
        hidden={newXYZDataDialogHidden}
        closeFunction={() => { setNewXYZDataDialogHidden(true) }}
        closeFunction={() => { setNewXYZDataDialogHidden(true) }}
        dataReducer={[data, dispatchData]}
        dataReducer={[data, dispatchData]}
        selectionsReducer={[selections, dispatchSelections]}
      ></NewXYZDataDialog>
      ></NewXYZDataDialog>
      <ImportWorkspaceDialog
      <ImportWorkspaceDialog
        hidden={workspaceFileImportDialogHidden}
        hidden={workspaceFileImportDialogHidden}
+25 −3
Original line number Original line Diff line number Diff line
@@ -3,15 +3,18 @@ import { vec3 } from 'gl-matrix';
import React, { Dispatch, useEffect, useRef, useState } from 'react';
import React, { Dispatch, useEffect, useRef, useState } from 'react';
import { CSVDelimiter, FileState, FileType, ParseResult, parseResultToXYZ, parseToRows, ParseConfiguration, ParseResultCSV, ParseResultPDB } from '../../modules/parsing';
import { CSVDelimiter, FileState, FileType, ParseResult, parseResultToXYZ, parseToRows, ParseConfiguration, ParseResultCSV, ParseResultPDB } from '../../modules/parsing';
import { DataState, DataAction, DataActionKind, BinPositionsData, isoDataID } from '../../modules/storage/models/data';
import { DataState, DataAction, DataActionKind, BinPositionsData, isoDataID } from '../../modules/storage/models/data';
import { SelectionAction, SelectionActionKind, SelectionState } from '../../modules/storage/models/selections';
import { UploadTextFilesButton } from '../buttons/UploadTextFilesButton';
import { UploadTextFilesButton } from '../buttons/UploadTextFilesButton';




export function NewXYZDataDialog(props: {
export function NewXYZDataDialog(props: {
  hidden: boolean,
  hidden: boolean,
  closeFunction: () => void,
  closeFunction: () => void,
  dataReducer: [DataState, Dispatch<DataAction>]
  dataReducer: [DataState, Dispatch<DataAction>],
  selectionsReducer: [SelectionState, Dispatch<SelectionAction>],
}): JSX.Element {
}): JSX.Element {
  const [data, dispatchData] = props.dataReducer;
  const [data, dispatchData] = props.dataReducer;
  const [selections, dispatchSelections] = props.selectionsReducer;


  // Reference to the true input file obscured by a fake one (for styling purposes)
  // Reference to the true input file obscured by a fake one (for styling purposes)
  const inputFileElement = useRef<HTMLInputElement | null>(null);
  const inputFileElement = useRef<HTMLInputElement | null>(null);
@@ -72,7 +75,7 @@ export function NewXYZDataDialog(props: {
      } else {
      } else {
        const parsedResult: ParseResultPDB = parsedResultUntyped as ParseResultPDB;
        const parsedResult: ParseResultPDB = parsedResultUntyped as ParseResultPDB;


        const data: BinPositionsData = {
        const data3D: BinPositionsData = {
          id: isoDataID.wrap(-1), // will be replaced in reducer
          id: isoDataID.wrap(-1), // will be replaced in reducer
          name: files[0].name + (parsedFile.length > 1 ? "(" + i + ")" : ""),
          name: files[0].name + (parsedFile.length > 1 ? "(" + i + ")" : ""),
          type: '3d-positions',
          type: '3d-positions',
@@ -86,8 +89,27 @@ export function NewXYZDataDialog(props: {


        dispatchData({
        dispatchData({
          type: DataActionKind.ADD_DATA,
          type: DataActionKind.ADD_DATA,
          data: data
          data: data3D
        });
        });

        const data3DID = data.dataMaxId + 1;

        if (parsedResult.ranges.length > 0) {

          console.log(parsedResult.ranges);
          for (const [rangeIndex, range] of parsedResult.ranges.entries()) {
            dispatchSelections({
              type: SelectionActionKind.ADD,

              name: 'Chromosome ' + rangeIndex,
              dataID: isoDataID.wrap(data3DID),
              dataSize: data3D.values.length,
              bins: new Uint16Array(parsedResult.atoms.length).fill(1, range.from, range.to),
            });
          }

        }

      }
      }
    }
    }


+5 −2
Original line number Original line Diff line number Diff line
@@ -40,6 +40,9 @@ export type SelectionActionAdd = {


  dataID: DataID;
  dataID: DataID;
  dataSize: number;
  dataSize: number;

  name?: string;
  bins?: Uint16Array;
}
}


export type SelectionActionUpdate = {
export type SelectionActionUpdate = {
@@ -83,9 +86,9 @@ export function selectionReducer(state: SelectionState, action: SelectionAction)
        selections: [...state.selections, {
        selections: [...state.selections, {
          id: isoSelectionID.wrap(maxId),
          id: isoSelectionID.wrap(maxId),
          dataID: action.dataID,
          dataID: action.dataID,
          name: "Selection " + maxId,
          name: action.name || ("Selection " + maxId),
          color: hexToRGBAUnit(randomColor(), 1.0),
          color: hexToRGBAUnit(randomColor(), 1.0),
          bins: new Uint16Array(action.dataSize)
          bins: action.bins || new Uint16Array(action.dataSize)
        }]
        }]
      };
      };
    }
    }