Items Completed

BJS - left this in place for Historical reference

04/01/11 to 05/09/11

Targeted for these two milestones: Alpha Test then Beta Release

Items for Alpha Testing

  • (BJS) DONE - VERIFY WITH DAVID, Better y-axis labeling re. Mz, Mx, Mxy (last only if REAL+IMAG plotted).
  • (BJS) DONE - reported some science bugs, Hook up sciency bits to the Root Reflect Tab GUI
  • (BJS) DONE - Finish GUI bits for Hyperbolic-Secant and Root Reflection (including pop-up warning of > 64 points).
  • (BJS) DONE - Needs work … Add a User Manual version into docs
  • (BJS) DONE - Philip done it, actually, Design and implement View dialog for PulseProjects from Manage dialog
  • (BJS) DONE - Reinstate Help menu item for PDF user manual once the user manual exists

  • (DCT) Convert interpolate and rescale to python and implement. - DONE
  • (DCT) Finish design of rfpulse_project object (Just need Root reflection) - DONE
  • (DCT) Design and implementation of Database for the above objects (Still need root reflection) - DONE
  • (DCT) Remove global variables, referenced in pulse_func calls for SLR, etc, and clean up code in all the slr related routines. - DONE
  • (DCT) Review SLR "FIXME"s with Jerry and see if any changes needed for Beta.
    • (DCT) Review how timepoints are handled in matlab vs rfpulse vs how they should be handled. - DONE
    • (DCT) Make this work (or raise an error) with an even number of points - DONE
  • (DCT) Check and fix dwell/duration on HS tab. - DONE
  • (DCT) Check error messages (eg. duration of 300) - DONE

  • (KY) (DONE - Needs testing) Export to Siemens (and Matpulse) file format.
  • (KY) DONE - See how to implement weightings on firls() routine or disable least squares for beta.
  • (KY) (DONE - Needs editing) Fill in Appendix B for each transform a description of how the transform and its parameters act.

  • (PS) Fix any Import/Export and inflate/deflate issues due to recent DB changes. - DONE
  • (PS) Make UI, objects, and database be read-only when a pulse project is public - DONE
  • (PS) When Saving: Implement deflate to dictionary for all objects. Add the last_saved to pulse_project. Then implement saving by first seeing if anything in the UI has changed, pop up a dialog if anything has (See get_cooked_gui_data and get_raw_gui_data) - DONE
  • (PS) Fix machine-settings on basic info. page: How it works and adding new field to db. - DONE
  • (PS) Put up a error dialog (when the user hits run) if a user puts in an angle that is not 180, 90, or 0 to 30, for the create_slr transformation. - DONE

  • (Philip and David) Determine if major changes to RFPulse standalone DB are finished. Consider schedule for merging with Vespa DB - DONE

Items specifically for the Beta Release

  • (BJS) DONE - Change plotting of profiles to use step graph, instead of point-to-point to emulate MR machines.
  • (BJS) DONE - needs pass 3 Pass 2 on User Manual

  • (BJS and Others) DONE - Decide how to work Main wiki with underlying RFPulse and Simulation wiki architectures.
  • (BJS and Others) DONE - Implement wiki redesign.
  • (DCT) (DONE - Needs 2nd edit) Build an RFPulse version of Appendix A in documentation - describe how params, results, etc. all fit together under the hood.

  • (KY) Edit Appendix B in User Manual, fill in text describing the ‘algorithm' for each transform. - DONE

  • (PS) Pre-populate database with 2 (or more) examples of pulse projects. - DONE
  • (PS) Ensure uniqueness on name of pulse_projects - DONE
  • (PS) Integration of db code and db with main program.
    • Move code from local misc.py to common.misc.py or rename, etc. - DONE
    • Move menu code to util_menu.py - DONE
    • Alphabetize functions, especially in db.py - DONE
    • Integrate rfpulse.sqlite with vespa.sqlite - DONE
  • (PS) Test integrated db for Open/Save, Import/Export. - DONE

