QIICR / QuantitativeReporting

Segmentation-based measurements with DICOM import and export of the results.
https://qiicr.gitbooks.io/quantitativereporting-guide
Other
21 stars 23 forks source link

Design/requirements for the initial version of the new Reporting module #74

Open fedorov opened 8 years ago

fedorov commented 8 years ago

There should be different modes of operation for annotation vs viewing (from existing SR data).

Annotation mode:

fedorov commented 8 years ago

let's do prototype in this one? http://pencil.evolus.vn/Features.html

fedorov commented 8 years ago

initial iteration, done in Pencil

reporting_v2_sketch

Source file and screenshot are also available https://github.com/fedorov/Reporting/tree/v2-design/Doc/design

@che85 can you join the QIICR hangout tomorrow to have some brainstorming about this? If you have any suggestions/iterations before that, they are definitely welcomed, but I prefer to have an early prototype and early discussion then waiting for another 2 weeks.

che85 commented 8 years ago

Looks good to me. Anyway it was better, that you created the first draft because you had a more concrete idea of all this than me. I will be joining the QIICR call.

fedorov commented 8 years ago

I agree - that's what I thought too!

fedorov commented 8 years ago

Notes from the discussion at the QIICR hangout Sept 16, 2016:

pieper commented 8 years ago

Here's a module for handling a bunch of measurements using a json attribute of a mrml node:

https://github.com/DCBIA-OrthoLab/AnglePlanes-Extension/tree/master/AnglePlanes

On Thu, Sep 15, 2016 at 10:34 AM, Andrey Fedorov notifications@github.com wrote:

Notes from the discussion at the QIICR hangout Sept 16, 2016:

  • @pieper https://github.com/pieper about MRML node - may make sense to use a ScriptedModule MRML node with the JSON content; can constraint node selector by an attribute.
  • Consider using Table node for content of the measurement report?
  • Add capability to plot the measurements in the table and configure the layout to include the plot

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/QIICR/Reporting/issues/74#issuecomment-247346214, or mute the thread https://github.com/notifications/unsubscribe-auth/AAHsfVrIQ_b-Mhvgl4X-Tkq9H2oCmJ34ks5qqVeBgaJpZM4J71wD .

fedorov commented 8 years ago

Questions from @che85

  1. What would the measurement report selector display in the first place? A new vtkMRMLScriptedModuleNode?After saving a report

It should give an option to create new (that is defined by a flag on node selector widget). After saving, it will remain the same. After finalizing, everything should probably become locked/read only, and switch to a view mode.

  1. Where do I get those measurements from? JSON file? If so, where would it be selected?

While creating the new report, they will come from some statistics tool. We have LabelStatistics module, and it will need to be augmented to allow execution from a scripted module (not sure it can be done right now) and to communicate quantity/units etc codes. It may take some thinking how to design the architecture to allow measurement plugins, but in the beginning it may make sense to keep measurement calculator fixed.

  1. What exactly is TrackingID? Maybe the name of the segment?

Tracking ID is a human-readable identifier of the measurement group. It does not need to be unique. We should have a way to initialize it automatically, but allow user to modify it if needed (as an advanced option).

Now that you asked, I remembered that we worked to add Tracking ID and UID to the segmentation object itself, and the corresponding CP-1496 has become standard. We need to add this to dcmqi, I created an issue https://github.com/QIICR/dcmqi/issues/87.

  1. Quantity 1 would be what? Where do we get the information from? Measurements report? What would it be in the first place? Or really just those values from label statistics?

For the measurements loaded from DICOM, Quantity 1 will be Code Meaning from the report, as in https://github.com/QIICR/dcmqi/blob/master/doc/sr-tid1500-ct-liver-example.json#L48 (another action item on dcmqi side is converter from SR to JSON metafile https://github.com/QIICR/dcmqi/issues/88). For the newly created reports, as I mentioned above, the measurement calculator will need to supply this for the new report.

  1. The user interface for viewing, would it be the same with disabled components? I could imagine having two modes (Annotation, Reading or something similar) where the basic components would be the same like segmentations, measurements, but we would have different selectors. What do you think?

I think to make it prettier, we can remove certain components from the layout that are irrelevant, such as editing tools. I am also wondering how customizable is the Segmentations list widget. We should look in more detail when you get there. For the initial iteration, it is ok to keep the UI the same for viewing.

Going forward, let's keep questions like this on github, so we can have a chance to go back and revisit our thinking (and also make it available for review for the other collaborators and prospective users).

che85 commented 7 years ago

@fedorov Which effects should I hide from the segmentation editor?

Right now I reorganized it like that: image

che85 commented 7 years ago

@fedorov when using predecessor concept, how would you detect the final(most recent) version of the report? Basically you can only depend on those being stored in the SlicerDICOMDatabase and you would have to iterate through all SRs for the patient of the current SR and climb up the chain of references....

che85 commented 7 years ago

@fedorov Another thing is: How would you want to save the intermediate results?

che85 commented 7 years ago

Any further thoughts on this issue, otherwise let's close it?

fedorov commented 7 years ago

@che85

when using predecessor concept, how would you detect the final(most recent) version of the report? Basically you can only depend on those being stored in the SlicerDICOMDatabase and you would have to iterate through all SRs for the patient of the current SR and climb up the chain of references....

Yes, I agree, I don't know of a better way.

How would you want to save the intermediate results?

I have to admit I don't recall what exactly I was thinking at the time I put this in the initial issue. I think maintaining non-DICOM representation in some temporary space is too cumbersome, so let's not do it.