Closed ldr426 closed 1 year ago
Component 1 : DatetimeRangePicker. Control the time span.
Component 2 : Select. Choose specific frequency and colormap.
Component 3 : RangeSlider : Control depth range in bird's eye view image.
Component 4 : ArrayInput. Customize colormap input.
Component 5 : ToggleGroup : Toggle between slice image and bird's-eye view image.
made by balsamiq
Component 1 : RangeSlider : Customize width and height of the cube. Width : Selected dates Height : Depth
Component 2 : Select. Choose specific frequency and colormap.
Component 3 : ArrayInput. Custom colormap input.
made by balsamiq
Component 1 : DatetimeRangePicker. Control the time span.
Component 2 : Select. Select specific frequency and colormap.
Component 3 : MultiSelect. Select multiple frequency values to show combined plots.
Component 4 : ArrayInput. Customize colormap input.
Component 5 : Toggle. Toggle between layout mode and outlay mode (see in https://github.com/OSOceanAcoustics/echoshader/issues/20#issuecomment-1100275045).
Component 6 : TextEditor. Output hist information like skewness and kurtosis.
Editable box in Sv image: Four selection modes: Overwrite; Intersect; Union; Inverse
made by balsamiq
Component 1 : Select. Choose specific frequency, colormap and tiles. Tiles: Square bitmap graphics displayed in a certain kind of grid arrangement to show a map.
Component 2 : ArrayInput. Customize colormap input.
Component 3 : TextEditor. Output geo information like latitude, longitude and time in a selected box
Editable box in the map: Select a box in the map, and show the corresponding Sv image and geo info.
made by balsamiq
This part can link the aerial view of the ship track in 2D and map with editable box. We can use editable box in echogram and map to specify the area of this 3D curtain.
Component 1 : Select. Choose specific frequency, colormap.
Component 2 : ArrayInput. Customize colormap input.
Component 3 : TextEditor. Output geo information like latitude, longitude and time in a selected box
Component 4 : Toggle. To do some interesting extends! :smile: Toggle between showing bathymetry and not (see in https://github.com/OSOceanAcoustics/echoshader/issues/26#issuecomment-1079644854) Toggle between showing underwater vehicle track and not (see in https://github.com/OSOceanAcoustics/echoshader/issues/28#issuecomment-1088282857 and https://github.com/OSOceanAcoustics/echoshader/issues/28#issuecomment-1088570395)
made by balsamiq
Ms @leewujung : Just done the design patterns which are not included in the proposal. These are just sketchy prototypes to demonstrate core functionality. I will add more components to do some styling work( like add css in html 😏). Please tell me what components or functions you want to add in these prototypes. 😄 It would be wonderful to create a comprehensive and detailed prototype before coding begins!
Hey @ldr426 -- thanks for putting together these! I think these are great that it helps one think very clearly on what are the parameters needed for each form of the visual displays.
By API I was actually referring to the programmatic design of how we structure the echoshader library and how users would interact with it. But after thinking about this some more, I think this part is better done via in-depth discussions between contributors and the mentor team. We can continue to brainstorm here, but for sure we as a team need to talk more once the program actually starts.
There are a few things that we should think about:
FILENAME_Sv.nc/zarr
files), this in theory would just take a 1 liner xarray open_mfdataset
, but we need to make it error-proof and test performance with different sizes of datasets.FILENAME_Sv.nc/zarr
files and are in the converted raw files (FILENAME.nc/zarr
), we'd need to interpolate the lat/lon to the echo data grid. I think @ldr426 you asked about this in one of the issues. This should be in echopype since it is a general functionality, but we haven't built that yet. The question here though is when does this get executed, and do the user get a copy of the interpolated data back if those do not already exist? Or do we force the users to generate such a dataset (with both echo and lat/lon) first and then feed it into echoshader? @lsetiawan I think you mentioned this in one of our discussions.Haha, the above has become a sprawling comment. We can move them to a separate issue at some point, once we have more thoughts flushed out.
Ms @leewujung: Aha. Although not the API design you referred to, API design also includes HCI(Human-Computer Interaction) design. Programmatic design is on stage next. :)) Let's do top-down design first, then bottom-up programming and assembly!
What are the common set of components that we can specify, probably using param?
There are four APIs to create components and UI including using param. And I do agree we should use param library to specify components and do linking. We can create a module to store component parameters generated by param. It is kind of like separating data and view in some backend frameworks. Then define a CommonComponents class, which includes the most common components and parameters. All other component sets are its subclasses. It will be easy to locate and operate if needing to customize components and parameters. May call this as 'configuration centralization'. Another benefit for param is using decorator would make the code methodical. Also add several modules to do other configs, like adding inline color bars for maps and images.
In terms of structuring the library, between Declarative Panels, widgets and params, and templates, where do we want each of our visualization options to sit?
As we mentioned above, create a module to store widgets and params. Similarly, create another module called plot.py to store declarative panels. Users call this module to plot and combine what they want.
Ms @leewujung:
How/where do we define the parameters/components interaction with the underlying echodata (like slicing a particular frequency)? When does computation get executed?
Nomral view and 3D echodata are easy to do slicing by using existing tools. Core components are included in above prototype. For birds'-eye view, we can define depth range component and data range component to show the level. Also add a select component to select Time of Day(dimension: 24 hr x total number of days selected like below) or Time of Week(dimension: 7 days x total number of weeks selected). Ms @leewujung once you said from the birds'-eye view we can watch how the animal migration wrt sunlight hours changes over season, the diel vertical migration. Setting up Time of Week can offer a wider view. Also add a toggle to swith between noraml view and birds'-eye view.
For computation in birds'-eye view, my idea is to develop a module to do computation work which plotting calls . We don't need to reshape the whole data before plotting. Once users specify frequency, depth and time selection, then the module create a xarray slice for plotting.
point the source to a folder with whole bunch of files and wanting to display them
We can create a module to display the data processed by echopype and files info by using Dataframe or Tabulator. Not sure if it is what you mean.
for display involving lat/lon
If this mapping relation is needed in plotting only, we could create a new module in ehcoshader to execute it, that is good for modular programming and decoupling. I have no idea if this mapping is used anywhere else. But achieving this in echopype could make responsibilities of each library clear. The final dimension and time points should be identical to the Sv data. But the number of latitude and longitude data points is about three times that of Sv data. Also the ping_time is not a subset of location_time. So there must be some matrix reduction and mapping work. This computation can be done before plotting map and curtain. Also add a Dataframe to show this kind of mapping relations (users get a copy of the interpolated data back) and create a file to store it.
This is another good reference issue that I'll be closing now to declutter. But I've added the "good reference" label so that we can find this easily.
Ideas
Ms @leewujung once reminded me to include some thoughts in my proposal on how I would design the API for use as widgets. But the day when Ms Lee gave this advice is already the deadline for GSoC application. I don't have enought time to add the design patterns in the proposal. I will list some thoughts there in the next few days.