Skip to content

Commit 3dedd38

Browse files
committed
Add support for value meaning NULL in implicit skymaps
1 parent 54e6f92 commit 3dedd38

4 files changed

Lines changed: 259 additions & 81 deletions

File tree

crates/cli/src/map.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ impl Count {
7070
if self.depth < 13 {
7171
build_count_map_explicit::<u32>(self.depth, self.input).and_then(|map| {
7272
match self.implicit_over_explicit_ratio {
73-
Some(threshold) if map.is_implicit_the_best_representation(threshold) => {
74-
map.into_implicit_skymap().to_fits_file(self.output)
73+
Some(threshold) if map.is_implicit_the_best_representation(0, threshold) => {
74+
map.into_implicit_skymap(0).to_fits_file(self.output)
7575
}
7676
_ => map.to_fits_file(self.output),
7777
}
@@ -80,8 +80,8 @@ impl Count {
8080
} else {
8181
build_count_map_explicit::<u64>(self.depth, self.input).and_then(|map| {
8282
match self.implicit_over_explicit_ratio {
83-
Some(threshold) if map.is_implicit_the_best_representation(threshold) => {
84-
map.into_implicit_skymap().to_fits_file(self.output)
83+
Some(threshold) if map.is_implicit_the_best_representation(0, threshold) => {
84+
map.into_implicit_skymap(0).to_fits_file(self.output)
8585
}
8686
_ => map.to_fits_file(self.output),
8787
}
@@ -91,8 +91,8 @@ impl Count {
9191
} else {
9292
build_count_map_implicit(self.depth, self.input).and_then(|map| {
9393
match self.implicit_over_explicit_ratio {
94-
Some(threshold) if !map.is_implicit_the_best_representation(threshold) => {
95-
map.into_explicit_skymap().to_fits_file(self.output)
94+
Some(threshold) if !map.is_implicit_the_best_representation(0, threshold) => {
95+
map.into_explicit_skymap(0).to_fits_file(self.output)
9696
}
9797
_ => map.to_fits_file(self.output),
9898
}
@@ -128,8 +128,8 @@ impl Dens {
128128
build_count_map_explicit::<u32>(self.depth, self.input).and_then(|map| {
129129
let map = map.to_dens_map_par();
130130
match self.implicit_over_explicit_ratio {
131-
Some(threshold) if map.is_implicit_the_best_representation(threshold) => {
132-
map.into_implicit_skymap().to_fits_file(self.output)
131+
Some(threshold) if map.is_implicit_the_best_representation(0.0, threshold) => {
132+
map.into_implicit_skymap(0.0).to_fits_file(self.output)
133133
}
134134
_ => map.to_fits_file(self.output),
135135
}
@@ -139,7 +139,7 @@ impl Dens {
139139
build_count_map_explicit::<u64>(self.depth, self.input).and_then(|map| {
140140
let map = map.to_dens_map_par();
141141
match self.implicit_over_explicit_ratio {
142-
Some(threshold) if map.is_implicit_the_best_representation(threshold) => {
142+
Some(threshold) if map.is_implicit_the_best_representation(0.0, threshold) => {
143143
warn!("No implicit representation available for DensityMap of depth >= 13!");
144144
// map.into_implicit_skymap().to_fits_file(self.output)
145145
map.to_fits_file(self.output)
@@ -324,7 +324,7 @@ impl Operation {
324324
OpType::Add => {
325325
let thread_pool = get_thread_pool(self.parallel);
326326
thread_pool
327-
.install(|| l.par_add(r))
327+
.install(|| l.par_add(r, Default::default()))
328328
.and_then(|res| res.to_fits_file(self.output))
329329
.map_err(|e| e.into())
330330
}

src/nested/map/skymap/explicit.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,11 @@ impl<H: HHash, V: SkyMapValue> ExplicitSkyMapBTree<H, V> {
5353
_zero: V::zero(),
5454
}
5555
}
56-
pub fn into_implicit_map(self) -> ImplicitSkyMapArray<H, V> {
56+
pub fn into_implicit_map(self, null_value: V) -> ImplicitSkyMapArray<H, V> {
5757
// We may implement an "Implicit iterator" to write a very large map on the disk
5858
// (with an implicit map possibly larger that the RAM).
5959
let depth = self.depth;
60-
let mut values = vec![V::zero(); n_hash(self.depth) as usize];
60+
let mut values = vec![null_value; n_hash(self.depth) as usize];
6161
for (k, v) in self.entries {
6262
values[k.to_usize().unwrap()] = v;
6363
}
@@ -407,13 +407,13 @@ impl<H: HHash> ExplicitCountMap<H> {
407407
}
408408
}
409409
impl ExplicitCountMap<u32> {
410-
pub fn into_implicit_skymap(self) -> ImplicitCountMapU32 {
411-
self.0.into_implicit_map().into()
410+
pub fn into_implicit_skymap(self, null_value: u32) -> ImplicitCountMapU32 {
411+
self.0.into_implicit_map(null_value).into()
412412
}
413413
}
414414
impl ExplicitCountMap<u64> {
415-
pub fn into_implicit_skymap(self) -> ImplicitCountMap {
416-
self.0.into_implicit_map().into()
415+
pub fn into_implicit_skymap(self, null_value: u32) -> ImplicitCountMap {
416+
self.0.into_implicit_map(null_value).into()
417417
}
418418
}
419419

@@ -625,8 +625,8 @@ impl ExplicitDensityMap<u64> {
625625
}
626626
}
627627
impl ExplicitDensityMap<u32> {
628-
pub fn into_implicit_skymap(self) -> ImplicitDensityMap {
629-
self.0.into_implicit_map().into()
628+
pub fn into_implicit_skymap(self, null_value: f64) -> ImplicitDensityMap {
629+
self.0.into_implicit_map(null_value).into()
630630
}
631631
}
632632
/*impl ExplicitDensityMap<u64> {

src/nested/map/skymap/implicit.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,11 @@ impl<H: HHash, V: SkyMapValue> ImplicitSkyMapArray<H, V> {
6868
}
6969
}
7070

71-
pub fn into_explicit_map(self) -> ExplicitSkyMapBTree<H, V> {
71+
pub fn into_explicit_map(self, null_value: V) -> ExplicitSkyMapBTree<H, V> {
7272
let depth = self.depth;
7373
let btreemap: BTreeMap<H, V> = self
7474
.owned_entries()
75-
.filter(move |(_k, v)| !v.is_zero())
75+
.filter(move |(_k, v)| null_value.ne(v))
7676
.collect();
7777
ExplicitSkyMapBTree::new(depth, btreemap)
7878
}
@@ -227,8 +227,8 @@ impl ImplicitCountMap {
227227
pub fn into_implicit_skymap_array(self) -> ImplicitSkyMapArray<u64, u32> {
228228
self.0
229229
}
230-
pub fn into_explicit_skymap(self) -> ExplicitCountMap<u64> {
231-
self.0.into_explicit_map().into()
230+
pub fn into_explicit_skymap(self, null_value: u32) -> ExplicitCountMap<u64> {
231+
self.0.into_explicit_map(null_value).into()
232232
}
233233
/// Build a count skymap from an iterator over HEALPix cells at the given depth.
234234
/// # Panics
@@ -467,8 +467,8 @@ impl ImplicitCountMapU32 {
467467
pub fn into_implicit_skymap_array(self) -> ImplicitSkyMapArray<u32, u32> {
468468
self.0
469469
}
470-
pub fn into_explicit_skymap(self) -> ExplicitCountMap<u32> {
471-
self.0.into_explicit_map().into()
470+
pub fn into_explicit_skymap(self, null_value: u32) -> ExplicitCountMap<u32> {
471+
self.0.into_explicit_map(null_value).into()
472472
}
473473
/// Build a count skymap from an iterator over HEALPix cells at the given depth.
474474
/// # Panics

0 commit comments

Comments
 (0)