seekia/resources/geneticReferences/polygenicDiseases/obesity.go

84 lines
2.5 KiB
Go
Raw Normal View History

package polygenicDiseases
import "seekia/internal/helpers"
import _ "embed"
import "errors"
import "encoding/gob"
import "bytes"
import "maps"
//go:embed rsIDs/GiantObesityStudyLoci.gob
var GiantObesityStudyLociFile []byte
func getObesityDiseaseObject()(PolygenicDisease, error){
// Map Structure: rsID -> References Map
locusReferencesMap := make(map[int64]map[string]string)
referencesMap_List1 := make(map[string]string)
referencesMap_List1["GIANT consortium - Meta-analyses of Genome-Wide Association Studies - 2022 - Obesity"] = "https://portals.broadinstitute.org/collaboration/giant/index.php/GIANT_consortium_data_files"
// These SNPs are taken from the meta-analyses of Genome-Wide Association Studies (GWAS) created by the GIANT consortium
//https://portals.broadinstitute.org/collaboration/giant/index.php/GIANT_consortium_data_files
// Download link:
// https://portals.broadinstitute.org/collaboration/giant/images/0/09/PublicRelease.WHRadjBMI.C.All.Add.txt.gz
// SHA-256 Checksum:
// 2a863b0357037ae5c34853342052ed3c59735d6440da0fd15d1cab34b7d49daf
// See /utilities/extractGiantLoci/extractGiantLoci.go to see how they were extracted from the file
buffer := bytes.NewBuffer(GiantObesityStudyLociFile)
decoder := gob.NewDecoder(buffer)
var lociList_1 []int64
err := decoder.Decode(&lociList_1)
if (err != nil){ return PolygenicDisease{}, err }
for _, rsID := range lociList_1{
locusReferencesMap[rsID] = maps.Clone(referencesMap_List1)
}
obesityLociList := helpers.GetListOfMapKeys(locusReferencesMap)
referencesMap := make(map[string]string)
referencesMap["Obesity Genome-Wide Association Study (GWAS) created by the GIANT consortium"] = "https://portals.broadinstitute.org/collaboration/giant/index.php/GIANT_consortium_data_files"
getAverageRiskProbabilitiesFunction := func(maleOrFemale string, inputAge int)(float64, error){
// Roughly 30% of people are obese.
if (maleOrFemale == "Male"){
return 0.30, nil
}
if (maleOrFemale != "Female"){
return 0, errors.New("Trying to get breast cancer risk probability for invalid maleOrFemale: " + maleOrFemale)
}
//TODO: Add different probabilities per age
return 0.30, nil
}
obesityObject := PolygenicDisease{
DiseaseName: "Obesity",
EffectedSex: "Both",
DiseaseDescription: "The condition of having an excessive amount of body fat.",
LocusReferencesMap: locusReferencesMap,
LociList: obesityLociList,
GetAverageRiskProbabilitiesFunction: getAverageRiskProbabilitiesFunction,
References: referencesMap,
}
return obesityObject, nil
}