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
* Added "User Has Disease" information to the View Profile - Monogenic Diseases page. - *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 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
--- | --- | ---
Simon Sarasova | June 13, 2023 | 252
Simon Sarasova | June 13, 2023 | 253

View file

@ -1950,7 +1950,7 @@ func setViewMateProfilePage_NeanderthalVariants(window fyne.Window, getAnyUserPr
if (userResponseExists == false){
noResponseLabel := getBoldItalicLabel(translate("No Response"))
return noResponseLabel
return noResponseLabel
}
userNeanderthalVariantsLabel := getBoldLabel(userNeanderthalVariants + " variants")
@ -2604,12 +2604,15 @@ func setViewMateProfilePage_MonogenicDiseases(window fyne.Window, userOrOffsprin
getDiseasesInfoGrid := func()(*fyne.Container, error){
emptyLabelA := widget.NewLabel("")
emptyLabelB := widget.NewLabel("")
emptyLabel1 := widget.NewLabel("")
emptyLabel2 := widget.NewLabel("")
emptyLabelC := widget.NewLabel("")
emptyLabel3 := widget.NewLabel("")
diseaseNameLabel := getItalicLabelCentered("Disease Name")
emptyLabel4 := widget.NewLabel("")
userHasDiseaseLabel := getItalicLabelCentered("User Has Disease")
userProbabilityOfLabelA := getItalicLabelCentered("User Probability Of")
passingVariantLabel := getItalicLabelCentered("Passing Variant")
@ -2625,8 +2628,9 @@ func setViewMateProfilePage_MonogenicDiseases(window fyne.Window, userOrOffsprin
offspringNumberOfLabel := getItalicLabelCentered("Offspring Number Of")
variantsTestedLabelB := getItalicLabelCentered("Variants Tested")
diseaseInfoButtonsColumn := container.NewVBox(emptyLabelA, emptyLabelB, widget.NewSeparator())
diseaseNameColumn := container.NewVBox(emptyLabelC, diseaseNameLabel, widget.NewSeparator())
diseaseInfoButtonsColumn := container.NewVBox(emptyLabel1, emptyLabel2, widget.NewSeparator())
diseaseNameColumn := container.NewVBox(emptyLabel3, diseaseNameLabel, widget.NewSeparator())
userHasDiseaseColumn := container.NewVBox(emptyLabel4, userHasDiseaseLabel, widget.NewSeparator())
userProbabilityOfPassingVariantColumn := container.NewVBox(userProbabilityOfLabelA, passingVariantLabel, widget.NewSeparator())
userNumberOfVariantsTestedColumn := container.NewVBox(userNumberOfLabel, variantsTestedLabelA, widget.NewSeparator())
offspringProbabilityOfHavingDiseaseColumn := container.NewVBox(offspringProbabilityOfLabelA, havingDiseaseLabel, widget.NewSeparator())
@ -2649,42 +2653,60 @@ func setViewMateProfilePage_MonogenicDiseases(window fyne.Window, userOrOffsprin
//Outputs:
// -bool: User disease info exists
// -bool: User has the disease
// -int: User probability of passing a disease variant (0-100)
// -int: User number of variants tested
// -error
getUserDiseaseInfo := func()(bool, int, int, error){
getUserDiseaseInfo := func()(bool, bool, int, int, error){
diseaseNameWithUnderscores := strings.ReplaceAll(monogenicDiseaseName, " ", "_")
probabilityOfPassingAVariantAttributeName := "MonogenicDisease_" + diseaseNameWithUnderscores + "_ProbabilityOfPassingAVariant"
numberOfVariantsTestedAttributeName := "MonogenicDisease_" + diseaseNameWithUnderscores + "_NumberOfVariantsTested"
userDiseaseInfoExists, _, userProbabilityOfPassingDiseaseVariant, err := getAnyUserProfileAttributeFunction(probabilityOfPassingAVariantAttributeName)
if (err != nil) { return false, 0, 0, err }
userDiseaseInfoExists, _, userProbabilityOfPassingDiseaseVariantString, err := getAnyUserProfileAttributeFunction(probabilityOfPassingAVariantAttributeName)
if (err != nil) { return false, false, 0, 0, err }
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) {
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)
if (err != nil) { return false, 0, 0, err }
if (err != nil) { return false, false, 0, 0, err }
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)
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 }
//Outputs:
@ -2712,6 +2734,18 @@ func setViewMateProfilePage_MonogenicDiseases(window fyne.Window, userOrOffsprin
probabilityOffspringHasDiseaseIsKnown, probabilityOffspringHasDisease, probabilityOffspringHasVariantIsKnown, probabilityOffspringHasVariant, err := createGeneticAnalysis.GetOffspringMonogenicDiseaseProbabilities(diseaseIsDominantOrRecessive, userDiseaseInfoExists, userProbabilityOfPassingAVariant, myDiseaseInfoExists, myProbabilityOfPassingAVariant)
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{
if (userDiseaseInfoExists == false){
return "Unknown"
@ -2777,6 +2811,7 @@ func setViewMateProfilePage_MonogenicDiseases(window fyne.Window, userOrOffsprin
diseaseNameLabel := getBoldLabelCentered(monogenicDiseaseName)
userHasDiseaseLabel := getBoldLabelCentered(userHasDiseaseString)
userProbabilityOfPassingAVariantLabel := getBoldLabelCentered(userProbabilityOfPassingAVariantString)
userNumberOfVariantsTestedLabel := getBoldLabelCentered(userNumberOfVariantsTestedString)
@ -2786,6 +2821,7 @@ func setViewMateProfilePage_MonogenicDiseases(window fyne.Window, userOrOffsprin
diseaseInfoButtonsColumn.Add(viewDiseaseInfoButton)
diseaseNameColumn.Add(diseaseNameLabel)
userHasDiseaseColumn.Add(userHasDiseaseLabel)
userProbabilityOfPassingVariantColumn.Add(userProbabilityOfPassingAVariantLabel)
userNumberOfVariantsTestedColumn.Add(userNumberOfVariantsTestedLabel)
offspringProbabilityOfHavingDiseaseColumn.Add(offspringProbabilityOfHavingDiseaseLabel)
@ -2794,6 +2830,7 @@ func setViewMateProfilePage_MonogenicDiseases(window fyne.Window, userOrOffsprin
diseaseInfoButtonsColumn.Add(widget.NewSeparator())
diseaseNameColumn.Add(widget.NewSeparator())
userHasDiseaseColumn.Add(widget.NewSeparator())
userProbabilityOfPassingVariantColumn.Add(widget.NewSeparator())
userNumberOfVariantsTestedColumn.Add(widget.NewSeparator())
offspringProbabilityOfHavingDiseaseColumn.Add(widget.NewSeparator())
@ -2801,6 +2838,9 @@ func setViewMateProfilePage_MonogenicDiseases(window fyne.Window, userOrOffsprin
offspringNumberOfVariantsTestedColumn.Add(widget.NewSeparator())
}
userHasDiseaseHelpButton := widget.NewButtonWithIcon("", theme.QuestionIcon(), func(){
setPersonHasMonogenicDiseaseExplainerPage(window, currentPage)
})
probabilityOfPassingVariantHelpButton := widget.NewButtonWithIcon("", theme.QuestionIcon(), func(){
setPersonProbabilityOfPassingVariantExplainerPage(window, currentPage)
})
@ -2817,6 +2857,7 @@ func setViewMateProfilePage_MonogenicDiseases(window fyne.Window, userOrOffsprin
setOffspringProbabilityOfHavingVariantExplainerPage(window, currentPage)
})
userHasDiseaseColumn.Add(userHasDiseaseHelpButton)
userProbabilityOfPassingVariantColumn.Add(probabilityOfPassingVariantHelpButton)
userNumberOfVariantsTestedColumn.Add(numberOfVariantsTestedHelpButtonA)
offspringProbabilityOfHavingDiseaseColumn.Add(probabilityOfHavingDiseaseHelpButton)
@ -2825,7 +2866,8 @@ func setViewMateProfilePage_MonogenicDiseases(window fyne.Window, userOrOffsprin
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
}