@@ -103,6 +103,14 @@ def site_mask_ids(self) -> Tuple[str, ...]:
103103 """
104104 return tuple (self .config .get ("SITE_MASK_IDS" , ())) # ensure tuple
105105
106+ def site_mask_def (self ) -> str :
107+ """Return the default site mask identifier for this data resource."""
108+ if self ._default_site_mask is None :
109+ raise RuntimeError (
110+ "No default site mask configured. Please specify the 'site_mask' parameter explicitly."
111+ )
112+ return self ._default_site_mask
113+
106114 @property
107115 def _site_annotations_zarr_path (self ) -> str :
108116 return self .config ["SITE_ANNOTATIONS_ZARR_PATH" ]
@@ -114,7 +122,11 @@ def _prep_site_mask_param(
114122 ) -> base_params .site_mask :
115123 if site_mask == base_params .DEFAULT :
116124 # Use whatever is the default site mask for this data resource.
117- assert self ._default_site_mask is not None
125+ if self ._default_site_mask is None :
126+ raise RuntimeError (
127+ "No default site mask configured. "
128+ "Please specify the 'site_mask' parameter explicitly."
129+ )
118130 return self ._default_site_mask
119131 elif site_mask in self .site_mask_ids :
120132 return site_mask
@@ -214,7 +226,9 @@ def _site_filters_for_contig(
214226 * ,
215227 contig : str ,
216228 mask : base_params .site_mask ,
217- field : base_params .field ,
229+ # Field identifies which per-variant filter array to read (e.g. "filter_pass").
230+ # Default kept for backwards compatibility with internal callers/tests.
231+ field : base_params .field = "filter_pass" ,
218232 inline_array : base_params .inline_array ,
219233 chunks : base_params .chunks ,
220234 ) -> da .Array :
@@ -234,7 +248,11 @@ def _site_filters_for_contig(
234248 return d
235249
236250 else :
237- assert contig in self .contigs
251+ if contig not in self .contigs :
252+ raise ValueError (
253+ f"Contig { contig !r} not found. "
254+ f"Available contigs: { self .contigs } "
255+ )
238256 root = self .open_site_filters (mask = mask )
239257 z = root [f"{ contig } /variants/{ field } " ]
240258 d = _da_from_zarr (z , inline_array = inline_array , chunks = chunks )
@@ -336,12 +354,32 @@ def _snp_sites_for_contig(
336354
337355 # Handle contig in the reference genome.
338356 else :
339- assert contig in self .contigs
357+ if contig not in self .contigs :
358+ raise ValueError (
359+ f"Contig { contig !r} not found. "
360+ f"Available contigs: { self .contigs } "
361+ )
340362 root = self .open_snp_sites ()
341363 z = root [f"{ contig } /variants/{ field } " ]
342364 ret = _da_from_zarr (z , inline_array = inline_array , chunks = chunks )
343365 return ret
344366
367+ # Backwards compatible alias for internal callers/tests.
368+ def snp_sites_for_contig (
369+ self ,
370+ * ,
371+ contig : base_params .contig ,
372+ field : base_params .field ,
373+ inline_array : base_params .inline_array ,
374+ chunks : base_params .chunks ,
375+ ) -> da .Array :
376+ return self ._snp_sites_for_contig (
377+ contig = contig ,
378+ field = field ,
379+ inline_array = inline_array ,
380+ chunks = chunks ,
381+ )
382+
345383 def _snp_sites_for_region (
346384 self ,
347385 * ,
@@ -445,7 +483,11 @@ def _snp_genotypes_for_contig(
445483 return da .concatenate (arrs )
446484
447485 else :
448- assert contig in self .contigs
486+ if contig not in self .contigs :
487+ raise ValueError (
488+ f"Contig { contig !r} not found. "
489+ f"Available contigs: { self .contigs } "
490+ )
449491 root = self .open_snp_genotypes (sample_set = sample_set )
450492 z = root [f"{ contig } /calldata/{ field } " ]
451493 d = _da_from_zarr (z , inline_array = inline_array , chunks = chunks )
@@ -601,7 +643,11 @@ def _snp_variants_for_contig(
601643 return ret
602644
603645 else :
604- assert contig in self .contigs
646+ if contig not in self .contigs :
647+ raise ValueError (
648+ f"Contig { contig !r} not found. "
649+ f"Available contigs: { self .contigs } "
650+ )
605651 coords = dict ()
606652 data_vars = dict ()
607653 sites_root = self .open_snp_sites ()
@@ -721,6 +767,40 @@ def _site_annotations_raw(
721767
722768 return ds
723769
770+ def _site_annotations_for_contig (
771+ self ,
772+ * ,
773+ contig ,
774+ inline_array : base_params .inline_array ,
775+ chunks : base_params .chunks ,
776+ ) -> xr .Dataset :
777+ """
778+ Backwards compatible internal helper.
779+
780+ Raises a ValueError with a consistent message when the contig is unknown,
781+ matching expectations in tests and existing error-handling behavior.
782+ """
783+ if contig in getattr (self , "virtual_contigs" , {}):
784+ contigs = self .virtual_contigs [contig ]
785+ ds_parts = [
786+ self ._site_annotations_raw (
787+ contig = c ,
788+ inline_array = inline_array ,
789+ chunks = chunks ,
790+ )
791+ for c in contigs
792+ ]
793+ return _simple_xarray_concat (ds_parts , dim = DIM_VARIANT )
794+
795+ if contig not in self .contigs :
796+ raise ValueError (
797+ f"Contig { contig !r} not found. Available contigs: { self .contigs } "
798+ )
799+
800+ return self ._site_annotations_raw (
801+ contig = contig , inline_array = inline_array , chunks = chunks
802+ )
803+
724804 @_check_types
725805 @doc (
726806 summary = "Load site annotations." ,
@@ -977,7 +1057,11 @@ def _snp_calls_for_contig(
9771057
9781058 # Handle contig in the reference genome.
9791059 else :
980- assert contig in self .contigs
1060+ if contig not in self .contigs :
1061+ raise ValueError (
1062+ f"Contig { contig !r} not found. "
1063+ f"Available contigs: { self .contigs } "
1064+ )
9811065
9821066 coords = dict ()
9831067 data_vars = dict ()
@@ -1159,7 +1243,12 @@ def _raw_snp_calls(
11591243 inline_array = inline_array ,
11601244 chunks = chunks ,
11611245 )
1162- assert x .sizes ["variants" ] == loc_ann .shape [0 ]
1246+ if x .sizes ["variants" ] != loc_ann .shape [0 ]:
1247+ raise RuntimeError (
1248+ f"Variants dimension mismatch: dataset has "
1249+ f"{ x .sizes ['variants' ]} variants but annotation "
1250+ f"mask has { loc_ann .shape [0 ]} "
1251+ )
11631252 x = x .isel (variants = loc_ann )
11641253
11651254 lx .append (x )
0 commit comments