@@ -3539,30 +3539,23 @@ tsk_treeseq_site_allele_frequency_spectrum(const tsk_treeseq_t *self,
3539
3539
return ret ;
3540
3540
}
3541
3541
3542
- static int TSK_WARN_UNUSED
3542
+ static void
3543
3543
tsk_treeseq_update_branch_afs (const tsk_treeseq_t * self , tsk_id_t u , double right ,
3544
3544
double * restrict last_update , const double * restrict time , tsk_id_t * restrict parent ,
3545
- const double * counts , tsk_size_t num_sample_sets , tsk_size_t num_time_windows ,
3546
- const double * time_windows , tsk_size_t window_index , const tsk_size_t * result_dims ,
3547
- tsk_flags_t options , double * result )
3545
+ tsk_size_t * restrict coordinate , const double * counts , tsk_size_t num_sample_sets ,
3546
+ tsk_size_t num_time_windows , const double * time_windows , tsk_size_t window_index ,
3547
+ const tsk_size_t * result_dims , tsk_flags_t options , double * result )
3548
3548
{
3549
- int ret = 0 ;
3550
3549
tsk_size_t afs_size ;
3551
3550
tsk_size_t k ;
3552
3551
tsk_size_t time_window_index ;
3553
3552
double * afs ;
3554
- // note: moving this malloc outside this function doesn't speed things up
3555
- tsk_size_t * coordinate = tsk_malloc (num_sample_sets * sizeof (* coordinate ));
3556
3553
bool polarised = !!(options & TSK_STAT_POLARISED );
3557
3554
const double * count_row = GET_2D_ROW (counts , num_sample_sets + 1 , u );
3558
3555
double x = 0 ;
3559
3556
double t_u , t_v ;
3560
3557
double tw_branch_length = 0 ;
3561
3558
const tsk_size_t all_samples = (tsk_size_t ) count_row [num_sample_sets ];
3562
- if (coordinate == NULL ) {
3563
- ret = tsk_trace_error (TSK_ERR_NO_MEMORY );
3564
- goto out ;
3565
- }
3566
3559
if (parent [u ] != TSK_NULL ) {
3567
3560
t_u = time [u ];
3568
3561
t_v = time [parent [u ]];
@@ -3589,9 +3582,6 @@ tsk_treeseq_update_branch_afs(const tsk_treeseq_t *self, tsk_id_t u, double righ
3589
3582
}
3590
3583
}
3591
3584
last_update [u ] = right ;
3592
- out :
3593
- tsk_safe_free (coordinate );
3594
- return ret ;
3595
3585
}
3596
3586
3597
3587
static int
@@ -3616,6 +3606,7 @@ tsk_treeseq_branch_allele_frequency_spectrum(const tsk_treeseq_t *self,
3616
3606
tsk_id_t * restrict parent = tsk_malloc (num_nodes * sizeof (* parent ));
3617
3607
double * restrict last_update = tsk_calloc (num_nodes , sizeof (* last_update ));
3618
3608
double * restrict branch_length = tsk_calloc (num_nodes , sizeof (* branch_length ));
3609
+ tsk_size_t * restrict coordinate = tsk_malloc (num_sample_sets * sizeof (* coordinate ));
3619
3610
tsk_id_t tj , tk , h ;
3620
3611
double t_left , t_right , w_right ;
3621
3612
const tsk_size_t K = num_sample_sets + 1 ;
@@ -3625,7 +3616,7 @@ tsk_treeseq_branch_allele_frequency_spectrum(const tsk_treeseq_t *self,
3625
3616
goto out ;
3626
3617
}
3627
3618
3628
- if (parent == NULL || last_update == NULL ) {
3619
+ if (parent == NULL || last_update == NULL || coordinate == NULL ) {
3629
3620
ret = tsk_trace_error (TSK_ERR_NO_MEMORY );
3630
3621
goto out ;
3631
3622
}
@@ -3643,19 +3634,13 @@ tsk_treeseq_branch_allele_frequency_spectrum(const tsk_treeseq_t *self,
3643
3634
tk ++ ;
3644
3635
u = edge_child [h ];
3645
3636
v = edge_parent [h ];
3646
- ret = tsk_treeseq_update_branch_afs (self , u , t_left , last_update , node_time ,
3647
- parent , counts , num_sample_sets , num_time_windows , time_windows ,
3648
- window_index , result_dims , options , result );
3649
- if (ret != 0 ) {
3650
- goto out ;
3651
- }
3637
+ tsk_treeseq_update_branch_afs (self , u , t_left , last_update , node_time ,
3638
+ parent , coordinate , counts , num_sample_sets , num_time_windows ,
3639
+ time_windows , window_index , result_dims , options , result );
3652
3640
while (v != TSK_NULL ) {
3653
- ret = tsk_treeseq_update_branch_afs (self , v , t_left , last_update ,
3654
- node_time , parent , counts , num_sample_sets , num_time_windows ,
3641
+ tsk_treeseq_update_branch_afs (self , v , t_left , last_update , node_time ,
3642
+ parent , coordinate , counts , num_sample_sets , num_time_windows ,
3655
3643
time_windows , window_index , result_dims , options , result );
3656
- if (ret != 0 ) {
3657
- goto out ;
3658
- }
3659
3644
update_state (counts , K , v , u , -1 );
3660
3645
v = parent [v ];
3661
3646
}
@@ -3671,12 +3656,9 @@ tsk_treeseq_branch_allele_frequency_spectrum(const tsk_treeseq_t *self,
3671
3656
parent [u ] = v ;
3672
3657
branch_length [u ] = node_time [v ] - node_time [u ];
3673
3658
while (v != TSK_NULL ) {
3674
- ret = tsk_treeseq_update_branch_afs (self , v , t_left , last_update ,
3675
- node_time , parent , counts , num_sample_sets , num_time_windows ,
3659
+ tsk_treeseq_update_branch_afs (self , v , t_left , last_update , node_time ,
3660
+ parent , coordinate , counts , num_sample_sets , num_time_windows ,
3676
3661
time_windows , window_index , result_dims , options , result );
3677
- if (ret != 0 ) {
3678
- goto out ;
3679
- }
3680
3662
update_state (counts , K , v , u , +1 );
3681
3663
v = parent [v ];
3682
3664
}
@@ -3695,12 +3677,9 @@ tsk_treeseq_branch_allele_frequency_spectrum(const tsk_treeseq_t *self,
3695
3677
/* Flush the contributions of all nodes to the current window */
3696
3678
for (u = 0 ; u < (tsk_id_t ) num_nodes ; u ++ ) {
3697
3679
tsk_bug_assert (last_update [u ] < w_right );
3698
- ret = tsk_treeseq_update_branch_afs (self , u , w_right , last_update ,
3699
- node_time , parent , counts , num_sample_sets , num_time_windows ,
3680
+ tsk_treeseq_update_branch_afs (self , u , w_right , last_update , node_time ,
3681
+ parent , coordinate , counts , num_sample_sets , num_time_windows ,
3700
3682
time_windows , window_index , result_dims , options , result );
3701
- if (ret != 0 ) {
3702
- goto out ;
3703
- }
3704
3683
}
3705
3684
window_index ++ ;
3706
3685
}
0 commit comments