| Bsoft 2.0.5 Bernard's software package

tcltk_bxtal.cpp
Go to the documentation of this file.
1
9 // Tk must be included before anything else to remedy symbol conflicts
10 #include <tk.h>
11
12 #include "tcltk_bxtal.h"
13 #include "mg_xtal.h"
14 #include "linked_list.h"
15 #include "timer.h"
16 #include "utilities.h"
17
18 #include <sys/stat.h>
19
20 // Declaration of global variables
21 extern int verbose; // Level of output to the screen
22 extern Bimage* imglist;
23
24 // Internal function prototypes
25 Tcl_Obj* spot_count(Bmicrograph* mg);
26 Tcl_Obj* spot_ids(Bmicrograph* mg, int objc, Tcl_Obj *CONST objv[]);
27 Tcl_Obj* spot_reindex(Bmicrograph* mg, int objc, Tcl_Obj *CONST objv[]);
28 Tcl_Obj* spot_location(Bmicrograph* mg, int objc, Tcl_Obj *CONST objv[]);
29 Tcl_Obj* spot_fom(Bmicrograph* mg, int objc, Tcl_Obj *CONST objv[]);
30 Tcl_Obj* spot_select(Bmicrograph* mg, int objc, Tcl_Obj *CONST objv[]);
31 Tcl_Obj* spot_move(Bmicrograph* mg, int objc, Tcl_Obj *CONST objv[]);
32 Tcl_Obj* spot_create(Bmicrograph* mg, int objc, Tcl_Obj *CONST objv[]);
33 Tcl_Obj* spot_delete(Bmicrograph* mg, int objc, Tcl_Obj *CONST objv[]);
34 Tcl_Obj* spot_unitcell_vectors(Bmicrograph* mg, int objc, Tcl_Obj *CONST objv[]);
35 Tcl_Obj* spot_generate(Bmicrograph* mg, Bimage* p, int objc, Tcl_Obj *CONST objv[]);
36 Tcl_Obj* spot_mask(Bmicrograph* mg, Bimage* p, int objc, Tcl_Obj *CONST objv[]);
37
38
39 /*
40 @brief Functions for 2D crystallographic indexing.
41 Diffraction spot interface syntax:
42 Bmg spot [item] [action] [params]
43 Actions:
44 count counts the number of spots
45 ids returns the spot indices (3 per spot)
46 reindex [h1] [k1] [l1] [h2] [k2] [l2] re-indexes a spot
47 location [h] [k] [l] returns the location of a spot
48 fom [h] [k] [l] returns the FOM of a spot
49 select [x] [y] [z] returns the spot indices at the given location
50 move [h] [k] [l] [dx] [dy] [dz] updates a spot location by the given vector
51 create [h] [k] [l] [x] [y] [z] creates a new spot at the given location
52 delete [all|mg|rec|h] [k] [l] deletes spots
53 unitcell calculates unit cell vectors
54 generate [m] generates spots
55 mask [r] masks spots
56 Parameters:
57 h k l Miller indices
58 x x location
59 y y location
60 z z location
61 dx change in x
62 dy change in y
63 dz change in z
64 m limit in reciprocal space for generating spots
65 r mask radius
66 */
67
68 Tcl_Obj* do_spot(Bproject* project, int objc, Tcl_Obj *CONST objv[])
69 {
70 Tcl_Obj* returnObj = NULL;
71
72 Bstring item = Tcl_GetStringFromObj(objv[2], NULL);
73 if ( verbose & VERB_DEBUG )
74 cout << "DEBUG do_spot: Item: " << item << " (" << item.length() << ")" << endl;
75
76 Bstring id = item.post(':');
77 id = id.remove(' ');
78 item = item.pre(':');
79
80 if ( !item.contains("Field") && !item.contains("Micrograph") ) {
81 cerr << "Error in do_spot: Item " << item << " must be a micrograph!" << endl;
82 returnObj = Tcl_NewObj();
83 return returnObj;
84 }
85
86 Bfield* field = NULL;
87 Bmicrograph* mg = NULL;
88 Bimage* p = NULL;
89 Bstring filename, filename2, base, delete_what;
90
91 if ( item.contains("Field") ) {
92 for ( field = project->field; field && field->id != id; field = field->next ) ;
93 if ( field ) mg = field->mg;
94 } else if ( item.contains("Micrograph") ) {
95 for ( field = project->field; field; field = field->next ) {
96 for ( mg = field->mg; mg && mg->id != id; mg = mg->next ) ;
97 if ( mg ) break;
98 }
99 }
100
101 if ( mg ) {
102 filename = mg->fft;
103 if ( filename.length() < 1 ) filename = mg->fps;
104 }
105
106 if ( filename.length() ) {
107 base = filename.base();
108 for ( p = imglist; p; p = p->next ) {
109 filename2 = p->file_name();
110 if ( filename2.base() == base ) break;
111 }
112 }
113
114 Bstring action = Tcl_GetStringFromObj(objv[3], NULL);
115 if ( verbose & VERB_DEBUG )
116 cout << "DEBUG do_spot: Action: " << action << " (" << action.length() << ")" << endl;
117
118 if ( action == "count" ) {
119 returnObj = spot_count(mg);
120 } else if ( action == "ids" ) {
121 returnObj = spot_ids(mg, objc, objv);
122 } else if ( action == "reindex" ) {
123 returnObj = spot_reindex(mg, objc, objv);
124 } else if ( action == "location" ) {
125 returnObj = spot_location(mg, objc, objv);
126 } else if ( action == "fom" ) {
127 returnObj = spot_fom(mg, objc, objv);
128 } else if ( action == "select" ) {
129 returnObj = spot_select(mg, objc, objv);
130 } else if ( action == "move" ) {
131 returnObj = spot_move(mg, objc, objv);
132 } else if ( action == "create" ) {
133 returnObj = spot_create(mg, objc, objv);
134 } else if ( action == "delete" ) {
135 returnObj = spot_delete(mg, objc, objv);
136 } else if ( action == "unitcell" ) {
137 returnObj = spot_unitcell_vectors(mg, objc, objv);
138 } else if ( action == "generate" ) {
139 returnObj = spot_generate(mg, p, objc, objv);
140 } else if ( action == "mask" ) {
141 if ( p ) returnObj = spot_mask(mg, p, objc, objv);
142 } else {
143 cerr << "Error: Action " << action << " not recognized!" << endl;
144 }
145
146 if ( !returnObj ) {
147 returnObj = Tcl_NewObj();
148 Tcl_SetIntObj(returnObj, 0);
149 }
150
151 return returnObj;
152 }
153
154 Tcl_Obj* spot_count(Bmicrograph* mg)
155 {
156 Tcl_Obj* returnObj = Tcl_NewObj();
157
158 int nspot(0);
159 Bstrucfac* sf;
160
161 if ( mg )
162 for ( sf = mg->sf; sf; sf = sf->next ) nspot++;
163
164 Tcl_SetIntObj(returnObj, nspot);
165
166 return returnObj;
167 }
168
169 Tcl_Obj* spot_ids(Bmicrograph* mg, int objc, Tcl_Obj *CONST objv[])
170 {
171 Tcl_Obj* returnObj = Tcl_NewObj();
172
173 double fom_cut(0);
174 char string[MAXLINELEN] = "";
175 Bstrucfac* sf;
176
177 if ( objc > 4 ) Tcl_GetDoubleFromObj(NULL, objv[4], &fom_cut);
178
179 if ( mg ) {
180 for ( sf = mg->sf; sf; sf = sf->next ) if ( sf->fom >= fom_cut ) {
181 sprintf(string, " %d %d %d", sf->index[0], sf->index[1], sf->index[2]);
182 Tcl_AppendToObj(returnObj, string, strlen(string));
183 }
184 }
185
186 return returnObj;
187 }
188
189 Tcl_Obj* spot_reindex(Bmicrograph* mg, int objc, Tcl_Obj *CONST objv[])
190 {
191 Tcl_Obj* returnObj = Tcl_NewObj();
192
193 int h1(0), k1(0), l1(0), h2(0), k2(0), l2(0);
194 char string[MAXLINELEN] = "";
195
196 if ( objc > 4 ) Tcl_GetIntFromObj(NULL, objv[4], &h1);
197 if ( objc > 5 ) Tcl_GetIntFromObj(NULL, objv[5], &k1);
198 if ( objc > 6 ) Tcl_GetIntFromObj(NULL, objv[6], &l1);
199 if ( objc > 7 ) Tcl_GetIntFromObj(NULL, objv[7], &h2);
200 if ( objc > 8 ) Tcl_GetIntFromObj(NULL, objv[8], &k2);
201 if ( objc > 9 ) Tcl_GetIntFromObj(NULL, objv[9], &l2);
202
203 Bstrucfac* sf;
204 Vector3<int> id1(h1, k1, l1), id2(h2, k2, l2);
205
206 if ( mg ) {
207 for ( sf = mg->sf; sf && sf->index != id2; sf = sf->next ) ;
208 if ( sf ) {
209 id2 = id1;
210 } else {
211 for ( sf = mg->sf; sf && sf->index != id1; sf = sf->next ) ;
212 if ( sf ) sf->index = id2;
213 }
214 }
215
216 sprintf(string, "%d %d %d", id2[0], id2[1], id2[2]);
217 Tcl_SetStringObj(returnObj, string, strlen(string));
218
219 return returnObj;
220 }
221
222 Tcl_Obj* spot_location(Bmicrograph* mg, int objc, Tcl_Obj *CONST objv[])
223 {
224 Tcl_Obj* returnObj = Tcl_NewObj();
225
226 int h(0), k(0), l(0);
227 char string[MAXLINELEN] = "";
228
229 if ( objc > 4 ) Tcl_GetIntFromObj(NULL, objv[4], &h);
230 if ( objc > 5 ) Tcl_GetIntFromObj(NULL, objv[5], &k);
231 if ( objc > 6 ) Tcl_GetIntFromObj(NULL, objv[6], &l);
232
233 Bstrucfac* sf = NULL;
234 Vector3<int> id(h, k, l);
235
236 if ( mg )
237 for ( sf = mg->sf; sf && sf->index != id; sf = sf->next ) ;
238
239 if ( sf ) {
240 Vector3<double> loc = sf->loc + mg->origin;
241 sprintf(string, "%f %f %f", loc[0], loc[1], loc[2]);
242 Tcl_SetStringObj(returnObj, string, strlen(string));
243 // cout << id << tab << sf->loc << endl;
244 }
245
246 return returnObj;
247 }
248
249 Tcl_Obj* spot_fom(Bmicrograph* mg, int objc, Tcl_Obj *CONST objv[])
250 {
251 Tcl_Obj* returnObj = Tcl_NewObj();
252
253 int h(0), k(0), l(0);
254
255 if ( objc > 4 ) Tcl_GetIntFromObj(NULL, objv[4], &h);
256 if ( objc > 5 ) Tcl_GetIntFromObj(NULL, objv[5], &k);
257 if ( objc > 6 ) Tcl_GetIntFromObj(NULL, objv[6], &l);
258
259 Bstrucfac* sf = NULL;
260 Vector3<int> id(h, k, l);
261 double fom(1);
262
263 if ( mg )
264 for ( sf = mg->sf; sf && sf->index != id; sf = sf->next ) ;
265
266 if ( sf ) fom = sf->fom;
267
268 Tcl_SetDoubleObj(returnObj, fom);
269
270 return returnObj;
271 }
272
273 Tcl_Obj* spot_select(Bmicrograph* mg, int objc, Tcl_Obj *CONST objv[])
274 {
275 Tcl_Obj* returnObj = Tcl_NewObj();
276
277 double x(0), y(0), z(0);
278
279 if ( objc > 4 ) Tcl_GetDoubleFromObj(NULL, objv[4], &x);
280 if ( objc > 5 ) Tcl_GetDoubleFromObj(NULL, objv[5], &y);
281 if ( objc > 6 ) Tcl_GetDoubleFromObj(NULL, objv[6], &z);
282
283 double d, dmin, rad(0);
284 char string[64] = "";
285 Vector3<int> ind;
286 Vector3<double> loc(x, y, z);
287 Bstrucfac* sflist = NULL;
288 Bstrucfac* sf;
289
290 if ( mg ) {
291 sflist = mg->sf;
292 rad = mg->sf_radius;
293 }
294
295 if ( sflist ) {
296 loc -= mg->origin;
297 dmin = 2*rad;
298 for ( sf = sflist; sf; sf = sf->next ) {
299 d = loc.distance(sf->loc);
300 if ( dmin > d ) {
301 dmin = d;
302 ind = sf->index;
303 }
304 }
305 if ( dmin <= rad ) {
306 sprintf(string, " %d %d %d", ind[0], ind[1], ind[2]);
307 Tcl_SetStringObj(returnObj, string, strlen(string));
308 }
309 }
310
311 return returnObj;
312 }
313
314 Tcl_Obj* spot_move(Bmicrograph* mg, int objc, Tcl_Obj *CONST objv[])
315 {
316 Tcl_Obj* returnObj = Tcl_NewObj();
317
318 int h(0), k(0), l(0);
319 double dx(0), dy(0), dz(0);
320
321 if ( objc > 4 ) Tcl_GetIntFromObj(NULL, objv[4], &h);
322 if ( objc > 5 ) Tcl_GetIntFromObj(NULL, objv[5], &k);
323 if ( objc > 6 ) Tcl_GetIntFromObj(NULL, objv[6], &l);
324 if ( objc > 7 ) Tcl_GetDoubleFromObj(NULL, objv[7], &dx);
325 if ( objc > 8 ) Tcl_GetDoubleFromObj(NULL, objv[8], &dy);
326 if ( objc > 9 ) Tcl_GetDoubleFromObj(NULL, objv[9], &dz);
327
328 char string[64] = "";
329 Bstrucfac* sflist = NULL;
330 Bstrucfac* sf;
331 Vector3<int> id(h, k, l);
332 Vector3<double> d(dx, dy, dz);
333
334 if ( mg ) sflist = mg->sf;
335
336 if ( sflist ) {
337 for ( sf = sflist; sf && sf->index != id; sf = sf->next ) ;
338 if ( sf ) {
339 sf->loc += d;
340 sprintf(string, " %d %d %d", sf->index[0], sf->index[1], sf->index[2]);
341 Tcl_SetStringObj(returnObj, string, strlen(string));
342 }
343 }
344
345 return returnObj;
346 }
347
348 Tcl_Obj* spot_create(Bmicrograph* mg, int objc, Tcl_Obj *CONST objv[])
349 {
350 Tcl_Obj* returnObj = Tcl_NewObj();
351
352 int h(0), k(0), l(0);
353 double x(0), y(0), z(0);
354
355 if ( objc > 4 ) Tcl_GetIntFromObj(NULL, objv[4], &h);
356 if ( objc > 5 ) Tcl_GetIntFromObj(NULL, objv[5], &k);
357 if ( objc > 6 ) Tcl_GetIntFromObj(NULL, objv[6], &l);
358 if ( objc > 7 ) Tcl_GetDoubleFromObj(NULL, objv[7], &x);
359 if ( objc > 8 ) Tcl_GetDoubleFromObj(NULL, objv[8], &y);
360 if ( objc > 9 ) Tcl_GetDoubleFromObj(NULL, objv[9], &z);
361
362 char string[64] = "";
363 Bstrucfac* sf = NULL;
364 Vector3<int> id(h, k, l);
365
366 // cout << "origin=" << mg->origin << endl;
367 if ( mg )
368 sf = (Bstrucfac *) add_item((char **) &mg->sf, sizeof(Bstrucfac));
369
370 if ( sf ) {
371 sf->index = id;
372 sf->loc = Vector3<double>(x, y, z) - mg->origin;
373 sf->amp = 1;
374 sf->fom = 1;
375 sf->sel = 1;
376 sprintf(string, " %d %d %d", sf->index[0], sf->index[1], sf->index[2]);
377 Tcl_SetStringObj(returnObj, string, strlen(string));
378 // cout << id << tab << sf->loc << endl;
379 }
380
381 return returnObj;
382 }
383
384 Tcl_Obj* spot_delete(Bmicrograph* mg, int objc, Tcl_Obj *CONST objv[])
385 {
386 Tcl_Obj* returnObj = Tcl_NewObj();
387
388 if ( !mg ) return returnObj;
389
390 int h(0), k(0), l(0);
391
392 Bstring action = Tcl_GetStringFromObj(objv[4], NULL);
393
394 char string[64] = "";
395 Bstrucfac* sf;
396
397 if ( action == "all" ) {
398 kill_list((char *) mg->sf, sizeof(Bstrucfac));
399 mg->sf = NULL;
400 } else {
401 if ( objc > 4 ) Tcl_GetIntFromObj(NULL, objv[4], &h);
402 if ( objc > 5 ) Tcl_GetIntFromObj(NULL, objv[5], &k);
403 if ( objc > 6 ) Tcl_GetIntFromObj(NULL, objv[6], &l);
404
405 Vector3<int> id(h, k, l);
406
407 if ( h!=0 || k!=0 || l!=0 ) {
408 for ( sf = mg->sf; sf && sf->index != id; sf = sf->next ) ;
409 if ( sf )
410 remove_item((char **)&mg->sf, (char *)sf, sizeof(Bstrucfac));
411 }
412 sprintf(string, "%d %d %d", h, k, l);
413 Tcl_SetStringObj(returnObj, string, strlen(string));
414 }
415
416 return returnObj;
417 }
418
419 Tcl_Obj* spot_unitcell_vectors(Bmicrograph* mg, int objc, Tcl_Obj *CONST objv[])
420 {
421 Tcl_Obj* returnObj = Tcl_NewObj();
422
423 if ( mg ) mg_unitcell_vectors(mg);
424
425 return returnObj;
426 }
427
428 Tcl_Obj* spot_generate(Bmicrograph* mg, Bimage* p, int objc, Tcl_Obj *CONST objv[])
429 {
430 Tcl_Obj* returnObj = Tcl_NewObj();
431
432 double resolution(20);
433
434 if ( objc > 4 ) Tcl_GetDoubleFromObj(NULL, objv[4], &resolution);
435
436 if ( verbose ) {
437 cout << "sampling=" << p->sampling(0)[0] << tab << p->sampling(0)[1] << endl;
438 cout << "real_size=" << p->real_size() << endl;
439 }
440
441 if ( mg ) mg_generate_reflections(mg, p->real_size(), resolution);
442
443 return returnObj;
444 }
445
446 Tcl_Obj* spot_mask(Bmicrograph* mg, Bimage* p, int objc, Tcl_Obj *CONST objv[])
447 {
448 Tcl_Obj* returnObj = Tcl_NewObj();
449
450 double radius(3);
451
452 if ( objc > 4 ) Tcl_GetDoubleFromObj(NULL, objv[4], &radius);
453
454 if ( mg ) img_mask_reflections(p, mg->sf, radius);
455
456 return returnObj;
457 }
458
459
Bmicrograph::sf_radius
double sf_radius
Definition: mg_processing.h:234
Bstring::post
Bstring post(char c)
Definition: Bstring.cpp:394
Bimage::sampling
Vector3< double > sampling()
Definition: Bimage.h:505
spot_ids
Tcl_Obj * spot_ids(Bmicrograph *mg, int objc, Tcl_Obj *CONST objv[])
Definition: tcltk_bxtal.cpp:169
Bmicrograph::id
Bstring id
Definition: mg_processing.h:202
imglist
Bimage * imglist
Definition: bshow.cpp:30
utilities.h
Header file for general utilities.
VERB_DEBUG
#define VERB_DEBUG
Definition: utilities.h:112
Bstrucfac::loc
Vector3< double > loc
Definition: mg_processing.h:157
spot_delete
Tcl_Obj * spot_delete(Bmicrograph *mg, int objc, Tcl_Obj *CONST objv[])
Definition: tcltk_bxtal.cpp:384
kill_list
long kill_list(char *list, unsigned long size)
Frees all the items in a linked list.
Definition: linked_list.cpp:214
add_item
char * add_item(char **list, unsigned long size)
Adds an item to a linked list.
Definition: linked_list.cpp:26
Bstring::length
long length() const
Definition: Bstring.cpp:263
project
Bproject * project
Definition: bshow.cpp:31
Bstring::remove
Bstring remove(const char c)
Definition: Bstring.cpp:465
MAXLINELEN
#define MAXLINELEN
Definition: utilities.h:44
Bimage::file_name
void file_name(string s)
Definition: Bimage.h:230
img_mask_reflections
int img_mask_reflections(Bimage *p, Bstrucfac *sflist, double radius)
Masks the image using the list of reflections.
Definition: mg_xtal.cpp:152
spot_generate
Tcl_Obj * spot_generate(Bmicrograph *mg, Bimage *p, int objc, Tcl_Obj *CONST objv[])
Definition: tcltk_bxtal.cpp:428
Vector3::distance
double distance(const Vector3 &v)
Definition: Vector3.h:227
spot_move
Tcl_Obj * spot_move(Bmicrograph *mg, int objc, Tcl_Obj *CONST objv[])
Definition: tcltk_bxtal.cpp:314
Bfield::next
Bfield * next
Definition: mg_processing.h:258
Bmicrograph::sf
Bstrucfac * sf
Definition: mg_processing.h:243
Bstrucfac::amp
double amp
Definition: mg_processing.h:159
timer.h
Utilities for timing functions.
Bimage
General image parameter class.
Definition: Bimage.h:163
Bimage::real_size
Vector3< double > real_size()
Definition: Bimage.h:487
Bstring::contains
bool contains(const Bstring &s)
Definition: Bstring.cpp:584
Bfield
Definition: mg_processing.h:257
linked_list.h
Header file for generalized linked list functions.
spot_select
Tcl_Obj * spot_select(Bmicrograph *mg, int objc, Tcl_Obj *CONST objv[])
Definition: tcltk_bxtal.cpp:273
Bstrucfac
Definition: mg_processing.h:155
base
string base(string &filename)
Definition: string_util.cpp:28
mg_xtal.h
Header file for functions to process crystallographic data.
spot_count
Tcl_Obj * spot_count(Bmicrograph *mg)
Definition: tcltk_bxtal.cpp:154
Bfield::id
Bstring id
Definition: mg_processing.h:259
do_spot
Tcl_Obj * do_spot(Bproject *project, int objc, Tcl_Obj *CONST objv[])
Definition: tcltk_bxtal.cpp:68
spot_fom
Tcl_Obj * spot_fom(Bmicrograph *mg, int objc, Tcl_Obj *CONST objv[])
Definition: tcltk_bxtal.cpp:249
Bstring::pre
Bstring pre(char c)
Definition: Bstring.cpp:381
Bproject::field
Bfield * field
Definition: mg_processing.h:343
mg_generate_reflections
long mg_generate_reflections(Bmicrograph *mg, Vector3< double > real_size, double resolution)
Generates reflections given the unit cell vectors.
Definition: mg_xtal.cpp:80
tcltk_bxtal.h
Bmicrograph
Definition: mg_processing.h:200
Bmicrograph::origin
Vector3< double > origin
Definition: mg_processing.h:220
spot_location
Tcl_Obj * spot_location(Bmicrograph *mg, int objc, Tcl_Obj *CONST objv[])
Definition: tcltk_bxtal.cpp:222
Bstrucfac::index
Vector3< int > index
Definition: mg_processing.h:158
Bstrucfac::next
Bstrucfac * next
Definition: mg_processing.h:156
remove_item
char * remove_item(char **list, char *item, unsigned long size)
Finds the given item and deletes it from the linked list.
Definition: linked_list.cpp:114
Bfield::mg
Bmicrograph * mg
Definition: mg_processing.h:264
Bimage::next
Bimage * next
Definition: Bimage.h:165
Bstring::base
Bstring base()
Definition: Bstring.cpp:508
mg_unitcell_vectors
int mg_unitcell_vectors(Bmicrograph *mg)
Calculates the unit cell vectors for a 2D crystal.
Definition: mg_xtal.cpp:32
Bmicrograph::fps
Bstring fps
Definition: mg_processing.h:210
Bstring
Definition: Bstring.h:29
Bmicrograph::fft
Bstring fft
Definition: mg_processing.h:209
spot_create
Tcl_Obj * spot_create(Bmicrograph *mg, int objc, Tcl_Obj *CONST objv[])
Definition: tcltk_bxtal.cpp:348
Vector3< int >
spot_mask
Tcl_Obj * spot_mask(Bmicrograph *mg, Bimage *p, int objc, Tcl_Obj *CONST objv[])
Definition: tcltk_bxtal.cpp:446
verbose
int verbose
spot_reindex
Tcl_Obj * spot_reindex(Bmicrograph *mg, int objc, Tcl_Obj *CONST objv[])
Definition: tcltk_bxtal.cpp:189
tab
ostream & tab(ostream &out)
Definition: utilities.cpp:21
Bproject
Definition: mg_processing.h:333
Bstrucfac::fom
double fom
Definition: mg_processing.h:163
spot_unitcell_vectors
Tcl_Obj * spot_unitcell_vectors(Bmicrograph *mg, int objc, Tcl_Obj *CONST objv[])
Definition: tcltk_bxtal.cpp:419
Bstrucfac::sel
long sel
Definition: mg_processing.h:164
Bmicrograph::next
Bmicrograph * next
Definition: mg_processing.h:201