Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Jun 11 09:32
    mathias7777 starred girder/girder
  • Jun 11 09:31
    tekkamanmaverick starred girder/girder
  • Jun 10 14:18
    davidshq starred girder/girder
  • Jun 09 03:22
  • Jun 08 14:43

    manthey on npm_and_yarn

    (compare)

  • Jun 08 14:43

    manthey on master

    Bump glob-parent from 5.1.0 to … Merge pull request #3360 from g… (compare)

  • Jun 08 14:43
    manthey closed #3360
  • Jun 08 14:42

    manthey on master

    Bump hosted-git-info from 2.8.5… Merge pull request #3356 from g… (compare)

  • Jun 08 14:42

    manthey on npm_and_yarn

    (compare)

  • Jun 08 14:42
    manthey closed #3356
  • Jun 07 21:59
    dependabot[bot] labeled #3360
  • Jun 07 21:59
    dependabot[bot] opened #3360
  • Jun 07 21:59

    dependabot[bot] on npm_and_yarn

    Bump glob-parent from 5.1.0 to … (compare)

  • Jun 02 23:32
    haoyuheng starred girder/girder
  • Jun 02 17:27
    andreped starred girder/girder
  • Jun 01 04:54
    jalalsadegh starred girder/girder
  • May 28 16:37
    jbeezley closed #3358
  • May 28 12:57

    jbeezley on v3.1.5

    (compare)

  • May 28 12:56

    jbeezley on click8

    (compare)

  • May 28 12:56

    jbeezley on master

    Update test assertion for compa… Check if length attribute is no… Merge pull request #3359 from g… (compare)

