1 #ifndef _THD_ATLAS_H_
2 #define _THD_ATLAS_H_
3 
4 #include "thd_ttatlas_query.h"
5 #undef DEBUG_SPACES
6 /* continuous colormap */
7 #define CONT_CMAP 0
8 /* integer colormap */
9 #define INT_CMAP 1
10 /* sparse integer colormap */
11 #define SPARSE_CMAP 2
12 
13 /* continuous colormap */
14 #define CONT_CMAP 0
15 /* integer colormap */
16 #define INT_CMAP 1
17 /* sparse integer colormap */
18 #define SPARSE_CMAP 2
19 
20 #define MAXINT 65535
21 #define MAX_WAMI_LINE_CHARS  80
22 
23 #define LINKRBRAIN_SITE "linkrbrain.eu"   /* 16 Oct 2015 */
24 extern char * get_linkrbrain_site(void) ;
25 
26 void free_atlas_point_list(ATLAS_POINT_LIST *apl);
27 void print_atlas_point_list(ATLAS_POINT_LIST *apl);
28 ATLAS_POINT_LIST * niml_atlas_label_table_to_atlas_list(NI_group *ngr);
29 ATLAS_POINT_LIST *dset_niml_to_atlas_list(THD_3dim_dataset *dset);
30 int dset_atlas_label_index(THD_3dim_dataset *dset, char *label);
31 
32 ATLAS_POINT_LIST *label_table_to_atlas_point_list(Dtable *dtbl);
33 int whereami_9yards( ATLAS_COORD ac, ATLAS_QUERY **wamip,
34                      ATLAS_LIST *atlas_alist);
35 void init_custom_atlas(void);
36 const char *Space_Code_to_Space_Name (AFNI_STD_SPACES cod);
37 AFNI_STD_SPACES Space_Name_to_Space_Code(char *nm);
38 const char *Atlas_Code_to_Atlas_Space_Name (AFNI_ATLAS_CODES cod);
39 const char *Atlas_Code_to_Atlas_Dset_Name (AFNI_ATLAS_CODES cod);
40 AFNI_ATLAS_CODES Atlas_Dset_Name_to_Atlas_Code(char *dset_name);
41 char *Atlas_Name(ATLAS *atl);
42 int is_Atlas_Named(ATLAS *atl, char *name);
43 int is_Coord_Space_Named(ATLAS_COORD ac, char *name);
44 int set_Coord_Space_Name(ATLAS_COORD *ac, char *name);
45 int init_global_atlas_from_niml_files(void);
46 ATLAS_LIST *create_atlas_list(void);
47 ATLAS_XFORM_LIST *report_xform_chain(char *src, char *dest, int report);
48 int is_known_coord_space(char *space_name);
49 void print_atlas_coord (ATLAS_COORD ac);
50 int show_wrapping_line(char * str, char * prefix, int indent, FILE * fp);
51 
52 int   init_space_structs(ATLAS_XFORM_LIST **atlas_xfl,
53    ATLAS_LIST **atlas_alist,
54    ATLAS_SPACE_LIST **atlas_spaces,
55    ATLAS_TEMPLATE_LIST **atlas_templates);
56 int read_space_niml_file(char *fname, ATLAS_XFORM_LIST *atlas_xfl,
57    ATLAS_LIST *atlas_alist,
58    ATLAS_SPACE_LIST *atlas_spaces,
59    ATLAS_TEMPLATE_LIST *atlas_template, THD_string_array *sar);
60 int add_atlas_nel(NI_element *nel, ATLAS_XFORM_LIST *atlas_xfl,
61    ATLAS_LIST *atlas_alist,
62    ATLAS_SPACE_LIST *atlas_spaces,
63    ATLAS_TEMPLATE_LIST *atlas_templates,
64    THD_string_array *sar,
65    char *parentdir);
66 int atlas_read_xform(NI_element *nel, ATLAS_XFORM *atlas_xf);
67 int atlas_read_template(NI_element *nel, ATLAS_TEMPLATE *atlas_tpl);
68 int atlas_read_atlas(NI_element *nel, ATLAS *atlas, char *pd);
69 int atlas_read_atlas_space(NI_element *nel, ATLAS_SPACE *at_space);
70 int make_space_neighborhood(ATLAS_SPACE_LIST *at_spl, ATLAS_XFORM_LIST *atlas_xfl);
71 ATLAS_XFORM *get_xform_neighbor(ATLAS_XFORM_LIST *atlas_xfl, ATLAS_SPACE *at_space,
72    ATLAS_SPACE *dest_space, int *inv_xf);
73 ATLAS_XFORM_LIST *
74    pathlist_to_xform_list(int *nPath, int N_n, ATLAS_XFORM_LIST *atlas_xfl,
75    ATLAS_SPACE_LIST *at_spl);
76 int copy_xform(ATLAS_XFORM *src_xform, ATLAS_XFORM *dest_xform);
77 ATLAS_XFORM_LIST *
78 get_xform_chain(ATLAS_SPACE *at_space, ATLAS_SPACE *dest_space);
79 
80 ATLAS_XFORM_LIST *read_space_xforms(NI_stream space_niml);
81 ATLAS_XFORM_LIST *calc_xform_list(ATLAS_XFORM_LIST *xfl);
82 int find_atlas_space_index(char *spacename);
83 void report_available_spaces(char *src);
84 ATLAS_SPACE_LIST *find_available_spaces(char *src_space_name,
85                                         ATLAS_SPACE_LIST *this_list);
86 char * THD_get_generic_space(THD_3dim_dataset *dset);
87 char * THD_get_view_space(THD_3dim_dataset *dset);
88 
89 void free_global_atlas_structs(void);
90 
91 void free_xform_list(ATLAS_XFORM_LIST *xfl);
92 void free_xform(ATLAS_XFORM *xf);
93 void free_space_list(ATLAS_SPACE_LIST *xsl);
94 void free_space(ATLAS_SPACE *xs);
95 void free_template_list(ATLAS_TEMPLATE_LIST *xtl);
96 void free_template(ATLAS_TEMPLATE *xt);
97 void free_atlas_list(ATLAS_LIST *xal);
98 void free_atlas(ATLAS *xa);
99 int is_identity_xform_chain(char *src, char *dest);
100 int is_identity_xform_list(ATLAS_XFORM_LIST *xfl, int combine);
101 void print_xform_chain(char *src, char *dest);
102 void print_xform_list(ATLAS_XFORM_LIST *xfl);
103 void print_space_list(ATLAS_SPACE_LIST *xsl);
104 void print_atlas_list(ATLAS_LIST *xal);
105 void print_atlas_table(ATLAS_LIST *xal);
106 void print_atlas(ATLAS *xa, int level) ;
107 void print_atlas_comment(ATLAS *xa) ;
108 void print_atlas_type(ATLAS *xa) ;
109 void print_atlas_supp_web_info(ATLAS *xa);
110 void print_atlas_orient(ATLAS *xa) ;
111 void print_point_lists(ATLAS_LIST *xal);
112 void print_template_list(ATLAS_TEMPLATE_LIST *xtl);
113 void print_xform(ATLAS_XFORM *xf);
114 void print_all_xforms(ATLAS_XFORM_LIST *xfl);
115 void print_affine_xform_data(float *xfptr);
116 void print_atlas_dset(ATLAS_LIST *xal, char *atlasname);
117 char * find_atlas_dset(ATLAS_LIST *xal, char *atlasname);
118 
119 ATLAS_POINT *atlas_point_named(ATLAS_POINT_LIST *apl, char *name);
120 char *atlas_point_long_name_named(ATLAS_POINT_LIST *apl, char *name);
121 
122 ATLAS_XFORM *calc_xf(ATLAS_XFORM *xf, ATLAS_XFORM *xf2);
123 int affine_mult(ATLAS_XFORM *xf, ATLAS_XFORM *xf2, ATLAS_XFORM *xf3);
124 int affine_2piece_mult(ATLAS_XFORM *xf,
125    ATLAS_XFORM *xf2, ATLAS_XFORM *xf3, int dir);
126 int affine_12piece_mult(ATLAS_XFORM *xf,
127    ATLAS_XFORM *xf2, ATLAS_XFORM *xf3, int dir);
128 int x2piece_2piece_mult(ATLAS_XFORM *xf,
129    ATLAS_XFORM *xf2, ATLAS_XFORM *xf3);
130 int x2piece_12piece_mult(ATLAS_XFORM *xf,
131    ATLAS_XFORM *xf2, ATLAS_XFORM *xf3, int dir);
132 int x12piece_12piece_mult(ATLAS_XFORM *xf,
133    ATLAS_XFORM *xf2, ATLAS_XFORM *xf3);
134 
135 int invert_xform(ATLAS_XFORM *xf);
136 int invert_affine(ATLAS_XFORM *xf);
137 int invert_12piece(ATLAS_XFORM *xf);
138 int invert_2piece(ATLAS_XFORM *xf);
139 int invert_brett(ATLAS_XFORM *xf);
140 
141 ATLAS_XFORM *identity_xform(void);
142 
143 int find_atlas_space(ATLAS_SPACE_LIST *at_spl, ATLAS_SPACE *at_space);
144 int apply_xform_chain(ATLAS_XFORM_LIST *xfl, float x, float y, float z,
145                   float *xout, float *yout, float *zout);
146 
147 int apply_xform_affine(ATLAS_XFORM *xf, float x, float y, float z, \
148     float *xout, float *yout, float *zout);
149 int apply_xform_2piece(ATLAS_XFORM *xf, float x, float y, float z, \
150     float *xout, float *yout, float *zout);
151 int apply_xform_12piece(ATLAS_XFORM *xf, float x, float y, float z, \
152     float *xout, float *yout, float *zout);
153 int apply_xform_brett_tt2mni(float x, float y, float z, \
154     float *xout, float *yout, float *zout);
155 int apply_xform_brett_mni2tt(float x, float y, float z, \
156     float *xout, float *yout, float *zout);
157 
158 NI_element *NI_find_next_element(NI_stream ns, char *name);
159 
160 void AFNI_atlas_list_to_niml(void);
161 void atlas_list_to_niml(ATLAS_POINT_LIST *atp, char *atlas_file);
162 NI_element *atlas_point_to_niml_element(ATLAS_POINT *at_pt);
163 char *atlas_point_to_niml_string(ATLAS_POINT *at_pt);
164 int atlas_dup_atlas(ATLAS *srcatlas, ATLAS *destatlas);
165 int atlas_max_label_length(ATLAS_POINT *ap, int n_points);
166 int atlas_level(ATLAS_POINT *ap, int n_points);
167 
168 char *get_jump_space(void);
169 void set_jump_space(char *spacename);
170 
171 #endif
172