[c1fb9e]: / genetic-trait-detector.py

Download this file

433 lines (398 with data), 20.5 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
import sys
from colorama import Fore, Style, init
# Initialize colorama for cross-platform color support
init()
class Rsid:
"""Genetic rsid detector class for identifying genetic variants"""
def __init__(self, rsid: str, alleles: tuple | str, association: str, description: str = "") -> None:
"""Initialize RSID detector with additional description parameter"""
self.rsid = rsid
self.alleles = alleles if isinstance(alleles, tuple) else (alleles,)
self.association = association
self.description = description or f"Variant associated with {association}"
def detect(self, line: str) -> tuple[bool, str]:
"""Detect this rsid and return detection status with matched genotype"""
if self.rsid not in line:
return False, ""
for allele_format in self.allele_match_set:
if allele_format in line:
return True, allele_format
return False, ""
def __str__(self) -> str:
return f"<Rsid[{self.rsid}]({self.association}) - {self.description}>"
@property
def allele_match_set(self) -> tuple:
"""Generate SNPedia-compatible allele format variations"""
def _format_allele(allele: str) -> tuple:
if ";" in allele:
a0, a1 = allele.upper().split(";")
return (f"({a0};{a1})", f"{a0}{a1}", f"{a0}/{a1}", f"{a0} {a1}")
return (f"({allele.upper()};{allele.upper()})",)
return tuple(format for allele in self.alleles for format in _format_allele(allele))
@property
def url(self) -> str:
"""Return SNPedia URL for this RSID"""
return f"https://www.snpedia.com/index.php/{self.rsid}"
def info(self, matched_allele: str = "") -> str:
"""Generate detailed information string with uniform color"""
genotype = matched_allele if matched_allele else self.alleles[0]
color = trait_colors.get(self.association, Fore.WHITE)
# Clean up the genotype display format
cleaned_genotype = genotype
if ";" in genotype:
# Handle formats like "(A;G)" or "A;G"
if genotype.startswith("(") and genotype.endswith(")"):
cleaned_genotype = genotype[1:-1] # Remove parentheses
parts = cleaned_genotype.split(";")
cleaned_genotype = f"{parts[0]} {parts[1]}"
elif "/" in genotype:
# Handle formats like "A/G"
parts = genotype.split("/")
cleaned_genotype = f"{parts[0]} {parts[1]}"
elif "\t" in genotype:
# Handle tab-separated format
parts = genotype.split("\t")
cleaned_genotype = f"{parts[0]} {parts[1]}"
return (
f"{color}"
f"{self.association}: {self.rsid} "
f"genotype {cleaned_genotype} | "
f"{self.description} | "
f"{self.url}"
f"{Style.RESET_ALL}"
)
class Trait:
"""Enum-like class for genetic traits"""
alzheimers = "Alzheimer's Disease"
autism = "Autism"
bipolar = "Bipolar Disorder"
immunity = "Immunity"
intelligence = "Intelligence"
longevity = "Longevity"
metabolism = "Metabolism"
muscle = "Muscular Performance"
ocd = "OCD"
schizophrenia = "Schizophrenia"
eyes = "Eye Characteristics"
hair = "Hair Characteristics"
anxiety = "Anxiety"
depression = "Depression"
addiction = "Addiction Risk"
misc = "Misc"
# Unique colors for each trait (visible on black background)
trait_colors = {
Trait.alzheimers: Fore.YELLOW, # Yellow
Trait.autism: Fore.GREEN, # Green
Trait.bipolar: Fore.MAGENTA, # Magenta
Trait.immunity: Fore.RED, # Red
Trait.intelligence: Fore.CYAN, # Cyan
Trait.longevity: Fore.BLUE, # Blue
Trait.metabolism: Fore.WHITE, # Grey
Trait.muscle: Fore.LIGHTBLACK_EX, # Dark Gray (visible, replaces black)
Trait.ocd: Fore.LIGHTMAGENTA_EX, # Light magenta
Trait.schizophrenia: Fore.LIGHTYELLOW_EX, # Light yellow
Trait.eyes: Fore.LIGHTBLUE_EX, # Light blue
Trait.hair: Fore.LIGHTRED_EX, # Light red
Trait.anxiety: Fore.LIGHTCYAN_EX, # Light cyan
Trait.depression: Fore.LIGHTGREEN_EX, # Light green
Trait.addiction: Fore.LIGHTWHITE_EX, # Light white (replaces dark black)
Trait.misc: Fore.RESET, # White
}
# Updated RSIDs list with corrections and new additions
_RSIDS = [
# Bipolar Disorder
("rs1006737", "A;A", Trait.bipolar, "Calcium channel gene variant linked to Bipolar risk"),
("rs4027132", "A;A", Trait.bipolar, "Associated with Bipolar Disorder risk"),
("rs7570682", "A;A", Trait.bipolar),
("rs1375144", "C;C", Trait.bipolar),
("rs683395", "C;T", Trait.bipolar),
("rs2609653", "C;T", Trait.bipolar),
("rs10982256", "C;C", Trait.bipolar),
("rs11622475", "C;C", Trait.bipolar),
("rs1344484", "T;T", Trait.bipolar),
("rs2953145", "C;G", Trait.bipolar),
("rs420259", "T;T", Trait.bipolar),
("rs4276227", "C;C", Trait.bipolar),
("rs4027132", "A;G", Trait.bipolar, "Heterozygous variant with intermediate Bipolar risk"),
("rs2609653", "C;C", Trait.bipolar),
("rs2953145", "G;G", Trait.bipolar),
("rs6448030", "G;G", Trait.bipolar, "Increases Bipolar Disorder risk"),
("rs10033237", "A;A", Trait.bipolar, "Associated with mood disorders"),
# Alzheimer's Disease
("rs429358", "C;C", Trait.alzheimers, "APOE4 homozygous variant strongly linked to Alzheimers risk"),
("rs145999145", "A;A", Trait.alzheimers),
("rs908832", "A;A", Trait.alzheimers),
("rs63750847", "A;A", Trait.alzheimers),
("rs429358", "C;T", Trait.alzheimers, "APOE4 heterozygous variant increasing Alzheimers risk"),
("rs145999145", "A;G", Trait.alzheimers),
("rs63750847", "A;G", Trait.alzheimers),
("rs7412", "C;C", Trait.alzheimers, "APOE ε2/ε2 protective variant"),
("rs4420638", "G;G", Trait.alzheimers, "Near APOC1, increases Alzheimer's risk"),
# Autism
("rs1858830", "C;C", Trait.autism, "MET gene variant associated with Autism risk"),
("rs2710102", "C;C", Trait.autism),
("rs7794745", "A;T", Trait.autism),
("rs1322784", "C;C", Trait.autism),
("rs1322784", "C;T", Trait.autism),
("rs1322784", "T;T", Trait.autism),
("rs265981", "A;G", Trait.autism),
("rs686", "A;G", Trait.autism),
("rs1143674", "A;A", Trait.autism),
("rs6807362", "C;C", Trait.autism),
("rs757972971", "A;A", Trait.autism),
("rs2217262", "A;A", Trait.autism),
("rs2217262", "A;C", Trait.autism),
("rs2217262", "C;C", Trait.autism),
("rs6766410", "A;A", Trait.autism),
("rs6766410", "A;C", Trait.autism),
("rs6766410", "C;C", Trait.autism),
("rs1445442", "A;A", Trait.autism),
("rs1445442", "A;G", Trait.autism),
("rs1445442", "G;G", Trait.autism),
("rs2421826", "C;T", Trait.autism),
("rs2421826", "T;T", Trait.autism),
("rs2421826", "C;C", Trait.autism),
("rs1358054", "G;G", Trait.autism),
("rs1358054", "G;T", Trait.autism),
("rs1358054", "T;T", Trait.autism),
("rs536861", "A;A", Trait.autism),
("rs536861", "A;C", Trait.autism),
("rs536861", "C;C", Trait.autism),
("rs722628", "A;A", Trait.autism),
("rs722628", "A;G", Trait.autism),
("rs722628", "G;G", Trait.autism),
("rs1858830", "C;G", Trait.autism),
("rs7794745", "T;T", Trait.autism),
("rs265981", "G;G", Trait.autism),
("rs4532", "C;C", Trait.autism),
("rs686", "A;A", Trait.autism),
("rs1143674", "A;A", Trait.autism),
("rs757972971", "A;A", Trait.autism),
("rs10513025", "T;T", Trait.autism, "Linked to Autism Spectrum Disorder risk"),
("rs1718101", "G;G", Trait.autism, "CNTNAP2 gene, associated with Autism susceptibility"),
# Schizophrenia
("rs27388", "A;A", Trait.schizophrenia),
("rs2270641", "G;G", Trait.schizophrenia),
("rs4129148", "C;C", Trait.schizophrenia),
("rs28694718", "A;A", Trait.schizophrenia),
("rs6422441", "C;C", Trait.schizophrenia),
("rs28414810", "C;C", Trait.schizophrenia),
("rs6603272", "G;G", Trait.schizophrenia),
("rs17883192", "C;C", Trait.schizophrenia),
("rs165599", "G;G", Trait.schizophrenia),
("rs27388", "A;G", Trait.schizophrenia),
("rs4129148", "C;G", Trait.schizophrenia),
("rs28694718", "A;G", Trait.schizophrenia),
("rs6422441", "C;T", Trait.schizophrenia),
("rs28414810", "C;G", Trait.schizophrenia),
("rs6603272", "G;T", Trait.schizophrenia),
("rs17883192", "C;G", Trait.schizophrenia),
("rs4633", "C;C", Trait.schizophrenia, "COMT gene, linked to Schizophrenia risk"),
("rs13192841", "A;A", Trait.schizophrenia, "Increases Schizophrenia susceptibility"),
# Longevity
("rs3758391", "C;T", Trait.longevity),
("rs5882", "A;A", Trait.longevity),
("rs1042522", "C;C", Trait.longevity),
("rs3803304", "C;C", Trait.longevity),
("rs3803304", "C;G", Trait.longevity),
("rs3803304", "G;G", Trait.longevity),
("rs6873545", "C;C", Trait.longevity),
("rs4590183", "C;C", Trait.longevity),
("rs1556516", "C;C", Trait.longevity),
("rs1556516", "C;G", Trait.longevity),
("rs1556516", "G;G", Trait.longevity),
("rs7137828", "C;C", Trait.longevity),
("rs7137828", "C;T", Trait.longevity),
("rs7137828", "T;T", Trait.longevity),
("rs1627804", "C;C", Trait.longevity),
("rs1627804", "A;A", Trait.longevity),
("rs1627804", "A;C", Trait.longevity),
("rs7844965", "A;G", Trait.longevity),
("rs7844965", "A;A", Trait.longevity),
("rs7844965", "G;G", Trait.longevity),
("rs61978928", "C;C", Trait.longevity),
("rs61978928", "C;T", Trait.longevity),
("rs61978928", "T;T", Trait.longevity),
("rs28926173", "C;C", Trait.longevity),
("rs28926173", "C;T", Trait.longevity),
("rs28926173", "T;T", Trait.longevity),
("rs146254978", "C;C", Trait.longevity),
("rs146254978", "C;T", Trait.longevity),
("rs146254978", "T;T", Trait.longevity),
("rs139137459", "A;G", Trait.longevity),
("rs139137459", "A;A", Trait.longevity),
("rs139137459", "G;G", Trait.longevity),
("rs3758391", "T;T", Trait.longevity),
("rs5882", "A;G", Trait.longevity),
("rs1042522", "C;G", Trait.longevity),
("rs2542052", "C;C", Trait.longevity, "APOC3 variant, linked to longer lifespan"),
("rs1042714", "G;G", Trait.longevity, "ADRB2, associated with longevity"),
("rs8034191", "C;C", Trait.longevity, "Associated with lung cancer risk and longevity"),
("rs2802292", "G;G", Trait.longevity, "FOXO3 variant linked to extended lifespan"),
# Immunity
("rs333", "46373456", Trait.immunity, "CCR5 delta32 variant affecting HIV resistance"),
("rs601338", "A;A", Trait.immunity, "FUT2 variant affecting gut microbiome and immunity"),
("rs1800896", "T;T", Trait.immunity, "IL10 variant, affects immune response"),
("rs5743810", "C;C", Trait.immunity, "TLR6, linked to infection resistance"),
("rs5743810", "C;T", Trait.immunity, "TLR6, linked to infection resistance"),
("rs5743810", "T;T", Trait.immunity, "TLR6, linked to infection resistance"),
# Intelligence
("rs28379706", "T;T", Trait.intelligence),
("rs28379706", "C;T", Trait.intelligence),
("rs28379706", "C;C", Trait.intelligence),
("rs363039", "A;G", Trait.intelligence),
("rs4680", "A;A", Trait.intelligence, "COMT Val/Val variant, higher COMT activity"),
("rs4680", "G;G", Trait.intelligence, "COMT Met/Met variant, better memory function"),
("rs363039", "C;C", Trait.intelligence),
("rs53576", "G;G", Trait.intelligence, "OXTR variant influencing social cognition"),
("rs2251499", "C;C", Trait.intelligence, "Associated with cognitive performance"),
("rs10119", "A;A", Trait.intelligence, "TOMM40, linked to memory function"),
# Muscular Performance
("rs1815739", "C;C", Trait.muscle, "ACTN3 variant linked to sprint performance"),
("rs1805086", "C;C", Trait.muscle),
("rs1815739", "C;T", Trait.muscle),
("rs1805086", "C;T", Trait.muscle),
("rs1815739", "T;T", Trait.muscle),
("rs1799752", "D;D", Trait.muscle, "ACE deletion allele linked to endurance"),
("rs4253778", "C;C", Trait.muscle, "PPARGC1A, enhances muscle performance"),
# OCD
("rs4570625", "G;G", Trait.ocd),
("rs4565946", "C;C", Trait.ocd),
("rs301430", "T;T", Trait.ocd, "SLC1A1, associated with OCD risk"),
# Metabolism
("rs1801131", "A;C", Trait.metabolism),
("rs1801131", "C;C", Trait.metabolism),
("rs1801133", "C;T", Trait.metabolism),
("rs1801133", "T;T", Trait.metabolism),
("rs2282679", "A;C", Trait.metabolism),
("rs2282679", "C;C", Trait.metabolism),
("rs12785878", "G;T", Trait.metabolism),
("rs12785878", "T;T", Trait.metabolism),
("rs1799945", "F;G", Trait.metabolism),
("rs4988235", "C;C", Trait.metabolism),
("rs182549", "C;C", Trait.metabolism),
("rs2187668", "A;A", Trait.metabolism),
("rs2187668", "A;G", Trait.metabolism),
("rs5030858", "T;T", Trait.metabolism),
("rs72921001", "C;C", Trait.metabolism),
("rs7903146", "T;T", Trait.metabolism),
("rs7903146", "C;C", Trait.metabolism),
("rs7903146", "C;T", Trait.metabolism),
("rs662799", "A;G", Trait.metabolism),
("rs662799", "G;G", Trait.metabolism),
("rs13119723", "A;A", Trait.metabolism),
("rs13119723", "A;G", Trait.metabolism),
("rs13119723", "G;G", Trait.metabolism),
("rs6822844", "G;G", Trait.metabolism),
("rs3184504", "C;T", Trait.metabolism),
("rs3184504", "T;T", Trait.metabolism),
("rs1042713", "G;G", Trait.metabolism, "ADRB2 variant affecting energy expenditure"),
("rs9939609", "A;A", Trait.metabolism, "FTO variant linked to obesity risk"),
("rs4988235", "T;T", Trait.metabolism, "LCT variant linked to lactose tolerance"),
("rs17782313", "C;C", Trait.metabolism, "MC4R, increases obesity risk"),
("rs1421085", "C;C", Trait.metabolism, "FTO, linked to higher BMI"),
# Eye Characteristics
("rs12913832", "A;A", Trait.eyes, "HERC2 variant strongly linked to blue eyes"),
("rs12913832", "A;G", Trait.eyes, "HERC2 variant linked to intermediate eye color"),
("rs12913832", "G;G", Trait.eyes, "HERC2 variant linked to brown eyes"),
("rs28938473", "T;T", Trait.eyes),
("rs61753033", "T;T", Trait.eyes),
("rs61753034", "T;T", Trait.eyes),
("rs4778241", "A;A", Trait.eyes, "Blue eyes"),
("rs4778241", "A;C", Trait.eyes, "Blue eyes"),
("rs4778241", "C;C", Trait.eyes, "Blue eyes"),
("rs7495174", "A;A", Trait.eyes, "Blue/gray eyes more likely"),
("rs1129038", "A;A", Trait.eyes, "Blue eyes"),
("rs1129038", "A;G", Trait.eyes, "Blue eyes"),
("rs1129038", "G;G", Trait.eyes, "Blue eyes"),
("rs916977", "A;A", Trait.eyes, "Blue eyes"),
("rs916977", "A;G", Trait.eyes, "Blue eyes"),
("rs916977", "G;G", Trait.eyes, "Blue eyes"),
("rs1667394", "A;A", Trait.eyes, "Blonde hair & blue eyes is 4x more likely"),
("rs12203592", "T;T", Trait.eyes, "IRF4 variant affecting eye color variation"),
("rs16891982", "C;C", Trait.eyes, "SLC45A2, influences light eye color"),
("rs1393350", "A;A", Trait.eyes, "TYR, linked to lighter eye shades"),
# Hair Characteristics
("rs6152", "A;A", Trait.hair, "Won't go bald"),
("rs6152", "A;G", Trait.hair, "Increased risk of baldness"),
("rs6152", "A;", Trait.hair),
("rs6152", "G;G", Trait.hair, "Able to go bald"),
("rs1805009", "C;C", Trait.hair, "Red hair color"),
("rs1805009", "C;G", Trait.hair, "Red hair color carrier"),
("rs1805007", "C;T", Trait.hair, "MC1R variant linked to red hair"),
("rs1805007", "T;T", Trait.hair, "Increased response to anesthetics; 13-20x higher likelihood of red hair; increased risk of melanoma"),
("rs1805008", "C;T", Trait.hair, "Red hair color carrier"),
("rs1805008", "T;T", Trait.hair, "Red hair color"),
("rs1805006", "A;A", Trait.hair, "Red hair color"),
("rs1805006", "A;C", Trait.hair, "Red hair color carrier"),
("rs11547464", "A;A", Trait.hair, "Red hair color"),
("rs11547464", "A;G", Trait.hair, "Red hair color carrier"),
("rs35264875", "T;T", Trait.hair, "Blonde hair color"),
("rs7349332", "T;T", Trait.hair, "Curly hair"),
("rs11803731", "T;T", Trait.hair, "Curly hair"),
("rs17646946", "A;A", Trait.hair, "Straight curly hair"),
("rs1667394", "A;A", Trait.hair, "Blonde hair & blue eyes is 4x more likely"),
("rs16891982", "C;C", Trait.hair, "Generally non-European, but if European, 7x more likely to have black hair"),
("rs16891982", "C;G", Trait.hair, "If European 7x more likely to have black hair"),
("rs16891982", "G;G", Trait.hair, "SLC45A2 variant influencing hair pigmentation"),
("rs17822931", "C;C", Trait.hair, "ABCC11 variant linked to earwax type and hair texture"),
("rs17822931", "C;T", Trait.hair, "Dry earwax, no body odor, likely Asian ancestry"),
("rs12821256", "C;C", Trait.hair, "KITLG, associated with blond hair"),
("rs2378249", "G;G", Trait.hair, "PADI3, linked to hair texture"),
# Depression
("rs6265", "A;A", Trait.depression, "BDNF Val66Met variant linked to depression risk"),
("rs6265", "A;G", Trait.depression, "BDNF Val66Met variant linked to depression risk"),
("rs25531", "T;T", Trait.depression, "SERT gene variant affecting serotonin transport"),
("rs1049353", "A;A", Trait.depression, "CNR1, associated with depression risk"),
("rs6313", "T;T", Trait.depression),
# Anxiety
("rs1360780", "T;T", Trait.anxiety, "FKBP5 variant associated with stress response"),
("rs3810366", "G;G", Trait.anxiety, "CRHR1 variant linked to stress response"),
("rs6295", "C;C", Trait.anxiety, "HTR1A, increases anxiety risk"),
("rs6311", "A;A", Trait.anxiety, "HTR2A, linked to stress response"),
# Addiction Risk
("rs1800497", "A;A", Trait.addiction, "DRD2 Taq1A A1/A1 variant, higher addiction risk"),
("rs1800497", "A;G", Trait.addiction, "DRD2 Taq1A, intermediate addiction risk"),
("rs1799971", "A;G", Trait.addiction, "OPRM1 variant linked to opioid receptor function"),
("rs662", "A;A", Trait.addiction, "PON1 variant associated with alcohol metabolism"),
("rs1229984", "C;C", Trait.addiction, "ADH1B variant affecting alcohol processing"),
("rs16969968", "A;A", Trait.addiction, "CHRNA5 variant associated with nicotine dependence"),
("rs2832407", "A;A", Trait.addiction, "GRIK1, increases alcohol dependence risk"),
("rs6277", "G;G", Trait.addiction, "DRD2, linked to reward sensitivity"),
# misc
("rs909525", "G;G", Trait.misc, "Warrior Gene"),
]
RSIDS = [Rsid(*x) for x in _RSIDS]
def parse_file(path: str) -> dict[str, str]:
"""Parse genetic data file into lookup dictionary"""
try:
with open(path, 'r') as genes:
return {x.split("\t")[0]: x.strip()
for x in genes.readlines()
if x.strip() and x.startswith("rs")}
except FileNotFoundError:
print(f"{Fore.RED}Error: File not found at {path}{Style.RESET_ALL}")
sys.exit(1)
except Exception as e:
print(f"{Fore.RED}Error parsing file: {str(e)}{Style.RESET_ALL}")
sys.exit(1)
def scan_genes(rsid_dict: dict[str, str]) -> list[tuple[Rsid, str]]:
"""Scan genetic data for matching RSIDs and return detected variants with genotypes"""
detected = []
for rsid in RSIDS:
if rsid.rsid in rsid_dict:
detected_flag, matched_allele = rsid.detect(rsid_dict[rsid.rsid])
if detected_flag:
detected.append((rsid, matched_allele))
return detected
if __name__ == "__main__":
filename = sys.argv[1] if len(sys.argv) > 1 else input("Enter DNA data file location: ")
rsid_dict = parse_file(filename)
detected_traits = scan_genes(rsid_dict)
if not detected_traits:
print(f"{Fore.YELLOW}No matching genetic variants found in the provided data.{Style.RESET_ALL}")
else:
print(f"\n{Fore.WHITE}Found {len(detected_traits)} genetic variants:{Style.RESET_ALL}")
for rsid, allele in detected_traits:
print(rsid.info(allele))
print()