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 }