Opened 9 years ago

Closed 9 years ago

Last modified 9 years ago

#768 closed task (fixed)

MeLuDI v.1.2.2 bug fixes and improvements

Reported by: olle Owned by: olle
Priority: major Milestone: MeLuDI v1.2.3
Component: net.sf.basedb.meludi Keywords:
Cc:

Description

This ticket covers bug fixes and improvements to MeLuDI v.1.2.2.

Change History (25)

comment:1 by olle, 9 years ago

Status: newassigned

Ticket accepted.

comment:2 by olle, 9 years ago

Traceability note:

  • MeLuDi v.1.0 was introduced in Ticket #690 (MeLuDi - Registration wizard for melanoma-lung cancer projects).
  • MeLuDi v.1.1 was introduced in Ticket #718 (MeLuDi v.1.0 bug fixes and improvements).
  • MeLuDi v.1.2 was introduced in Ticket #725 (MeLuDi v.1.1 bug fixes and improvements).
  • MeLuDI v.1.2.1 was introduced in Ticket #759 (MeLuDi v.1.2 bug fixes and improvements).
  • MeLuDI v.1.2.2 was introduced in Ticket #767 (MeLuDI v.1.2.1 bug fixes and improvements).
Last edited 9 years ago by olle (previous) (diff)

comment:3 by olle, 9 years ago

(In [3258]) Refs #768 Updates due to version number change to "1.3-dev".

  1. Version number change to "1.3-dev":
    a. Outermost Ant XML build file build.xml in / updated.
    b. Extensions XML configuration file extensions.xml in META-INF/ updated.
    c. Javascript file meludi-2.js in resources/ updated.
    d. Javascript file samplereportgenerator.js in resources/reports/ updated.
    e. Java class/file Meludi.java in src/net/sf/basedb/meludi/ updated.

comment:4 by olle, 9 years ago

Bug report:

  • Parsing a Qubit value file containing a line, where the "Units" column does not have value "ng/ml", will result in the table updating stopping prematurely. Since all lines in a Qubit value file often have the same value in the "Units" column, this will result in the DNA concentration fields not being updated. The user is not notified of the cause of the problem.

Analysis:

  • Function exreg.parseQubitFile(data) in Javascript file extraction_registration.js in resources/sampleproc/ reads lines from a Qubit value file, processes the data read, updates the internal JSON objects for the items with new values for DNA Qubit concentrations, and finally calls function exreg.updateDetailsTable() to update the table fields with fresh item data. The problem occurs because the data initially read from the file is of type string, which normally will be converted to type number, when multiplied with a conversion factor to make the value be represented in ng/µl units, which is used in the table. However, if the units already are correct, no such conversion will be performed, and the execution crashes when function exreg.updateDetailsTable() calls utility function Meludi.formatNumber(number) in Javascript file meludi-2.js in resources/ with number equal to item.dna.qubitConc, since the latter calls number.toFixed(numDecimals), which is undefined when variable "number" is a string.

Solution:

  • Function exreg.parseQubitFile(data) in Javascript file extraction_registration.js in resources/sampleproc/ should convert the variable for a read concentration value to the correct type early on. In addition, multiplication with a dilution factor should be performed independently of the value of the units.
Version 0, edited 9 years ago by olle (next)

comment:5 by olle, 9 years ago

(In [3268]) Refs #768. Bugs fixed in DNA/RNA registration/quantification wizard for parsing a Qubit value file for concentration values, when the units differ from "ng/ml". In this case, no multiplication is performed with either a dilution factor (Bug 1) or a unit conversion factor, which results in the read value not being converted from type string to number (Bug 2, the code should not rely on side effects for type casting), leading to trouble when function exreg.updateDetailsTable() in Javascript file extraction_registration.js in resources/sampleproc/ calls utility function Meludi.formatNumber(number) in Javascript file meludi-2.js in resources/ with number equal to item.dna.qubitConc, since the latter calls number.toFixed(numDecimals), which is undefined when variable "number" is a string.

  1. Javascript file extraction_registration.js in resources/sampleproc/ updated in function exreg.parseQubitFile(data):
    a. The variable for a read concentration value is converted to the correct type early on.
    b. Multiplication with a dilution factor is performed independently of the value of the units.

comment:6 by olle, 9 years ago

Functional specification update:

  • MeLuDI should be updated in DNA/RNA registration/quantification wizard for parsing a qPCR value file for DNA ΔCt values, to ignore lines with sample ID values not found for the current start plate. Currently, only specific sample ID values like "QCT" and blank values are skipped. The update would allow extra samples to be analyzed in parallel to the MeLuDI samples.