02/17/11 to 03/31/11

  • (BJS) Add new TransformationBase object (that inherits from auto_gui/transformation_base) from which tab objects inherit; give clearer descriptions to names of checkboxes in transformation.py & change the write up on this.
  • (BJS) Add a subobject of TransformationBase, called CreatePulseBase (or a similar name)
  • (BJS) Put into lower tabs an "x" button to remove that tab, and a pop up control to warn users that this will force an update.
  • (BJS) Allow users to plot real and imaginary components with separate colors (e.g. for Spin Echo).
  • (BJS) Make changes to UI for root reflection based on feedback from Karl and David.
  • (BJS) Implement items in View (Plot Options) menu.
  • (BJS) Add check/warning if time_steps > 1/4 of calc_resolution.

  • (DCT) Removed amplitude_factor from db. Converted interpolation_factor to an integer.
  • (DCT) Describe what needs to be plotted for all the check boxes at bottom of transformation page.
  • (DCT) Return the x,y, and z values from bloch equations, not limited results that we now have. (Actually obtained the 4 possible raw results that we would need to calculate any of the 16 possible results based on the UI selections.)
  • (DCT) Change Bloch results into a lazily evaluated function or parameter. Delete Bloch results when update waveform. (Actually implemented this as stated in stated in the previous ‘todo' item, using a function, but without lazy evaluation. Bloch results are regenerated at the same time as the rf waveform is changed, so that should take care of the second issue
  • (DCT) Implement delete transform (tab) functionality.
  • (DCT) Implement update all (downstream) calculations.
  • (DCT) Wire up calculation code for the "Analytic" pulse type, Hyperbolic-Secant.
  • (DCT) Compare my current Filter to Jerry's new filter.
  • (DCT) Implement clone functionality (clone in db) in manage pulse projects.
  • (DCT) Improve consistency issue on Machine Settings.
  • (DCT) See if possible to speed up Bloch routines in RFPulse.

  • (PS) Also pre-populate with a generic machine settings (or a Siemens, etc).
  • (PS) Add inflate/deflate to XML for all objects.
  • (PS) Implement export and import of pulse projects from XML.
  • (PS) Set up help menus with standard entries, from Simulation.

  • (KY) Convert Matpulse code for root reflection to python

12/06/10 to 02/16/11

  • Implement Bloch equations for calculating profile.
  • Fix issue with regenerating frequency profiles.
  • Dwell time issue, fix.
  • Fix auto_gui_object's so that when you click on the ".py" it starts up a test program (inherit from dialog, frame?).
  • Rethink flow on first transformation: put Concatenate, import on main menu or on list of transformations? Consider putting a submenu on New with these options (SLR, Hyperbolic-Secant, Gaussian, Sinc-Gaussian).
  • Implemented db routines for ifr transformation.
  • Add in Delete routines for all objects.
  • Implement "Update" in db.py for all rfpulse project items.
  • Implement a separate table for templated machine settings. Added db routines for reading, writing and searching.
  • "fix" Tools menu: Put actual transforms directly under Tools (rename IFR to "Interpolate, Filter, ReScale" in menu.
  • Review (and remove) plot routines in PulseProject.
  • Thin out the number of objects in mrs_transformation.py
  • Add plotting to IFR transformation.
  • Add insert/fetching/
  • Build a copy-tab (or clone) function (a la Simulation): e.g. cloned_project = copy.deep_copy(rfpulse_project); change uuid; notebook.add_project(cloned_project)
  • Consider whether we need to revise the technique used to store waveforms, and other array objects in the database. (Decision: Since only storing the time domain waveform (under 1000 pts) can keep it as is: i.e. storing each point as a row in the db, and specifying datatypes, etc. No need under these conditions to go to using a data blob.)
  • Propagate "get_type_for_value()" method to other enumeration objects.
  • Removed rfpulses table from db.
  • Simplified pulse project so it has only one ID. It is called ID, but contains the value that was in UUID.
  • Fixed IFR in db: I.e. changed name and composition of IFSR to IFR.
  • Decide on how to display plots (fixed size, variable size, etc). [Decision is to allow them to be variable size, and put them in the oder in which they are listed in the check boxes - for all that are checked].

As of 12/06/10

  • Translated matpulse code (written in matlab) for SLR pulse generation into python to test the feasibility of project and to make sure there were no major show stoppers.
  • Planned the overall flow of the program in terms of transformations that are saved to database (db) for provenance, with each transformation having a set of parameters and results (rfpulse, waveform and gradient). The output result of one transformation is the input of the next transformation. Have Jerry Matson's sign-off on this overarching design.
  • DB layout using a web based tool (http://ondras.zarovi.cz/sql/demo/).
  • Creation of the actual database, including pulse projects, machine settings, and two transformations: The creation of pulses, and IFR (interpolation, filtering and Rescaling).
  • Built the initial user interface (UI) for a set of pulse_projects - each one having a set of transformations; the basic transformation user-interface object from which all other transformations will inherit (subclass); and the panels for pulse creation and IFR.
  • Wrote the database code for inserting and fetching pulse projects and the SLR Transformation (CREATE_SLR).
  • Came up with an interesting way to deal with [wiki:RFPulseEnumerations that keeps all the db and UI information in one place.