Fixed text file permissions
[snark14.git] / tools / Input / create.cpp
1 /** @file create.cpp
2     @package snark14Input
3     @author Bruno M. Carvalho and Deniz Sarioz
4     modified by Joanna Klukowska (June 2008)
5         added two fields in LAST line for agreement with snark14
6         removed SAVE and MODIFY options of Run since snark14 does not have file12
7     licensed under (open-source) QPL v1.0
8     which accompanies this distribution in the file QPL
9 */
10
11 #include "create.h"
12 #include "variables.h"
13 #include "misc.h"
14 #include <stdio.h>
15 #include <math.h>
16
17 #include <qbuttongroup.h>
18 #include <qlabel.h>
19 #include <qframe.h>
20 #include <qcheckbox.h>
21 #include <qcombobox.h>
22 #include <qlineedit.h>
23 #include <qmultilineedit.h>
24 #include <qpushbutton.h>
25 #include <qradiobutton.h>
26 #include <qcombobox.h>
27 #include <qtabwidget.h>
28 #include <qwidget.h>
29 #include <qregexp.h>
30 #include <qlayout.h>
31 #include <qvariant.h>
32 #include <qtooltip.h>
33 #include <qwhatsthis.h>
34 #include <qmessagebox.h>
35
36 /** 
37  *  Constructs a createwindow which is a child of 'parent', with the 
38  *  name 'name' and widget flags set to 'f' 
39  *
40  *  The dialog will by default be modeless, unless you set 'modal' to
41  *  true to construct a modal dialog.
42 @param void
43 @author Bruno M. Carvalho
44 @version 1.0 */
45 createwindow::createwindow( QWidget* parent,  const char* name, bool modal, WFlags fl )
46     : QDialog( parent, name, modal, fl )
47 {
48     if ( !name )
49         setName( "createwindow" );
50     resize( 750, 629 ); 
51     setCaption( tr( "Create Window" ) );
52
53     tabwidget1 = new QTabWidget( this, "tabwidget1" );
54     tabwidget1->setGeometry( QRect( 0, 0, 750, 550 ) ); 
55     tabwidget1->setMinimumSize( QSize( 750, 550 ) );
56     tabwidget1->setMaximumSize( QSize( 750, 550 ) );
57     tabwidget1->setTabPosition( QTabWidget::Top );
58     tabwidget1->setTabShape( QTabWidget::Triangular );
59
60     /** Generates Tab number 1 - Header/Spectrum  */
61
62     headerSpectrum = new QWidget( tabwidget1, "headerSpectrum" );
63
64     idheaderlabel = new QLabel( headerSpectrum, "idheaderlabel" );
65     idheaderlabel->setGeometry( QRect( 20, 30, 90, 20 ) ); 
66     idheaderlabel->setText( tr( "ID HEADER" ) );
67
68     idheader = new QLineEdit( headerSpectrum, "idheader" );
69     idheader->setGeometry( QRect( 120, 20, 500, 28 ) ); 
70
71     spectrumlabel = new QLabel( headerSpectrum, "spectrumlabel" );
72     spectrumlabel->setGeometry( QRect( 20, 70, 100, 20 ) ); 
73     spectrumlabel->setText( tr( "SPECTRUM" ) );
74
75     spectrumbuttongroup = new QButtonGroup( headerSpectrum, "spectrumbuttongroup" );
76     spectrumbuttongroup->setGeometry( QRect( 140, 70, 200, 100 ) ); 
77     spectrumbuttongroup->setTitle( tr( "spectrum type" ) );
78     spectrumbuttongroup->setAlignment( int( QButtonGroup::AlignHCenter ) );
79
80     monochromaticbutton = new QRadioButton( spectrumbuttongroup, "monochromaticbutton" );
81     monochromaticbutton->setGeometry( QRect( 10, 30, 170, 24 ) ); 
82     monochromaticbutton->setText( tr( "MONOCHROMATIC" ) );
83     monochromaticbutton->setChecked(true);
84     QObject::connect(monochromaticbutton,SIGNAL(clicked()),this,SLOT(activateMonochromaticFields()));
85
86     energy = new QLineEdit( headerSpectrum, "energy" );
87     energy->setGeometry( QRect( 350, 90, 60, 28 ) ); 
88     energy->setEnabled(true);
89
90     energylabel = new QLabel( headerSpectrum, "energylabel" );
91     energylabel->setGeometry( QRect( 355, 70, 50, 20 ) ); 
92     energylabel->setText( tr( "energy" ) ); 
93     energylabel->setEnabled(true);
94
95     polychromaticbutton = new QRadioButton( spectrumbuttongroup, "polychromaticbutton" );
96     polychromaticbutton->setGeometry( QRect( 10, 60, 170, 24 ) ); 
97     polychromaticbutton->setText( tr( "POLYCHROMATIC" ) );
98     QObject::connect(polychromaticbutton,SIGNAL(clicked()),this,SLOT(activatePolychromaticFields()));
99
100     nergy = new QLineEdit( headerSpectrum, "nergy" );
101     nergy->setGeometry( QRect( 350, 140, 60, 28 ) ); 
102     nergy->setEnabled(false);
103
104     nergylabel = new QLabel( headerSpectrum, "nergylabel" );
105     nergylabel->setGeometry( QRect( 360, 120, 40, 20 ) ); 
106     nergylabel->setText( tr( "nergy" ) );
107     nergylabel->setEnabled(false);
108
109     energy1 = new QLineEdit( headerSpectrum, "energy1" );
110     energy1->setGeometry( QRect( 30, 200, 70, 28 ) );
111     energy1->setEnabled(false);
112  
113     energy1label = new QLabel( headerSpectrum, "energy1label" );
114     energy1label->setGeometry( QRect( 35, 180, 70, 20 ) ); 
115     energy1label->setText( tr( "energy1" ) );
116     energy1label->setEnabled(false);
117
118     percent1 = new QLineEdit( headerSpectrum, "percent1" );
119     percent1->setGeometry( QRect( 110, 200, 70, 28 ) );
120     percent1->setEnabled(false);
121
122     percent1label = new QLabel( headerSpectrum, "percent1label" );
123     percent1label->setGeometry( QRect( 115, 180, 70, 20 ) ); 
124     percent1label->setText( tr( "percent1" ) );
125     percent1label->setEnabled(false);
126
127     energy2 = new QLineEdit( headerSpectrum, "energy2" );
128     energy2->setGeometry( QRect( 190, 200, 70, 28 ) ); 
129     energy2->setEnabled(false);
130
131     energy2label = new QLabel( headerSpectrum, "energy2label" );
132     energy2label->setGeometry( QRect( 195, 180, 70, 20 ) );
133     energy2label->setText( tr( "energy2" ) );
134     energy2label->setEnabled(false);
135
136     percent2 = new QLineEdit( headerSpectrum, "percent2" );
137     percent2->setGeometry( QRect( 270, 200, 70, 28 ) ); 
138     percent2->setEnabled(false);
139
140     percent2label = new QLabel( headerSpectrum, "percent2label" );
141     percent2label->setGeometry( QRect( 275, 180, 70, 20 ) ); 
142     percent2label->setText( tr( "percent2" ) ); 
143     percent2label->setEnabled(false);
144
145     energy3 = new QLineEdit( headerSpectrum, "energy3" );
146     energy3->setGeometry( QRect( 350, 200, 70, 28 ) ); 
147     energy3->setEnabled(false);
148
149     energy3label = new QLabel( headerSpectrum, "energy3label" );
150     energy3label->setGeometry( QRect( 355, 180, 70, 20 ) ); 
151     energy3label->setText( tr( "energy3" ) ); 
152     energy3label->setEnabled(false);
153
154     percent3 = new QLineEdit( headerSpectrum, "percent3" );
155     percent3->setGeometry( QRect( 430, 200, 70, 28 ) ); 
156     percent3->setEnabled(false);
157
158     percent3label = new QLabel( headerSpectrum, "percent3label" );
159     percent3label->setGeometry( QRect( 435, 180, 70, 20 ) ); 
160     percent3label->setText( tr( "percent3" ) );
161     percent3label->setEnabled(false);
162
163     energy4 = new QLineEdit( headerSpectrum, "energy4" );
164     energy4->setGeometry( QRect( 510, 200, 70, 28 ) );
165     energy4->setEnabled(false);
166
167     energy4label = new QLabel( headerSpectrum, "energy4label" );
168     energy4label->setGeometry( QRect( 515, 180, 70, 20 ) ); 
169     energy4label->setText( tr( "energy4" ) ); 
170     energy4label->setEnabled(false);
171
172     percent4 = new QLineEdit( headerSpectrum, "percent4" );
173     percent4->setGeometry( QRect( 590, 200, 70, 28 ) ); 
174     percent4->setEnabled(false);
175
176     percent4label = new QLabel( headerSpectrum, "percent4label" );
177     percent4label->setGeometry( QRect( 595, 180, 70, 20 ) );
178     percent4label->setText( tr( "percent4" ) );
179     percent4label->setEnabled(false);
180
181     energy5 = new QLineEdit( headerSpectrum, "energy5" );
182     energy5->setGeometry( QRect( 30, 260, 70, 28 ) ); 
183     energy5->setEnabled(false);
184
185     energy5label = new QLabel( headerSpectrum, "energy5label" );
186     energy5label->setGeometry( QRect( 35, 240, 70, 20 ) ); 
187     energy5label->setText( tr( "energy5" ) );
188     energy5label->setEnabled(false);
189
190     percent5 = new QLineEdit( headerSpectrum, "percent5" );
191     percent5->setGeometry( QRect( 110, 260, 70, 28 ) ); 
192     percent5->setEnabled(false);
193
194     percent5label = new QLabel( headerSpectrum, "percent5label" );
195     percent5label->setGeometry( QRect( 115, 240, 70, 20 ) ); 
196     percent5label->setText( tr( "percent5" ) ); 
197     percent5label->setEnabled(false);
198
199     energy6 = new QLineEdit( headerSpectrum, "energy6" );
200     energy6->setGeometry( QRect( 190, 260, 70, 28 ) ); 
201     energy6->setEnabled(false);
202
203     energy6label = new QLabel( headerSpectrum, "energy6label" );
204     energy6label->setGeometry( QRect( 195, 240, 70, 20 ) );
205     energy6label->setText( tr( "energy6" ) );
206     energy6label->setEnabled(false);
207
208     percent6 = new QLineEdit( headerSpectrum, "percent6" );
209     percent6->setGeometry( QRect( 270, 260, 70, 28 ) ); 
210     percent6->setEnabled(false);
211
212     percent6label = new QLabel( headerSpectrum, "percent6label" );
213     percent6label->setGeometry( QRect( 270, 240, 70, 20 ) ); 
214     percent6label->setText( tr( "percent6" ) );
215     percent6label->setEnabled(false);
216
217     energy7 = new QLineEdit( headerSpectrum, "energy7" );
218     energy7->setGeometry( QRect( 350, 260, 70, 28 ) );
219     energy7->setEnabled(false);
220
221     energy7label = new QLabel( headerSpectrum, "energy7label" );
222     energy7label->setGeometry( QRect( 355, 240, 70, 20 ) ); 
223     energy7label->setText( tr( "energy7" ) ); 
224     energy7label->setEnabled(false);
225
226     percent7 = new QLineEdit( headerSpectrum, "percent7" );
227     percent7->setGeometry( QRect( 430, 260, 70, 28 ) );
228     percent7->setEnabled(false);
229
230     percent7label = new QLabel( headerSpectrum, "percent7label" );
231     percent7label->setGeometry( QRect( 435, 240, 70, 20 ) ); 
232     percent7label->setText( tr( "percent7" ) );
233     percent7label->setEnabled(false);
234
235     tabwidget1->insertTab( headerSpectrum, tr( "Header/Spectrum" ) );
236
237     /** Generates  Tab number 2 - Objects  */
238
239     objects = new QWidget( tabwidget1, "objects" );
240
241     objectslabel = new QLabel( objects, "objectslabel" );
242     objectslabel->setGeometry( QRect( 10, 20, 80, 20 ) ); 
243     objectslabel->setText( tr( "OBJECTS" ) );
244
245     shape = new QComboBox( objects, "shape" );
246     shape->setGeometry( QRect( 100, 55, 100, 28 ) ); 
247     shape->insertItem("RECT",-1);
248     shape->insertItem("ELIP",-1);
249     shape->insertItem("TRIA",-1);
250     shape->insertItem("SEGM",-1);
251     shape->insertItem("SECT",-1);
252
253     shapelabel = new QLabel( objects, "shapelabel" );
254     shapelabel->setGeometry( QRect( 125, 35, 60, 20 ) ); 
255     shapelabel->setText( tr( "shape" ) );
256
257     cx = new QLineEdit( objects, "cx" );
258     cx->setGeometry( QRect( 210, 55, 65, 28 ) ); 
259
260     cxlabel = new QLabel( objects, "cxlabel" );
261     cxlabel->setGeometry( QRect( 230, 35, 60, 20 ) ); 
262     cxlabel->setText( tr( "cx" ) );
263
264     cy = new QLineEdit( objects, "cy" );
265     cy->setGeometry( QRect( 285, 55, 65, 28 ) ); 
266
267     cylabel = new QLabel( objects, "cylabel" );
268     cylabel->setGeometry( QRect( 305, 35, 60, 20 ) ); 
269     cylabel->setText( tr( "cy" ) );
270
271     u = new QLineEdit( objects, "u" );
272     u->setGeometry( QRect( 360, 55, 65, 28 ) ); 
273
274     ulabel = new QLabel( objects, "ulabel" );
275     ulabel->setGeometry( QRect( 385, 35, 60, 20 ) ); 
276     ulabel->setText( tr( "u" ) );
277
278     v = new QLineEdit( objects, "v" );
279     v->setGeometry( QRect( 435, 55, 65, 28 ) ); 
280
281     vlabel = new QLabel( objects, "vlabel" );
282     vlabel->setGeometry( QRect( 460, 35, 60, 20 ) ); 
283     vlabel->setText( tr( "v" ) );
284
285     ang = new QLineEdit( objects, "ang" );
286     ang->setGeometry( QRect( 510, 55, 65, 28 ) ); 
287
288     anglabel = new QLabel( objects, "anglabel" );
289     anglabel->setGeometry( QRect( 520, 35, 60, 20 ) ); 
290     anglabel->setText( tr( "ang" ) );
291
292     den1 = new QLineEdit( objects, "den" );
293     den1->setGeometry( QRect( 585, 55, 65, 28 ) ); 
294
295     den1label = new QLabel( objects, "den1label" );
296     den1label->setGeometry( QRect( 595, 35, 60, 20 ) ); 
297     den1label->setText( tr( "den(1)" ) );
298
299     deni = new QLineEdit( objects, "deni" );
300     deni->setGeometry( QRect( 100, 108, 150, 28 ) ); 
301     deni->setEnabled(false);
302
303     denilabel = new QLabel( objects, "denilabel" );
304     denilabel->setGeometry( QRect( 150, 88, 60, 20 ) ); 
305     denilabel->setText( tr( "den(i)" ) );
306     denilabel->setEnabled(false);
307
308     addshapebutton = new QPushButton( objects, "addshape" );
309     addshapebutton->setGeometry( QRect( 15, 50, 80, 37 ) ); 
310     addshapebutton->setText( tr( "ADD" ) );
311     QObject::connect(addshapebutton,SIGNAL(clicked()),this,SLOT(addShape()));
312
313     objectsdescription = new QMultiLineEdit( objects, "objectsdescription" );
314     objectsdescription->setGeometry( QRect( 100, 150, 550, 300 ) );
315
316     lastlabel = new QLabel( objects, "lastlabel" );
317     lastlabel->setGeometry( QRect( 100, 485, 50, 20 ) ); 
318     lastlabel->setText( tr( "LAST" ) );
319
320     scale = new QLineEdit( objects, "scale" );
321     scale->setGeometry( QRect( 160, 480, 60, 28 ) ); 
322
323     scalelabel = new QLabel( objects, "scalelabel" );
324     scalelabel->setGeometry( QRect( 170, 460, 40, 20 ) ); 
325     scalelabel->setText( tr( "scale" ) );
326     
327     /* jk 06/13/2008 added variabled to reflect tissue variabilit in snark14*/
328     seedvar = new QLineEdit( objects, "seedvar");
329     seedvar->setGeometry( QRect( 240, 480, 60, 28));
330     seedvar->setText( tr("0"));
331     
332     seedvarlabel = new QLabel( objects, "seedvarlabel");
333     seedvarlabel->setGeometry( QRect( 250, 460, 40, 20));
334     seedvarlabel->setText( tr( "seed"));
335     
336     var = new QLineEdit( objects, "var");
337     var->setGeometry( QRect( 320, 480, 60, 28));
338     var->setText( tr("0.0"));
339     
340     varlabel = new QLabel( objects, "varlabel");
341     varlabel->setGeometry( QRect( 330, 460, 40, 20));
342     varlabel->setText( tr( "var"));
343     
344
345     tabwidget1->insertTab( objects, tr( "Objects" ) );
346
347    /** Generates  Tab number 3 - Phantom/Raysum  */
348     phantomRaysum = new QWidget( tabwidget1, "phantomRaysum" );
349
350     phantomlabel = new QLabel( phantomRaysum, "phantomlabel" );
351     phantomlabel->setGeometry( QRect( 10, 40, 90, 20 ) ); 
352     phantomlabel->setText( tr( "PHANTOM" ) );
353
354     phantomaveragebutton = new QRadioButton( phantomRaysum, "phantomaveragebutton" );
355     phantomaveragebutton->setGeometry( QRect( 130, 40, 110, 24 ) ); 
356     phantomaveragebutton->setText( tr( "AVERAGE" ) );
357     QObject::connect(phantomaveragebutton,SIGNAL(clicked()),this,SLOT(activatePhantomAverageFields()));
358
359     nave1 = new QLineEdit( phantomRaysum, "nave1" );
360     nave1->setGeometry( QRect( 250, 30, 90, 28 ) );
361     nave1->setEnabled(false);
362
363     nave1label = new QLabel( phantomRaysum, "nave1label" );
364     nave1label->setGeometry( QRect( 270, 10, 50, 20 ) ); 
365     nave1label->setText( tr( "nave1" ) );
366     nave1label->setEnabled(false);
367
368     nelem = new QLineEdit( phantomRaysum, "nelem" );
369     nelem->setGeometry( QRect( 350, 30, 90, 28 ) ); 
370     nelem->setEnabled(false);
371
372     nelemlabel = new QLabel( phantomRaysum, "nelemlabel" );
373     nelemlabel->setGeometry( QRect( 370, 10, 50, 20 ) ); 
374     nelemlabel->setText( tr( "nelem" ) );
375     nelemlabel->setEnabled(false);
376
377     pixelsize = new QLineEdit( phantomRaysum, "pixelsize" );
378     pixelsize->setGeometry( QRect( 450, 30, 90, 28 ) ); 
379     pixelsize->setEnabled(false);
380
381     pixelsizelabel = new QLabel( phantomRaysum, "pixelsizelabel" );
382     pixelsizelabel->setGeometry( QRect( 460, 10, 70, 20 ) ); 
383     pixelsizelabel->setText( tr( "pixel_size" ) );
384     pixelsizelabel->setEnabled(false);
385
386     raysumlabel = new QLabel( phantomRaysum, "raysumlabel" );
387     raysumlabel->setGeometry( QRect( 10, 110, 90, 20 ) ); 
388     raysumlabel->setText( tr( "RAYSUM" ) );
389
390     raysumaveragebutton = new QRadioButton( phantomRaysum, "raysumaveragebutton" );
391     raysumaveragebutton->setGeometry( QRect( 130, 110, 110, 24 ) ); 
392     raysumaveragebutton->setText( tr( "AVERAGE" ) );
393     QObject::connect(raysumaveragebutton,SIGNAL(clicked()),this,SLOT(activateRaysumAverageFields()));
394     israysumaveragepresent=false;
395
396     nave2 = new QLineEdit( phantomRaysum, "nave2" );
397     nave2->setGeometry( QRect( 250, 100, 90, 28 ) ); 
398     nave2->setEnabled(false);
399
400     nave2label = new QLabel( phantomRaysum, "nave2label" );
401     nave2label->setGeometry( QRect( 270, 80, 50, 20 ) ); 
402     nave2label->setText( tr( "nave2" ) ); 
403     nave2label->setEnabled(false);
404
405     naper1 = new QLineEdit( phantomRaysum, "naper1" );
406     naper1->setGeometry( QRect( 20, 160, 70, 28 ) ); 
407     naper1->setEnabled(false);
408
409     naper1label = new QLabel( phantomRaysum, "naper1label" );
410     naper1label->setGeometry( QRect( 30, 140, 60, 20 ) );
411     naper1label->setText( tr( "naper1" ) );
412     naper1label->setEnabled(false);
413
414     naper2 = new QLineEdit( phantomRaysum, "naper2" );
415     naper2->setGeometry( QRect( 100, 160, 70, 28 ) ); 
416     naper2->setEnabled(false);
417
418     naper2label = new QLabel( phantomRaysum, "naper2label" );
419     naper2label->setGeometry( QRect( 110, 140, 50, 20 ) );
420     naper2label->setText( tr( "naper2" ) );
421     naper2label->setEnabled(false);
422
423     naper3 = new QLineEdit( phantomRaysum, "naper3" );
424     naper3->setGeometry( QRect( 180, 160, 70, 28 ) ); 
425     naper3->setEnabled(false);
426
427     naper3label = new QLabel( phantomRaysum, "naper3label" );
428     naper3label->setGeometry( QRect( 190, 140, 50, 20 ) ); 
429     naper3label->setText( tr( "naper3" ) );
430     naper3label->setEnabled(false);
431
432     naper4 = new QLineEdit( phantomRaysum, "naper4" );
433     naper4->setGeometry( QRect( 260, 160, 70, 28 ) ); 
434     naper4->setEnabled(false);
435
436     naper4label = new QLabel( phantomRaysum, "naper4label" );
437     naper4label->setGeometry( QRect( 270, 140, 50, 20 ) ); 
438     naper4label->setText( tr( "naper4" ) );
439     naper4label->setEnabled(false);
440
441     naper5 = new QLineEdit( phantomRaysum, "naper5" );
442     naper5->setGeometry( QRect( 340, 160, 70, 28 ) ); 
443     naper5->setEnabled(false);
444
445     naper5label = new QLabel( phantomRaysum, "naper5label" );
446     naper5label->setGeometry( QRect( 350, 140, 50, 20 ) ); 
447     naper5label->setText( tr( "naper5" ) );
448     naper5label->setEnabled(false);
449
450     naper6 = new QLineEdit( phantomRaysum, "naper6" );
451     naper6->setGeometry( QRect( 420, 160, 70, 28 ) ); 
452     naper6->setEnabled(false);
453
454     naper6label = new QLabel( phantomRaysum, "naper6label" );
455     naper6label->setGeometry( QRect( 430, 140, 50, 20 ) ); 
456     naper6label->setText( tr( "naper6" ) );
457     naper6label->setEnabled(false);
458
459     naper7 = new QLineEdit( phantomRaysum, "naper7" );
460     naper7->setGeometry( QRect( 500, 160, 70, 28 ) ); 
461     naper7->setEnabled(false);
462
463     naper7label = new QLabel( phantomRaysum, "naper7label" );
464     naper7label->setGeometry( QRect( 510, 140, 50, 20 ) ); 
465     naper7label->setText( tr( "naper7" ) );
466     naper7label->setEnabled(false);
467
468     naper8 = new QLineEdit( phantomRaysum, "naper8" );
469     naper8->setGeometry( QRect( 20, 220, 70, 28 ) ); 
470     naper8->setEnabled(false);
471
472     naper8label = new QLabel( phantomRaysum, "naper8label" );
473     naper8label->setGeometry( QRect( 30, 200, 50, 20 ) ); 
474     naper8label->setText( tr( "naper8" ) );
475     naper8label->setEnabled(false);
476
477     naper9 = new QLineEdit( phantomRaysum, "naper9" );
478     naper9->setGeometry( QRect( 100, 220, 70, 28 ) ); 
479     naper9->setEnabled(false);
480
481     naper9label = new QLabel( phantomRaysum, "naper9label" );
482     naper9label->setGeometry( QRect( 110, 200, 50, 20 ) ); 
483     naper9label->setText( tr( "naper9" ) );
484     naper9label->setEnabled(false);
485
486     naper10 = new QLineEdit( phantomRaysum, "naper10" );
487     naper10->setGeometry( QRect( 180, 220, 70, 28 ) ); 
488     naper10->setEnabled(false);
489
490     naper10label = new QLabel( phantomRaysum, "naper10label" );
491     naper10label->setGeometry( QRect( 185, 200, 60, 20 ) ); 
492     naper10label->setText( tr( "naper10" ) );
493     naper10label->setEnabled(false);
494
495     naper11 = new QLineEdit( phantomRaysum, "naper11" );
496     naper11->setGeometry( QRect( 260, 220, 70, 28 ) ); 
497     naper11->setEnabled(false);
498
499     naper11label = new QLabel( phantomRaysum, "naper11label" );
500     naper11label->setGeometry( QRect( 265, 200, 60, 20 ) ); 
501     naper11label->setText( tr( "naper11" ) );
502     naper11label->setEnabled(false);
503
504     naper12 = new QLineEdit( phantomRaysum, "naper12" );
505     naper12->setGeometry( QRect( 340, 220, 70, 28 ) ); 
506     naper12->setEnabled(false);
507
508     naper12label = new QLabel( phantomRaysum, "naper12label" );
509     naper12label->setGeometry( QRect( 345, 200, 60, 20 ) ); 
510     naper12label->setText( tr( "naper12" ) );
511     naper12label->setEnabled(false);
512
513     naper13 = new QLineEdit( phantomRaysum, "naper13" );
514     naper13->setGeometry( QRect( 420, 220, 70, 28 ) ); 
515     naper13->setEnabled(false);
516
517     naper13label = new QLabel( phantomRaysum, "naper13label" );
518     naper13label->setGeometry( QRect( 425, 200, 60, 20 ) ); 
519     naper13label->setText( tr( "naper13" ) );
520     naper13label->setEnabled(false);
521
522     tabwidget1->insertTab( phantomRaysum, tr( "Phantom/Raysum" ) );
523
524    /** Generates  Tab number 4 - Geometry/Raysums  */
525
526     geometryRaysums = new QWidget( tabwidget1, "geometryRaysums" );
527
528     geometrylabel = new QLabel( geometryRaysums, "geometrylabel" );
529     geometrylabel->setGeometry( QRect( 10, 20, 100, 20 ) ); 
530     geometrylabel->setText( tr( "GEOMETRY" ) );
531
532     geometrybuttongroup = new QButtonGroup( geometryRaysums, "geometrybuttongroup" );
533     //    geometrybuttongroup->setGeometry( QRect( 120, 10, 570, 160 ) ); 
534     geometrybuttongroup->setGeometry( QRect( 120, 10, 570, 210 ) ); 
535     geometrybuttongroup->setTitle( tr( "" ) );
536     geometrybuttongroup->setEnabled(false);
537
538     parallelbutton = new QRadioButton( geometrybuttongroup, "parallelbutton" );
539     parallelbutton->setGeometry( QRect( 10, 20, 100, 24 ) ); 
540     parallelbutton->setText( tr( "PARALLEL" ) );
541     parallelbutton->setChecked(true);
542     QObject::connect(parallelbutton,SIGNAL(clicked()),this,SLOT(activateParallelFields()));
543
544     parallelbuttongroup = new QButtonGroup( geometrybuttongroup, "parallelbuttongroup" );
545     parallelbuttongroup->setGeometry( QRect( 130, 10, 120, 70 ) ); 
546     parallelbuttongroup->setTitle( tr( "" ) );
547     parallelbuttongroup->setEnabled(true);
548
549     uniformbutton = new QRadioButton( parallelbuttongroup, "uniformbutton" );
550     uniformbutton->setGeometry( QRect( 10, 10, 100, 24 ) ); 
551     uniformbutton->setText( tr( "UNIFORM" ) ); 
552     uniformbutton->setChecked(true);
553
554     variablebutton = new QRadioButton( parallelbuttongroup, "variablebutton" );
555     variablebutton->setGeometry( QRect( 10, 40, 100, 24 ) ); 
556     variablebutton->setText( tr( "VARIABLE" ) );
557
558     parallelbuttongroup2 = new QButtonGroup( geometrybuttongroup, "parallelbuttongroup2" );
559     parallelbuttongroup2->setGeometry( QRect( 260, 10, 90, 70 ) ); 
560     parallelbuttongroup2->setTitle( tr( "" ) ); 
561     parallelbuttongroup2->setEnabled(true);
562
563     stripbutton = new QRadioButton( parallelbuttongroup2, "stripbutton" );
564     stripbutton->setGeometry( QRect( 10, 10, 70, 24 ) ); 
565     stripbutton->setText( tr( "STRIP" ) );
566
567     linebutton = new QRadioButton( parallelbuttongroup2, "linebutton" );
568     linebutton->setGeometry( QRect( 10, 40, 70, 24 ) ); 
569     linebutton->setText( tr( "LINE" ) );
570     linebutton->setChecked(true);
571
572     divergentbutton = new QRadioButton( geometrybuttongroup, "divergentbutton" );
573     divergentbutton->setGeometry( QRect( 10, 100, 120, 24 ) ); 
574     divergentbutton->setText( tr( "DIVERGENT" ) );    
575     QObject::connect(divergentbutton,SIGNAL(clicked()),this,SLOT(activateDivergentFields()));
576
577     divergentbuttongroup = new QButtonGroup( geometrybuttongroup, "divergentbuttongroup" );
578     divergentbuttongroup->setGeometry( QRect( 130, 80, 120, 70 ) ); 
579     divergentbuttongroup->setTitle( tr( "" ) ); 
580     divergentbuttongroup->setEnabled(false);
581
582     arcbutton = new QRadioButton( divergentbuttongroup, "arcbutton" );
583     arcbutton->setGeometry( QRect( 10, 10, 60, 24 ) ); 
584     arcbutton->setText( tr( "ARC" ) );
585
586     tangentbutton = new QRadioButton( divergentbuttongroup, "tangentbutton" );
587     tangentbutton->setGeometry( QRect( 10, 40, 100, 20 ) ); 
588     tangentbutton->setText( tr( "TANGENT" ) );
589
590     sourcetoorigin = new QLineEdit( geometrybuttongroup, "sourcetoorigin" );
591     sourcetoorigin->setGeometry( QRect( 260, 100, 140, 28 ) ); 
592     sourcetoorigin->setEnabled(false);
593
594     sourcetooriginlabel = new QLabel( geometrybuttongroup, "sourcetooriginlabel" );
595     sourcetooriginlabel->setGeometry( QRect( 270, 80, 120, 20 ) ); 
596     sourcetooriginlabel->setText( tr( "source_to_origin" ) );
597     sourcetooriginlabel->setEnabled(false);
598
599     sourcetodetector = new QLineEdit( geometrybuttongroup, "sourcetodetector" );
600     sourcetodetector->setGeometry( QRect( 410, 100, 140, 28 ) ); 
601     sourcetodetector->setEnabled(false);
602
603     sourcetodetectorlabel = new QLabel( geometrybuttongroup, "sourcetodetectorlabel" );
604     sourcetodetectorlabel->setGeometry( QRect( 410, 80, 140, 20 ) ); 
605     sourcetodetectorlabel->setText( tr( "source_to_detector" ) );
606     sourcetodetectorlabel->setEnabled(false);
607
608     linogrambutton = new QRadioButton( geometrybuttongroup, "divergentbutton" );
609     linogrambutton->setGeometry( QRect( 10, 180, 120, 24 ) ); 
610     linogrambutton->setText( tr( "LINOGRAM" ) );    
611     QObject::connect(linogrambutton,SIGNAL(clicked()),this,SLOT(activateLinogramFields()));
612
613     raysumslabel = new QLabel( geometryRaysums, "raysumslabel" );
614     //    raysumslabel->setGeometry( QRect( 10, 180, 90, 20 ) ); 
615     raysumslabel->setGeometry( QRect( 10, 230, 90, 20 ) ); 
616     raysumslabel->setText( tr( "RAYSUMS" ) );
617
618     raysumsbuttongroup = new QButtonGroup( geometryRaysums, "raysumsbuttongroup" );
619     //    raysumsbuttongroup->setGeometry( QRect( 120, 180, 570, 120 ) ); 
620     raysumsbuttongroup->setGeometry( QRect( 120, 230, 570, 120 ) ); 
621     raysumsbuttongroup->setTitle( tr( "" ) );
622     raysumsbuttongroup->setEnabled(false);
623
624     userbutton = new QRadioButton( raysumsbuttongroup, "userbutton" );
625     userbutton->setGeometry( QRect( 10, 40, 70, 24 ) ); 
626     userbutton->setText( tr( "USER" ) ); 
627     userbutton->setChecked(true);
628     QObject::connect(userbutton,SIGNAL(clicked()),this,SLOT(activateUserFields()));
629
630     userrays = new QLineEdit( raysumsbuttongroup, "userrays" );
631     userrays->setGeometry( QRect( 130, 30, 90, 28 ) ); 
632     userrays->setEnabled(true);
633
634     userrayslabel = new QLabel( raysumsbuttongroup, "userrayslabel" );
635     userrayslabel->setGeometry( QRect( 140, 10, 70, 20 ) ); 
636     userrayslabel->setText( tr( "user_rays" ) );
637     userrayslabel->setEnabled(true);
638
639     programbutton = new QRadioButton( raysumsbuttongroup, "programbutton" );
640     programbutton->setGeometry( QRect( 10, 90, 110, 24 ) ); 
641     programbutton->setText( tr( "PROGRAM" ) );
642     QObject::connect(programbutton,SIGNAL(clicked()),this,SLOT(activateProgramFields()));
643
644     raysumsnelem = new QLineEdit( raysumsbuttongroup, "raysumsnelem" );
645     raysumsnelem->setGeometry( QRect( 130, 80, 90, 28 ) ); 
646     raysumsnelem->setEnabled(false);
647
648     raysumsnelemlabel = new QLabel( raysumsbuttongroup, "raysumsnelemlabel" );
649     raysumsnelemlabel->setGeometry( QRect( 150, 60, 50, 20 ) ); 
650     raysumsnelemlabel->setText( tr( "nelem" ) );
651     raysumsnelemlabel->setEnabled(false);
652
653     raysumspixelsize = new QLineEdit( raysumsbuttongroup, "raysumspixelsize" );
654     raysumspixelsize->setGeometry( QRect( 240, 80, 90, 28 ) ); 
655     raysumspixelsize->setEnabled(false);
656
657     raysumspixelsizelabel = new QLabel( raysumsbuttongroup, "raysumspixelsizelabel" );
658     raysumspixelsizelabel->setGeometry( QRect( 250, 60, 70, 20 ) ); 
659     raysumspixelsizelabel->setText( tr( "pixel_size" ) );
660     raysumspixelsizelabel->setEnabled(false);
661
662     detectorspacing = new QLineEdit( raysumsbuttongroup, "detectorspacing" );
663     detectorspacing->setGeometry( QRect( 370, 50, 140, 28 ) ); 
664
665     detectorspacinglabel = new QLabel( raysumsbuttongroup, "detectorspacinglabel" );
666     detectorspacinglabel->setGeometry( QRect( 380, 30, 130, 20 ) ); 
667     detectorspacinglabel->setText( tr( "detector_spacing" ) );
668
669     angleslabel = new QLabel( geometryRaysums, "angleslabel" );
670     //    angleslabel->setGeometry( QRect( 8, 310, 70, 20 ) ); 
671     angleslabel->setGeometry( QRect( 10, 360, 70, 20 ) ); 
672     angleslabel->setText( tr( "ANGLES" ) );
673
674     anglesbuttongroup = new QButtonGroup( geometryRaysums, "anglesbuttongroup" );
675     //    anglesbuttongroup->setGeometry( QRect( 120, 310, 570, 100 ) ); 
676     anglesbuttongroup->setGeometry( QRect( 120, 360, 570, 100 ) ); 
677     anglesbuttongroup->setTitle( tr( "" ) );
678     anglesbuttongroup->setEnabled(false);
679
680     prjnum = new QLineEdit( anglesbuttongroup, "prjnum" );
681     prjnum->setGeometry( QRect( 17, 40, 120, 28 ) ); 
682
683     prjnumlabel = new QLabel( anglesbuttongroup, "prjnumlabel" );
684     prjnumlabel->setGeometry( QRect( 50, 20, 50, 20 ) ); 
685     prjnumlabel->setText( tr( "prjnum" ) );
686
687 //     linobutton = new QRadioButton( anglesbuttongroup, "linobutton" );
688 //     linobutton->setGeometry( QRect( 160, 10, 60, 24 ) ); 
689 //     linobutton->setText( tr( "LINO" ) );
690 //     QObject::connect(linobutton,SIGNAL(clicked()),this,SLOT(deactivateEqualSpacingFields()));
691
692     equalspacingbutton = new QRadioButton( anglesbuttongroup, "equalspacingbutton" );
693     equalspacingbutton->setGeometry( QRect( 160, 40, 160, 24 ) ); 
694     equalspacingbutton->setText( tr( "EQUAL SPACING" ) );
695     QObject::connect(equalspacingbutton,SIGNAL(clicked()),this,SLOT(activateEqualSpacingFields()));
696
697     nonebutton = new QRadioButton( anglesbuttongroup, "nonebutton" );
698     nonebutton->setGeometry( QRect( 160, 70, 70, 24 ) ); 
699     nonebutton->setText( tr( "NONE" ) );
700     nonebutton->setChecked(true);
701     QObject::connect(nonebutton,SIGNAL(clicked()),this,SLOT(deactivateEqualSpacingFields()));
702
703     firstangle = new QLineEdit( anglesbuttongroup, "firstangle" );
704     firstangle->setGeometry( QRect( 340, 40, 80, 28 ) ); 
705     firstangle->setEnabled(false);
706
707     firstanglelabel = new QLabel( anglesbuttongroup, "firstanglelabel" );
708     firstanglelabel->setGeometry( QRect( 345, 20, 80, 20 ) ); 
709     firstanglelabel->setText( tr( "first_angle" ) ); 
710     firstanglelabel->setEnabled(false);
711
712     lastangle = new QLineEdit( anglesbuttongroup, "lastangle" );
713     lastangle->setGeometry( QRect( 440, 40, 80, 28 ) );
714     lastangle->setEnabled(false); 
715
716     lastanglelabel = new QLabel( anglesbuttongroup, "lastanglelabel" );
717     lastanglelabel->setGeometry( QRect( 445, 20, 80, 20 ) ); 
718     lastanglelabel->setText( tr( "last_angle" ) );
719     lastanglelabel->setEnabled(false);
720
721     //    angles = new QMultiLineEdit( geometryRaysums, "angles" );
722     angles = new QLineEdit( geometryRaysums, "angles" );
723     //    angles->setGeometry( QRect( 120, 415, 570, 105 ) ); 
724     angles->setGeometry( QRect( 120, 465, 570, 55 ) ); 
725     angles->setEnabled(false);
726
727     tabwidget1->insertTab( geometryRaysums, tr( "Geometry/Raysums" ) );
728
729    /** Generates  Tab number 5 - Measurement/Run  */
730
731     measurementRun = new QWidget( tabwidget1, "measurementRun" );
732
733     measurementlabel = new QLabel( measurementRun, "measurementlabel" );
734     measurementlabel->setGeometry( QRect( 10, 20, 130, 20 ) ); 
735     measurementlabel->setText( tr( "MEASUREMENT" ) );
736
737     measurementbuttongroup = new QButtonGroup( measurementRun, "measurementbuttongroup" );
738     measurementbuttongroup->setGeometry( QRect( 20, 50, 710, 410 ) ); 
739     measurementbuttongroup->setTitle( tr( "" ) );
740     measurementbuttongroup->setEnabled(false);
741
742     perfectbutton = new QRadioButton( measurementbuttongroup, "perfectbutton" );
743     perfectbutton->setGeometry( QRect( 10, 10, 100, 24 ) ); 
744     perfectbutton->setText( tr( "PERFECT" ) ); 
745     perfectbutton->setChecked(true);
746     QObject::connect(perfectbutton,SIGNAL(clicked()),this,SLOT(deactivateNoisyFields()));
747
748     noisybutton = new QRadioButton( measurementbuttongroup, "noisybutton" );
749     noisybutton->setGeometry( QRect( 10, 40, 70, 24 ) ); 
750     noisybutton->setText( tr( "NOISY" ) );
751     QObject::connect(noisybutton,SIGNAL(clicked()),this,SLOT(activateNoisyFields()));
752
753     noisyframe = new QFrame( measurementbuttongroup, "noisyframe" );
754     noisyframe->setGeometry( QRect( 90, 40, 570, 250 ) ); 
755     noisyframe->setFrameStyle( 49 );
756     noisyframe->setEnabled(false);
757
758     quantumbutton = new QCheckBox( noisyframe, "quantumbutton" );
759     quantumbutton->setGeometry( QRect( 20, 30, 110, 24 ) ); 
760     quantumbutton->setText( tr( "QUANTUM" ) );
761     quantumbutton->setEnabled(false);
762     QObject::connect(quantumbutton,SIGNAL(clicked()),this,SLOT(activateQuantumFields()));
763
764     quanmn = new QLineEdit( noisyframe, "quanmn" );
765     quanmn->setGeometry( QRect( 180, 30, 80, 28 ) ); 
766     quanmn->setEnabled(false);
767
768     quanmnlabel = new QLabel( noisyframe, "quanmnlabel" );
769     quanmnlabel->setGeometry( QRect( 190, 10, 60, 20 ) ); 
770     quanmnlabel->setText( tr( "quanmn" ) ); 
771     quanmnlabel->setEnabled(false);
772
773     quancm = new QLineEdit( noisyframe, "quancm" );
774     quancm->setGeometry( QRect( 270, 30, 80, 28 ) ); 
775     quancm->setEnabled(false);
776
777     quancmlabel = new QLabel( noisyframe, "quancmlabel" );
778     quancmlabel->setGeometry( QRect( 280, 10, 60, 20 ) ); 
779     quancmlabel->setText( tr( "quancm" ) );
780     quancmlabel->setEnabled(false);
781
782     calibrationlabel = new QLabel( noisyframe, "calibrationlabel" );
783     calibrationlabel->setGeometry( QRect( 360, 30, 110, 20 ) ); 
784     calibrationlabel->setText( tr( "CALIBRATION" ) ); 
785     calibrationlabel->setEnabled(false);
786
787     quanin = new QComboBox( noisyframe, "quanin" );
788     quanin->setGeometry( QRect( 480, 30, 80, 28 ) );
789     quanin->insertItem("1",-1);
790     quanin->insertItem("2",-1);
791     quanin->insertItem("3",-1);
792     quanin->insertItem("4",-1);
793     quanin->setEnabled(false); 
794
795     quaninlabel = new QLabel( noisyframe, "quaninlabel" );
796     quaninlabel->setGeometry( QRect( 490, 10, 50, 20 ) ); 
797     quaninlabel->setText( tr( "quanin" ) );
798     quaninlabel->setEnabled(false);
799
800     scatterbutton = new QCheckBox( noisyframe, "scatterbutton" );
801     scatterbutton->setGeometry( QRect( 20, 90, 100, 24 ) ); 
802     scatterbutton->setText( tr( "SCATTER" ) );
803     QObject::connect(scatterbutton,SIGNAL(clicked()),this,SLOT(activateScatterFields()));
804
805     sctnpk = new QLineEdit( noisyframe, "sctnpk" );
806     sctnpk->setGeometry( QRect( 180, 90, 80, 28 ) );
807     sctnpk->setEnabled(false); 
808
809     sctnpklabel = new QLabel( noisyframe, "sctnpklabel" );
810     sctnpklabel->setGeometry( QRect( 190, 70, 50, 20 ) ); 
811     sctnpklabel->setText( tr( "sctnpk" ) ); 
812     sctnpklabel->setEnabled(false);
813
814     sctnwd = new QLineEdit( noisyframe, "sctnwd" );
815     sctnwd->setGeometry( QRect( 270, 90, 80, 28 ) ); 
816     sctnwd->setEnabled(false);
817
818     sctnwdlabel = new QLabel( noisyframe, "sctnwdlabel" );
819     sctnwdlabel->setGeometry( QRect( 280, 70, 60, 20 ) ); 
820     sctnwdlabel->setText( tr( "sctnwd" ) );  
821     sctnwdlabel->setEnabled(false);
822
823     additivebutton = new QCheckBox( noisyframe, "additivebutton" );
824     additivebutton->setGeometry( QRect( 20, 150, 90, 24 ) ); 
825     additivebutton->setText( tr( "ADDITIVE" ) );
826     additivebutton->setChecked(false);
827     QObject::connect(additivebutton,SIGNAL(clicked()),this,SLOT(activateAdditiveFields()));
828
829     addnmn = new QLineEdit( noisyframe, "addnmn" );
830     addnmn->setGeometry( QRect( 180, 150, 80, 28 ) ); 
831     addnmn->setEnabled(false);
832
833     addnmnlabel = new QLabel( noisyframe, "addnmnlabel" );
834     addnmnlabel->setGeometry( QRect( 190, 130, 60, 20 ) ); 
835     addnmnlabel->setText( tr( "addnmn" ) ); 
836     addnmnlabel->setEnabled(false);
837
838     addnsd = new QLineEdit( noisyframe, "addnsd" );
839     addnsd->setGeometry( QRect( 270, 150, 80, 28 ) ); 
840     addnsd->setEnabled(false);
841
842     addnsdlabel = new QLabel( noisyframe, "addnsdlabel" );
843     addnsdlabel->setGeometry( QRect( 280, 130, 60, 20 ) ); 
844     addnsdlabel->setText( tr( "addnsd" ) );
845     addnsdlabel->setEnabled(false);
846
847     multiplicativebutton = new QCheckBox( noisyframe, "multiplicativebutton" );
848     multiplicativebutton->setGeometry( QRect( 20, 210, 150, 24 ) ); 
849     multiplicativebutton->setText( tr( "MULTIPLICATIVE" ) );
850     QObject::connect(multiplicativebutton,SIGNAL(clicked()),this,SLOT(activateMultiplicativeFields()));
851
852     multnmn = new QLineEdit( noisyframe, "multnmn" );
853     multnmn->setGeometry( QRect( 180, 210, 80, 28 ) );
854     multnmn->setEnabled(false);
855
856     multnmnlabel = new QLabel( noisyframe, "multnmnlabel" );
857     multnmnlabel->setGeometry( QRect( 190, 190, 70, 20 ) ); 
858     multnmnlabel->setText( tr( "multnmn" ) );
859     multnmnlabel->setEnabled(false);
860
861     multnsd = new QLineEdit( noisyframe, "multnsd" );
862     multnsd->setGeometry( QRect( 270, 210, 80, 28 ) ); 
863     multnsd->setEnabled(false);
864
865     multnsdlabel = new QLabel( noisyframe, "multnsdlabel" );
866     multnsdlabel->setGeometry( QRect( 280, 190, 70, 20 ) ); 
867     multnsdlabel->setText( tr( "multnsd" ) ); 
868     multnsdlabel->setEnabled(false);
869
870     seedlabel = new QLabel( measurementbuttongroup, "seedlabel" );
871     seedlabel->setGeometry( QRect( 10, 310, 110, 20 ) ); 
872     seedlabel->setText( tr( "SEED" ) ); 
873     seedlabel->setEnabled(false);
874
875     seed = new QLineEdit( measurementbuttongroup, "seed" );
876     seed->setGeometry( QRect( 140, 310, 70, 28 ) );  
877     seed->setEnabled(false);
878
879     seedlabel1 = new QLabel( measurementbuttongroup, "seedlabel1" );
880     seedlabel1->setGeometry( QRect( 155, 290, 70, 20 ) ); 
881     seedlabel1->setText( tr( "seed" ) );  
882     seedlabel1->setEnabled(false);
883
884     backgroundlabel = new QLabel( measurementbuttongroup, "backgroundlabel" );
885     backgroundlabel->setGeometry( QRect( 10, 370, 120, 20 ) ); 
886     backgroundlabel->setText( tr( "BACKGROUND" ) );
887
888     backgr1 = new QLineEdit( measurementbuttongroup, "backgr1" );
889     backgr1->setGeometry( QRect( 140, 370, 70, 28 ) ); 
890
891     backgr1label = new QLabel( measurementbuttongroup, "backgr1label" );
892     backgr1label->setGeometry( QRect( 145, 350, 70, 20 ) ); 
893     backgr1label->setText( tr( "backgr(1)" ) ); 
894
895     backgr2 = new QLineEdit( measurementbuttongroup, "backgr2" );
896     backgr2->setGeometry( QRect( 220, 370, 70, 28 ) ); 
897     backgr2->setEnabled(false);
898
899     backgr2label = new QLabel( measurementbuttongroup, "backgr2label" );
900     backgr2label->setGeometry( QRect( 225, 350, 70, 20 ) ); 
901     backgr2label->setText( tr( "backgr(2)" ) ); 
902     backgr2label->setEnabled(false);
903
904     backgr3 = new QLineEdit( measurementbuttongroup, "backgr3" );
905     backgr3->setGeometry( QRect( 300, 370, 70, 28 ) ); 
906     backgr3->setEnabled(false);
907
908     backgr3label = new QLabel( measurementbuttongroup, "backgr3label" );
909     backgr3label->setGeometry( QRect( 305, 350, 70, 20 ) ); 
910     backgr3label->setText( tr( "backgr(3)" ) ); 
911     backgr3label->setEnabled(false);
912
913     backgr4 = new QLineEdit( measurementbuttongroup, "backgr4" );
914     backgr4->setGeometry( QRect( 380, 370, 70, 28 ) ); 
915     backgr4->setEnabled(false);
916
917     backgr4label = new QLabel( measurementbuttongroup, "backgr4label" );
918     backgr4label->setGeometry( QRect( 385, 350, 70, 20 ) ); 
919     backgr4label->setText( tr( "backgr(4)" ) ); 
920     backgr4label->setEnabled(false);
921
922     backgr5 = new QLineEdit( measurementbuttongroup, "backgr5" );
923     backgr5->setGeometry( QRect( 460, 370, 70, 28 ) ); 
924     backgr5->setEnabled(false);
925
926     backgr5label = new QLabel( measurementbuttongroup, "backgr5label" );
927     backgr5label->setGeometry( QRect( 465, 350, 70, 20 ) ); 
928     backgr5label->setText( tr( "backgr(5)" ) ); 
929     backgr5label->setEnabled(false);
930
931     backgr6 = new QLineEdit( measurementbuttongroup, "backgr6" );
932     backgr6->setGeometry( QRect( 540, 370, 70, 28 ) ); 
933     backgr6->setEnabled(false);
934
935     backgr6label = new QLabel( measurementbuttongroup, "backgr6label" );
936     backgr6label->setGeometry( QRect( 545, 350, 70, 20 ) ); 
937     backgr6label->setText( tr( "backgr(6)" ) ); 
938     backgr6label->setEnabled(false);
939
940     backgr7 = new QLineEdit( measurementbuttongroup, "backgr7" );
941     backgr7->setGeometry( QRect( 620, 370, 70, 28 ) ); 
942     backgr7->setEnabled(false);
943
944     backgr7label = new QLabel( measurementbuttongroup, "backgr7label" );
945     backgr7label->setGeometry( QRect( 625, 350, 70, 20 ) ); 
946     backgr7label->setText( tr( "backgr(7)" ) ); 
947     backgr7label->setEnabled(false);
948
949     // jk 06/14/08 removal of file12 changes
950     /*runlabel = new QLabel( measurementRun, "runlabel" );
951     runlabel->setGeometry( QRect( 10, 490, 40, 20 ) ); 
952     runlabel->setText( tr( "RUN" ) );
953
954     runbuttongroup = new QButtonGroup( measurementRun, "runbuttongroup" );
955     //runbuttongroup->setGeometry( QRect( 80, 480, 320, 40 ) ); 
956     runbuttongroup->setGeometry( QRect( 80, 480, 120, 40 ) ); 
957     runbuttongroup->setTitle( tr( "" ) ); 
958     runbuttongroup->setEnabled(false);
959     */
960     /*savebutton = new QRadioButton( runbuttongroup, "savebutton" );
961     savebutton->setGeometry( QRect( 10, 10, 60, 24 ) ); 
962     savebutton->setText( tr( "SAVE" ) );
963
964     modifybutton = new QRadioButton( runbuttongroup, "modifybutton" );
965     modifybutton->setGeometry( QRect( 110, 10, 80, 24 ) ); 
966     modifybutton->setText( tr( "MODIFY" ) );
967     */
968     /*nonebutton_2 = new QRadioButton( runbuttongroup, "nonebutton_2" );
969     //nonebutton_2->setGeometry( QRect( 230, 10, 70, 24 ) ); 
970     nonebutton_2->setGeometry( QRect( 10, 10, 70, 24 ) ); 
971     nonebutton_2->setText( tr( "NONE" ) );
972     nonebutton_2->setChecked(true);
973     */
974     tabwidget1->insertTab( measurementRun, tr( "Measurement/Run" ) );
975     QObject::connect(tabwidget1,SIGNAL(currentChanged(QWidget*)),this,SLOT(activateOKButton()));
976
977     okbutton = new QPushButton( this, "okbutton" );
978     okbutton->setGeometry( QRect( 100, 560, 100, 40 ) ); 
979     okbutton->setText( tr( "OK" ) );
980     QObject::connect(okbutton,SIGNAL(clicked()),this,SLOT(checkValues()));
981     okbutton->setEnabled(false);
982
983     cancelbutton = new QPushButton( this, "cancelbutton" );
984     cancelbutton->setGeometry( QRect( 510, 560, 100, 40 ) ); 
985     cancelbutton->setText( tr( "Cancel" ) );
986     QObject::connect(cancelbutton,SIGNAL(clicked()),this,SLOT(reject()));
987
988 }
989
990 /**  
991  *  Destroys the object and frees any allocated resources
992  */
993 createwindow::~createwindow()
994 {
995     // no need to delete child widgets, Qt does it all for us
996 }
997
998 /** Activates monochromatic fields and deactivates polychromatic fields
999 @param void
1000 @author Bruno M. Carvalho
1001 @version 1.0 */
1002 void createwindow::activateMonochromaticFields()
1003 {
1004   if(monochromaticbutton->isChecked()) {
1005     energy->setEnabled(true);
1006     energylabel->setEnabled(true);
1007     nergy->setEnabled(false);
1008     nergylabel->setEnabled(false);
1009     energy1->setEnabled(false);
1010     energy1label->setEnabled(false);
1011     percent1->setEnabled(false);
1012     percent1label->setEnabled(false);
1013     energy2->setEnabled(false);
1014     energy2label->setEnabled(false);
1015     percent2->setEnabled(false);
1016     percent2label->setEnabled(false);
1017     energy3->setEnabled(false);
1018     energy3label->setEnabled(false);
1019     percent3->setEnabled(false);
1020     percent3label->setEnabled(false);
1021     energy4->setEnabled(false);
1022     energy4label->setEnabled(false);
1023     percent4->setEnabled(false);
1024     percent4label->setEnabled(false);
1025     energy5->setEnabled(false);
1026     energy5label->setEnabled(false);
1027     percent5->setEnabled(false);
1028     percent5label->setEnabled(false);
1029     energy6->setEnabled(false);
1030     energy6label->setEnabled(false);
1031     percent6->setEnabled(false);
1032     percent6label->setEnabled(false);
1033     energy7->setEnabled(false);
1034     energy7label->setEnabled(false);
1035     percent7->setEnabled(false);
1036     percent7label->setEnabled(false);
1037     deni->setEnabled(false);
1038     denilabel->setEnabled(false);
1039     backgr2->setEnabled(false);
1040     backgr2label->setEnabled(false);
1041     backgr3->setEnabled(false);
1042     backgr3label->setEnabled(false);
1043     backgr4->setEnabled(false);
1044     backgr4label->setEnabled(false);
1045     backgr5->setEnabled(false);
1046     backgr5label->setEnabled(false);
1047     backgr6->setEnabled(false);
1048     backgr6label->setEnabled(false);
1049     backgr7->setEnabled(false);
1050     backgr7label->setEnabled(false);
1051     activateOKButton();
1052   }
1053   else {
1054     energy->setEnabled(false);
1055     energylabel->setEnabled(false);
1056     activateOKButton();
1057   }
1058 }
1059
1060 /** Activates polychromatic fields and deactivates monochromatic fields
1061 @param void
1062 @author Bruno M. Carvalho
1063 @version 1.0 */
1064 void createwindow::activatePolychromaticFields()
1065 {
1066   if(polychromaticbutton->isChecked()) {
1067     nergy->setEnabled(true);
1068     nergylabel->setEnabled(true);
1069     energy1->setEnabled(true);
1070     energy1label->setEnabled(true);
1071     percent1->setEnabled(true);
1072     percent1label->setEnabled(true);
1073     energy2->setEnabled(true);
1074     energy2label->setEnabled(true);
1075     percent2->setEnabled(true);
1076     percent2label->setEnabled(true);
1077     energy3->setEnabled(true);
1078     energy3label->setEnabled(true);
1079     percent3->setEnabled(true);
1080     percent3label->setEnabled(true);
1081     energy4->setEnabled(true);
1082     energy4label->setEnabled(true);
1083     percent4->setEnabled(true);
1084     percent4label->setEnabled(true);
1085     energy5->setEnabled(true);
1086     energy5label->setEnabled(true);
1087     percent5->setEnabled(true);
1088     percent5label->setEnabled(true);
1089     energy6->setEnabled(true);
1090     energy6label->setEnabled(true);
1091     percent6->setEnabled(true);
1092     percent6label->setEnabled(true);
1093     energy7->setEnabled(true);
1094     energy7label->setEnabled(true);
1095     percent7->setEnabled(true);
1096     percent7label->setEnabled(true);
1097     deni->setEnabled(true);
1098     denilabel->setEnabled(true);
1099     backgr2->setEnabled(true);
1100     backgr2label->setEnabled(true);
1101     backgr3->setEnabled(true);
1102     backgr3label->setEnabled(true);
1103     backgr4->setEnabled(true);
1104     backgr4label->setEnabled(true);
1105     backgr5->setEnabled(true);
1106     backgr5label->setEnabled(true);
1107     backgr6->setEnabled(true);
1108     backgr6label->setEnabled(true);
1109     backgr7->setEnabled(true);
1110     backgr7label->setEnabled(true);
1111     energy->setEnabled(false);
1112     energylabel->setEnabled(false);
1113     activateOKButton();
1114   }
1115   else {
1116     nergy->setEnabled(false);
1117     nergylabel->setEnabled(false);
1118     energy1->setEnabled(false);
1119     energy1label->setEnabled(false);
1120     percent1->setEnabled(false);
1121     percent1label->setEnabled(false);
1122     energy2->setEnabled(false);
1123     energy2label->setEnabled(false);
1124     percent2->setEnabled(false);
1125     percent2label->setEnabled(false);
1126     energy3->setEnabled(false);
1127     energy3label->setEnabled(false);
1128     percent3->setEnabled(false);
1129     percent3label->setEnabled(false);
1130     energy4->setEnabled(false);
1131     energy4label->setEnabled(false);
1132     percent4->setEnabled(false);
1133     percent4label->setEnabled(false);
1134     energy5->setEnabled(false);
1135     energy5label->setEnabled(false);
1136     percent5->setEnabled(false);
1137     percent5label->setEnabled(false);
1138     energy6->setEnabled(false);
1139     energy6label->setEnabled(false);
1140     percent6->setEnabled(false);
1141     percent6label->setEnabled(false);
1142     energy7->setEnabled(false);
1143     energy7label->setEnabled(false);
1144     percent7->setEnabled(false);
1145     percent7label->setEnabled(false);
1146     activateOKButton();
1147   }
1148 }
1149
1150 /** Adds a shape to object description 
1151 @param void
1152 @author Bruno M. Carvalho
1153 @version 1.0 */
1154 void createwindow::addShape()
1155 {
1156   float ft;
1157   int f=0;
1158   QString ts;
1159   QString ts2;
1160
1161   switch(shape->currentItem()) {
1162     case 0:ts.append("RECT ");break;
1163     case 1:ts.append("ELIP ");break;
1164     case 2:ts.append("TRIA ");break;
1165     case 3:ts.append("SEGM ");break;
1166     case 4:ts.append("SECT ");break;
1167   }
1168   ft=strtof((const char *)cx->text().lower());
1169   if(errnum) 
1170     f=1;
1171   ft=strtof((const char *)cy->text().lower());
1172   if(errnum) 
1173     f=2;
1174   ft=strtof((const char *)u->text().lower());
1175   if(errnum) 
1176     f=3;
1177   ft=strtof((const char *)v->text().lower());
1178   if(errnum) 
1179     f=4;
1180   ft=strtof((const char *)ang->text().lower());
1181   if(errnum) 
1182     f=5;
1183   ft=strtof((const char *)den1->text().lower());
1184   if(errnum) 
1185     f=6;
1186   switch(f) {
1187     case 0: ts.append(cx->text());
1188             ts.append(" ");
1189             ts.append(cy->text());
1190             ts.append(" ");
1191             ts.append(u->text());
1192             ts.append(" ");
1193             ts.append(v->text());
1194             ts.append(" ");
1195             ts.append(ang->text());
1196             ts.append(" ");
1197             ts.append(den1->text());
1198             objectsdescription->insertLine(ts,-1);
1199             ft=strtof((const char *)deni->text().lower());
1200             if((errnum!=2) && (polychromaticbutton->isChecked())) {
1201               ts2.append("DENS ");
1202               ts2.append(deni->text());
1203               //  objectsdescription->insertLine(deni->text(),-1);
1204               objectsdescription->insertLine(ts2,-1);
1205             }
1206             cx->setText("");
1207             cy->setText("");
1208             u->setText("");
1209             v->setText("");
1210             ang->setText("");
1211             den1->setText("");
1212             deni->setText("");
1213             break;
1214     case 1: QMessageBox::information(this,"SnarkInput","Error!\n"
1215                                    "Invalid cx format.");
1216             cx->setFocus();
1217             break;
1218     case 2: QMessageBox::information(this,"SnarkInput","Error!\n"
1219                                    "Invalid cy format.");
1220             cy->setFocus();
1221             break;
1222     case 3: QMessageBox::information(this,"SnarkInput","Error!\n"
1223                                    "Invalid u format.");
1224             u->setFocus();
1225             break;
1226     case 4: QMessageBox::information(this,"SnarkInput","Error!\n"
1227                                    "Invalid v format.");
1228             v->setFocus();
1229             break;
1230     case 5: QMessageBox::information(this,"SnarkInput","Error!\n"
1231                                    "Invalid ang format.");
1232             ang->setFocus();
1233             break;
1234     case 6: QMessageBox::information(this,"SnarkInput","Error!\n"
1235                                    "Invalid den(1) format.");
1236             ang->setFocus();
1237             break;
1238   }
1239   activateOKButton();
1240 }
1241
1242 /** Activates phantom average fields 
1243 @param void
1244 @author Bruno M. Carvalho
1245 @version 1.0 */
1246 void createwindow::activatePhantomAverageFields()
1247 {
1248   if(phantomaveragebutton->isChecked()) {
1249     nave1->setEnabled(true);
1250     nave1label->setEnabled(true);
1251     nelem->setEnabled(true);
1252     nelemlabel->setEnabled(true);
1253     pixelsize->setEnabled(true);
1254     pixelsizelabel->setEnabled(true);
1255     activateOKButton();
1256   }
1257   else {
1258     nave1->setEnabled(false);
1259     nave1label->setEnabled(false);
1260     nelem->setEnabled(false);
1261     nelemlabel->setEnabled(false);
1262     pixelsize->setEnabled(false);
1263     pixelsizelabel->setEnabled(false);
1264     activateOKButton();
1265   }
1266 }
1267
1268
1269 /** Activates raysum average fields 
1270 @param void
1271 @author Bruno M. Carvalho
1272 @version 1.0 */
1273 void createwindow::activateRaysumAverageFields()
1274 {
1275   if(raysumaveragebutton->isChecked()) {
1276     nave2->setEnabled(true);
1277     nave2label->setEnabled(true);
1278     naper1->setEnabled(true);
1279     naper1label->setEnabled(true);
1280     naper2->setEnabled(true);
1281     naper2label->setEnabled(true);
1282     naper3->setEnabled(true);
1283     naper3label->setEnabled(true);
1284     naper4->setEnabled(true);
1285     naper4label->setEnabled(true);
1286     naper5->setEnabled(true);
1287     naper5label->setEnabled(true);
1288     naper6->setEnabled(true);
1289     naper6label->setEnabled(true);
1290     naper7->setEnabled(true);
1291     naper7label->setEnabled(true);
1292     naper8->setEnabled(true);
1293     naper8label->setEnabled(true);
1294     naper9->setEnabled(true);
1295     naper9label->setEnabled(true);
1296     naper10->setEnabled(true);
1297     naper10label->setEnabled(true);
1298     naper11->setEnabled(true);
1299     naper11label->setEnabled(true);
1300     naper12->setEnabled(true);
1301     naper12label->setEnabled(true);
1302     naper13->setEnabled(true);
1303     naper13label->setEnabled(true);
1304     geometrybuttongroup->setEnabled(true);
1305     if(! (linogrambutton->isChecked()) ) {  // a little caveat
1306       raysumsbuttongroup->setEnabled(true);
1307       anglesbuttongroup->setEnabled(true);
1308       angles->setEnabled(true);
1309     }
1310     measurementbuttongroup->setEnabled(true);
1311     //runbuttongroup->setEnabled(true);
1312     israysumaveragepresent=true;
1313     activateOKButton();
1314   }
1315   else {
1316     nave2->setEnabled(false);
1317     nave2label->setEnabled(false);
1318     naper1->setEnabled(false);
1319     naper1label->setEnabled(false);
1320     naper2->setEnabled(false);
1321     naper2label->setEnabled(false);
1322     naper3->setEnabled(false);
1323     naper3label->setEnabled(false);
1324     naper4->setEnabled(false);
1325     naper4label->setEnabled(false);
1326     naper5->setEnabled(false);
1327     naper5label->setEnabled(false);
1328     naper6->setEnabled(false);
1329     naper6label->setEnabled(false);
1330     naper7->setEnabled(false);
1331     naper7label->setEnabled(false);
1332     naper8->setEnabled(false);
1333     naper8label->setEnabled(false);
1334     naper9->setEnabled(false);
1335     naper9label->setEnabled(false);
1336     naper10->setEnabled(false);
1337     naper10label->setEnabled(false);
1338     naper11->setEnabled(false);
1339     naper11label->setEnabled(false);
1340     naper12->setEnabled(false);
1341     naper12label->setEnabled(false);
1342     naper13->setEnabled(false);
1343     naper13label->setEnabled(false);
1344     geometrybuttongroup->setEnabled(false);
1345     raysumsbuttongroup->setEnabled(false);
1346     anglesbuttongroup->setEnabled(false);
1347     angles->setEnabled(false);
1348     measurementbuttongroup->setEnabled(false);
1349     //runbuttongroup->setEnabled(false);
1350     israysumaveragepresent=false;
1351     activateOKButton();
1352   }
1353 }
1354
1355
1356 bool createwindow::isRaysumAveragePresent()
1357 {
1358   return israysumaveragepresent;
1359 }
1360
1361
1362 /** Activates parallel fields and deactivates divergent fields
1363 @param void
1364 @author Bruno M. Carvalho
1365 @version 1.0 */
1366 void createwindow::activateParallelFields()
1367 {
1368   if(parallelbutton->isChecked()) {
1369     parallelbuttongroup->setEnabled(true);
1370     parallelbuttongroup2->setEnabled(true);
1371     divergentbuttongroup->setEnabled(false);
1372     sourcetoorigin->setEnabled(false);
1373     sourcetooriginlabel->setEnabled(false);
1374     sourcetodetector->setEnabled(false);
1375     sourcetodetectorlabel->setEnabled(false);
1376     activate__6_3__6_4__6_5( true );
1377     activateOKButton();
1378   }
1379   else {
1380     parallelbuttongroup->setEnabled(false);
1381     parallelbuttongroup2->setEnabled(false);
1382     activateOKButton();
1383   }
1384 }
1385
1386 /** Activates divergent fields and deactivates parallel fields
1387 @param void
1388 @author Bruno M. Carvalho
1389 @version 1.0 */
1390 void createwindow::activateDivergentFields()
1391 {
1392   if(divergentbutton->isChecked()) {
1393     divergentbuttongroup->setEnabled(true);
1394     sourcetoorigin->setEnabled(true);
1395     sourcetooriginlabel->setEnabled(true);
1396     sourcetodetector->setEnabled(true);
1397     sourcetodetectorlabel->setEnabled(true);
1398     parallelbuttongroup->setEnabled(false);
1399     parallelbuttongroup2->setEnabled(false);
1400     activate__6_3__6_4__6_5( true );
1401     activateOKButton();
1402   }
1403   else {
1404     divergentbuttongroup->setEnabled(false);
1405     sourcetoorigin->setEnabled(false);
1406     sourcetooriginlabel->setEnabled(false);
1407     sourcetodetector->setEnabled(false);
1408     sourcetodetectorlabel->setEnabled(false);
1409     activateOKButton();
1410   }
1411 }  // --createwindow::activateDivergentFields()
1412
1413 /** @author deniz
1414     @param enable, if false, will turn these off, on if true */
1415 void createwindow::activate__6_3__6_4__6_5(bool enable) {
1416   raysumsbuttongroup->setEnabled ( enable );
1417   anglesbuttongroup->setEnabled ( enable );
1418   angles->setEnabled( enable );
1419 }
1420
1421 /** Deactivates divergent fields as well as parallel fields
1422     also deactivates everything below LINOGRAM
1423  @author Deniz Sarioz
1424 */
1425 void createwindow::activateLinogramFields() {
1426   if(linogrambutton->isChecked()) {
1427     parallelbuttongroup->setEnabled(false);  // hate on parallel
1428     parallelbuttongroup2->setEnabled(false);
1429
1430     divergentbuttongroup->setEnabled(false); // hate on divergent
1431     sourcetoorigin->setEnabled(false);
1432     sourcetooriginlabel->setEnabled(false);
1433     sourcetodetector->setEnabled(false);
1434     sourcetodetectorlabel->setEnabled(false);
1435     
1436     activate__6_3__6_4__6_5( false );
1437   } else {
1438     activate__6_3__6_4__6_5( true );
1439   }
1440   activateOKButton();
1441 }  // --createwindow::activateLinogramFields()
1442
1443 /** Activates user fields and deactivates program fields
1444 @param void
1445 @author Bruno M. Carvalho
1446 @version 1.0 */
1447 void createwindow::activateUserFields()
1448 {
1449   if(userbutton->isChecked()) {
1450     userrays->setEnabled(true);
1451     userrayslabel->setEnabled(true);
1452     raysumsnelem->setEnabled(false);
1453     raysumsnelemlabel->setEnabled(false);
1454     raysumspixelsize->setEnabled(false);
1455     raysumspixelsizelabel->setEnabled(false);
1456     activateOKButton();
1457   }
1458   else {
1459     userrays->setEnabled(false);
1460     userrayslabel->setEnabled(false);
1461     activateOKButton();
1462   }
1463 }  // --createwindow::activateUserFields()
1464
1465 /** Activates program fields and deactivates user fields
1466 @param void
1467 @author Bruno M. Carvalho
1468 @version 1.0 */
1469 void createwindow::activateProgramFields()
1470 {
1471   if(programbutton->isChecked()) {
1472     raysumsnelem->setEnabled(true);
1473     raysumsnelemlabel->setEnabled(true);
1474     raysumspixelsize->setEnabled(true);
1475     raysumspixelsizelabel->setEnabled(true);
1476     userrays->setEnabled(false);
1477     userrayslabel->setEnabled(false);
1478     activateOKButton();
1479   }
1480   else {
1481     raysumsnelem->setEnabled(false);
1482     raysumsnelemlabel->setEnabled(false);
1483     raysumspixelsize->setEnabled(false);
1484     raysumspixelsizelabel->setEnabled(false);
1485     activateOKButton();
1486   }
1487 }  // --createwindow::activateProgramFields()
1488
1489 /** Activates equal spacing fields 
1490 @param void
1491 @author Bruno M. Carvalho
1492 @version 1.0 */
1493 void createwindow::activateEqualSpacingFields()
1494 {
1495   if(equalspacingbutton->isChecked()) {
1496     firstangle->setEnabled(true);
1497     firstanglelabel->setEnabled(true);
1498     lastangle->setEnabled(true);
1499     lastanglelabel->setEnabled(true);
1500     angles->setEnabled(false);
1501     activateOKButton();
1502   }
1503   else {
1504     firstangle->setEnabled(false);
1505     firstanglelabel->setEnabled(false);
1506     lastangle->setEnabled(false);
1507     lastanglelabel->setEnabled(false);
1508     angles->setEnabled(true);
1509     activateOKButton();
1510   }
1511 }  // --createwindow::activateEqualSpacingFields()
1512
1513 /** Deactivates equal spacing fields 
1514 @param void
1515 @author Bruno M. Carvalho
1516 @version 1.0 */
1517 void createwindow::deactivateEqualSpacingFields()
1518 {
1519   firstangle->setEnabled(false);
1520   firstanglelabel->setEnabled(false);
1521   lastangle->setEnabled(false);
1522   lastanglelabel->setEnabled(false);
1523   //  if(linobutton->isChecked()) 
1524   //    angles->setEnabled(false);
1525   //  else
1526   //  if(nonebutton->isChecked()) 
1527   angles->setEnabled(true);
1528   activateOKButton();
1529 }  // --createwindow::deactivateEqualSpacingFields()
1530
1531 /** Activates noisy fields 
1532 @param void
1533 @author Bruno M. Carvalho
1534 @version 1.0 */
1535 void createwindow::activateNoisyFields()
1536 {
1537   if(noisybutton->isChecked()) {
1538     noisyframe->setEnabled(true);
1539     quantumbutton->setChecked(true);
1540     quantumbutton->setEnabled(true);
1541     quanmn->setEnabled(true);
1542     quanmnlabel->setEnabled(true);
1543     quancm->setEnabled(true);
1544     quancmlabel->setEnabled(true);
1545     calibrationlabel->setEnabled(true);
1546     quanin->setEnabled(true); 
1547     quaninlabel->setEnabled(true);
1548     seedlabel->setEnabled(true);
1549     seed->setEnabled(true);
1550     seedlabel1->setEnabled(true);
1551     activateOKButton();
1552   }
1553   else {
1554     noisyframe->setEnabled(false);
1555     activateOKButton();
1556   }
1557 }  // --createwindow::activateNoisyFields()
1558
1559 /** Deactivates noisy fields 
1560 @param void
1561 @author Bruno M. Carvalho
1562 @version 1.0 */
1563 void createwindow::deactivateNoisyFields()
1564 {
1565   noisyframe->setEnabled(false);
1566   seedlabel->setEnabled(false);
1567   seed->setEnabled(false);
1568   seedlabel1->setEnabled(false);
1569   activateOKButton();
1570 }  // --createwindow::deactivateNoisyFields()
1571
1572 /** Activates quantum fields and deactivates scatter, additive and 
1573 multiplicative fields
1574 @param void
1575 @author Bruno M. Carvalho
1576 @version 1.0 */
1577 void createwindow::activateQuantumFields()
1578 {
1579   if(quantumbutton->isChecked()) {
1580     quanmn->setEnabled(true);
1581     quanmnlabel->setEnabled(true);
1582     quancm->setEnabled(true);
1583     quancmlabel->setEnabled(true);
1584     calibrationlabel->setEnabled(true);
1585     quanin->setEnabled(true);
1586     quaninlabel->setEnabled(true);
1587     seed->setEnabled(true);
1588     seedlabel->setEnabled(true);
1589     seedlabel1->setEnabled(true);
1590     activateOKButton();
1591   }
1592   else {
1593     quanmn->setEnabled(false);
1594     quanmnlabel->setEnabled(false);
1595     quancm->setEnabled(false);
1596     quancmlabel->setEnabled(false);
1597     calibrationlabel->setEnabled(false);
1598     quanin->setEnabled(false);
1599     quaninlabel->setEnabled(false);
1600     if(!additivebutton->isChecked() && !multiplicativebutton->isChecked()) {
1601       seed->setEnabled(false);
1602       seedlabel->setEnabled(false);
1603       seedlabel1->setEnabled(false);
1604     }
1605     activateOKButton();
1606   }
1607 }  // --createwindow::activateQuantumFields()
1608
1609 /** Activates scatter fields and deactivates quantum, additive and 
1610 multiplicative fields
1611 @param void
1612 @author Bruno M. Carvalho
1613 @version 1.0 */
1614 void createwindow::activateScatterFields()
1615 {
1616   if(scatterbutton->isChecked()) {
1617     sctnpk->setEnabled(true);
1618     sctnpklabel->setEnabled(true);
1619     sctnwd->setEnabled(true);
1620     sctnwdlabel->setEnabled(true);
1621     activateOKButton();
1622   }
1623   else {
1624     sctnpk->setEnabled(false);
1625     sctnpklabel->setEnabled(false);
1626     sctnwd->setEnabled(false);
1627     sctnwdlabel->setEnabled(false);
1628     activateOKButton();
1629   }
1630 }  // --createwindow::activateScatterFields()
1631
1632 /** Activates additive fields and deactivates quantum, scatter and 
1633 multiplicative fields
1634 @param void
1635 @author Bruno M. Carvalho
1636 @version 1.0 */
1637 void createwindow::activateAdditiveFields()
1638 {
1639   if(additivebutton->isChecked()) {
1640     addnmn->setEnabled(true);
1641     addnmnlabel->setEnabled(true);
1642     addnsd->setEnabled(true);
1643     addnsdlabel->setEnabled(true);
1644     seed->setEnabled(true);
1645     seedlabel->setEnabled(true);
1646     seedlabel1->setEnabled(true);
1647     activateOKButton();
1648   }
1649   else {
1650     addnmn->setEnabled(false);
1651     addnmnlabel->setEnabled(false);
1652     addnsd->setEnabled(false);
1653     addnsdlabel->setEnabled(false);
1654     if(!quantumbutton->isChecked() && !multiplicativebutton->isChecked()) {
1655       seed->setEnabled(false);
1656       seedlabel->setEnabled(false);
1657       seedlabel1->setEnabled(false);
1658     }
1659     activateOKButton();
1660   }
1661 }  // --createwindow::activateAdditiveFields()
1662
1663 /** Activates multiplicative fields and deactivates quantum, scatter and 
1664 additive fields
1665 @param void
1666 @author Bruno M. Carvalho
1667 @version 1.0 */
1668 void createwindow::activateMultiplicativeFields()
1669 {
1670   if(multiplicativebutton->isChecked()) {
1671     multnmn->setEnabled(true);
1672     multnmnlabel->setEnabled(true);
1673     multnsd->setEnabled(true);
1674     multnsdlabel->setEnabled(true);
1675     seed->setEnabled(true);
1676     seedlabel->setEnabled(true);
1677     seedlabel1->setEnabled(true);
1678     activateOKButton();
1679   }
1680   else {
1681     multnmn->setEnabled(false);
1682     multnmnlabel->setEnabled(false);
1683     multnsd->setEnabled(false);
1684     multnsdlabel->setEnabled(false);
1685     if(!quantumbutton->isChecked() && !additivebutton->isChecked()) {
1686       seed->setEnabled(false);
1687       seedlabel->setEnabled(false);
1688       seedlabel1->setEnabled(false);
1689     }
1690     activateOKButton();
1691   }
1692 } // --createwindow::activateMultiplicativeFields()
1693
1694 /** Activates OK Button if the minimum information for create command is present
1695 @param void
1696 @author Bruno M. Carvalho
1697 @version 1.0 */
1698 void createwindow::activateOKButton()
1699 {
1700   int pn,en,status=1;
1701   float ds;
1702
1703   if(!strcmp((const char *)idheader->text(),""))
1704     status=0;
1705   if(monochromaticbutton->isChecked()) {
1706     en=strtoi((const char *)energy->text());
1707     if(errnum)
1708       status=0;
1709   }
1710   else {
1711     en=strtoi((const char *)nergy->text());
1712     if(errnum)
1713       status=0;
1714   }
1715   if(raysumaveragebutton->isChecked() && (! ( linogrambutton->isChecked() ) ) )  {
1716     ds=strtof((const char *)detectorspacing->text().lower());
1717     if(errnum)
1718       status=0;
1719     pn=strtoi((const char *)prjnum->text());
1720     if(errnum)
1721       status=0;
1722   }
1723   if(status)
1724     okbutton->setEnabled(true);
1725   else
1726     okbutton->setEnabled(false);
1727
1728 }  // --createwindow::activateOKButton()
1729
1730
1731 /** Returns a string for set 1 of CREATE input sequence
1732 @param void
1733 @return indentifying header
1734 @author Bruno M. Carvalho
1735 @version 1.0 */
1736 QString createwindow::getOutput1()
1737 {
1738   QString output;
1739
1740   output.sprintf("CREATE\n");
1741   output+=idheader->text();
1742   //output.append("\n");
1743   return output;
1744 }   // --createwindow::getOutput1()
1745
1746 /** Returns a string for set 2 of CREATE input sequence
1747 @param void
1748 @return energy spectrum
1749 @author Bruno M. Carvalho
1750 @version 1.0 */
1751 QString createwindow::getOutput2()
1752 {
1753   QString output;
1754
1755   output.sprintf("SPECTRUM ");
1756   if(monochromaticbutton->isChecked()) {
1757     output.append("MONOCHROMATIC ");
1758     output+=energy->text();
1759     //output.append("\n");
1760   }
1761   else
1762     if(polychromaticbutton->isChecked()) {
1763     output.append("POLYCHROMATIC ");
1764     output+=nergy->text();
1765     output.append("\n");
1766     output+=energy1->text();
1767     output.append(" ");
1768     output+=percent1->text();
1769     output.append(" ");
1770     output+=energy2->text();
1771     output.append(" ");
1772     output+=percent2->text();
1773     output.append(" ");
1774     output+=energy3->text();
1775     output.append(" ");
1776     output+=percent3->text();
1777     output.append(" ");
1778     output+=energy4->text();
1779     output.append(" ");
1780     output+=percent4->text();
1781     output.append(" ");
1782     output+=energy5->text();
1783     output.append(" ");
1784     output+=percent5->text();
1785     output.append(" ");
1786     output+=energy6->text();
1787     output.append(" ");
1788     output+=percent6->text();
1789     output.append(" ");
1790     output+=energy7->text();
1791     output.append(" ");
1792     output+=percent7->text();
1793     //output.append("\n");
1794   }
1795   return output;
1796 }   // --createwindow::getOutput2()
1797
1798 /** Returns a string for set 3 of CREATE input sequence
1799 @param void
1800 @return elemental objects
1801 @author Bruno M. Carvalho
1802 @notes slight bug (91-related) fix by Deniz
1803 @version 1.0 */
1804 QString createwindow::getOutput3()
1805 {
1806   QString output;
1807
1808   output.sprintf("OBJECTS\n");
1809   output+=objectsdescription->text(); // which might already have a newline
1810   if(!(output.endsWith( "\n" ))) {
1811     output.append("\n");
1812   }
1813   output.append("LAST ");
1814   output+=scale->text();
1815   //output.append("\n");
1816   
1817   /* jk 06/13/2008 added variabled to reflect tissue variabilit in snark14*/
1818   output.append("   ");
1819   output+=seedvar->text();
1820   output.append("   ");
1821   output+=var->text();
1822
1823   return output;
1824 }   // --createwindow::getOutput3()
1825
1826 /** Returns a string for set 4 of CREATE input sequence
1827 @param void
1828 @return phantom generation
1829 @author Bruno M. Carvalho
1830 @version 1.0 */
1831 QString createwindow::getOutput4()
1832 {
1833   QString output;
1834
1835   output.sprintf("PHANTOM ");
1836   if(phantomaveragebutton->isChecked()) {
1837     output.append("AVERAGE ");
1838     output+=nave1->text();
1839     output.append("\n");
1840     output+=nelem->text();
1841     output.append(" ");
1842     output+=pixelsize->text();
1843   } 
1844   //output.append("\n");
1845   return output;
1846 }  // --createwindow::getOutput4()
1847
1848 /** Returns a string for set 5 of CREATE input sequence
1849 @param void
1850 @return raysum generation
1851 @author Bruno M. Carvalho
1852 @version 1.0 */
1853 QString createwindow::getOutput5()
1854 {
1855   QString output;
1856
1857   output.sprintf("RAYSUM ");
1858   if(raysumaveragebutton->isChecked()) {
1859     output.append("AVERAGE ");
1860     output+=nave2->text();
1861     output.append("\n");
1862     output+=naper1->text();
1863     output.append(" ");
1864     output+=naper2->text();
1865     output.append(" ");
1866     output+=naper3->text();
1867     output.append(" ");
1868     output+=naper4->text();
1869     output.append(" ");
1870     output+=naper5->text();
1871     output.append(" ");
1872     output+=naper6->text();
1873     output.append(" ");
1874     output+=naper7->text();
1875     output.append(" ");
1876     output+=naper8->text();
1877     output.append(" ");
1878     output+=naper9->text();
1879     output.append(" ");
1880     output+=naper10->text();
1881     output.append(" ");
1882     output+=naper11->text();
1883     output.append(" ");
1884     output+=naper12->text();
1885     output.append(" ");
1886     output+=naper13->text();
1887     output.append(" ");
1888   } 
1889   //output.append("\n");
1890   return output;
1891 }  // --createwindow::getOutput5()
1892
1893 /** Returns a string for set 6 of CREATE input sequence
1894 @param void
1895 @return projection geometry specification
1896 @author Bruno M. Carvalho
1897 @version 1.0 */
1898 QString createwindow::getOutput6()
1899 {
1900   QString output;
1901
1902   if(israysumaveragepresent) {
1903     output.sprintf("GEOMETRY\n");
1904     if(parallelbutton->isChecked()) {
1905       output.append("PARALLEL ");
1906       if(uniformbutton->isChecked()) {
1907         output.append("UNIFORM ");
1908       } else {
1909         if(variablebutton->isChecked()) {
1910           output.append("VARIABLE ");
1911         }
1912       }
1913       if(stripbutton->isChecked()) {
1914         output.append("STRIP ");
1915       } else {
1916         if(linebutton->isChecked()) {
1917           output.append("LINE ");
1918         }
1919       }
1920     } else {
1921       if(divergentbutton->isChecked()) {
1922         output.append("DIVERGENT ");
1923         if(arcbutton->isChecked()) {
1924           output.append("ARC ");
1925         } else {
1926           if(tangentbutton->isChecked()) {
1927             output.append("TANGENT ");
1928           }
1929         }
1930         output+=sourcetoorigin->text();
1931         output.append(" ");
1932         output+=sourcetodetector->text();
1933       } else {
1934         if(linogrambutton->isChecked()) {
1935           output.append("LINOGRAM ");
1936           return output;
1937         }
1938       }
1939     }
1940     
1941     output.append("\n");
1942     output.append("RAYS ");
1943     if(userbutton->isChecked()) {
1944       output.append("USER ");
1945       output+=userrays->text();
1946       output.append(" ");
1947     } else {
1948       if(programbutton->isChecked()) {
1949         output.append("PROGRAM ");
1950         output+=raysumsnelem->text();
1951         output.append(" ");
1952         output+=raysumspixelsize->text();
1953         output.append(" ");
1954       }
1955     }
1956     output+=detectorspacing->text();
1957     output.append("\n");
1958     output.append("ANGLES ");
1959     output+=prjnum->text();
1960     output.append(" ");
1961     //  if(linobutton->isChecked()) {
1962     //    output.append("LINO ");
1963     //output.append("\n");
1964     //  }
1965     //  else
1966     if(equalspacingbutton->isChecked()) {
1967       output.append("EQUAL SPACING ");
1968       output.append("\n");
1969       output+=firstangle->text();
1970       output.append(" ");
1971       output+=lastangle->text();
1972       //output.append("\n");
1973     } else {
1974       output.append("\n");
1975       output+=angles->text();
1976       //output.append("\n");
1977     }
1978   }
1979   return output;
1980 } // --createwindow::getOutput6()
1981
1982
1983 /** Returns a string for set 7 of CREATE input sequence
1984 @param void
1985 @return measurement statistics
1986 @author Bruno M. Carvalho
1987 @version 1.0 */
1988 QString createwindow::getOutput7()
1989 {
1990   QString output,t;
1991
1992   if(israysumaveragepresent) {
1993   output.sprintf("MEASUREMENT ");
1994   if(perfectbutton->isChecked()) {
1995     output.append("PERFECT ");
1996     output.append("\n");
1997   }
1998   else
1999     if(noisybutton->isChecked()) {
2000       output.append("NOISY ");
2001       output.append("\n");
2002       if(quantumbutton->isChecked()) {
2003         output.append("QUANTUM ");
2004         output+=quanmn->text();
2005         output.append(" ");
2006         output+=quancm->text();
2007         output.append(" ");
2008         t.sprintf("CALIBRATION %d \n",quanin->currentItem()+1);
2009         output.append(t);
2010         output.append("SEED ");
2011         output+=seed->text();
2012         output.append("\n");
2013       }
2014       else 
2015         if(scatterbutton->isChecked()) {
2016           output.append("SCATTER ");
2017           output+=sctnpk->text();
2018           output.append(" ");
2019           output+=sctnwd->text();
2020           output.append("\n");
2021         }
2022         else 
2023           if(additivebutton->isChecked()) {
2024             output.append("ADDITIVE ");
2025             output+=addnmn->text();
2026             output.append(" ");
2027             output+=addnsd->text();
2028             output.append("\n");
2029             output.append("SEED ");
2030             output+=seed->text();
2031             output.append("\n");
2032           }
2033           else 
2034             if(multiplicativebutton->isChecked()) {
2035               output.append("MULTIPLICATIVE ");
2036               output+=multnmn->text();
2037               output.append(" ");
2038               output+=multnsd->text();
2039               output.append("\n");
2040               output.append("SEED ");
2041               output+=seed->text();
2042               output.append("\n");
2043             }
2044     }
2045   output.append("BACKGROUND ");
2046   output+=backgr1->text();
2047   output.append(" ");
2048   if(polychromaticbutton->isChecked()) {
2049     output+=backgr2->text();
2050     output.append(" ");
2051     output+=backgr3->text();
2052     output.append(" ");
2053     output+=backgr4->text();
2054     output.append(" ");
2055     output+=backgr5->text();
2056     output.append(" ");
2057     output+=backgr6->text();
2058     output.append(" ");
2059     output+=backgr7->text();
2060   }
2061   }
2062   //output.append("\n");
2063   return output;
2064 } // --createwindow::getOutput7()
2065
2066 /** Returns a string for set 8 of CREATE input sequence
2067 @param void
2068 @return run descriptors
2069 @author Bruno M. Carvalho
2070 @version 1.0 */
2071 QString createwindow::getOutput8()
2072 {
2073   QString output;
2074
2075   if(israysumaveragepresent) {
2076   output.sprintf("RUN ");  
2077   //jk 6/14/2008 removed since snark14 has no file12 anytmore
2078   /*if(savebutton->isChecked()) {
2079     output.append("SAVE ");
2080   }
2081   else
2082     if(modifybutton->isChecked()) {
2083       output.append("MODIFY ");
2084     }
2085   */
2086   }
2087   //output.append("\n");
2088   return output;
2089 }  // --createwindow::getOutput8()
2090
2091 void createwindow::checkValues()
2092 {
2093   int f=0,en,ne,enes[7],percs[7],sump,i,nv1,nlm,nv2,sv;
2094   int np1,np2,np3,np4,np5,np6,np7,np8,np9,np10,np11,np12,np13,npsum=0;
2095   int usr,pnlm,pn,sed;
2096   float sca,pxls,stoo,stod,ppxls,decs,fa,la,qm,qc,sw,sp,am,as,mm,ms,vrb;
2097   float b1,b2,b3,b4,b5,b6,b7;
2098
2099   /* Consistency check for header/spectrum section */
2100
2101   if(monochromaticbutton->isChecked()) {
2102     en=strtoi((const char *)energy->text());
2103     if(errnum) 
2104       f=1;
2105     else 
2106       if(en<1)
2107         f=5;
2108   }
2109   if(polychromaticbutton->isChecked()) {
2110     ne=strtoi((const char *)nergy->text());
2111     if(errnum) 
2112       f=2;
2113     else
2114       if(ne<1 || ne>7)
2115         f=6;
2116       else {
2117         switch(ne) {
2118         case 7: enes[6]=strtoi((const char *)energy7->text());
2119                 if(errnum) 
2120                   f=3;
2121                 else
2122                   if(enes[6]<1)
2123                     f=5;
2124                 percs[6]=strtoi((const char *)percent7->text());
2125                 if(errnum) 
2126                   f=4;
2127                 else
2128                   if(percs[6]<0)
2129                     f=7;
2130         case 6: enes[5]=strtoi((const char *)energy6->text());
2131                 if(errnum)
2132                   f=3;
2133                 else
2134                   if(enes[5]<1)
2135                     f=5;
2136                 percs[5]=strtoi((const char *)percent6->text());
2137                 if(errnum) 
2138                   f=4;
2139                 else
2140                   if(percs[5]<0)
2141                     f=7;
2142         case 5: enes[4]=strtoi((const char *)energy5->text());
2143                 if(errnum) 
2144                   f=3;
2145                 else
2146                   if(enes[4]<1)
2147                     f=5;
2148                 percs[4]=strtoi((const char *)percent5->text());
2149                 if(errnum) 
2150                   f=4;
2151                 else
2152                   if(percs[4]<0)
2153                     f=7;
2154         case 4: enes[3]=strtoi((const char *)energy4->text());
2155                 if(errnum) 
2156                   f=3;
2157                 else
2158                   if(enes[3]<1)
2159                     f=5;
2160                 percs[3]=strtoi((const char *)percent4->text());
2161                 if(errnum) 
2162                   f=4;
2163                 else
2164                   if(percs[3]<0)
2165                     f=7;
2166         case 3: enes[2]=strtoi((const char *)energy3->text());
2167                 if(errnum) 
2168                   f=3;
2169                 else
2170                   if(enes[2]<1)
2171                     f=5;
2172                 percs[2]=strtoi((const char *)percent3->text());
2173                 if(errnum) 
2174                   f=4;
2175                 else
2176                   if(percs[2]<0)
2177                     f=7;
2178         case 2: enes[1]=strtoi((const char *)energy2->text());
2179                 if(errnum) 
2180                   f=3;
2181                 else
2182                   if(enes[1]<1)
2183                     f=5;
2184                 percs[1]=strtoi((const char *)percent2->text());
2185                 if(errnum) 
2186                   f=4;
2187                 else
2188                   if(percs[1]<0)
2189                     f=7;
2190         case 1: enes[0]=strtoi((const char *)energy1->text());
2191                 if(errnum) 
2192                   f=3;
2193                 else
2194                   if(enes[0]<1)
2195                     f=5;
2196                 percs[0]=strtoi((const char *)percent1->text());
2197                 if(errnum) 
2198                   f=4;
2199                 else
2200                   if(percs[0]<0)
2201                     f=7;
2202       }
2203       sump=0;
2204       for(i=0;i<ne;i++)
2205         sump+=percs[i];
2206       if(sump!=100)
2207         f=8;
2208     }
2209   }
2210
2211   /* Consistency check for objects section */
2212   /* falta object descriptions */
2213   sca=strtof((const char *)scale->text().lower());
2214   if(errnum) 
2215     f=9;
2216   if(!(sca>0))
2217     f=10;
2218   /* jk 06/14/2008 added check for LAST line*/  
2219   sv = strtoi((const char *)seedvar->text());
2220   if(errnum)
2221   {
2222     vrb = strtof((const char *)var->text());
2223     if(errnum)
2224       ; /* this is fine, both seed and var are not there so no variability*/
2225     else
2226       f=55; /*seed has to have a value if var has a value*/
2227   }
2228   else
2229   {
2230     vrb  = strtof((const char *)var->text());
2231     if(errnum)
2232       f=57; /*var has to have a value if seed has a value*/
2233     else
2234       ; /* this is fine, both seed and var have a value*/
2235   }
2236         /* RD 09/21/2012 added check for SEED Bug 274*/  
2237         if(sv>=1000000000)
2238                 f=56;
2239
2240   /* Consistency check for phantom/raysum section */
2241
2242   if(phantomaveragebutton->isChecked()) {
2243     nv1=strtoi((const char *)nave1->text());
2244     if(errnum) 
2245       f=11;
2246     if(nv1<1 || !(nv1%2))
2247       f=16;
2248     nlm=strtoi((const char *)nelem->text());
2249     if(errnum) 
2250       f=12;
2251     if(nlm<1 || !(nlm%2))
2252       f=17;
2253     pxls=strtof((const char *)pixelsize->text().lower());
2254     if(errnum) 
2255       f=13;
2256     if(!(pxls>0))
2257       f=19;
2258   }
2259   if(raysumaveragebutton->isChecked()) {
2260     nv2=strtoi((const char *)nave2->text());
2261     if(errnum) 
2262       f=14;
2263     if(nv2<1 || !(nv2%2) || nv2>13)
2264       f=18;
2265     else {
2266       switch(nv2) {
2267       case 13: np13=strtoi((const char *)naper13->text());
2268                if(errnum) 
2269                  f=15;
2270                np12=strtoi((const char *)naper12->text());
2271                if(errnum) 
2272                  f=15;
2273                if(np12<0 || np13<0)
2274                  f=20;
2275                npsum+=np13+np12;
2276       case 11: np11=strtoi((const char *)naper11->text());
2277                if(errnum) 
2278                  f=15;
2279                np10=strtoi((const char *)naper10->text());
2280                if(errnum) 
2281                  f=15;
2282                if(np10<0 || np11<0)
2283                  f=20;
2284                npsum+=np11+np10;
2285       case 9:  np9=strtoi((const char *)naper9->text());
2286                if(errnum) 
2287                  f=15;
2288                np8=strtoi((const char *)naper8->text());
2289                if(errnum) 
2290                  f=15;
2291                if(np8<0 || np9<0)
2292                  f=20;
2293                npsum+=np9+np8;
2294       case 7:  np7=strtoi((const char *)naper7->text());
2295                if(errnum) 
2296                  f=15; 
2297                np6=strtoi((const char *)naper6->text());
2298                if(errnum) 
2299                  f=15;
2300                if(np6<0 || np7<0)
2301                  f=20;
2302                npsum+=np7+np6;
2303       case 5:  np5=strtoi((const char *)naper5->text());
2304                if(errnum) 
2305                  f=15;
2306                np4=strtoi((const char *)naper4->text());
2307                if(errnum) 
2308                  f=15;
2309                if(np4<0 || np5<0)
2310                  f=20;
2311                npsum+=np5+np4;
2312       case 3:  np3=strtoi((const char *)naper3->text());
2313                if(errnum) 
2314                  f=15;
2315                np2=strtoi((const char *)naper2->text());
2316                if(errnum) 
2317                  f=15;
2318                if(np2<0 || np3<0)
2319                  f=20;
2320                npsum+=np3+np2;
2321       case 1:  np1=strtoi((const char *)naper1->text());
2322                if(errnum) 
2323                  f=15;
2324                if(np1<0)
2325                  f=20;
2326                npsum+=np1;
2327       }
2328       if(!npsum)
2329         f=20;
2330     }
2331   
2332
2333   /* Consistency check for geometry/raysums section */
2334     // if linogram, don't check anything in this section!
2335     if (! (linogrambutton->isChecked() ) ) { 
2336       if(divergentbutton->isChecked()) {
2337         stoo=strtof((const char *)sourcetoorigin->text().lower());
2338         if(errnum) 
2339           f=21;
2340         stod=strtof((const char *)sourcetodetector->text().lower());
2341         if(errnum) 
2342           f=22;
2343         if(stoo<0)
2344           f=30;
2345         if(stod<0)
2346           f=31;
2347       }
2348       if(userbutton->isChecked()) {
2349         usr=strtoi((const char *)userrays->text());
2350         if(errnum) 
2351           f=23;
2352         if(usr<1 || !(usr%2))
2353           f=34;
2354       }
2355       if(programbutton->isChecked()) {
2356         pnlm=strtoi((const char *)raysumsnelem->text());
2357         if(errnum) 
2358           f=24;
2359         if(pnlm<1 || !(pnlm%2))
2360           f=35;
2361         ppxls=strtof((const char *)raysumspixelsize->text().lower());
2362         if(errnum) 
2363           f=25;
2364         if(ppxls<=0)
2365           f=32;
2366         else 
2367           if(divergentbutton->isChecked() && pnlm*ppxls*M_SQRT1_2 >= stoo)
2368             f=37;
2369       }
2370       decs=strtof((const char *)detectorspacing->text().lower());
2371       if(errnum) 
2372         f=26;
2373       if(decs<0)
2374         f=33;
2375       if(divergentbutton->isChecked() && userbutton->isChecked()) 
2376         if((usr-1)*decs>=stod*M_PI)
2377           f=38;
2378       pn=strtoi((const char *)prjnum->text());
2379       if(errnum) 
2380         f=27;
2381       if(pn<1)
2382         f=36;
2383   //  if(linobutton->isChecked())
2384   //    if(pn<2)
2385   //      f=36;
2386       if(equalspacingbutton->isChecked()) {
2387         fa=strtof((const char *)firstangle->text().lower());
2388         if(errnum) 
2389           f=28;
2390         la=strtof((const char *)lastangle->text().lower());
2391         if(errnum) 
2392           f=29;
2393         if(pn<2)
2394           f=36;
2395       }
2396       if(nonebutton->isChecked()) {
2397         QString angst = angles->text();
2398         //Splits angst into strings wherever the regular expression sep occurs, and return the list of those strings.
2399         // If allowEmptyEntries is TRUE, a null string is inserted in the list wherever the separator matches twice without intervening text.
2400         QRegExp sep("\\s+");
2401         // whitespace.  the first '\' is for escaping '\'
2402         QStringList angleStringList = QStringList::split(sep, angst);
2403         int angleCount = 0;
2404         bool ok;
2405         for ( QStringList::Iterator it = angleStringList.begin(); 
2406               it != angleStringList.end(); ++it ) {
2407           // check (*it) is really a float
2408           // double QString::toDouble ( bool * ok = 0 ) const
2409           ok = true;
2410           (*it).toDouble(&ok);
2411           if(!ok) f=39;
2412           angleCount++;
2413         }
2414         // pn is already numerified value in prjnum field
2415         if(angleCount != pn) f=39;
2416       } // --if nonebutton checked
2417     } // --if linogrambutton not checked
2418
2419   /* Consistency check for measurement/run section */
2420
2421   if(noisybutton->isChecked()) {
2422     if(scatterbutton->isChecked()) {
2423       sp=strtof((const char *)sctnpk->text().lower());
2424       if(errnum) 
2425         f=42;
2426       if(sp<=0)
2427         f=51;
2428       sw=strtof((const char *)sctnwd->text().lower());
2429       if(errnum) 
2430         f=43;
2431       if(sw<decs)
2432         f=53;
2433     }
2434     else {
2435       if(quantumbutton->isChecked() || additivebutton->isChecked() || multiplicativebutton->isChecked()) {
2436         sed=strtoi((const char *)seed->text());
2437         if(errnum) 
2438           f=48;
2439       }
2440       if(quantumbutton->isChecked()) {
2441         qm=strtof((const char *)quanmn->text().lower());
2442         if(errnum) 
2443           f=40;
2444         qc=strtof((const char *)quancm->text().lower());
2445         if(errnum) 
2446           f=41;
2447         if(qc<=0)
2448           f=50;
2449       }
2450       if(additivebutton->isChecked()) {
2451         am=strtof((const char *)addnmn->text().lower());
2452         if(errnum) 
2453           f=44;
2454         as=strtof((const char *)addnsd->text().lower());
2455         if(errnum) 
2456           f=45;
2457       }
2458       if(multiplicativebutton->isChecked()) {
2459         mm=strtof((const char *)multnmn->text().lower());
2460         if(errnum) 
2461           f=46;
2462         if(mm==0)
2463           f=52;
2464         ms=strtof((const char *)multnsd->text().lower());
2465         if(errnum) 
2466           f=47;
2467       }
2468     }
2469     if(!quantumbutton->isChecked() && !scatterbutton->isChecked() && !additivebutton->isChecked() && !multiplicativebutton->isChecked())
2470       f=54;
2471   }
2472   switch(ne) {
2473   case 7: b7=strtof((const char *)backgr7->text().lower());
2474           if(errnum) 
2475             f=49;
2476   case 6: b6=strtof((const char *)backgr6->text().lower());
2477           if(errnum) 
2478             f=49;
2479   case 5: b5=strtof((const char *)backgr5->text().lower());
2480           if(errnum) 
2481             f=49;
2482   case 4: b4=strtof((const char *)backgr4->text().lower());
2483           if(errnum) 
2484             f=49;
2485   case 3: b3=strtof((const char *)backgr3->text().lower());
2486           if(errnum) 
2487             f=49;
2488   case 2: b2=strtof((const char *)backgr2->text().lower());
2489           if(errnum) 
2490             f=49;
2491   case 1: b1=strtof((const char *)backgr1->text().lower());
2492           if(errnum) 
2493             f=49;
2494   }
2495   }
2496
2497   switch(f) {
2498   case 0: accept();
2499     break;
2500   case 1: QMessageBox::information(this,"SnarkInput","Error!\n"
2501                                    "Invalid energy format.");
2502     tabwidget1->setCurrentPage(0);
2503     energy->setFocus();
2504     break;
2505   case 2: QMessageBox::information(this,"SnarkInput","Error!\n"
2506                                    "Invalid nergy format.");
2507     tabwidget1->setCurrentPage(0);
2508     nergy->setFocus();
2509     break;
2510   case 3: QMessageBox::information(this,"SnarkInput","Error!\n"
2511                                    "Invalid energy(i) format.");
2512     tabwidget1->setCurrentPage(0);
2513     energy1->setFocus();
2514     break;
2515   case 4: QMessageBox::information(this,"SnarkInput","Error!\n"
2516                                    "Invalid percent(i) format.");
2517     tabwidget1->setCurrentPage(0);
2518     percent1->setFocus();
2519     break;
2520   case 5: QMessageBox::information(this,"SnarkInput","Error!\n"
2521                                    "energy must be greater than 0.");
2522     tabwidget1->setCurrentPage(0);
2523     energy->setFocus();
2524     break;
2525   case 6: QMessageBox::information(this,"SnarkInput","Error!\n"
2526                                    "nergy must be greater or equal to 1 and less or equal to 7.");
2527     tabwidget1->setCurrentPage(0);
2528     nergy->setFocus();
2529     break;
2530   case 7: QMessageBox::information(this,"SnarkInput","Error!\n"
2531                                    "percent(i) must be nonnegative.");
2532     tabwidget1->setCurrentPage(0);
2533     percent1->setFocus();
2534     break;
2535   case 8: QMessageBox::information(this,"SnarkInput","Error!\n"
2536                                    "percent(1) ... percent(nergy) must add to 100.");
2537     tabwidget1->setCurrentPage(0);
2538     percent1->setFocus();
2539     break;
2540   case 9: QMessageBox::information(this,"SnarkInput","Error!\n"
2541                                    "Invalid scale format.");
2542     tabwidget1->setCurrentPage(1);
2543     scale->setFocus();
2544     break;
2545   case 10: QMessageBox::information(this,"SnarkInput","Error!\n"
2546                                    "scale must be positive.");
2547     tabwidget1->setCurrentPage(1);
2548     scale->setFocus();
2549     break;
2550   case 11: QMessageBox::information(this,"SnarkInput","Error!\n"
2551                                    "Invalid nave1 format.");
2552     tabwidget1->setCurrentPage(2);
2553     nave1->setFocus();
2554     break;
2555   case 12: QMessageBox::information(this,"SnarkInput","Error!\n"
2556                                    "Invalid nelem format.");
2557     tabwidget1->setCurrentPage(2);
2558     nelem->setFocus();
2559     break;
2560   case 13: QMessageBox::information(this,"SnarkInput","Error!\n"
2561                                    "Invalid pixel_size format.");
2562     tabwidget1->setCurrentPage(2);
2563     pixelsize->setFocus();
2564     break;
2565   case 14: QMessageBox::information(this,"SnarkInput","Error!\n"
2566                                    "Invalid nave2 format.");
2567     tabwidget1->setCurrentPage(2);
2568     nave2->setFocus();
2569     break;
2570   case 15: QMessageBox::information(this,"SnarkInput","Error!\n"
2571                                    "Invalid naper(i) format.");
2572     tabwidget1->setCurrentPage(2);
2573     naper1->setFocus();
2574     break;
2575   case 16: QMessageBox::information(this,"SnarkInput","Error!\n"
2576                                    "nave1 must be positive and odd.");
2577     tabwidget1->setCurrentPage(2);
2578     nave1->setFocus();
2579     break;
2580   case 17: QMessageBox::information(this,"SnarkInput","Error!\n"
2581                                    "nelem must be positive and odd.");
2582     tabwidget1->setCurrentPage(2);
2583     nelem->setFocus();
2584     break;
2585   case 18: QMessageBox::information(this,"SnarkInput","Error!\n"
2586                                    "nave2 must be positive, odd and smaller than 14.");
2587     tabwidget1->setCurrentPage(2);
2588     nave2->setFocus();
2589     break;
2590   case 19: QMessageBox::information(this,"SnarkInput","Error!\n"
2591                                    "pixel_size must be positive.");
2592     tabwidget1->setCurrentPage(2);
2593     pixelsize->setFocus();
2594     break;
2595   case 20: QMessageBox::information(this,"SnarkInput","Error!\n"
2596                                    "naper(i) must be nonnegative and the\n"
2597                                    "sum of naper(i) must be positive.");
2598     tabwidget1->setCurrentPage(2);
2599     naper1->setFocus();
2600     break;
2601   case 21: QMessageBox::information(this,"SnarkInput","Error!\n"
2602                                    "Invalid source_to_origin format.");
2603     tabwidget1->setCurrentPage(3);
2604     sourcetoorigin->setFocus();
2605     break;
2606   case 22: QMessageBox::information(this,"SnarkInput","Error!\n"
2607                                    "Invalid source_to_detector format.");
2608     tabwidget1->setCurrentPage(3);
2609     sourcetodetector->setFocus();
2610     break;
2611   case 23: QMessageBox::information(this,"SnarkInput","Error!\n"
2612                                    "Invalid user_rays format.");
2613     tabwidget1->setCurrentPage(3);
2614     userrays->setFocus();
2615     break;
2616   case 24: QMessageBox::information(this,"SnarkInput","Error!\n"
2617                                    "Invalid nelem format.");
2618     tabwidget1->setCurrentPage(3);
2619     raysumsnelem->setFocus();
2620     break;
2621   case 25: QMessageBox::information(this,"SnarkInput","Error!\n"
2622                                    "Invalid pixel_size format.");
2623     tabwidget1->setCurrentPage(3);
2624     raysumspixelsize->setFocus();
2625     break;
2626   case 26: QMessageBox::information(this,"SnarkInput","Error!\n"
2627                                    "Invalid detector_spacing format.");
2628     tabwidget1->setCurrentPage(3);
2629     detectorspacing->setFocus();
2630     break;
2631   case 27: QMessageBox::information(this,"SnarkInput","Error!\n"
2632                                    "Invalid prjnum format.");
2633     tabwidget1->setCurrentPage(3);
2634     prjnum->setFocus();
2635     break;
2636   case 28: QMessageBox::information(this,"SnarkInput","Error!\n"
2637                                    "Invalid first_angle format.");
2638     tabwidget1->setCurrentPage(3);
2639     firstangle->setFocus();
2640     break;
2641   case 29: QMessageBox::information(this,"SnarkInput","Error!\n"
2642                                    "Invalid last_angle format.");
2643     tabwidget1->setCurrentPage(3);
2644     lastangle->setFocus();
2645     break;
2646   case 30: QMessageBox::information(this,"SnarkInput","Error!\n"
2647                                    "source_to_origin must be positive.");
2648     tabwidget1->setCurrentPage(3);
2649     sourcetoorigin->setFocus();
2650     break;
2651   case 31: QMessageBox::information(this,"SnarkInput","Error!\n"
2652                                    "source_to_detector must be positive.");
2653     tabwidget1->setCurrentPage(3);
2654     sourcetodetector->setFocus();
2655     break;
2656   case 32: QMessageBox::information(this,"SnarkInput","Error!\n"
2657                                    "pixel_size must be positive.");
2658     tabwidget1->setCurrentPage(3);
2659     raysumspixelsize->setFocus();
2660     break;
2661   case 33: QMessageBox::information(this,"SnarkInput","Error!\n"
2662                                    "detector_spacing must be equal or greater than 0.");
2663     tabwidget1->setCurrentPage(3);
2664     detectorspacing->setFocus();
2665     break;
2666   case 34: QMessageBox::information(this,"SnarkInput","Error!\n"
2667                                    "user_rays must be positive and odd.");
2668     tabwidget1->setCurrentPage(3);
2669     userrays->setFocus();
2670     break;
2671   case 35: QMessageBox::information(this,"SnarkInput","Error!\n"
2672                                    "nelem must be positive and odd.");
2673     tabwidget1->setCurrentPage(3);
2674     raysumsnelem->setFocus();
2675     break;
2676   case 36: QMessageBox::information(this,"SnarkInput","Error!\n"
2677                                    "projnum must be positive, and greater than 1\n"
2678                                    "if LINO or EQUAL_SPACING is selected.");
2679     tabwidget1->setCurrentPage(3);
2680     prjnum->setFocus();
2681     break;
2682   case 37: QMessageBox::information(this,"SnarkInput","Error!\n"
2683                                    "nelem * pixel_size/sqrt(2) must be smaller than source_to_detector.");
2684     tabwidget1->setCurrentPage(3);
2685     raysumsnelem->setFocus();
2686     break;
2687   case 38: QMessageBox::information(this,"SnarkInput","Error!\n"
2688                                    "(user_rays-1) * detector_spacing must be smaller than source_to_detector * PI.");
2689     tabwidget1->setCurrentPage(3);
2690     detectorspacing->setFocus();
2691     break;
2692     // case 39 is never reached, since this was only half implemented.
2693   case 39: QMessageBox::information(this,"SnarkInput","Error!\n"
2694                                    "number of angles must be equal to prjnum and each angle must be a floating-point number.");
2695     tabwidget1->setCurrentPage(3);
2696     angles->setFocus();
2697     break;
2698   case 40: QMessageBox::information(this,"SnarkInput","Error!\n"
2699                                    "Invalid quanmn format.");
2700     tabwidget1->setCurrentPage(4);
2701     quanmn->setFocus();
2702     break;
2703   case 41: QMessageBox::information(this,"SnarkInput","Error!\n"
2704                                    "Invalid quancm format.");
2705     tabwidget1->setCurrentPage(4);
2706     quancm->setFocus();
2707     break;
2708   case 42: QMessageBox::information(this,"SnarkInput","Error!\n"
2709                                    "Invalid sctnpk format.");
2710     tabwidget1->setCurrentPage(4);
2711     sctnpk->setFocus();
2712     break;
2713   case 43: QMessageBox::information(this,"SnarkInput","Error!\n"
2714                                    "Invalid sctnwd format.");
2715     tabwidget1->setCurrentPage(4);
2716     sctnwd->setFocus();
2717     break;
2718   case 44: QMessageBox::information(this,"SnarkInput","Error!\n"
2719                                    "Invalid addnmn format.");
2720     tabwidget1->setCurrentPage(4);
2721     addnmn->setFocus();
2722     break;
2723   case 45: QMessageBox::information(this,"SnarkInput","Error!\n"
2724                                    "Invalid addnsd format.");
2725     tabwidget1->setCurrentPage(4);
2726     addnsd->setFocus();
2727     break;
2728   case 46: QMessageBox::information(this,"SnarkInput","Error!\n"
2729                                    "Invalid multnmn format.");
2730     tabwidget1->setCurrentPage(4);
2731     multnmn->setFocus();
2732     break;
2733   case 47: QMessageBox::information(this,"SnarkInput","Error!\n"
2734                                    "Invalid multnsd format.");
2735     tabwidget1->setCurrentPage(4);
2736     multnsd->setFocus();
2737     break;
2738   case 48: QMessageBox::information(this,"SnarkInput","Error!\n"
2739                                    "Invalid seed format.");
2740     tabwidget1->setCurrentPage(4);
2741     seed->setFocus();
2742     break;
2743   case 49: QMessageBox::information(this,"SnarkInput","Error!\n"
2744                                    "Invalid backgr(i) format.");
2745     tabwidget1->setCurrentPage(4);
2746     backgr1->setFocus();
2747     break;
2748   case 50: QMessageBox::information(this,"SnarkInput","Error!\n"
2749                                    "quancm must be positive.");
2750     tabwidget1->setCurrentPage(4);
2751     quancm->setFocus();
2752     break;
2753   case 51: QMessageBox::information(this,"SnarkInput","Error!\n"
2754                                    "sctnpk must be positive");
2755     tabwidget1->setCurrentPage(4);
2756     sctnpk->setFocus();
2757     break;
2758   case 52: QMessageBox::information(this,"SnarkInput","Error!\n"
2759                                    "multnmn must be nonzero.");
2760     tabwidget1->setCurrentPage(4);
2761     multnmn->setFocus();
2762     break;
2763   case 53: QMessageBox::information(this,"SnarkInput","Error!\n"
2764                                    "sctnwd must be greater than detector_spacing.");
2765     tabwidget1->setCurrentPage(4);
2766     sctnwd->setFocus();
2767     break;
2768   case 54: QMessageBox::information(this,"SnarkInput","Error!\n"
2769                                    "if NOISY is selected at least one of the options\n"                                   
2770                                    " QUANTUM, SCATTER, ADDITIVE OR MULTIPLICATIVE must be selected too.");
2771     tabwidget1->setCurrentPage(4);
2772     quantumbutton->setFocus();
2773     break;
2774   /* jk 06/14/2008 added check for LAST line*/ 
2775   /* RD 09/21/2012 added check for SEED and VAR separately */ // Bug 274
2776   case 55: QMessageBox::information(this,"SnarkInput","Error!\n"
2777                                    "Please enter a valid value for SEED");
2778     tabwidget1->setCurrentPage(1);
2779     seed->setFocus();
2780     break;
2781   /* RD 09/21/2012 added check for SEED*/ // Bug 274
2782   case 56: QMessageBox::information(this,"SnarkInput","Error!\n"
2783                                                                                 "The length of SEED needs to be between \n"
2784                                                                                 "one and nine digits");
2785         tabwidget1->setCurrentPage(1);
2786         seed->setFocus();
2787         break;
2788   /* RD 09/21/2012 added check for SEED and VAR separately */ // Bug 274
2789   case 57: QMessageBox::information(this,"SnarkInput","Error!\n"
2790                                                                                 "Please enter a valid value for VAR");
2791     tabwidget1->setCurrentPage(1);
2792         seed->setFocus();
2793         break;
2794                   
2795                   
2796   }
2797 }
2798