Design update:

  1. Javascript file extraction_registration.js in resources/sampleproc/ updated:
    a. Function exreg.parseQPcrFile(data) updated to call function exreg.findRnaOrDna(sampleId, lineNo, messageId) with argument messageId set to null, in order not to set input status to invalid, in case extra sample id values are found. If result from function exreg.findRnaOrDna(...) is null, i.e. no sample is found for the sample ID in question, a notification is stored in new variable qPcrFileInfoText (any previous entry is overwritten), after which the processing proceeds with the next line in the file. If any notification exists in variable qPcrFileInfoText when the whole qPCR value file is processed, a message is displayed on the web page.
    b. Function exreg.findRnaOrDna(sampleId, lineNo, messageId) updated to check if the value of argument messageId differs from null, before setting status for the field with that id to invalid.

comment:7 by olle, 9 years ago

(In [3271]) Refs #768. MeLuDI updated in DNA/RNA registration/quantification wizard for parsing a qPCR value file for DNA ΔCt values, to ignore lines with sample ID values not found for the current start plate. Currently, only specific sample ID values like "QCT" and blank values are skipped. The update allows extra samples to be analyzed in parallel to the MeLuDI samples.

  1. Javascript file extraction_registration.js in resources/sampleproc/ updated:
    a. Function exreg.parseQPcrFile(data) updated to call function exreg.findRnaOrDna(sampleId, lineNo, messageId) with argument messageId set to null, in order not to set input status to invalid, in case extra sample id values are found. If result from function exreg.findRnaOrDna(...) is null, i.e. no sample is found for the sample ID in question, a notification is stored in new variable qPcrFileInfoText (any previous entry is overwritten), after which the processing proceeds with the next line in the file. If any notification exists in variable qPcrFileInfoText when the whole qPCR value file is processed, a message is displayed on the web page.
    b. Function exreg.findRnaOrDna(sampleId, lineNo, messageId) updated to check if the value of argument messageId differs from null, before setting status for the field with that id to invalid.

comment:8 by olle, 9 years ago

(In [3274]) Refs #768. MeLuDI updated by removal of annotation type Annotationtype.SOURCE_ITEM_NAMES, since it has been replaced by a comma-separated list string in new start plate text annotation of type Annotationtype.SOURCE_ITEM_NAMES_LIST_STRING. The reason for the change was that the old annotation did not not guarantee that the order of retrieved items in a list was the same as when the list was stored:

  1. Data access object class/file Annotationtype.java in src/net/sf/basedb/meludi/dao/ updated by removal of annotation type SOURCE_ITEM_NAMES of type Type.STRING for bioplates.
  2. Java servlet class/file InstallServlet.java in src/net/sf/basedb/meludi/servlet/ updated in protected method void doGet(HttpServletRequest req, HttpServletResponse resp) to not include annotations of string annotation type Annotationtype.SOURCE_ITEM_NAMES for bioplate items.

comment:9 by olle, 9 years ago

(In [3275]) Refs #768. MeLuDI updated with bug fix in NanoDrop sample ID file generation in DNA/RNA extraction wizards. The file now contains 8 rows and 12 columns, instead of 8 rows and 24 columns:

  1. Java servlet class/file ExtractionServlet.java in src/net/sf/basedb/meludi/servlet/ updated in protected method void doGet(HttpServletRequest req, HttpServletResponse resp) for command "DownloadNanoDropSampleIdFile" to create a file with 12 columns, instead of 24.

comment:10 by olle, 9 years ago

Functional specification update:

  • MeLuDI should be updated to create DNA and RNA extract items for specimens already when the latter is registered, instead of in the DNA/RNA registration/quantification wizard, when the DNA and RNA has been extracted. The change is motivated by the desire to allocate storage positions for the extracts at the same time as for the specimens and input DNA/RNA. The order of items in the DNA/RNA storage boxes will then come in ascending item name order, which is desired. Previously, this was not guaranteed, since input DNA/RNA was allocated storage positions at registration, which might occur before the extracts was created for an even earlier registered specimen.

Several parts of the software will be affected by the change:

  1. Registration wizards should present three storage locations for each specimen tube: Specimen location, DNA extract location, RNA extract location. When a specimen tube is registered, all three items should be created, and allocated the specified storage locations.
  2. The Lab tracking protocol for Allprep isolation wizard should be updated in step 1 to only show input DNA and RNA items together with specimens in the menu of unprocessed extract source items. Unprocessed DNA and RNA items for specimens should not be included, since they are not extracted yet.
  3. The DNA/RNA registration/quantification wizard should be updated to retrieve the existing DNA and RNA extract items for a specimen, instead of creating new items.
  4. The DNA/RNA extraction wizards should be updated to specify the storage locations for DNA and RNA extracts in the Lab tracking sheets/reports.