Alex Laslavic
@alasla
Also, is there any way to make the thumbnail shown on the collection page (or folder) to be the slide label or the preview image, rather than a scaled down version of the first frame of a czi file?
sai6a
@sai6a
Hi,
I was just trying the docker scripts provided in the Digital Slide Archive Github code.While running the deploy.sh/build.sh, the docker script is supposed to mount the code of HistomicsUI available in the host system into the docker container.This is not happening.Could someone help please?
I also wanted to understand where does the front end code and how is deployed inside the docker container.
David Manthey
@manthey
There isn't currently a way to change the dynamic range of associated images. We could certainly add the ability to do so. For the CZI files, perhaps auto-adjusting these should be the default.
Currently, the thumbnail in the folder list is always the scaled down image of the first frame of the file. You can also add the label and/or macro images. It wouldn't be hard to add an option to that setting to not show the scaled image.
David Manthey
@manthey
@sai6a, Do you have the source files in the appropriate location or have you specified their location via an environment variable (see https://github.com/DigitalSlideArchive/digital_slide_archive/tree/master/devops)?
The front end code is in the HistomicsUI repository, with components in Girder, large_image, and other plugins.
Alex Laslavic
@alasla

For some reason the “label” and “macro” images in the CZI files aren’t being shown as “label” and “macro” but as “Image28” and “Image29”, so there isn’t any way to show them on the index page that I can figure out.

As for showing them on the item page, it works but the scaling is unusable. I’ll see what I can do on our end. Its possible that we’re taking those images with the wrong camera (the monochrome 16bit one vs the color 8 bit one).

David Manthey
@manthey
I haven't found where the extra images are marked as the label and macro images. We can probably assume that the first two associated images are always label and macro. With the update to the bioformats module, perhaps this information is exposed.
Alex Laslavic
@alasla
Let me see what it looks like with bioformats 4+
i’m pushing the bioformats 4 image now, so I’ll let you know
I’m also asking our Zeiss contact if we can take those label and macro images with the 8bit color camera instead of the 16bit mono camera. But if we need to keep the 16bit mono images it might be nice to have some automatic histogram scaling on any 16bit associated images.
sai6a
@sai6a

@sai6a, Do you have the source files in the appropriate location or have you specified their location via an environment variable (see https://github.com/DigitalSlideArchive/digital_slide_archive/tree/master/devops)?

Yes.I have put the source files in the appropriate location.Both HistomicsUI and Digital Slide Archive I have cloned in the same directory.But if I change anything in the HistomicsUI code in the local repo the changes does not get reflected the code inside the docker container.I was able to make changes in the source code inside the docker container and see the changes getting reflected on the frontend.Even I tried with the setting up of environment variables.It does not work.It would be great help if you could assist furthe.

David Manthey
@manthey
@sai6a, Can you share a screenshot of your directory structure? What is your host OS?
sai6a
@sai6a

@sai6a, Can you share a screenshot of your directory structure? What is your host OS?

I have Ubuntu 16.04 as host OS.Here is the screenshot of directory structure: https://github.com/sai6a/DSA/blob/master/Screenshot%20from%202020-09-14%2011-09-05.png

David Manthey
@manthey
@sai6a, What error are you seeing? If you type "docker inspect dsa_girder" does it show the mounts to the source directories?
sai6a
@sai6a

@sai6a, What error are you seeing? If you type "docker inspect dsa_girder" does it show the mounts to the source directories?

Actually I am making changes to the backend code. To create my own rest service, I made changes to the python files inside the docker container. The thing is I am finding it difficult to deploy my code into the container everytime. Everytime I make a small change in the code, and test its working, I have to copy the changed file to the container, only then i would be able to see my changes. I am thinking that whenever I make a code change locally, it should be mounted into the container.

This is what I get as response when i run "docker inspect dsa_girder"
https://raw.githubusercontent.com/sai6a/DSA/master/dockerinspect.log

David Manthey
@manthey
Based on the docker inspect command, the source directories aren't mounted. The deploy.sh script checks if the directories exist and only mounts them if they so. bash's check for a directories existence must be returning false (e.g., -d "$HISTOMICS_SOURCE_FOLDER" returns false).
If, from a bash prompt, running if [ -d "$HISTOMICS_SOURCE_FOLDER" ]; then echo "good"; else echo "bad"; fi prints "bad" then your environment variable or your folder is not set as expected.
sai6a
@sai6a

If, from a bash prompt, running if [ -d "$HISTOMICS_SOURCE_FOLDER" ]; then echo "good"; else echo "bad"; fi prints "bad" then your environment variable or your folder is not set as expected.

do i run it in the host os or inside the container?
If i run it in the host os, I am getting GOOD.
If I run it inside the container, meaning after I connect to the docker container with the connect.sh docker script, I am getting BAD.
How do I fix this?

David Manthey
@manthey
On the host. If you see GOOD on the host, then try removing your existing containers and recreating them (deploy.sh rm followed by deploy.sh).
sai6a
@sai6a

The issue is resolved! Thank you so much for the help @manthey.

On the host. If you see GOOD on the host, then try removing your existing containers and recreating them (deploy.sh rm followed by deploy.sh).

The issue is resolved! Thank you so much for the help @manthey.

sai6a
@sai6a

Hi @manthey ,
I am not able to run build.sh docker script.It is halted in middle.I tried many times but the code is not built.
tele@tele-H97M-D3H159:~$ digital_slide_archive/devops/build.sh
digital_slide_archive/devops/build.sh: line 9: ${@@Q}: bad substitution

@girder/meta-build@ build /opt/girder/girder/web_client
grunt "--girder-version=3.1.3.dev6+g317962d15" "--static-path=/home/ubuntu/.virtualenvs/girder/share/girder/static" "--static-public-path=/static" "--no-progress=false" "--watch" "webpack:plugin_histomicsui" "--env=dev"

Running "webpack:plugin_histomicsui" (webpack) task
Version: webpack 2.7.0
Asset Size Chunks Chunk Names
plugin.min.js 1.73 MB 0 [emitted] [big] plugins/histomicsui/plugin
plugin.min.css 21.4 kB 0 [emitted] plugins/histomicsui/plugin
plugin.min.js.map 960 kB 0 [emitted] plugins/histomicsui/plugin
plugin.min.css.map 91 bytes 0 [emitted] plugins/histomicsui/plugin
favicon.png 5.07 kB [emitted]
^X^C
Aborted!

Daniel Romberg
@djromberg
Hi, how can I invoke the unit tests for plugins? I am currently extending the LDAP plugin for arbitrary filter operations and extended its unit test. Before sending a PR, I want to ensure the test passes :)
I forked, modified the Dockerfile for RUN pip install -e plugins/ldap for a locally built image (which worked well) and it seems that the tests are also included. I just can't find the information how to run them.
David Manthey
@manthey
There are two sorts of tests in Girder's code base. There are some older tests that are run through cmake, and newer tests run through tox. The ldap plugin has the older tests. See https://girder.readthedocs.io/en/latest/development.html?highlight=cmake#legacy-unittest-tests for brief instructions. Once you've run cmake to configure everything, you can run just the tests for the ldap plugin via "ctest -V -R server_ldap.ldap".
Daniel Romberg
@djromberg
I see, I will try that, thanks!
Shubhang Kohirkar
@RazerEdge64
Hi, I've been through the api docs for girder and saw how it creates a user. But, is there a way to add extra field in the user collection? like login, email, firstname, lastname and maybe some other field to add ? Couldn't find it in the api : https://girder.readthedocs.io/en/stable/api-docs.html#module-girder.models.user
Brandon Davis
@subdavis

@RazerEdge64 a bit more detail may be helpful, but this might get you started. The User model (mongo collection) already has login, email, firstName, and lastName [1]. You've likely already noticed this, because you provide this info when you register for an account.

If you wan to extend the User model with additional properties, you'd need to create a small Girder plugin. Plugins are created as standalone python packages, you can check the docs and take a look at the cookiecutter [2].

As far as adding new properties to existing models, how you go about this will likely depend on your use case. Typically, you'll write a new endpoint that modifies some new property and use that endpoint from the client app. Here's the general docs on plugin development [3]. You'll have to make sure to expose the new field with exposeField [4].

This isn't the most straightforward thing to do, so the more specific info you can give about what you're trying to accomplish, the more helpful we can probably be.

I did notice above that you are trying to create a login form for a react app. If this is related, I would recommend creating a plugin that adds a new endpoint for user creation. You could basically copy the code from [5] and add your own custom properties all at once.

[1] https://github.com/girder/girder/blob/master/girder/api/v1/user.py#L149-L152
[2] https://github.com/girder/cookiecutter-girder-plugin
[3] https://girder.readthedocs.io/en/stable/plugin-development.html#defining-a-plugin-descriptor-class
[4] https://girder.readthedocs.io/en/stable/api-docs.html?highlight=exposefield#girder.models.model_base.Model.exposeFields
[5] https://github.com/girder/girder/blob/master/girder/api/v1/user.py#L160-L183

Shubhang Kohirkar
@RazerEdge64
@subdavis thanks !
Shubhang Kohirkar
@RazerEdge64
Hi @subdavis , Is there a way I can move multiple items to a different folder at the same time?
Gabriel Carmo
@GahFlorencio
image.png
hello someone there getting error on vagrant up error ?
Shubhang Kohirkar
@RazerEdge64
Hi guys, is there a way we can share a container among different hosts?
David Manthey
@manthey
Do you mean copying a docker image and starting a second container on a different host? Or accessing a docker container from another host? The first is done with standard docker commands. The second depends on how you expose and forward ports.
Shubhang Kohirkar
@RazerEdge64
Both actually, I tried the first method... It failed to work. I think if the first method works, it's pretty much what i need.
Shubhang Kohirkar
@RazerEdge64
Hi guys, need a small help. I would like to know if we can change the histomics ui viewer coordinates to pixel coordinates / tile coordinates.
David Manthey
@manthey
You would need to alter or override the showCoordinates code in histomicsui/web_client/views/body/ImageView.js. Tile size can vary from file to file, so you'll want to store the tileWidth and tileHeight from the data fetched in getTilesDef.
Shubhang Kohirkar
@RazerEdge64
Thanks, will try this!
Shubhang Kohirkar
@RazerEdge64
Another help !
I was going through the annotations in histomicsui but, I could not find circle or ellipse annotations. Although they were defined in annotation.py in large Image Module. Are they yet to be implemented?
David Manthey
@manthey
Yes; we've never implemented the UI to create or draw the circle or ellipse annotations. It wouldn't be a lot of work, it just hasn't been done.
Shubhang Kohirkar
@RazerEdge64
Thanks, good to know !
Christopher Andrews
@CryptArchy
(Cross posting from the girder_worker chat since I'm not sure which room is more active/appropriate) Running into a funny issue with our deployment of the DSA bundle. It seems like the Girder Worker can't access files/images that are inside private folders, which it needs to do in order to run the TIFF conversion on them. Is there some setup step I missed that makes the worker operate on the credentials of the user that initiates the job? According to the worker logs, it's trying to access files through the download api without credentials.
Saipraneeth99
@Saipraneeth99
  1. Using HistomicsUI , Can we download the pyramid file structure of the uploaded WSI?[File Structure: Tiles at each level].
    1. While storing annotations , Global /Pixel coordinates of the wsi are getting stored in the mongodb and even while downloading it as json. Is there any way to get The layer number of the tile (0 is the most zoomed-out layer) , The X coordinate of the tile (0 is the left side), The Y coordinate of the tile (0 is the top). Along with this the coordinates of that annotation/point with respect to tile. [ Coordinates ranging between (240,240) for a tile which is of 240*240 in dimensions.
      ->Are these features available in the present system without making any changes? Can You suggest how to get this information?
Sorry for the numbering mistake.. Those are 2 different questions.
David Manthey
@manthey
Individual tiles and arbitrary regions at arbitrary sizes can be downloaded via the item/tiles/zxy and item/tiles/region endpoints.
There are lots of options regarding those (downloading jpeg, png, or tiff, etc). All of the options for tile sources listed at http://girder.github.io/large_image/tilesource_options.html can be applied to the endpoints.
Annotations are stored in image coordinates. You can request annotations that are likely to intersect a limited range of pixels via the endpoint or database, but it will always be in image coordinates. You'd have to convert that to tile coordinates manually (checking the tile dimensions for whatever image you are using).
Shubhang Kohirkar
@RazerEdge64
Whenever we upload a .tiff or .svs image, How (& from where) are the tiles at various levels being loaded on zoom and pan events on the viewer?
I could understand that all of this is handled by core GeoJS inside the node modules.
For example :
  1. In ImageView.js, the zoom and pan events are handled and the bounds are set to the viewer object.
  2. This is used in geojs.js in ImageViewerWidget and a TileLayer is created using this viewer.
  3. The TileLayer is defined in /girder_large_image/web_client/node_modules/geojs/geo.js.
    From here, I am lost. I am not able to understand how tiles are stitched onto the viewer for the zoom
    level and for the bounds.
    Please correct me if my understanding of the above steps is wrong.
    Basically, I am trying to understand how stitching of the tiles is taking place on the viewer.
David Manthey
@manthey
GeoJS does all the work here. Conceptually, it handles more than just images in pixel-space coordinates (it can handle map projections and reproject tiles). However, it basically has a class that represents a pyramidal tile source that knows the size of a tile and the size of the image. Depending on the zoom level of the display, it converts the bounds of the display to pixel-space coordinates and desired resolution. From this it can enumerate al the tiles needed to cover that space. It then creates a priority queue, requesting tiles at the center of the view port first. Tiles that aren't already loaded are fetched as HTML Images, then converted to (typically) webgl textures, after which they are rendered to screen with the appropriate basis transformation. Lower resolution tiles are also loaded (but hidden by higher resolution tiles), so that when you pan you see some of these lower resolution tiles immediately.
And, just as general note, we've been shifting from Gitter to Discourse (https://discourse.girder.org/).