Good Morning. I’m starting to think about how to deploy SlicerQR to 25,000 PCs across the Mayo Enterprise. After building the package, it consists of over 7000 files at a total size of over 700MB. It would be seriously frowned-upon to propose deploying it to 25,000 PCs. So, my question is: Would there be any disadvantages to placing the installation in 1 place on a file share and have the users execute SlicerQR from a folder there? Would there be conflicts with sharing? Once the app is loaded into local memory, what are potential problems with a common launch path?
The FourPanesViewer is pure VTK. It has no GUI widgets, no proper DICOM parser, no proper widgets, etc. The Slicer core will not be significantly smaller than 300MB just by removing DLLs, but you would need to reengineer the application. Since 300MB is smaller than a typical image that the user downloads by the dozens and you don’t actually need to deploy the 300MB Slicer, only a 10MB launcher, the effort for reengineering (and maintain the ultra-lean Slicer core) is very hard to justify.
Yes, AI is a very trendy topic, so there is lots of activity around it in the Slicer community, too. This is a good example of why creating an ultra-lean Slicer core would not worth the effort: users would keep asking for enabling features and we would end up using the full Slicer core quite quickly.
I know I’m flooding you with questions here. Here’s more…
What are you using for DICOM parsing. In FourPanesViewer, I am using David Gobbi’s vtkDICOM functions to parse DICOM. I think Gobbi’s objects have been integrated into VTK installations in VTK 9.
I’m also using GDCM for JPEG 2000 decompressing. Does Slicer handle JPED 2000 compression? If so, how? I’m still diving into the code, and it helps to know what to look for.
vtkDICOM can handle basic DICOM - 3D Cartesian volumes with uniform spacing. No 2D+t, no 3D+t, no DICOM segmentation objects, no DICOM RT structure sets, etc. It cannot handle some of the technically valid but tricky series (such as overview orthogonal slice embedded in the series; series that contain slices with multiple orientations, …). You cannot rely on this if user may want to be able to open images acquired with a variety of devices, using a variety of imaging protocols.
Yes, Slicer uses GDCM and DCMTK, both can handle compressed DICOM images. Not all compression types are supported (for example, h264 video compression is not), but jpeg is, and I think jpeg2000, too.
Wow, that’s great to know about vtkDICOM. I was really going in the wrong direction. Y’all saved my life. Thanks.
I might be mistaking, but I’m under the impression that DCMTK does not handle JPEG 2000 compression. If so, it a recent development. Liqin wrote our QREADS DICOM receiver and is now using GDCM because DCMTK either did not do JPEG 2000, or there were issues with it.
Also, I did inform my team that the smallest size we might could possibly achieve is around 300MB. So, we will come up with a deployment scheme that will work. When I suggested the possibility of SlicerQREADS (SQR) staying up in the background once launched, the concern was what if QREADS it terminated and SQR becomes orphaned? Obviously, SQR would need to detect QREADS PID presence at some short interval when SQR is not in focus. The QREADS PID would be passed as an argument to SQR upon launching.
@lassoan@pieper@jcfr - Question: As you know, building SlicerQREADS can take hours. I know if I make changes to the Python script, I don’t have to rebuild. But do I need to perform the 3 hour rebuild if I make a small modification to the C++ code?
You only need a full build once. After you make modifications in the C++ source files and build again then only the changed files are compiled and linked, which typically takes about 15-30 seconds.
DCMTK tried to make some income from not bundling JPEG2000 codec with the free DCMTK version. Slicer falls back to read with GDCM if DCMTK fails to decode an image.
There are many options for solving this, but checking if QR process is running (based on PID) would be an easy way of doing it.
Could any of you please describe your Slicer development environment to us. Do you use a text editor for Python, or an IDE? PythonQT? I’m sure you use Visual Studio. What is the proper development environment for us here at Mayo. We need to rapidly ramp up to start developing.
Most urgent id to eliminate the Kitware splashes and brightening the colors of the cross reference markers on the images.
OK, I’m finally starting to understand. I know you’ve been trying to tell me many time in the past, it’s mostly about the Python! OK, I’m looking for the python code for the following:
To set the colors of the reference markers on my four image panes.
Eliminate the Kitware splashes upon launching
Perform window / level interactively with the left and right mouse button pressed and dragging.
Thank you @jamesobutler. Pleased to meet you. Yes, I am using the Slicer Custom App framework, here is a picture of what I mean by reference markers. Also, I need to lighten up the background colors of the textboxes containing the slice locations in the upper right corner of each image pane. Or better still, make the text white.
My managers are saying that the reference markers are too dark and are sometimes difficult to see. I’m just learning how to program Slicer. Here is the Python code that creates the reference markers…
Here’s some code setting them visible. Is there a reference manual somewhere, or a way to discover available Slicer methods for certain objects? Is there an IDE with intellisense?
def setReferenceMarkersVisible(visible):
for sliceLogic in slicer.app.applicationLogic().GetSliceLogics():
sliceLogic.GetSliceCompositeNode().SetSliceIntersectionVisibility(visible)
sliceLogic.GetSliceNode().SetWidgetVisible(visible)
Ok I see. The slice controller area of the slice views. Have you registered a custom layout in that image there (as in customize view layout)? That’s how a custom layout can be created which allows you to specify different colors for the slice viewers. I’m not aware of a a specific layout view that looks like that in the latest versions of Slicer.
As it relates to python autocomplete you can see the state of things from this older thread. Note that I really haven’t tried it any further. As it relates to figuring what methods are supported by various objects I often use the python interactor in slicer and just use tab completion to look into the available methods. So like volume_node.[PRESS TAB].
@spycolyf The color are consistent with the original design you shared with me. Which colors should be used instead ? Providing the hexadecimal code for each colors would be ideal.
Thanks everyone for your extremely helpful responses. I’ll responding in more detail when I return from my tax appointment in about an hour. But here’s my immediate answer to @jcfr 's question. Same colors, but lighter. I will send the hex shortly. Question though: can the reference marker line colors be adjusted independently of the image background colors? Id like the background colors to remain the same, but the ref line colors to be brighter which corresponds to the 3D graphics boundary lines in the lower right quadrant. If not independent I will pick the best overall color. Thanks.