Design update:

General:

  • The change motivates updates of layout and code notation, in addition to updates in functionality:
    a. Instead of a single storage location for a specimen, now up to three needs to be specified. In order to save space and make the layout more readable, a storage location will be specified on a single line, instead of two, as was used previously (one line for box specification, and one for position in the box). Error messages for both box and position choices, therefore now has to be written in the same space.
    b. Previously, the only well position of interest for a the RNA extract for a specimen, was related to the position on the NanoDrop plate. In order to avoid confusion, JSON item item.rna.well is renamed item.rna.nanoDropWell in scripts.

Servlets:

  1. Java servlet class/file SpecimenTubeServlet.java in src/net/sf/basedb/meludi/servlet/ updated:
    a. Protected method void doGet(HttpServletRequest req, HttpServletResponse resp) updated for command "FindStoragePositions" to find three storage locations in separate boxes for each specimen tube, for the specimen itself (except the first tube), the DNA extract, and the RNA extract.
    b. Protected method void doPost(HttpServletRequest req, HttpServletResponse resp) updated for command "CreateSpecimenTubes" to create a DNA and RNA extract for each specimen, and set storage position to the ones allocated earlier on.
    c. Private method BioWell fetchBioWell(DbControl dc, JSONObject jsonSpec) updated to call new private method BioWell fetchBioWell(DbControl dc, JSONObject jsonSpec, String boxType) with value for argument boxType set to null.
    d. New private method BioWell fetchBioWell(DbControl dc, JSONObject jsonSpec, String boxType) added. It fetches the BioWell specified in JSONObject jsonSpec for the storage box specified by argument boxType, with values null (default, specimen), "DNA", or "RNA".
  2. Java servlet class/file PersonalRegistrationServlet.java in src/net/sf/basedb/meludi/servlet/ updated:
    a. Protected method void doPost(HttpServletRequest req, HttpServletResponse resp) updated for command "CreateCase" to create a DNA and RNA extract for each specimen, and set storage position to the ones allocated earlier on.
    b. Private method BioWell fetchBioWell(DbControl dc, JSONObject jsonSpec) updated to call new private method BioWell fetchBioWell(DbControl dc, JSONObject jsonSpec, String boxType) with value for argument boxType set to null.
    c. New private method BioWell fetchBioWell(DbControl dc, JSONObject jsonSpec, String boxType) added. It fetches the BioWell specified in JSONObject jsonSpec for the storage box specified by argument boxType, with values null (default, specimen), "DNA", or "RNA".
  3. Java servlet class/file ExtractionServlet.java in src/net/sf/basedb/meludi/servlet/ updated:
    a. Protected method void doGet(HttpServletRequest req, HttpServletResponse resp) updated for command "GetUnprocessedItems" to load info for DNA and RNA extracts to specimens, including storage locations for the former. Storage location info will also be included for input DNA and RNA. Only DNA and RNA extracts passing new filter method boolean itemIsExtractSourceItem(String itemName) will now be included in the returned list.
    b. Protected method void doPost(HttpServletRequest req, HttpServletResponse resp) updated for command "RegisterDnaRna" to not create new DNA or RNA extract items, but update the items related to the specimen.
    c. New boolean itemIsExtractSourceItem(String itemName) added. It calls new private method int numberOfSpecificCharacters(String str, char c) to check if the number of dots in the item name is 1, in which case the item is classified as an extract source item, else not.
    d. New private method int numberOfSpecificCharacters(String str, char c) added. It returns the number of times the specified character occurs in the input string.

