Added "User Has Disease" information to the View Profile - Monogenic Diseases page.

This commit is contained in:
Simon Sarasova 2024-06-07 02:16:54 +00:00
parent 8b0c41af45
commit edecfa4b16
No known key found for this signature in database
GPG key ID: EEDA4103C9C36944
3 changed files with 62 additions and 19 deletions

View file

@ -6,6 +6,7 @@ Small and insignificant changes may not be included in this log.
## Unversioned Changes ## Unversioned Changes
* Added "User Has Disease" information to the View Profile - Monogenic Diseases page. - *Simon Sarasova*
* Created the calculatedAttributes_test package. - *Simon Sarasova* * Created the calculatedAttributes_test package. - *Simon Sarasova*
* Improved the creation process of genetic analyses in various ways. A sample of offspring polygenic disease risk scores are now created and viewable by users. - *Simon Sarasova* * Improved the creation process of genetic analyses in various ways. A sample of offspring polygenic disease risk scores are now created and viewable by users. - *Simon Sarasova*
* Improved the genetic analysis creation process in various ways. Recombination breakpoints are more accurately predicted now. - *Simon Sarasova* * Improved the genetic analysis creation process in various ways. Recombination breakpoints are more accurately predicted now. - *Simon Sarasova*

View file

@ -9,4 +9,4 @@ Many other people have written code for modules which are imported by Seekia. Th
Name | Date Of First Commit | Number Of Commits Name | Date Of First Commit | Number Of Commits
--- | --- | --- --- | --- | ---
Simon Sarasova | June 13, 2023 | 252 Simon Sarasova | June 13, 2023 | 253

View file

