tree_node_info *fetch_treenode_reference(tree_info *trees, tree_node_info *halo) { tree_node_info *reference_halo = halo; if(trees->trees_reference != NULL) { int snapshot_halo = trees->snap_list[halo->snap_tree]; int file_index_halo = fetch_treenode_file_index(trees, halo); int snap_tree_reference = find_treesnap_snap(trees->trees_reference, snapshot_halo); if(!find_tree_node(trees->trees_reference, snap_tree_reference, file_index_halo, halo->parent_top == NULL, &reference_halo)) SID_exit_error("Could not find halo in reference trees (snapshot=%d file_index=%d).", SID_ERROR_LOGIC, snapshot_halo, file_index_halo); } return (reference_halo); }
void write_tree_branch_ascii(tree_info *trees,tree_node_info *halo,const char *filename_out,const char *trees_name){ SID_log("Writing branch to file {%s}...",SID_LOG_OPEN,filename_out); if(halo!=NULL){ // Find branch markers tree_markers_info markers; find_treenode_markers(trees,halo,NULL,&markers); // Perform write int i_column=1; FILE *fp_out =fopen(filename_out,"w"); fprintf(fp_out,"# Main progenitor line for halo ID No. %d of {%s}\n",halo->halo_ID,trees_name); fprintf(fp_out,"#\n"); fprintf(fp_out,"# Important halo markers (snapshot,snap_tree,halo_index):\n"); fprintf(fp_out,"# selected halo = (%d,%d,%d)\n", fetch_treenode_snapshot(trees,halo), fetch_treenode_snap_tree(trees,halo), fetch_treenode_file_index(trees,halo)); fprintf(fp_out,"# main progenitor = (%d,%d,%d)\n", fetch_treenode_snapshot(trees,markers.main_progenitor), fetch_treenode_snap_tree(trees,markers.main_progenitor), fetch_treenode_file_index(trees,markers.main_progenitor)); fprintf(fp_out,"# branch root = (%d,%d,%d)\n", fetch_treenode_snapshot(trees,markers.branch_root), fetch_treenode_snap_tree(trees,markers.branch_root), fetch_treenode_file_index(trees,markers.branch_root)); fprintf(fp_out,"# branch leaf = (%d,%d,%d)\n", fetch_treenode_snapshot(trees,markers.branch_leaf), fetch_treenode_snap_tree(trees,markers.branch_leaf), fetch_treenode_file_index(trees,markers.branch_leaf)); fprintf(fp_out,"# descendant = (%d,%d,%d)\n", fetch_treenode_snapshot(trees,markers.descendant), fetch_treenode_snap_tree(trees,markers.descendant), fetch_treenode_file_index(trees,markers.descendant)); fprintf(fp_out,"# 1st became satellite = (%d,%d,%d)\n", fetch_treenode_snapshot(trees,markers.first_became_satellite), fetch_treenode_snap_tree(trees,markers.first_became_satellite), fetch_treenode_file_index(trees,markers.first_became_satellite)); fprintf(fp_out,"# joined current group = (%d,%d,%d)\n", fetch_treenode_snapshot(trees,markers.joined_current_parent), fetch_treenode_snap_tree(trees,markers.joined_current_parent), fetch_treenode_file_index(trees,markers.joined_current_parent)); fprintf(fp_out,"# peak mass = (%d,%d,%d)\n", fetch_treenode_snapshot(trees,markers.peak_mass), fetch_treenode_snap_tree(trees,markers.peak_mass), fetch_treenode_file_index(trees,markers.peak_mass)); fprintf(fp_out,"# half-peak-mass = (%d,%d,%d)\n", fetch_treenode_snapshot(trees,markers.half_peak_mass), fetch_treenode_snap_tree(trees,markers.half_peak_mass), fetch_treenode_file_index(trees,markers.half_peak_mass)); fprintf(fp_out,"#\n"); fprintf(fp_out,"# Column (%02d): snapshot\n", i_column++); fprintf(fp_out,"# (%02d): snapshot index\n", i_column++); fprintf(fp_out,"# (%02d): halo index\n", i_column++); fprintf(fp_out,"# (%02d): halo ID\n", i_column++); fprintf(fp_out,"# (%02d): group ID\n", i_column++); fprintf(fp_out,"# (%02d): central ID\n", i_column++); fprintf(fp_out,"# (%02d): M_vir [h^-1 M_sol]\n",i_column++); fprintf(fp_out,"#\n"); tree_node_info *current_halo=markers.branch_root; while(current_halo!=NULL){ double M_vir=fetch_treenode_Mvir(trees,current_halo); fprintf(fp_out,"%3d %3d %7d %7d %7d %7d %le\n", fetch_treenode_snapshot(trees,current_halo), fetch_treenode_snap_tree(trees,current_halo), fetch_treenode_file_index(trees,current_halo), current_halo->halo_ID, current_halo->parent->halo_ID, current_halo->parent->substructure_first->halo_ID, M_vir); current_halo=current_halo->progenitor_first; } fclose(fp_out); } else SID_log("skipping NULL halo...",SID_LOG_CONTINUE); SID_log("Done.",SID_LOG_CLOSE); }