JSP and Javascript files:

  1. Javascript file specimentube.js in resources/sampleproc/ updated:
    a. Function initializeStep3() updated with input fields for DNA and RNA storage locations for each specimen.
    b. Function storagePositionsLoaded(response) updated to retrieve recommended storage positions for DNA and RNA extracts for each specimen, and to set event handlers for the new fields.
    c. Function boxOnKeyUp(event) updated to retrieve parameter boxType from the call, in order to print error messages next to the correct storage location field.
    d. Function wellOnChange(event) updated to retrieve parameter boxType from the call, in order to check the correct storage location field.
    e. Function onBoxValidated(response, index) updated to onBoxValidated(response, boxType index) with new argument boxType to retrieve parameter boxType from the call, in order to validate the correct storage location field.
    f. Function validateStep3(event) updated to retrieve value of tubeContentType from input field, in order to check validity of the correct storage location field(s).
    g. Function submit() updated to include information on DNA and RNA storage locations for specimens, when sending JSON info to SpecimenTubeRegistrationServlet for registration.
  2. Javascript file persinfo.js in resources/personal/ updated:
    a. Function initializeStep4() updated with input fields for DNA and RNA storage locations for each specimen.
    b. Function storagePositionsLoaded(response) updated to retrieve recommended storage positions for DNA and RNA extracts for each specimen, and to set event handlers for the new fields.
    c. Function boxOnKeyUp(event) updated to retrieve parameter boxType from the call, in order to print error messages next to the correct storage location field.
    d. Function wellOnChange(event) updated to retrieve parameter boxType from the call, in order to check the correct storage location field.
    e. Function onBoxValidated(response, index) updated to onBoxValidated(response, boxType index) with new argument boxType to retrieve parameter boxType from the call, in order to validate the correct storage location field.
    f. Function validateStep4(event) updated to retrieve value of tubeContentType from input field, in order to check validity of the correct storage location field(s).
    g. Function submit() updated to include information on DNA and RNA storage locations for specimens, when sending JSON info to SpecimenTubeRegistrationServlet for registration.
  3. Javascript file extraction_preparation.js in resources/sampleproc/ updated:
    a. Function initializeStep3() updated by adding columns for RNA and DNA plate positions to the left of the comment column.
    b. Function updateDetailsTable() updated by changing name of JSON variable for RNA NanoDrop plate position from item.rna.well to item.rna.nanoDropWell, in order to increase readability of the code.
  4. Javascript file extraction_registration.js in resources/sampleproc/ updated:
    a. Function validateStep1(event) updated when calling ExtractionServlet with command "GetSourceItemListFromStartPlate" to add new parameter includeSpecimenExtracts with value true.
    b. Function initializeStep3() updated by adding columns for RNA and DNA plate positions to the left of the volume columns for each extract.
    c. Function updateDetailsTable() updated by changing name of JSON variable for RNA NanoDrop plate position from item.rna.well to item.rna.nanoDropWell, in order to increase readability of the code.
  5. Javascript file extraction_formcopy.js in resources/sampleproc/ updated:
    a. Function initializeStep3() updated by adding columns for RNA and DNA plate positions to the left of the comment column for a lab tracking sheet, and to the left of the volume columns for each extract for a lab tracking report. Also updated when calling ExtractionServlet with command "GetSourceItemListFromStartPlate" to add new parameter includeSpecimenExtracts with value true.
    b. Function initializeStep3b(response) updated by changing name of JSON variable for RNA NanoDrop plate position from item.rna.well to item.rna.nanoDropWell, in order to increase readability of the code.
    c. Function updateDetailsTable() updated to enter DNA and RNA storage locations in table. Also change of name of JSON variable for RNA NanoDrop plate position from item.rna.well to item.rna.nanoDropWell, in order to increase readability of the code.
  6. JSP file extraction_protocol2.jsp in resources/sampleproc/ updated by adding columns for RNA and DNA plate positions to the left of the concentrations columns for each extract.
  7. Javascript file extraction_protocol.js in resources/sampleproc/ updated in functions tableRowsForItems(...) and tableRowForOptionalCounterbalanceItem(...) to add data for RNA and DNA plate positions.
Last edited 9 years ago by olle (previous) (diff)

comment:11 by olle, 9 years ago

(In [3276]) Refs #768. MeLuDI updated to create DNA and RNA extract items for specimens already when the latter is registered, instead of in the DNA/RNA registration/quantification wizard, when the DNA and RNA has been extracted. The change is motivated by the desire to allocate storage positions for the extracts at the same time as for the specimens and input DNA/RNA. The order of items in the DNA/RNA storage boxes will then come in ascending item name order, which is desired. Previously, this was not guaranteed, since input DNA/RNA was allocated storage positions at registration, which might occur before the extracts was created for an even earlier registered specimen.