@ -2604,12 +2604,15 @@ func setViewMateProfilePage_MonogenicDiseases(window fyne.Window, userOrOffsprin
getDiseasesInfoGrid := func()(*fyne.Container, error){ getDiseasesInfoGrid := func()(*fyne.Container, error){
emptyLabelA := widget.NewLabel("") emptyLabel1 := widget.NewLabel("")
emptyLabelB := widget.NewLabel("") emptyLabel2 := widget.NewLabel("")
emptyLabelC := widget.NewLabel("") emptyLabel3 := widget.NewLabel("")
diseaseNameLabel := getItalicLabelCentered("Disease Name") diseaseNameLabel := getItalicLabelCentered("Disease Name")
emptyLabel4 := widget.NewLabel("")
userHasDiseaseLabel := getItalicLabelCentered("User Has Disease")
userProbabilityOfLabelA := getItalicLabelCentered("User Probability Of") userProbabilityOfLabelA := getItalicLabelCentered("User Probability Of")
passingVariantLabel := getItalicLabelCentered("Passing Variant") passingVariantLabel := getItalicLabelCentered("Passing Variant")
@ -2625,8 +2628,9 @@ func setViewMateProfilePage_MonogenicDiseases(window fyne.Window, userOrOffsprin
offspringNumberOfLabel := getItalicLabelCentered("Offspring Number Of") offspringNumberOfLabel := getItalicLabelCentered("Offspring Number Of")
variantsTestedLabelB := getItalicLabelCentered("Variants Tested") variantsTestedLabelB := getItalicLabelCentered("Variants Tested")
diseaseInfoButtonsColumn := container.NewVBox(emptyLabelA, emptyLabelB, widget.NewSeparator()) diseaseInfoButtonsColumn := container.NewVBox(emptyLabel1, emptyLabel2, widget.NewSeparator())
diseaseNameColumn := container.NewVBox(emptyLabelC, diseaseNameLabel, widget.NewSeparator()) diseaseNameColumn := container.NewVBox(emptyLabel3, diseaseNameLabel, widget.NewSeparator())
userHasDiseaseColumn := container.NewVBox(emptyLabel4, userHasDiseaseLabel, widget.NewSeparator())
userProbabilityOfPassingVariantColumn := container.NewVBox(userProbabilityOfLabelA, passingVariantLabel, widget.NewSeparator()) userProbabilityOfPassingVariantColumn := container.NewVBox(userProbabilityOfLabelA, passingVariantLabel, widget.NewSeparator())
userNumberOfVariantsTestedColumn := container.NewVBox(userNumberOfLabel, variantsTestedLabelA, widget.NewSeparator()) userNumberOfVariantsTestedColumn := container.NewVBox(userNumberOfLabel, variantsTestedLabelA, widget.NewSeparator())
offspringProbabilityOfHavingDiseaseColumn := container.NewVBox(offspringProbabilityOfLabelA, havingDiseaseLabel, widget.NewSeparator()) offspringProbabilityOfHavingDiseaseColumn := container.NewVBox(offspringProbabilityOfLabelA, havingDiseaseLabel, widget.NewSeparator())
@ -2649,42 +2653,60 @@ func setViewMateProfilePage_MonogenicDiseases(window fyne.Window, userOrOffsprin
//Outputs: //Outputs:
// -bool: User disease info exists // -bool: User disease info exists
// -bool: User has the disease
// -int: User probability of passing a disease variant (0-100) // -int: User probability of passing a disease variant (0-100)
// -int: User number of variants tested // -int: User number of variants tested
// -error // -error
getUserDiseaseInfo := func()(bool, int, int, error){ getUserDiseaseInfo := func()(bool, bool, int, int, error){
diseaseNameWithUnderscores := strings.ReplaceAll(monogenicDiseaseName, " ", "_") diseaseNameWithUnderscores := strings.ReplaceAll(monogenicDiseaseName, " ", "_")
probabilityOfPassingAVariantAttributeName := "MonogenicDisease_" + diseaseNameWithUnderscores + "_ProbabilityOfPassingAVariant" probabilityOfPassingAVariantAttributeName := "MonogenicDisease_" + diseaseNameWithUnderscores + "_ProbabilityOfPassingAVariant"
numberOfVariantsTestedAttributeName := "MonogenicDisease_" + diseaseNameWithUnderscores + "_NumberOfVariantsTested" numberOfVariantsTestedAttributeName := "MonogenicDisease_" + diseaseNameWithUnderscores + "_NumberOfVariantsTested"
userDiseaseInfoExists, _, userProbabilityOfPassingDiseaseVariant, err := getAnyUserProfileAttributeFunction(probabilityOfPassingAVariantAttributeName) userDiseaseInfoExists, _, userProbabilityOfPassingDiseaseVariantString, err := getAnyUserProfileAttributeFunction(probabilityOfPassingAVariantAttributeName)
if (err != nil) { return false, 0, 0, err } if (err != nil) { return false, false, 0, 0, err }
if (userDiseaseInfoExists == false){ if (userDiseaseInfoExists == false){
return false, 0, 0, nil return false, false, 0, 0, nil
} }
userProbabilityOfPassingDiseaseVariantInt, err := helpers.ConvertStringToInt(userProbabilityOfPassingDiseaseVariant) userProbabilityOfPassingDiseaseVariant, err := helpers.ConvertStringToInt(userProbabilityOfPassingDiseaseVariantString)
if (err != nil) { if (err != nil) {
return false, 0, 0, errors.New("setViewMateProfilePage_MonogenicDiseases called with profile containing invalid probabilityOfPassingAVariant: " + userProbabilityOfPassingDiseaseVariant) return false, false, 0, 0, errors.New("setViewMateProfilePage_MonogenicDiseases called with profile containing invalid probabilityOfPassingAVariant: " + userProbabilityOfPassingDiseaseVariantString)
} }
getUserHasDiseaseBool := func()bool{
if (diseaseIsDominantOrRecessive == "Dominant"){
if (userProbabilityOfPassingDiseaseVariant != 0){
return true
}
return false
}
// diseaseIsDominantOrRecessive == "Recessive"
if (userProbabilityOfPassingDiseaseVariant == 100){
return true
}
return false
}
userHasDisease := getUserHasDiseaseBool()
userVariantsTestedExists, _, userNumberOfVariantsTested, err := getAnyUserProfileAttributeFunction(numberOfVariantsTestedAttributeName) userVariantsTestedExists, _, userNumberOfVariantsTested, err := getAnyUserProfileAttributeFunction(numberOfVariantsTestedAttributeName)
if (err != nil) { return false, 0, 0, err } if (err != nil) { return false, false, 0, 0, err }
if (userVariantsTestedExists == false){ if (userVariantsTestedExists == false){
return false, 0, 0, errors.New("setViewMateProfilePage_MonogenicDiseases called with user profile containing probabilityOfPassingAVariant but not numberOfVariantsTested") return false, false, 0, 0, errors.New("setViewMateProfilePage_MonogenicDiseases called with user profile containing probabilityOfPassingAVariant but not numberOfVariantsTested")
} }
userNumberOfVariantsTestedInt, err := helpers.ConvertStringToInt(userNumberOfVariantsTested) userNumberOfVariantsTestedInt, err := helpers.ConvertStringToInt(userNumberOfVariantsTested)
if (err != nil) { if (err != nil) {
return false, 0, 0, errors.New("setViewMateProfilePage_MonogenicDiseases called with profile containing invalid numberOfVariantsTested: " + userNumberOfVariantsTested) return false, false, 0, 0, errors.New("setViewMateProfilePage_MonogenicDiseases called with profile containing invalid numberOfVariantsTested: " + userNumberOfVariantsTested)
} }
return true, userProbabilityOfPassingDiseaseVariantInt, userNumberOfVariantsTestedInt, nil return true, userHasDisease, userProbabilityOfPassingDiseaseVariant, userNumberOfVariantsTestedInt, nil
} }
userDiseaseInfoExists, userProbabilityOfPassingAVariant, userNumberOfVariantsTested, err := getUserDiseaseInfo() userDiseaseInfoExists, userHasDisease, userProbabilityOfPassingAVariant, userNumberOfVariantsTested, err := getUserDiseaseInfo()
if (err != nil) { return nil, err } if (err != nil) { return nil, err }
//Outputs: //Outputs:
@ -2712,6 +2734,18 @@ func setViewMateProfilePage_MonogenicDiseases(window fyne.Window, userOrOffsprin
probabilityOffspringHasDiseaseIsKnown, probabilityOffspringHasDisease, probabilityOffspringHasVariantIsKnown, probabilityOffspringHasVariant, err := createGeneticAnalysis.GetOffspringMonogenicDiseaseProbabilities(diseaseIsDominantOrRecessive, userDiseaseInfoExists, userProbabilityOfPassingAVariant, myDiseaseInfoExists, myProbabilityOfPassingAVariant) probabilityOffspringHasDiseaseIsKnown, probabilityOffspringHasDisease, probabilityOffspringHasVariantIsKnown, probabilityOffspringHasVariant, err := createGeneticAnalysis.GetOffspringMonogenicDiseaseProbabilities(diseaseIsDominantOrRecessive, userDiseaseInfoExists, userProbabilityOfPassingAVariant, myDiseaseInfoExists, myProbabilityOfPassingAVariant)
if (err != nil) { return nil, err } if (err != nil) { return nil, err }
getUserHasDiseaseString := func()string{
if (userDiseaseInfoExists == false){
return "Unknown"
}
userHasDiseaseString := helpers.ConvertBoolToYesOrNoString(userHasDisease)
return userHasDiseaseString
}
userHasDiseaseString := getUserHasDiseaseString()
getUserProbabilityOfPassingAVariantString := func()string{ getUserProbabilityOfPassingAVariantString := func()string{
if (userDiseaseInfoExists == false){ if (userDiseaseInfoExists == false){
return "Unknown" return "Unknown"
@ -2777,6 +2811,7 @@ func setViewMateProfilePage_MonogenicDiseases(window fyne.Window, userOrOffsprin
diseaseNameLabel := getBoldLabelCentered(monogenicDiseaseName) diseaseNameLabel := getBoldLabelCentered(monogenicDiseaseName)
userHasDiseaseLabel := getBoldLabelCentered(userHasDiseaseString)
userProbabilityOfPassingAVariantLabel := getBoldLabelCentered(userProbabilityOfPassingAVariantString) userProbabilityOfPassingAVariantLabel := getBoldLabelCentered(userProbabilityOfPassingAVariantString)
userNumberOfVariantsTestedLabel := getBoldLabelCentered(userNumberOfVariantsTestedString) userNumberOfVariantsTestedLabel := getBoldLabelCentered(userNumberOfVariantsTestedString)
@ -2786,6 +2821,7 @@ func setViewMateProfilePage_MonogenicDiseases(window fyne.Window, userOrOffsprin
diseaseInfoButtonsColumn.Add(viewDiseaseInfoButton) diseaseInfoButtonsColumn.Add(viewDiseaseInfoButton)
diseaseNameColumn.Add(diseaseNameLabel) diseaseNameColumn.Add(diseaseNameLabel)
userHasDiseaseColumn.Add(userHasDiseaseLabel)
userProbabilityOfPassingVariantColumn.Add(userProbabilityOfPassingAVariantLabel) userProbabilityOfPassingVariantColumn.Add(userProbabilityOfPassingAVariantLabel)
userNumberOfVariantsTestedColumn.Add(userNumberOfVariantsTestedLabel) userNumberOfVariantsTestedColumn.Add(userNumberOfVariantsTestedLabel)
offspringProbabilityOfHavingDiseaseColumn.Add(offspringProbabilityOfHavingDiseaseLabel) offspringProbabilityOfHavingDiseaseColumn.Add(offspringProbabilityOfHavingDiseaseLabel)
@ -2794,6 +2830,7 @@ func setViewMateProfilePage_MonogenicDiseases(window fyne.Window, userOrOffsprin
diseaseInfoButtonsColumn.Add(widget.NewSeparator()) diseaseInfoButtonsColumn.Add(widget.NewSeparator())
diseaseNameColumn.Add(widget.NewSeparator()) diseaseNameColumn.Add(widget.NewSeparator())
userHasDiseaseColumn.Add(widget.NewSeparator())
userProbabilityOfPassingVariantColumn.Add(widget.NewSeparator()) userProbabilityOfPassingVariantColumn.Add(widget.NewSeparator())
userNumberOfVariantsTestedColumn.Add(widget.NewSeparator()) userNumberOfVariantsTestedColumn.Add(widget.NewSeparator())
offspringProbabilityOfHavingDiseaseColumn.Add(widget.NewSeparator()) offspringProbabilityOfHavingDiseaseColumn.Add(widget.NewSeparator())
@ -2801,6 +2838,9 @@ func setViewMateProfilePage_MonogenicDiseases(window fyne.Window, userOrOffsprin
offspringNumberOfVariantsTestedColumn.Add(widget.NewSeparator()) offspringNumberOfVariantsTestedColumn.Add(widget.NewSeparator())
} }
userHasDiseaseHelpButton := widget.NewButtonWithIcon("", theme.QuestionIcon(), func(){
setPersonHasMonogenicDiseaseExplainerPage(window, currentPage)
})
probabilityOfPassingVariantHelpButton := widget.NewButtonWithIcon("", theme.QuestionIcon(), func(){ probabilityOfPassingVariantHelpButton := widget.NewButtonWithIcon("", theme.QuestionIcon(), func(){
setPersonProbabilityOfPassingVariantExplainerPage(window, currentPage) setPersonProbabilityOfPassingVariantExplainerPage(window, currentPage)
}) })
@ -2817,6 +2857,7 @@ func setViewMateProfilePage_MonogenicDiseases(window fyne.Window, userOrOffsprin
setOffspringProbabilityOfHavingVariantExplainerPage(window, currentPage) setOffspringProbabilityOfHavingVariantExplainerPage(window, currentPage)
}) })
userHasDiseaseColumn.Add(userHasDiseaseHelpButton)
userProbabilityOfPassingVariantColumn.Add(probabilityOfPassingVariantHelpButton) userProbabilityOfPassingVariantColumn.Add(probabilityOfPassingVariantHelpButton)
userNumberOfVariantsTestedColumn.Add(numberOfVariantsTestedHelpButtonA) userNumberOfVariantsTestedColumn.Add(numberOfVariantsTestedHelpButtonA)
offspringProbabilityOfHavingDiseaseColumn.Add(probabilityOfHavingDiseaseHelpButton) offspringProbabilityOfHavingDiseaseColumn.Add(probabilityOfHavingDiseaseHelpButton)
@ -2825,7 +2866,8 @@ func setViewMateProfilePage_MonogenicDiseases(window fyne.Window, userOrOffsprin
if (userOrOffspring == "User"){ if (userOrOffspring == "User"){
diseasesInfoGrid := container.NewHBox(layout.NewSpacer(), diseaseInfoButtonsColumn, diseaseNameColumn, userProbabilityOfPassingVariantColumn, userNumberOfVariantsTestedColumn, layout.NewSpacer()) diseasesInfoGrid := container.NewHBox(layout.NewSpacer(), diseaseInfoButtonsColumn, diseaseNameColumn, userHasDiseaseColumn, userProbabilityOfPassingVariantColumn, userNumberOfVariantsTestedColumn, layout.NewSpacer())
return diseasesInfoGrid, nil return diseasesInfoGrid, nil
} }