83 lines
2.5 KiB
Go
83 lines
2.5 KiB
Go
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
|
|
}
|
|
|
|
|