Servlets:

  1. Java servlet class/file SpecimenTubeServlet.java in src/net/sf/basedb/meludi/servlet/ updated:
    a. Protected method void doGet(HttpServletRequest req, HttpServletResponse resp) updated for command "FindStoragePositions" to find three storage locations in separate boxes for each specimen tube, for the specimen itself (except the first tube), the DNA extract, and the RNA extract.
    b. Protected method void doPost(HttpServletRequest req, HttpServletResponse resp) updated for command "CreateSpecimenTubes" to create a DNA and RNA extract for each specimen, and set storage position to the ones allocated earlier on.
    c. Private method BioWell fetchBioWell(DbControl dc, JSONObject jsonSpec) updated to call new private method BioWell fetchBioWell(DbControl dc, JSONObject jsonSpec, String boxType) with value for argument boxType set to null.
    d. New private method BioWell fetchBioWell(DbControl dc, JSONObject jsonSpec, String boxType) added. It fetches the BioWell specified in JSONObject jsonSpec for the storage box specified by argument boxType, with values null (default, specimen), "DNA", or "RNA".
  2. Java servlet class/file PersonalRegistrationServlet.java in src/net/sf/basedb/meludi/servlet/ updated:
    a. Protected method void doPost(HttpServletRequest req, HttpServletResponse resp) updated for command "CreateCase" to create a DNA and RNA extract for each specimen, and set storage position to the ones allocated earlier on.
    b. Private method BioWell fetchBioWell(DbControl dc, JSONObject jsonSpec) updated to call new private method BioWell fetchBioWell(DbControl dc, JSONObject jsonSpec, String boxType) with value for argument boxType set to null.
    c. New private method BioWell fetchBioWell(DbControl dc, JSONObject jsonSpec, String boxType) added. It fetches the BioWell specified in JSONObject jsonSpec for the storage box specified by argument boxType, with values null (default, specimen), "DNA", or "RNA".
  3. Java servlet class/file ExtractionServlet.java in src/net/sf/basedb/meludi/servlet/ updated:
    a. Protected method void doGet(HttpServletRequest req, HttpServletResponse resp) updated for command "GetUnprocessedItems" to load info for DNA and RNA extracts to specimens, including storage locations for the former. Storage location info will also be included for input DNA and RNA. Only DNA and RNA extracts passing new filter method boolean itemIsExtractSourceItem(String itemName) will now be included in the returned list.
    b. Protected method void doPost(HttpServletRequest req, HttpServletResponse resp) updated for command "RegisterDnaRna" to not create new DNA or RNA extract items, but update the items related to the specimen.
    c. New boolean itemIsExtractSourceItem(String itemName) added. It calls new private method int numberOfSpecificCharacters(String str, char c) to check if the number of dots in the item name is 1, in which case the item is classified as an extract source item, else not.
    d. New private method int numberOfSpecificCharacters(String str, char c) added. It returns the number of times the specified character occurs in the input string.

JSP and Javascript files:

  1. Javascript file specimentube.js in resources/sampleproc/ updated:
    a. Function initializeStep3() updated with input fields for DNA and RNA storage locations for each specimen.
    b. Function storagePositionsLoaded(response) updated to retrieve recommended storage positions for DNA and RNA extracts for each specimen, and to set event handlers for the new fields.
    c. Function boxOnKeyUp(event) updated to retrieve parameter boxType from the call, in order to print error messages next to the correct storage location field.
    d. Function wellOnChange(event) updated to retrieve parameter boxType from the call, in order to check the correct storage location field.
    e. Function onBoxValidated(response, index) updated to onBoxValidated(response, boxType index) with new argument boxType to retrieve parameter boxType from the call, in order to validate the correct storage location field.
    f. Function validateStep3(event) updated to retrieve value of tubeContentType from input field, in order to check validity of the correct storage location field(s).
    g. Function submit() updated to include information on DNA and RNA storage locations for specimens, when sending JSON info to SpecimenTubeRegistrationServlet for registration.
  2. Javascript file persinfo.js in resources/personal/ updated:
    a. Function initializeStep4() updated with input fields for DNA and RNA storage locations for each specimen.
    b. Function storagePositionsLoaded(response) updated to retrieve recommended storage positions for DNA and RNA extracts for each specimen, and to set event handlers for the new fields.
    c. Function boxOnKeyUp(event) updated to retrieve parameter boxType from the call, in order to print error messages next to the correct storage location field.
    d. Function wellOnChange(event) updated to retrieve parameter boxType from the call, in order to check the correct storage location field.
    e. Function onBoxValidated(response, index) updated to onBoxValidated(response, boxType index) with new argument boxType to retrieve parameter boxType from the call, in order to validate the correct storage location field.
    f. Function validateStep4(event) updated to retrieve value of tubeContentType from input field, in order to check validity of the correct storage location field(s).
    g. Function submit() updated to include information on DNA and RNA storage locations for specimens, when sending JSON info to SpecimenTubeRegistrationServlet for registration.
  3. Javascript file extraction_preparation.js in resources/sampleproc/ updated:
    a. Function initializeStep3() updated by adding columns for RNA and DNA plate positions to the left of the comment column.
    b. Function updateDetailsTable() updated by changing name of JSON variable for RNA NanoDrop plate position from item.rna.well to item.rna.nanoDropWell, in order to increase readability of the code.
  4. Javascript file extraction_registration.js in resources/sampleproc/ updated:
    a. Function validateStep1(event) updated when calling ExtractionServlet with command "GetSourceItemListFromStartPlate" to add new parameter includeSpecimenExtracts with value true.
    b. Function initializeStep3() updated by adding columns for RNA and DNA plate positions to the left of the volume columns for each extract.
    c. Function updateDetailsTable() updated by changing name of JSON variable for RNA NanoDrop plate position from item.rna.well to item.rna.nanoDropWell, in order to increase readability of the code.
  5. Javascript file extraction_formcopy.js in resources/sampleproc/ updated:
    a. Function initializeStep3() updated by adding columns for RNA and DNA plate positions to the left of the comment column for a lab tracking sheet, and to the left of the volume columns for each extract for a lab tracking report. Also updated when calling ExtractionServlet with command "GetSourceItemListFromStartPlate" to add new parameter includeSpecimenExtracts with value true.
    b. Function initializeStep3b(response) updated by changing name of JSON variable for RNA NanoDrop plate position from item.rna.well to item.rna.nanoDropWell, in order to increase readability of the code.
    c. Function updateDetailsTable() updated to enter DNA and RNA storage locations in table. Also change of name of JSON variable for RNA NanoDrop plate position from item.rna.well to item.rna.nanoDropWell, in order to increase readability of the code.
  6. JSP file extraction_protocol2.jsp in resources/sampleproc/ updated by adding columns for RNA and DNA plate positions to the left of the concentrations columns for each extract.
  7. Javascript file extraction_protocol.js in resources/sampleproc/ updated in functions tableRowsForItems(...) and tableRowForOptionalCounterbalanceItem(...) to add data for RNA and DNA plate positions.

