1
/*******************************************************************************
3
* mcf_BrowseUtil2.c -- Utilities and auxillary Panels for NTuple Browser. *
4
* Gives a short listing of the characteristic of the file header *
6
* Copyright (c) 1995, 1996 Universities Research Association, Inc. *
7
* All rights reserved. *
9
*******************************************************************************/
12
#include <sys/param.h>
13
#include <rpc/types.h>
14
#include <sys/types.h>
18
#include <X11/Intrinsic.h>
19
#include <X11/Shell.h>
21
#include <Xm/DialogS.h>
22
#include <Xm/SelectioB.h>
23
#include <Xm/RowColumn.h>
24
#include <Xm/ToggleB.h>
28
#include <Xm/LabelG.h>
30
#include <Xm/PushBG.h>
35
#include "mcf_nTupleDescript.h"
37
#include "mcfio_Dict.h"
38
#include "mcfio_Util1.h"
39
#include "mcfio_Direct.h"
40
#include "mcf_nTupleBuild.h"
41
#include "mcf_NTuIOUtils.h"
42
#include "mcf_BrowseUtil1.h"
43
#include "mcf_BrowseMainPanel.h"
44
#include "mcf_BrowseUtil2.h"
46
#include "histoscope.h"
49
extern nTuDDL **NTuDDLList;
50
extern int NumOfNTuples;
51
extern nTuBrowserInfo *CurrentNTupleBrowserSelected;
52
extern Widget McfioHsResetBtnW; /* To reset all existing histograms */
54
int HistoIsBrowserNtuInit;
55
/* A flag to state if HistoScope is set */
57
static Widget DumpHeadTextW = NULL;
58
/* The text widget to view the header content */
59
static Widget DumpHeadFormW = NULL;
60
/* The form widget to view the header content */
61
static Widget DumpHeadShellW = NULL;
62
/* The shell widget to view the header content */
63
static struct timeval TimeSetTimeOut = {0, 0};
64
static int TimeOutTime = 0;
65
static XtIntervalId TimeOutID = 0;
68
* Widgets and stuff for 1D histogram utilities
70
static Widget OneDHistFormW = NULL;
71
/* The form widget associated with the panel for 1D histo utilities */
72
static Widget OneDHistShellW = NULL;
73
/* The form widget associated with the panel for 1D histo utilities */
74
static Widget OneDHistHistoListW = NULL;
75
/* A list to manipulate to manipulate these histograms */
76
static Widget OneDHistNtupleCategoryLabelW;
77
/* To display the Ntuple Category Label */
78
static Widget OneDHistNtupleTitleLabelW;
79
/* To display the Ntuple Title Label */
80
static Widget OneDHistVariableListW = NULL;
81
/* The list of variable corresponding to the selected Ntuple */
82
static Widget OneDHistCreateW = NULL;
83
/* The button to create a 1D histogram */
84
static Widget OneDHistModifyW = NULL; /* To modify a 1D histogram */
85
static Widget OneDHistDeleteW = NULL; /* To create a 1D histogram */
86
static Widget OneDHistTitleW = NULL; /* The title field for OneDhist */
87
static Widget OneDHistNumBinsW = NULL; /* The title field for OneDhist */
88
static Widget OneDHistLowBinW = NULL; /* The title field for OneDhist */
89
static Widget OneDHistHighBinW = NULL; /* The title field for OneDhist */
90
static Widget OneDHistMultW = NULL; /* The title field for OneDhist */
91
static int FirstOneDHistogram;
92
static int OneDHistNumberListed = 0;
93
/* The number of 1D histogram managed by this panel */
95
static int OneDHistSizeOfList = 0;
97
static int *OneDHistListedIDs = NULL;
98
/* The hs ids of the listed histograms */
99
static int CurrentHistoUID = 0 ;
100
/* A holding place to kee ptrack of the modified histo UID */
101
static void showHeaderData(int all);
102
static void createBrowserHeadDump();
103
static void dismissHeadDumpCB(Widget w, nTuBrowserInfo *nTuBr,
106
static void createBrowserHeadDump();
107
static void dismissHeadDumpCB(Widget w, nTuBrowserInfo *nTuBr,
110
static void createOneDHistCB(Widget w, nTuBrowserInfo *nTuBr,
113
static void createOneDHistActual(int newHisto);
114
static void createBrowserOneDHistPanel(nTuBrowserInfo *nTuBr);
115
static void dismissOneDHistCB(Widget w, nTuBrowserInfo *nTuBr,
117
static void modifyOneDHistCB(Widget w, nTuBrowserInfo *nTuBr,
120
static void deleteOneDHistCB(Widget w, nTuBrowserInfo *nTuBr,
122
static void redisplay1DHistoList();
123
static void oneDHistListCB(Widget w, nTuBrowserInfo *nTuBr,
125
static nTuBrowserInfo *oneDHistNTupleSource(int hs_id);
127
static void getVarIndexDialog(int *loc, int nDim, int *maxVal);
128
static void setListItems(Widget w, XmString *strings, int nStrings);
129
static void setTimer(int timeInMillis);
130
static void cancelTimer(void);
131
static void timerUpCB(void);
133
** Some scrap space to define histograms
135
static char BrowseUtil2htitle[255];
138
** Remove the white space (blanks and tabs) from a string
140
void mcfioC_RemoveWhiteSpace(char *string)
142
char *outPtr = string;
145
if (*string != ' ' && *string != '\t')
146
*(outPtr++) = *(string++);
156
void mcfioC_ShowBrowserHeadDump() {
158
if (DumpHeadShellW == NULL) createBrowserHeadDump();
159
showHeaderData(False);
163
void mcfioC_ShowBrowserEvtHeadDump() {
165
if (DumpHeadShellW == NULL) createBrowserHeadDump();
166
showHeaderData(True);
169
void mcfioC_ShowBrowserOneDHist()
172
char *text, *t1, *t2;
173
int i, nChar, len, n1, n2, iln, *blockList;
174
nTuBrowserInfo *nTuBr;
176
nTuBr = CurrentNTupleBrowserSelected;
177
if (OneDHistShellW == NULL) createBrowserOneDHistPanel(nTuBr);
178
if (!XtIsManaged(OneDHistFormW)) XtManageChild(OneDHistFormW);
180
** We have to set the selection in the Main Panel to this requested
183
if (CurrentNTupleBrowserSelected != nTuBr) {
184
if (mcfioC_SetSpecificNTupleBr(nTuBr) != True) return;
186
mcfioC_OneDHistUpdateNTupleContent();
188
void mcfioC_OneDHistUpdateNTupleContent()
191
** Update the Data Descriptioon in the 1D Histogram panel
193
int i, id, nItems, l, uid, k;
194
XmString *stringTable;
196
descrGenNtuple *dNTu;
201
if (OneDHistShellW == NULL) return;
202
if (!XtIsManaged(OneDHistFormW)) return;
203
ddl = mcf_GetNTuByPtrID(CurrentNTupleBrowserSelected->id);
204
if (ddl->descrNtu == NULL) dNTu = ddl->reference->descrNtu;
205
else dNTu = ddl->descrNtu;
207
** Update the Label fields
209
XtSetArg(args[0], XmNlabelString, s1 = XmStringCreateSimple(ddl->category));
210
XtSetValues(OneDHistNtupleCategoryLabelW, args, 1);
213
XtSetArg(args[0], XmNlabelString, s1 = XmStringCreateSimple(ddl->title));
214
XtSetValues(OneDHistNtupleTitleLabelW, args, 1);
217
nItems = dNTu->numVariables + 1;
218
stringTable = (XmString *)XtMalloc((nItems+1) * sizeof(XmString));
219
stringTable[0] = XmStringCreateSimple ("Multiplicity");
220
for (k=0; k<dNTu->numVariables; k++) {
221
var = dNTu->variables[k];
222
stringTable[k+1] = XmStringCreateSimple (var->name);
224
stringTable[nItems] = (XmString ) NULL;
225
setListItems(OneDHistVariableListW, stringTable, nItems);
226
FreeStringTable(stringTable);
231
static void showHeaderData(int all)
234
char *text, *t1, *t2;
235
int i, nChar, len, n1, n2, n11, n12, iln, *blockList, i1, i2, i3;
237
descrGenNtuple *dNTu;
238
nTuBrowserInfo *nTuBr;
242
** set the text widget From, To, to go for a specific track
245
mcfioC_InfoStreamInt(1, MCFIO_NUMBLOCKS, &n1);
246
nChar = 2*MCF_XDR_F_TITLE_LENGTH + 81*6 + 80*( n1/10);
248
mcfioC_InfoEventInt(1, MCFIO_NUMBLOCKS, &n11);
249
mcfioC_InfoEventInt(1, MCFIO_NUMNTUPLES, &n12);
250
nChar += 800 + 80*n12 + 80*(n11/10);
252
text = (char *) malloc(sizeof(char) * nChar);
254
sprintf(t1, "Title : %n",&len); t1+=len;
255
mcfioC_InfoStreamChar(1,MCFIO_TITLE, t1, &len); t1 +=len;
256
sprintf (t1, " \n%n",&len); t1+=len;
257
sprintf (t1, " \n%n",&len); t1+=len;
259
sprintf(t1, "Comment : %n",&len); t1+=len;
260
mcfioC_InfoStreamChar(1,MCFIO_COMMENT, t1, &len); t1 +=len;
261
sprintf (t1, " \n%n",&len); t1+=len;
262
sprintf (t1, " \n%n",&len); t1+=len;
264
sprintf(t1, "Creation Date : %n",&len); t1+=len;
265
mcfioC_InfoStreamChar(1,MCFIO_CREATIONDATE, t1, &len); t1 +=len;
266
sprintf (t1, " \n%n",&len); t1+=len;
268
sprintf(t1, "Closing Date : %n",&len); t1+=len;
269
mcfioC_InfoStreamChar(1,MCFIO_CLOSINGDATE, t1, &len); t1 +=len;
270
sprintf (t1, " \n%n",&len); t1+=len;
272
mcfioC_InfoStreamInt(1, MCFIO_NUMEVTS, &n2);
275
"The number of events found on the file is 0 or unknown \n%n",&len);
278
" It is likely that this file hasn't been closed properly \n%n",&len);
281
sprintf(t1, "Number of events : %d \n%n", n2, &len); t1+=len;
282
sprintf (t1, " \n%n",&len); t1+=len;
284
sprintf(t1, "Number of private blocks : %d \n%n",n1, &len); t1+=len;
285
blockList = (int *) malloc(sizeof(int) * n1);
286
mcfioC_InfoStreamInt(1, MCFIO_BLOCKIDS, blockList);
287
sprintf(t1, " List of blocks I.D. : %n", &len); t1 +=len;
289
for (i=0; i<n1; i++, iln++) {
291
sprintf(t1," %d %n", blockList[i], &len);
293
sprintf(t1," %d, %n", blockList[i], &len);
296
sprintf(t1, " \n%n", &len); t1 +=len;
299
sprintf(t1, " \n%n", &len); t1 +=len;
303
" ==============================================================\n\n%n",&len);
305
mcfioC_InfoEventInt(1, MCFIO_EVENTNUMBER, &i1);
306
mcfioC_InfoEventInt(1, MCFIO_STORENUMBER, &i2);
307
mcfioC_InfoEventInt(1, MCFIO_RUNNUMBER, &i3);
309
"Header Information for event %d, store %d, run %d \n%n", i1, i2, i3, &len);
311
mcfioC_InfoEventInt(1, MCFIO_TRIGGERMASK, &i1);
312
sprintf(t1, "Trigger Mask: %d \n%n", i1, &len); t1 +=len;
313
sprintf(t1, "Number of private blocks : %d \n%n", n11, &len); t1+=len;
314
blockList = (int *) malloc(sizeof(int) * n11);
315
mcfioC_InfoEventInt(1, MCFIO_BLOCKIDS, blockList);
316
sprintf(t1, " List of blocks I.D. : %n", &len); t1 +=len;
318
for (i=0; i<n11; i++, iln++) {
320
sprintf(t1," %d %n", blockList[i], &len);
322
sprintf(t1," %d, %n", blockList[i], &len);
325
sprintf(t1, " \n%n", &len); t1 +=len;
330
sprintf(t1, "Number of Ntuples : %d \n%n", n12, &len); t1+=len;
331
blockList = (int *) malloc(sizeof(int) * n12);
332
mcfioC_InfoEventInt(1, MCFIO_NTUPLESLIST, blockList);
334
" List of Ntuple Category and titles in this event: \n%n", &len);
336
for (i=0; i<n12; i++) {
337
ddl = mcf_GetNTuByPtrID(blockList[i]);
338
if (ddl->descrNtu == NULL) dNTu = ddl->reference->descrNtu;
339
sprintf(t1," %s : %s\n%n", ddl->category, ddl->title, &len);
345
XmTextSetString(DumpHeadTextW,text);
346
XtManageChild(DumpHeadFormW);
349
static void createBrowserHeadDump()
357
XtSetArg(args[ac], XmNautoUnmanage, False); ac++;
358
XtSetArg(args[ac], XmNresizePolicy, XmRESIZE_NONE); ac++;
359
DumpHeadFormW = XmCreateFormDialog(McfioMainPanelW, "form", args, ac);
360
DumpHeadShellW = XtParent(DumpHeadFormW);
361
XtVaSetValues(DumpHeadShellW, XmNtitle,
362
"File Header Information", 0);
363
AddMotifCloseCallback(XtParent(DumpHeadFormW),
364
(XtCallbackProc)dismissHeadDumpCB, NULL);
367
dismissBtn = XtVaCreateManagedWidget("dismissBtn",
368
xmPushButtonGadgetClass, DumpHeadFormW,
369
XmNlabelString, s1=XmStringCreateSimple("Dismiss"),
370
XmNbottomAttachment, XmATTACH_FORM,
372
XmNleftAttachment, XmATTACH_POSITION,
374
XmNrightAttachment, XmATTACH_POSITION,
375
XmNrightPosition, 75, 0);
377
XtAddCallback(dismissBtn, XmNactivateCallback,
378
(XtCallbackProc)dismissHeadDumpCB, NULL);
381
XtSetArg(args[ac], XmNrows, 8); ac++;
382
XtSetArg(args[ac], XmNcolumns, 80); ac++;
383
XtSetArg(args[ac], XmNeditMode, XmMULTI_LINE_EDIT); ac++;
384
XtSetArg(args[ac], XmNleftAttachment, XmATTACH_POSITION); ac++;
385
XtSetArg(args[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
386
XtSetArg(args[ac], XmNtopAttachment, XmATTACH_FORM); ac++;
387
XtSetArg(args[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++;
388
XtSetArg(args[ac], XmNbottomWidget, dismissBtn); ac++;
389
XtSetArg(args[ac], XmNdeleteResponse, XmDO_NOTHING); ac++;
390
DumpHeadTextW = XmCreateScrolledText(DumpHeadFormW,
391
"HeaderText", args, ac);
392
XtManageChild(DumpHeadTextW);
393
XtManageChild(DumpHeadFormW);
396
static void dismissHeadDumpCB(Widget w, nTuBrowserInfo * nTuBr,
399
XtUnmanageChild(DumpHeadFormW);
402
static void createBrowserOneDHistPanel(nTuBrowserInfo *nTuBr)
407
Widget dismissBtn, nbinLabel, lowEdgeLabel, highEdgeLabel, multLabel;
408
Widget histForm, ntupleForm, titleLabel, histLabel, ntupleLabel;
409
Widget ntupleCatLabel, ntupleTitleLabel;
412
XtSetArg(args[ac], XmNautoUnmanage, False); ac++;
413
XtSetArg(args[ac], XmNresizePolicy, XmRESIZE_NONE); ac++;
414
OneDHistFormW = XmCreateFormDialog(McfioMainPanelW, "form", args, ac);
415
OneDHistShellW = XtParent(OneDHistFormW);
416
XtVaSetValues(OneDHistShellW, XmNtitle,
417
"One Dimensional Histogram Utility", 0);
418
AddMotifCloseCallback(XtParent(OneDHistFormW),
419
(XtCallbackProc)dismissOneDHistCB, NULL);
421
OneDHistCreateW = XtVaCreateManagedWidget("create1DBtn",
422
xmPushButtonGadgetClass, OneDHistFormW,
423
XmNlabelString, s1=XmStringCreateSimple("Create"),
424
XmNbottomAttachment, XmATTACH_FORM,
426
XmNleftAttachment, XmATTACH_POSITION,
428
XmNrightAttachment, XmATTACH_POSITION,
429
XmNrightPosition, 18, 0);
431
XtAddCallback( OneDHistCreateW, XmNactivateCallback,
432
(XtCallbackProc)createOneDHistCB, (nTuBrowserInfo *) nTuBr );
435
OneDHistModifyW = XtVaCreateManagedWidget("modify1DBtn",
436
xmPushButtonGadgetClass, OneDHistFormW,
437
XmNlabelString, s1=XmStringCreateSimple("Modify"),
438
XmNbottomAttachment, XmATTACH_FORM,
440
XmNleftAttachment, XmATTACH_POSITION,
442
XmNrightAttachment, XmATTACH_POSITION,
443
XmNrightPosition, 40, 0);
445
XtAddCallback( OneDHistModifyW, XmNactivateCallback,
446
(XtCallbackProc)modifyOneDHistCB, NULL);
448
OneDHistDeleteW = XtVaCreateManagedWidget("delete1DBtn",
449
xmPushButtonGadgetClass, OneDHistFormW,
450
XmNlabelString, s1=XmStringCreateSimple("Delete"),
451
XmNbottomAttachment, XmATTACH_FORM,
453
XmNleftAttachment, XmATTACH_POSITION,
455
XmNrightAttachment, XmATTACH_POSITION,
456
XmNrightPosition, 60, 0);
458
XtAddCallback( OneDHistDeleteW, XmNactivateCallback,
459
(XtCallbackProc)deleteOneDHistCB, NULL);
461
dismissBtn = XtVaCreateManagedWidget("dismissBtn",
462
xmPushButtonGadgetClass, OneDHistFormW,
463
XmNlabelString, s1=XmStringCreateSimple("Dismiss"),
464
XmNbottomAttachment, XmATTACH_FORM,
466
XmNleftAttachment, XmATTACH_POSITION,
468
XmNrightAttachment, XmATTACH_POSITION,
469
XmNrightPosition, 98, 0);
471
XtAddCallback(dismissBtn, XmNactivateCallback,
472
(XtCallbackProc)dismissOneDHistCB, NULL);
475
XtSetArg(args[ac], XmNlabelString,
476
(s1=XmStringCreateSimple("Number of bins:"))); ac++;
477
XtSetArg(args[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
478
XtSetArg(args[ac], XmNleftOffset,5); ac++;
479
XtSetArg(args[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++;
480
XtSetArg(args[ac], XmNbottomWidget,OneDHistCreateW); ac++;
481
XtSetArg(args[ac], XmNbottomOffset,3); ac++;
483
XmCreateLabelGadget(OneDHistFormW, "num1Dbin", args, ac);
485
XtManageChild(nbinLabel);
487
OneDHistNumBinsW = XtVaCreateManagedWidget("numBin1D",
488
xmTextWidgetClass, OneDHistFormW,
491
XmNeditMode, XmSINGLE_LINE_EDIT,
492
XmNbottomAttachment, XmATTACH_WIDGET,
493
XmNbottomWidget,OneDHistCreateW,
495
XmNleftAttachment, XmATTACH_WIDGET,
496
XmNleftWidget,nbinLabel, 0);
497
RemapDeleteKey(OneDHistNumBinsW);
498
XmTextSetString(OneDHistNumBinsW, "100");
502
XtSetArg(args[ac], XmNlabelString,
503
(s1=XmStringCreateSimple("Low Edge:"))); ac++;
504
XtSetArg(args[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++;
505
XtSetArg(args[ac], XmNleftWidget,OneDHistNumBinsW); ac++;
506
XtSetArg(args[ac], XmNleftOffset,3); ac++;
507
XtSetArg(args[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++;
508
XtSetArg(args[ac], XmNbottomWidget,OneDHistCreateW); ac++;
509
XtSetArg(args[ac], XmNbottomOffset,3); ac++;
511
XmCreateLabelGadget(OneDHistFormW, "low1Dbin", args, ac);
513
XtManageChild(lowEdgeLabel);
515
OneDHistLowBinW = XtVaCreateManagedWidget("lowEdge1D",
516
xmTextWidgetClass, OneDHistFormW,
519
XmNeditMode, XmSINGLE_LINE_EDIT,
520
XmNbottomAttachment, XmATTACH_WIDGET,
521
XmNbottomWidget,OneDHistCreateW,
523
XmNleftAttachment, XmATTACH_WIDGET,
524
XmNleftWidget,lowEdgeLabel, 0);
525
RemapDeleteKey(OneDHistLowBinW);
526
XmTextSetString(OneDHistLowBinW, "0.");
529
XtSetArg(args[ac], XmNlabelString,
530
(s1=XmStringCreateSimple("High Edge:"))); ac++;
531
XtSetArg(args[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++;
532
XtSetArg(args[ac], XmNleftWidget,OneDHistLowBinW); ac++;
533
XtSetArg(args[ac], XmNleftOffset,3); ac++;
534
XtSetArg(args[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++;
535
XtSetArg(args[ac], XmNbottomWidget,OneDHistCreateW); ac++;
536
XtSetArg(args[ac], XmNbottomOffset,3); ac++;
538
XmCreateLabelGadget(OneDHistFormW, "high1Dbin", args, ac);
540
XtManageChild(highEdgeLabel);
542
OneDHistHighBinW = XtVaCreateManagedWidget("highEdge1D",
543
xmTextWidgetClass, OneDHistFormW,
546
XmNeditMode, XmSINGLE_LINE_EDIT,
547
XmNbottomAttachment, XmATTACH_WIDGET,
548
XmNbottomWidget,OneDHistCreateW,
550
XmNleftAttachment, XmATTACH_WIDGET,
551
XmNleftWidget,highEdgeLabel, 0);
552
RemapDeleteKey(OneDHistHighBinW);
553
XmTextSetString(OneDHistHighBinW, "1.");
557
XtSetArg(args[ac], XmNlabelString,
558
(s1=XmStringCreateSimple("Instance:"))); ac++;
559
XtSetArg(args[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++;
560
XtSetArg(args[ac], XmNleftWidget,OneDHistHighBinW); ac++;
561
XtSetArg(args[ac], XmNleftOffset,3); ac++;
562
XtSetArg(args[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++;
563
XtSetArg(args[ac], XmNbottomWidget,OneDHistCreateW); ac++;
564
XtSetArg(args[ac], XmNbottomOffset,3); ac++;
566
XmCreateLabelGadget(OneDHistFormW, "inst1Dlabel", args, ac);
568
XtManageChild(multLabel);
570
OneDHistMultW = XtVaCreateManagedWidget("inst1DTw",
571
xmTextWidgetClass, OneDHistFormW,
574
XmNeditMode, XmSINGLE_LINE_EDIT,
575
XmNbottomAttachment, XmATTACH_WIDGET,
576
XmNbottomWidget,OneDHistCreateW,
578
XmNleftAttachment, XmATTACH_WIDGET,
579
XmNleftWidget,multLabel, 0);
580
RemapDeleteKey(OneDHistMultW);
581
XmTextSetString(OneDHistMultW, "All");
584
XtSetArg(args[ac], XmNlabelString,
585
(s1=XmStringCreateSimple("Title:"))); ac++;
586
XtSetArg(args[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
587
XtSetArg(args[ac], XmNleftOffset,3); ac++;
588
XtSetArg(args[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++;
589
XtSetArg(args[ac], XmNbottomWidget,OneDHistNumBinsW); ac++;
590
XtSetArg(args[ac], XmNbottomOffset,3); ac++;
592
XmCreateLabelGadget(OneDHistFormW, "title1Dlabel", args, ac);
594
XtManageChild(titleLabel);
596
OneDHistTitleW = XtVaCreateManagedWidget("title1DTw",
597
xmTextWidgetClass, OneDHistFormW,
600
XmNeditMode, XmSINGLE_LINE_EDIT,
601
XmNbottomAttachment, XmATTACH_WIDGET,
602
XmNbottomWidget,OneDHistNumBinsW,
604
XmNleftAttachment, XmATTACH_WIDGET,
605
XmNleftWidget,titleLabel, 0);
606
RemapDeleteKey(OneDHistTitleW);
607
XmTextSetString(OneDHistTitleW, "Please enter a meaningful title here");
609
** Now the list of 1D histograms.
611
/* Create a form to hold the list and the top label */
613
XtSetArg(args[ac], XmNmarginHeight, 0); ac++;
614
XtSetArg(args[ac], XmNtopAttachment, XmATTACH_FORM); ac++;
615
XtSetArg(args[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
616
XtSetArg(args[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++;
617
XtSetArg(args[ac], XmNbottomWidget, OneDHistTitleW); ac++;
618
XtSetArg(args[ac], XmNbottomOffset, 3); ac++;
619
XtSetArg(args[ac], XmNleftOffset, 2); ac++;
620
XtSetArg(args[ac], XmNtopOffset, 2); ac++;
621
histForm = XmCreateForm(OneDHistFormW, "hist1DForm", args, ac);
622
XtManageChild(histForm);
625
XtSetArg(args[ac], XmNlabelString,
626
(s1=XmStringCreateSimple(
627
"One Dimensional Histogram Listing"))); ac++;
628
XtSetArg(args[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
629
XtSetArg(args[ac], XmNleftOffset,3); ac++;
630
XtSetArg(args[ac], XmNtopAttachment, XmATTACH_FORM); ac++;
632
XmCreateLabelGadget(histForm, "HIST1Dlabel", args, ac);
634
XtManageChild(histLabel);
637
XtSetArg(args[ac], XmNitems, (st1=StringTable(1,
638
"No histogram defined "))); ac++;
639
XtSetArg(args[ac], XmNitemCount, 1); ac++;
640
XtSetArg(args[ac], XmNscrollBarDisplayPolicy, XmAS_NEEDED); ac++;
641
XtSetArg(args[ac], XmNvisibleItemCount, 10); ac++;
642
XtSetArg(args[ac], XmNselectionPolicy, XmBROWSE_SELECT); ac++;
643
XtSetArg(args[ac], XmNlistSizePolicy, XmCONSTANT); ac++;
644
XtSetArg(args[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
645
XtSetArg(args[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
646
XtSetArg(args[ac], XmNbottomAttachment, XmATTACH_FORM); ac++;
647
XtSetArg(args[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
648
XtSetArg(args[ac], XmNtopWidget, histLabel); ac++;
649
XtSetArg(args[ac], XmNtopOffset, 0); ac++;
650
XtSetArg(args[ac], XmNleftOffset, 3); ac++;
651
XtSetArg(args[ac], XmNbottomOffset, 4); ac++;
652
OneDHistHistoListW = XmCreateScrolledList(histForm, "hist1DList", args,ac);
653
FreeStringTable(st1);
654
XtAddCallback(OneDHistHistoListW, XmNbrowseSelectionCallback,
655
(XtCallbackProc) oneDHistListCB, NULL);
656
XtManageChild(OneDHistHistoListW);
657
OneDHistSizeOfList = 10;
658
OneDHistNumberListed = 0;
659
OneDHistListedIDs = (int *) malloc(sizeof(int) * OneDHistSizeOfList);
661
** Now the list of Ntuple Variables. Also a few Label to refer to the
662
** Ntuple category/title listed on the Main panel.
665
/* Create a form to hold the list and the top label */
667
XtSetArg(args[ac], XmNmarginHeight, 0); ac++;
668
XtSetArg(args[ac], XmNtopAttachment, XmATTACH_FORM); ac++;
669
XtSetArg(args[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++;
670
XtSetArg(args[ac], XmNleftWidget, histForm); ac++;
671
XtSetArg(args[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++;
672
XtSetArg(args[ac], XmNbottomWidget, OneDHistTitleW); ac++;
673
XtSetArg(args[ac], XmNbottomOffset, 3); ac++;
674
XtSetArg(args[ac], XmNleftOffset, 6); ac++;
675
XtSetArg(args[ac], XmNtopOffset, 2); ac++;
676
ntupleForm = XmCreateForm(OneDHistFormW, "ntu1DForm", args, ac);
677
XtManageChild(ntupleForm);
680
XtSetArg(args[ac], XmNlabelString,
681
(s1=XmStringCreateSimple("Selected NTuple Synopsis"))); ac++;
682
XtSetArg(args[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
683
XtSetArg(args[ac], XmNleftOffset,3); ac++;
684
XtSetArg(args[ac], XmNtopAttachment, XmATTACH_FORM); ac++;
686
XmCreateLabelGadget(ntupleForm, "NTU1DDlabel", args, ac);
688
XtManageChild(ntupleLabel);
691
XtSetArg(args[ac], XmNlabelString,
692
(s1=XmStringCreateSimple("Category:"))); ac++;
693
XtSetArg(args[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
694
XtSetArg(args[ac], XmNleftOffset, 3); ac++;
695
XtSetArg(args[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
696
XtSetArg(args[ac], XmNtopOffset, 1); ac++;
697
XtSetArg(args[ac], XmNtopWidget,ntupleLabel ); ac++;
699
XmCreateLabelGadget(ntupleForm, "NTU1Dlabel", args, ac);
701
XtManageChild(ntupleCatLabel);
704
XtSetArg(args[ac], XmNlabelString,
705
(s1=XmStringCreateSimple("None----------------------"))); ac++;
706
XtSetArg(args[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++;
707
XtSetArg(args[ac], XmNleftWidget,ntupleCatLabel ); ac++;
708
XtSetArg(args[ac], XmNleftOffset,3); ac++;
709
XtSetArg(args[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
710
XtSetArg(args[ac], XmNtopOffset, 1); ac++;
711
XtSetArg(args[ac], XmNtopWidget,ntupleLabel ); ac++;
712
OneDHistNtupleCategoryLabelW =
713
XmCreateLabelGadget(ntupleForm, "NTU1DCatlabel", args, ac);
715
XtManageChild(OneDHistNtupleCategoryLabelW);
718
XtSetArg(args[ac], XmNlabelString,
719
(s1=XmStringCreateSimple("Title:"))); ac++;
720
XtSetArg(args[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
721
XtSetArg(args[ac], XmNleftOffset,3); ac++;
722
XtSetArg(args[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
723
XtSetArg(args[ac], XmNtopWidget, ntupleCatLabel); ac++;
724
XtSetArg(args[ac], XmNtopOffset, 1); ac++;
726
XmCreateLabelGadget(ntupleForm, "NTU1Dlabel", args, ac);
728
XtManageChild(ntupleTitleLabel);
731
XtSetArg(args[ac], XmNlabelString,
732
(s1=XmStringCreateSimple("None----------------------"))); ac++;
733
XtSetArg(args[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++;
734
XtSetArg(args[ac], XmNleftWidget,ntupleCatLabel ); ac++;
735
XtSetArg(args[ac], XmNleftOffset,3); ac++;
736
XtSetArg(args[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
737
XtSetArg(args[ac], XmNtopWidget,ntupleCatLabel ); ac++;
738
XtSetArg(args[ac], XmNtopOffset, 1); ac++;
739
OneDHistNtupleTitleLabelW =
740
XmCreateLabelGadget(ntupleForm, "NTU1DTitlabel", args, ac);
742
XtManageChild(OneDHistNtupleTitleLabelW);
745
XtSetArg(args[ac], XmNitems, (st1=StringTable(1, " "))); ac++;
746
XtSetArg(args[ac], XmNitemCount, 1); ac++;
747
XtSetArg(args[ac], XmNscrollBarDisplayPolicy, XmAS_NEEDED); ac++;
748
XtSetArg(args[ac], XmNvisibleItemCount, 10); ac++;
749
XtSetArg(args[ac], XmNselectionPolicy, XmBROWSE_SELECT); ac++;
750
XtSetArg(args[ac], XmNlistSizePolicy, XmCONSTANT); ac++;
751
XtSetArg(args[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
752
XtSetArg(args[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
753
XtSetArg(args[ac], XmNbottomAttachment, XmATTACH_FORM); ac++;
754
XtSetArg(args[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
755
XtSetArg(args[ac], XmNtopWidget, OneDHistNtupleTitleLabelW); ac++;
756
XtSetArg(args[ac], XmNtopOffset, 2); ac++;
757
XtSetArg(args[ac], XmNleftOffset, 3); ac++;
758
OneDHistVariableListW = XmCreateScrolledList(ntupleForm, "hist1DList", args,ac);
759
FreeStringTable(st1);
760
XtManageChild(OneDHistVariableListW);
761
FirstOneDHistogram = True;
762
XtManageChild(OneDHistFormW);
766
static void createOneDHistCB(Widget w, nTuBrowserInfo * nTuBrDummy,
769
createOneDHistActual(True);
771
static void createOneDHistActual(int newHisto)
773
int countHisto, countNTu, countVar, ivar, ivarH, nBins, idh, uid, im, jn;
774
int i, index, k, *ivk, ll, lastFixed;
777
XmString *selectedItems;
778
int *posListHisto, *posListNTu, *posListVar;
779
char *str, category[24], x_label[20];
781
descrGenNtuple *dNTu;
782
nTuBrowserInfo *nTuBr;
790
if (HistoIsBrowserNtuInit == NULL) {
791
hs_initialize("Mcfio Ntuple Browser");
793
HistoIsBrowserNtuInit = 1;
794
XtSetSensitive(McfioHsResetBtnW, True);
798
nTuBr = CurrentNTupleBrowserSelected;
799
ddl = mcf_GetNTuByPtrID(CurrentNTupleBrowserSelected->id);
800
if (ddl->descrNtu == NULL) dNTu = ddl->reference->descrNtu;
801
else dNTu = ddl->descrNtu;
803
if (!XmListGetSelectedPos(OneDHistVariableListW, &posListVar, &countVar)) {
804
DialogF(DF_WARN, OneDHistShellW, 1, "Please select a Variable",
808
ivarH = (*posListVar) - 1; ivar = ivarH -1;
810
** Get how many time we have to histogram the variable
812
if (ivar < dNTu->firstIndexed) im = -1;
814
str = XmTextGetString(OneDHistMultW);
815
if (GetIntText(OneDHistMultW, &im) == TEXT_READ_OK) {
816
if (im > dNTu->maxMultiplicity) {
817
DialogF(DF_WARN, OneDHistShellW, 1,
818
"Incorrect instance, above maximum Multiplicty.","Acknowledged");
822
if ((strcmp(str,"All") == 0) || (strcmp(str,"ALL") == 0) ||
823
(strcmp(str,"all") == 0)) im = -1;
824
else if ((strcmp(str,"First") == 0) || (strcmp(str,"FIRST") == 0) ||
825
(strcmp(str,"first") == 0)) im = 0;
826
else if ((strcmp(str,"Second") == 0) || (strcmp(str,"SECOND") == 0) ||
827
(strcmp(str,"second") == 0)) im = 1;
828
else if ((strcmp(str,"Third") == 0) || (strcmp(str,"THIRD") == 0) ||
829
(strcmp(str,"third") == 0)) im = 2;
831
DialogF(DF_WARN, OneDHistShellW, 1,
832
"Incorrect instance, please use a number","Acknowledged");
838
** We now read out the widget and define the histogram
840
str = XmTextGetString(OneDHistTitleW);
841
if (GetIntTextWarn(OneDHistNumBinsW, &nBins,
842
"Number of Bins", TRUE) != TEXT_READ_OK) return;
843
if (GetFloatTextWarn(OneDHistLowBinW, &dfrom,
844
"Low Bin Edge", TRUE) != TEXT_READ_OK) return;
845
if (GetFloatTextWarn(OneDHistHighBinW, &dto,
846
"High Bin Edge", TRUE) != TEXT_READ_OK) return;
847
from = (float) dfrom; to = (float) dto;
849
** At the beginning, the HistoList has a dummy item
851
if (FirstOneDHistogram) uid = 1;
853
XtSetArg (args[0], XmNitemCount, &uid);
854
XtGetValues(OneDHistHistoListW, args, 1);
856
} else uid = CurrentHistoUID;
858
strcpy(x_label,"Multiplicity");
860
var = dNTu->variables[ivar];
861
if(strlen(var->name) < 17) strcpy(x_label,var->name);
863
strncpy(x_label,var->name,16);
864
strcpy(&x_label[16],"...");
867
idh = hs_create_1d_hist(uid, str, "OneDHist", x_label, "Yield",
871
** Store the idh, we need it for filling. Find the first free place on
874
if (nTuBr->nHistoItems == nTuBr->sizeOfLists)
875
mcfioC_ExtendBrowserAnalysis(nTuBr);
876
nTuH1 = (nTuBroHs1D *) malloc(sizeof(nTuBroHs1D));
878
while (nTuBr->hsItemList[index] != NULL) index++;
879
nTuBr->hsItemList[index] = (nTuBroHsGeneral *) nTuH1;
880
nTuBr->nHistoItems++;
883
nTuH1->type = HS_1D_HISTOGRAM;
884
nTuH1->varNumber = ivarH;
885
nTuH1->subBlock = im;
886
nTuH1->varIndices = NULL;
887
if(dNTu->firstIndexed == -1) lastFixed = dNTu->numVariables;
888
else lastFixed = dNTu->firstIndexed;
890
var = dNTu->variables[ivar];
891
if (var->numDim >= 1) {
892
nTuH1->varIndices= (int *) malloc(sizeof(int) * var->numDim);
893
ivk = nTuH1->varIndices;
894
getVarIndexDialog(ivk, var->numDim, var->dimensions);
897
if (nTuBr->data == NULL) mcfioC_createBrowserData(nTuBr);
898
cDat = (char *) nTuBr->data;
900
cDat += dNTu->multOffset;
901
nTuH1->lDat = (long *) cDat;
903
if (ivar < lastFixed) {
904
pp = ((long) nTuBr->data) + dNTu->variables[ivar]->offset;
905
nTuH1->lDat = (long *) pp;
906
} else nTuH1->lDat = NULL;
907
/* A specific subVariable (leaf), we'll compute the
908
data pointer at filling time */
910
XtSetSensitive(OneDHistModifyW, True);
911
XtSetSensitive(OneDHistDeleteW, True);
912
redisplay1DHistoList();
913
FirstOneDHistogram = False;
916
static void modifyOneDHistCB(Widget w, nTuBrowserInfo * nTuBr,
920
if (!XmListGetSelectedPos(OneDHistHistoListW, &posList, &count)) {
921
DialogF(DF_WARN, OneDHistShellW, 1,
922
"Please select a Histogram", "Acknowledged");
925
deleteOneDHistCB(w, NULL, NULL);
926
createOneDHistActual(False);
929
static void deleteOneDHistCB(Widget w, nTuBrowserInfo *nTuBrDummy,
932
int i, idPos, *posList, count, id, uid, jn;
933
nTuBrowserInfo *nTuBr;
937
if (!XmListGetSelectedPos(OneDHistHistoListW, &posList, &count)) {
938
DialogF(DF_WARN, OneDHistShellW, 1, "Please select a Histogram",
942
id = OneDHistListedIDs[((*posList) -1)];
943
CurrentHistoUID = hs_uid(id);
944
nTuBr = oneDHistNTupleSource(id);
946
DialogF(DF_ERR, OneDHistShellW, 1,
947
"Internal Error in deleteOneDHist\nPlease report",
953
for (i=0; i<nTuBr->sizeOfLists; i++) {
954
if (nTuBr->hsItemList[i] == NULL) continue;
955
if (id == nTuBr->hsItemList[i]->id ) {
956
nTuH1 = (nTuBroHs1D *) nTuBr->hsItemList[i];
957
if (nTuH1->varIndices != NULL) free(nTuH1->varIndices);
959
nTuBr->hsItemList[i] = NULL;
963
nTuBr->nHistoItems--;
965
redisplay1DHistoList();
968
static void dismissOneDHistCB(Widget w, nTuBrowserInfo * nTuBr,
971
XtUnmanageChild(OneDHistFormW);
974
static void redisplay1DHistoList()
976
int i, id, nItems, l, uid, k, nh, jn, *il;
977
nTuBrowserInfo *nTuBr;
978
XmString *stringTable;
980
for(jn=0, nh=0; jn< NumOfNTuples; jn++) {
981
nTuBr = NTupleBrowserList[jn];
982
for (i=0; i<nTuBr->sizeOfLists; i++) {
983
if (nTuBr->hsItemList[i] == NULL) continue;
984
id = nTuBr->hsItemList[i]->id;
985
if ( (id != -1) && (hs_type(id) == HS_1D_HISTOGRAM)) nh++;
988
OneDHistNumberListed = nh;
990
stringTable = (XmString *)XtMalloc((1) * sizeof(XmString));
991
stringTable[1] = (XmString)0;
992
setListItems(OneDHistHistoListW, stringTable, 0);
993
/* free the string table */
994
FreeStringTable(stringTable);
997
if (nh > OneDHistSizeOfList) {
998
il = (int *) malloc(sizeof(int) * 2 * nh);
999
memcpy((void *) il, (void *) OneDHistListedIDs, (sizeof(int) * nh));
1000
free(OneDHistListedIDs); OneDHistListedIDs = il;
1001
OneDHistSizeOfList = 2*nh;
1003
stringTable = (XmString *)XtMalloc((nh+1) * sizeof(XmString));
1004
for(jn=0, nh=0; jn< NumOfNTuples; jn++) {
1005
nTuBr = NTupleBrowserList[jn];
1006
for (i=0; i<nTuBr->sizeOfLists; i++) {
1007
if (nTuBr->hsItemList[i] == NULL) continue;
1008
id = nTuBr->hsItemList[i]->id;
1009
if (nTuBr->hsItemList[i]->type == HS_1D_HISTOGRAM) {
1010
l = hs_title(id, BrowseUtil2htitle);
1011
stringTable[nh] = XmStringCreateSimple (BrowseUtil2htitle);
1012
OneDHistListedIDs[nh] = id;
1017
stringTable[nh] = (XmString ) NULL;
1018
setListItems(OneDHistHistoListW, stringTable, nh);
1019
FreeStringTable(stringTable);
1023
static void oneDHistListCB(Widget w, nTuBrowserInfo *nTuBrDummy,
1026
int i, idPos, *posList, count, id, l, jn, uid, ivar;
1028
nTuBrowserInfo *nTuBr;
1031
XmListGetSelectedPos(OneDHistHistoListW, &posList, &count);
1032
if (count < 1) return;
1033
id = OneDHistListedIDs[((*posList) -1)];
1036
** Select the variable associated with this histogram.
1038
nTuBr = oneDHistNTupleSource(id);
1039
if (nTuBr != CurrentNTupleBrowserSelected )
1040
if (!mcfioC_SetSpecificNTupleBr(nTuBr)) return;
1041
for(i=0; i<CurrentNTupleBrowserSelected->sizeOfLists; i++) {
1042
nTuH1 = (nTuBroHs1D *) CurrentNTupleBrowserSelected->hsItemList[i];
1043
if (nTuH1 == NULL) continue;
1044
if (nTuH1->id == id) break;
1046
if (nTuH1 == NULL) {
1047
DialogF(DF_ERR, OneDHistShellW, 1,
1048
"Internal Error in oneDHistListCB\nPlease report",
1052
ivar = nTuH1->varNumber;
1053
XmListSelectPos(OneDHistVariableListW, (ivar+1), False);
1054
l = hs_title(id, BrowseUtil2htitle);
1055
XmTextSetString(OneDHistTitleW, BrowseUtil2htitle);
1056
l = hs_1d_hist_num_bins(id);
1057
SetIntText(OneDHistNumBinsW, l);
1058
hs_1d_hist_range(id, &aa, &bb);
1059
SetFloatText(OneDHistLowBinW, aa);
1060
SetFloatText(OneDHistHighBinW, bb);
1062
** We now have to related this histogram to the associated Ntuple
1064
for (i=0; i<nTuBr->sizeOfLists; i++) {
1065
if (nTuBr->hsItemList[i] == NULL) continue;
1066
if (nTuBr->hsItemList[i]->id == id) {
1067
nTuH1 = (nTuBroHs1D *) nTuBr->hsItemList[i];
1068
if (nTuH1->subBlock == -1)
1069
XmTextSetString(OneDHistMultW, "All");
1071
SetIntText(OneDHistMultW, nTuH1->subBlock);
1075
XtSetSensitive(OneDHistModifyW, True);
1076
XtSetSensitive(OneDHistDeleteW, True);
1079
static nTuBrowserInfo *oneDHistNTupleSource(int hs_id) {
1081
nTuBrowserInfo *nTuBr;
1084
for(jn=0; jn< NumOfNTuples; jn++) {
1085
nTuBr = NTupleBrowserList[jn];
1086
for (i=0; i<nTuBr->sizeOfLists; i++)
1087
if ((nTuBr->hsItemList[i] != NULL)
1088
&& (nTuBr->hsItemList[i]->id == hs_id)) return nTuBr;
1093
** Set the contents of a list and compensate for various motif problems
1094
** associated with this apparently bizarre act. (It might be worth
1095
** further investigation to better understand why these workarounds
1098
static void setListItems(Widget w, XmString *strings, int nStrings)
1102
/* Motif doesn't reset the selection when items are changed */
1103
XmListDeselectAllItems(w);
1105
/* .. and sometimes leaves stray scroll bars if nothing is in the list */
1106
if (nStrings == 0) {
1107
XtVaSetValues(w, XmNitems, st1=StringTable(1, " "),
1108
XmNitemCount, 1, XmNsensitive, False, 0);
1109
FreeStringTable(st1);
1111
XtVaSetValues(w, XmNitems, strings, XmNitemCount, nStrings,
1112
XmNsensitive, True, 0);
1115
static void getVarIndexDialog(int *loc, int nDim, int *maxVal)
1123
DialogF(DF_PROMPT,OneDHistShellW, 0,
1124
"The variable you wish to histogram is a Vector\n\
1125
Please fill in the requested index", BrowseUtil2htitle);
1126
mcfioC_RemoveWhiteSpace(BrowseUtil2htitle);
1127
valt = strtol(BrowseUtil2htitle, &endPtr, 10);
1128
if ((strlen(BrowseUtil2htitle) == 0) || (*endPtr != '\0'))
1129
DialogF(DF_ERR,OneDHistShellW, 1,
1130
"Please Try again, we need an integer number! ","Acknowledged");
1132
if ((valt < 1) || (valt > maxVal[0]))
1133
DialogF(DF_ERR,OneDHistShellW, 1,
1134
"Wrong Index Value\nWe need a number between 1 and %d",
1135
"Acknowledged",maxVal[0]);
1144
DialogF(DF_PROMPT,OneDHistShellW, 0,
1145
"The variable you wish to histogram is a Matrix of dimension %d\n\
1146
Please fill in the requested indices\n\
1147
The format is 2,5....\n\Index numbering convention is assumed to be C",
1148
BrowseUtil2htitle, nDim);
1149
mcfioC_RemoveWhiteSpace(BrowseUtil2htitle);
1150
for (i=0, t1=BrowseUtil2htitle; i<nDim; i++) {
1151
valt = strtol(t1, &endPtr, 10);
1152
if (strlen(BrowseUtil2htitle) == 0) {
1153
DialogF(DF_ERR,OneDHistShellW, 1,
1154
"Please Try again, we need integer numbers! ","Acknowledged");
1157
if ((valt < 1) || (valt > maxVal[i])) {
1158
DialogF(DF_ERR,OneDHistShellW, 1,
1159
"Wrong Index Value\nWe need a number between 1 and %d",
1160
"Acknowledged",maxVal[i]);
1164
if (i != (nDim-1)) {
1165
if (*endPtr == '\0') {
1166
DialogF(DF_ERR,OneDHistShellW, 1,
1167
"Please Try again, we need more integer numbers! ","Acknowledged");
1180
** setTimer - Set the timer
1182
static void setTimer(int timeInMillis)
1184
if (TimeOutID == 0) {
1185
gettimeofday(&TimeSetTimeOut, NULL);
1186
TimeOutTime = timeInMillis;
1188
XtAppAddTimeOut(XtWidgetToApplicationContext(McfioMainPanelW),
1189
timeInMillis > 0 ? timeInMillis : 1,
1190
(XtTimerCallbackProc)timerUpCB, NULL);
1194
setTimer(timeInMillis);
1199
** cancelTimer - Cancel the timer and reset timer variables.
1201
static void cancelTimer(void)
1203
if (TimeOutID != 0) {
1204
XtRemoveTimeOut(TimeOutID);
1207
TimeSetTimeOut.tv_sec = 0;
1208
TimeSetTimeOut.tv_usec = 0;
1213
** timerUpCB - Timer is up. Reset timer variables and see if there are updates
1216
static void timerUpCB(void)
1220
TimeSetTimeOut.tv_sec = 0;
1221
TimeSetTimeOut.tv_usec = 0;