// addLocusMetadata.go provides a function to manually add locus metadata to the .json files. package main import "seekia/resources/geneticReferences/locusMetadata" import "seekia/internal/helpers" import "seekia/internal/localFilesystem" import "encoding/json" import "slices" import "log" func main(){ /* //TODO: Add these loci // They are on the X chromosome, and we haven't defined the syntax to deal with X chromosome loci yet. newLocusMetadataObject_1 := locusMetadata.LocusMetadata{ RSIDsList: []int64{5957354}, Chromosome: X, Position: 120305480, GeneNamesList: []string{"TMEM255A"}, CompanyAliases: make(map[locusMetadata.GeneticsCompany][]string), References: make(map[string]string), } newLocusMetadataObject_2 := locusMetadata.LocusMetadata{ RSIDsList: []int64{78542430}, Chromosome: X, Position: 48259397, GeneNamesList: []string{"SSX1"}, CompanyAliases: make(map[locusMetadata.GeneticsCompany][]string), References: make(map[string]string), } */ // This is a list of metadata objects to add to the locus metadata lociToAddList := []locusMetadata.LocusMetadata{ //newLocusMetadataObject_1, //newLocusMetadataObject_2, } numberOfLociToAdd := len(lociToAddList) err := locusMetadata.InitializeLocusMetadataVariables() if (err != nil){ log.Println("ERROR: " + err.Error()) return } // Map Structure: Chromosome -> List of locus metadata objects to add lociToAddMap := make(map[int][]locusMetadata.LocusMetadata) for _, locusObject := range lociToAddList{ // First we check to see if locus metadata already exists locusRSIDsList := locusObject.RSIDsList for _, rsID := range locusRSIDsList{ exists, _, err := locusMetadata.GetLocusMetadata(rsID) if (err != nil){ log.Println("ERROR: " + err.Error()) return } if (exists == true){ rsIDString := helpers.ConvertInt64ToString(rsID) log.Println("lociToAddList contains locus whose metadata already exists: " + rsIDString) return } } locusChromosome := locusObject.Chromosome existingList, exists := lociToAddMap[locusChromosome] if (exists == false){ lociToAddMap[locusChromosome] = []locusMetadata.LocusMetadata{locusObject} } else { existingList = append(existingList, locusObject) lociToAddMap[locusChromosome] = existingList } } for chromosomeInt, locusMetadataObjectsToAddList := range lociToAddMap{ existingLocusMetadataObjectsList, err := locusMetadata.GetLocusMetadataObjectsListByChromosome(chromosomeInt) if (err != nil) { log.Println(err) return } newLocusMetadataObjectsList := slices.Concat(existingLocusMetadataObjectsList, locusMetadataObjectsToAddList) newChromosomeFileBytes, err := json.MarshalIndent(newLocusMetadataObjectsList, "", "\t") if (err != nil){ log.Println("ERROR: " + err.Error()) return } currentChromosomeString := helpers.ConvertIntToString(chromosomeInt) locusMetadataFilepath := "../../resources/geneticReferences/locusMetadata/" err = localFilesystem.CreateOrOverwriteFile(newChromosomeFileBytes, locusMetadataFilepath, "LocusMetadata_Chromosome" + currentChromosomeString + ".json") if (err != nil){ log.Println("ERROR: " + err.Error()) return } } numberOfAddedLociString := helpers.ConvertIntToString(numberOfLociToAdd) log.Println("Successfully added " + numberOfAddedLociString + " locus metadatas!") }