comment:12 by olle, 9 years ago

Functional specification update:

  • MeLuDI should be updated in DNA/RNA registration/quantification wizard for parsing a Qubit value file for DNA concentration values, to allow the user to set the dilution factor to be used, in case no value is specified in the file. The default dilution factor should be 200, as previously.

Design update:

  1. JSP file extraction_registration.jsp in resources/sampleproc/ updated for step 3 by adding a line with an input field for a Qubit dilution factor, below the line for selecting a Qubit value file.
  2. Javascript file extraction_registration.js in resources/sampleproc/ updated:
    a. Constant QUBIT_DILUTION_FACTOR_DEFAULT set to value 200.0.
    b. Function initPage() updated by adding new function qubitFileDilutionFactorOnChange() as event handler for the new Qubit dilution factor input field.
    c. Function initializeStep3() updated by setting value of new Qubit dilution factor input field to that of constant QUBIT_DILUTION_FACTOR_DEFAULT.
    d. New function qubitFileDilutionFactorOnChange() added. It retrieves the value of new Qubit dilution factor input field, and writes an error message if it is not a number or a number <= 0.
    e. Function parseQubitFile() updated to retrieve the value of new Qubit dilution factor input field, and use that value, in case no value is specified in the file.

comment:13 by olle, 9 years ago

(In [3283]) Refs #768. MeLuDI updated in DNA/RNA registration/quantification wizard for parsing a Qubit value file for DNA concentration values, to allow the user to set the dilution factor to be used, in case no value is specified in the file. The default dilution factor should be 200, as previously.

  1. JSP file extraction_registration.jsp in resources/sampleproc/ updated for step 3 by adding a line with an input field for a Qubit dilution factor, below the line for selecting a Qubit value file.
  2. Javascript file extraction_registration.js in resources/sampleproc/ updated:
    a. Constant QUBIT_DILUTION_FACTOR_DEFAULT set to value 200.0.
    b. Function initPage() updated by adding new function qubitFileDilutionFactorOnChange() as event handler for the new Qubit dilution factor input field.
    c. Function initializeStep3() updated by setting value of new Qubit dilution factor input field to that of constant QUBIT_DILUTION_FACTOR_DEFAULT.
    d. New function qubitFileDilutionFactorOnChange() added. It retrieves the value of new Qubit dilution factor input field, and writes an error message if it is not a number or a number <= 0.
    e. Function parseQubitFile() updated to retrieve the value of new Qubit dilution factor input field, and use that value, in case no value is specified in the file.

comment:14 by olle, 9 years ago

Functional specification update:

  • MeLuDI should be updated to not fill in gaps, when finding storage locations for specimens and extracts. The first plate with the last well (lower right corner) empty should be found, after which the first well is found, that is only followed by free wells.

Design update:

  1. Java servlet class/file SpecimenTubeServlet.java in src/net/sf/basedb/meludi/servlet/ updated:
    a. Protected method void doGet(HttpServletRequest req, HttpServletResponse resp) updated for command "FindStoragePositions" by calling new private method JSONArray findFreeWells(DbControl dc, Integer nofTubes, String storageBoxSuffix, Boolean fillGaps) with argument fillGaps set to false to find the first free well.
    b. Private method JSONArray findFreeWells(DbControl dc, Integer nofTubes, String storageBoxSuffix) updated to call new private method JSONArray findFreeWells(DbControl dc, Integer nofTubes, String storageBoxSuffix, Boolean fillGaps) with argument fillGaps set to true to obtain the result.
    c. New private method JSONArray findFreeWells(DbControl dc, Integer nofTubes, String storageBoxSuffix, Boolean fillGaps) added. If argument fillGaps has value true, it calls private method BioWell getFirstFreeWell(BioPlate plate) to find the first free well, else new private method BioWell getFirstFreeWellWithoutFillingGaps(BioPlate plate).
    d. New private method BioWell getFirstFreeWellWithoutFillingGaps(BioPlate plate) added. It finds the first free well for a bioplate without filling gaps.

