124 lines
3.3 KiB
Go
124 lines
3.3 KiB
Go
|
|
// 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!")
|
|
}
|
|
|
|
|