comment:15 by olle, 9 years ago

(In [3285]) Refs #768. MeLuDI updated to not fill in gaps, when finding storage locations for specimens and extracts. The first plate with the last well (lower right corner) empty should be found, after which the first well is found, that is only followed by free wells.

  1. Java servlet class/file SpecimenTubeServlet.java in src/net/sf/basedb/meludi/servlet/ updated:
    a. Protected method void doGet(HttpServletRequest req, HttpServletResponse resp) updated for command "FindStoragePositions" by calling new private method JSONArray findFreeWells(DbControl dc, Integer nofTubes, String storageBoxSuffix, Boolean fillGaps) with argument fillGaps set to false to find the first free well.
    b. Private method JSONArray findFreeWells(DbControl dc, Integer nofTubes, String storageBoxSuffix) updated to call new private method JSONArray findFreeWells(DbControl dc, Integer nofTubes, String storageBoxSuffix, Boolean fillGaps) with argument fillGaps set to true to obtain the result.
    c. New private method JSONArray findFreeWells(DbControl dc, Integer nofTubes, String storageBoxSuffix, Boolean fillGaps) added. If argument fillGaps has value true, it calls private method BioWell getFirstFreeWell(BioPlate plate) to find the first free well, else new private method BioWell getFirstFreeWellWithoutFillingGaps(BioPlate plate).
    d. New private method BioWell getFirstFreeWellWithoutFillingGaps(BioPlate plate) added. It finds the first free well for a bioplate without filling gaps.

comment:16 by olle, 9 years ago

Design discussion regarding finding valid wells on plates (storage boxes):

  • Current design has flaws regarding finding the correct box to start finding free wells, both when gaps should be filled, and when not. One problem is that the query finding boxes looks for boxes with position I9 empty (for a 9x9 box), which is not appropriate, if gaps exists. If gaps should be filled, a box with empty wells may have position I9 filled, and therefore not be selected. If gaps should not be filled, plates with position I9 free, should not be included, if higher plates have some well filled.

Design update:

  1. Java servlet class/file SpecimenTubeServlet.java in src/net/sf/basedb/meludi/servlet/ updated:
    a. Private method JSONArray findFreeWells(DbControl dc, Integer nofTubes, String storageBoxSuffix, Boolean fillGaps) updated by using a simpler database query finding all boxes of the correct type, and then using a new selection algorithm for finding the box to start with, when finding free wells to fill.
    b. New private method BioWell getFirstFilledWell(BioPlate plate) added. It returns the first filled well for a bioplate, or null if none found. Based on previous private method BioWell getFirstFreeWell(BioPlate plate).

comment:17 by olle, 9 years ago

(In [3287]) Refs #768. MeLuDI updated by fixing bugs regarding finding storage plates/boxes for placing samples in. Previous methods worked when well positions were allocated in sequence, but might fail, when gaps existed in the fill pattern of the plates.

  1. Java servlet class/file SpecimenTubeServlet.java in src/net/sf/basedb/meludi/servlet/ updated:
    a. Private method JSONArray findFreeWells(DbControl dc, Integer nofTubes, String storageBoxSuffix, Boolean fillGaps) updated by using a simpler database query finding all boxes of the correct type, and then using a new selection algorithm for finding the box to start with, when finding free wells to fill.
    b. New private method BioWell getFirstFilledWell(BioPlate plate) added. It returns the first filled well for a bioplate, or null if none found. Based on previous private method BioWell getFirstFreeWell(BioPlate plate).

comment:18 by olle, 9 years ago

Functional specification update:

  • MeLuDI should be updated in Lab tracking sheet/report by removing form footer with information on DNA elution volume, DNAse treated RNA, and Proteinase K treatment.

Design update:

  1. JSP file extraction_protocol2.jsp in resources/sampleproc/ updated by commenting out code for footer table segment.
  2. Javascript file extraction_protocol.js in resources/sampleproc/ updated in function initializeProtocol(submitInfoJsonStr) by commenting out code setting value for DNA elution volume in form footer table segment.

comment:19 by olle, 9 years ago

(In [3291]) Refs #768. MeLuDI updated in Lab tracking sheet/report by removing form footer with information on DNA elution volume, DNAse treated RNA, and Proteinase K treatment.

  1. JSP file extraction_protocol2.jsp in resources/sampleproc/ updated by commenting out code for footer table segment.
  2. Javascript file extraction_protocol.js in resources/sampleproc/ updated in function initializeProtocol(submitInfoJsonStr) by commenting out code setting value for DNA elution volume in form footer table segment.

comment:20 by olle, 9 years ago

(In [3292]) Refs #768. MeLuDI updated when finding unprocessed specimen tubes to not require that that the specimens should lack extracts, since RNA and DNA items for a specimen now are created, when the latter is registered:

  1. Java data access object class/file SpecimenTube.java in src/net/sf/basedb/meludi/dao/ updated in public static method List<SpecimenTube> findUnProcessedTubes(DbControl dc) to not require that specimens should not have any extracts coupled to them, to be included in the list returned.

comment:21 by olle, 9 years ago

Functional specification update:

  • MeLuDI should be updated in DNA/RNA extraction wizards and Lab tracking sheet/report to display input RNA and DNA storage locations in columns for storage locations for extracts from specimen.

Design update:

  1. Javascript file extraction_preparation.js in resources/sampleproc/ updated in function initializeStep3() to display input RNA and DNA storage locations in columns for storage locations for extracts from specimen.
  2. Javascript file extraction_registration.js in resources/sampleproc/ updated in function initializeStep3() to display input RNA and DNA storage locations in columns for storage locations for extracts from specimen.
  3. Javascript file extraction_formcopy.js in resources/sampleproc/ updated:
    a. Function initializeStep3() updated to display input RNA and DNA storage locations in columns for storage locations for extracts from specimen.
    b. Function updateDetailsTable() updated to display input RNA and DNA storage locations in columns for storage locations for extracts from specimen.
  4. Javascript file extraction_protocol.js in resources/sampleproc/ updated:
    a. Function tableRowsForItems(accumItemNo, itemJsonArr, itemType, itemTypeVarName) updated to display input RNA and DNA storage locations in columns for storage locations for extracts from specimen.
    b. New function isRna(item) added. It checks whether the item name end with ".r", in which case true is returned, else false.
    c. New function isDna(item) added. It checks whether the item name end with ".d", in which case true is returned, else false.

comment:22 by olle, 9 years ago

(In [3293]) Refs #768. MeLuDI updated in DNA/RNA extraction wizards and Lab tracking sheet/report to display input RNA and DNA storage locations in columns for storage locations for extracts from specimen.

  1. Javascript file extraction_preparation.js in resources/sampleproc/ updated in function initializeStep3() to display input RNA and DNA storage locations in columns for storage locations for extracts from specimen.
  2. Javascript file extraction_registration.js in resources/sampleproc/ updated in function initializeStep3() to display input RNA and DNA storage locations in columns for storage locations for extracts from specimen.
  3. Javascript file extraction_formcopy.js in resources/sampleproc/ updated:
    a. Function initializeStep3() updated to display input RNA and DNA storage locations in columns for storage locations for extracts from specimen.
    b. Function updateDetailsTable() updated to display input RNA and DNA storage locations in columns for storage locations for extracts from specimen.
  4. Javascript file extraction_protocol.js in resources/sampleproc/ updated:
    a. Function tableRowsForItems(accumItemNo, itemJsonArr, itemType, itemTypeVarName) updated to display input RNA and DNA storage locations in columns for storage locations for extracts from specimen.
    b. New function isRna(item) added. It checks whether the item name end with ".r", in which case true is returned, else false.
    c. New function isDna(item) added. It checks whether the item name end with ".d", in which case true is returned, else false.

comment:23 by olle, 9 years ago

(In [3294]) Refs #768. Updates due to version number change to "1.2.3".

  1. Version number change to "1.2.3":
    a. Outermost Ant XML build file build.xml in / updated.
    b. Extensions XML configuration file extensions.xml in META-INF/ updated.
    c. Javascript file meludi-2.js in resources/ updated.
    d. Javascript file samplereportgenerator.js in resources/reports/ updated.
    e. Java class/file Meludi.java in src/net/sf/basedb/meludi/ updated.

comment:24 by olle, 9 years ago

Resolution: fixed
Status: assignedclosed

Ticket closed as MeLuDI version 1.2.3 has been created.

comment:25 by olle, 9 years ago

(In [3295]) Refs #768. Java servlet class/file SpecimenTubeServlet.java in src/net/sf/basedb/meludi/servlet/ updated in protected method void doGet(HttpServletRequest req, HttpServletResponse resp) for command "FindStoragePositions" by removal of debug output.

Note: See TracTickets for help on using tickets.