Subversion Repositories f9daq

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
56 f9daq 1
#!/usr/bin/wish
2
#!/bin/sh
3
# the next line restarts using wish \
4
#  exec wish "$0" ${1+"$@"}
5
 
6
 
7
#***************************************************************
8
#      loading BLT package
9
#***************************************************************
10
lappend auto_path "/usr/lib/blt2.4"
11
if [ catch {package require BLT}] exit
12
if { $tcl_version >= 8.0 } {
13
    catch {namespace import blt::*}
14
   } else {
15
    catch { import add blt } }
16
 
17
#***************************************************************
18
#      loading EVD package
19
#***************************************************************
20
puts [ info nameofexecutable ]
21
puts [ info script ]
22
lappend auto_path [ file dirname [ info script ] ]
23
package require Evd
24
 
25
#***************************************************************
26
#      setting global variables (machine dependent)
27
#***************************************************************
28
 
29
set dump_dir "."
30
set data_dir "./data"
31
set config_dir "./config/rich00A"
32
set qapmt_dir "./pmtdb"
33
 
34
 
35
# hiding main window
36
wm withdraw .
37
 
38
set new_scan 0
39
set jmove 0
40
set m4color "#80FF80"
41
set m16color "#FFBBBB"
42
set evcolor "#000000"
43
set evrescan 0
44
set evnorm 1
45
set evm4norm 0
46
set evreverse 0
47
set evhot 0
48
set evmask 1
49
set evmap 1
50
set evprwin 0
51
set sreset 1
52
 
53
 
54
array set PSfontmap {"10x20" {"Helvetica-Bold" 12}
55
                     "6x12"  {"Helvetica-Bold" 8}}
56
lappend paltags c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15
57
set ovftag c16
58
set ovfcol "#FF0000"
59
lappend BWpal "#000000" "#111111" "#222222" "#333333" \
60
              "#444444" "#555555" "#666666" "#777777" \
61
              "#888888" "#999999" "#AAAAAA" "#BBBBBB" \
62
              "#CCCCCC" "#DDDDDD" "#EEEEEE" "#FFFFFF"
63
lappend BRpal "#0022FF" "#1122EE" "#2222DD" "#3322CC" \
64
              "#4422BB" "#5522AA" "#662299" "#772288" \
65
              "#882277" "#992266" "#AA2255" "#BB2244" \
66
              "#CC2233" "#DD2222" "#EE2211" "#FF2200"
67
 
68
#*** EVENT_DISPLAY window definitions
69
 
70
toplevel .ev
71
wm title .ev  "RICH Event Display"
72
wm protocol .ev WM_DELETE_WINDOW " "
73
   set evmag 2.
74
   set oldevmag 2.
75
   set tfont "10x20"
76
   wm geometry .ev 1016x760+10+10
77
 
78
 
79
#*** DETECTOR canvas definition
80
 
81
canvas .ev.det \
82
    -scrollregion "0 0 [expr $evmag*350] [expr $evmag*300]" \
83
    -background "#000080" \
84
    -cursor draft_small \
85
    -yscrollcommand { .ev.detvs set } \
86
    -xscrollcommand { .ev.deths set }
87
scrollbar .ev.detvs -orient vertical -command { .ev.det yview }
88
scrollbar .ev.deths -orient horizontal -command { .ev.det xview }
89
bind .ev.det <1> {set chout [open ch.dat a]
90
                  puts $chout [evstatl 0 \
91
                       [.ev.det canvasx %x] [.ev.det canvasy %y] $evmag]
92
                  close $chout}
93
bind .ev.det <Motion> {.ev.mapping configure -text [evstatl 0 \
94
                       [.ev.det canvasx %x] [.ev.det canvasy %y] $evmag]}
95
 
96
#*** GRAPH canvas definition
97
 
98
canvas .ev.gr \
99
    -background "#000000" \
100
    -yscrollcommand { .ev.grvs set } \
101
    -xscrollcommand { .ev.grhs set }
102
scrollbar .ev.grvs -orient vertical -command { .ev.gr yview }
103
scrollbar .ev.grhs -orient horizontal -command { .ev.gr xview }
104
set grm .ev.gr
105
 
106
#*** FED canvas definition
107
 
108
canvas .ev.fed \
109
    -scrollregion {0 0 280 738} \
110
    -background "#667788" \
111
    -cursor draft_small \
112
    -yscrollcommand { .ev.fedvs set } \
113
    -xscrollcommand { .ev.fedhs set }
114
 
115
scrollbar .ev.fedvs -orient vertical -command { .ev.fed yview }
116
scrollbar .ev.fedhs -orient horizontal -command { .ev.fed xview }
117
bind .ev.fed <Motion> {.ev.mapping configure -text [evstatl 1 \
118
                       [.ev.fed canvasx %x] [.ev.fed canvasy %y] ]}
119
 
120
 
121
#*** VECTORS
122
 
123
vector create nhx(2000)
124
nhx seq 5. 19995. 10.
125
vector create nhy(2000)
126
set nhy(:) 0.
127
vector create nbxx(220)
128
nbxx seq 0.5 219.5 1.
129
vector create nbxy(220)
130
set nhy(:) 0.
131
vector create hbxy(220)
132
set hbxy(:) 0.
133
vector create ncox(101)
134
ncox seq 0.5 100.5 1.
135
vector create nco4y(101)
136
set nco4y(:) 0.
137
vector create nco16y(101)
138
set nco16y(:) 0.
139
vector create nrepx(100)
140
nrepx seq 0.5 99.5 1.
141
vector create nrepy(100)
142
set nrepy(:) 0.
143
vector create nrep64y(100)
144
set nrep64y(:) 0.
145
 
146
#*** BARCHARTS
147
 
148
option add *Barchart.legend.hide yes
149
option add *Barchart.tickfont -*-helvetica-medium-r-normal-*-8-*
150
option add *Barchart.Element.relief flat
151
option add *Barchart.Element.foreground "#808080"
152
 
153
barchart $grm.nh -rightmargin 10 -title "Hits per event"
154
$grm.nh element create nh1 -xdata nhx -ydata nhy
155
$grm.nh configure -barwidth 10.
156
$grm.nh axis configure x -stepsize 5000.
157
Blt_ZoomStack $grm.nh
158
Blt_Crosshairs $grm.nh
159
 
160
barchart $grm.nbx -rightmargin 10 -title "Events per bunch"
161
$grm.nbx element create nbx1 -xdata nbxx -ydata nbxy
162
$grm.nbx configure -barwidth 1.
163
$grm.nbx axis configure x -stepsize 20.
164
Blt_ZoomStack $grm.nbx
165
Blt_Crosshairs $grm.nbx
166
 
167
barchart $grm.hbx -rightmargin 10 -title "Average hits per bunch"
168
$grm.hbx element create hbx1 -xdata nbxx -ydata hbxy
169
$grm.hbx configure -barwidth 1.
170
$grm.hbx axis configure x -stepsize 20.
171
Blt_ZoomStack $grm.hbx
172
Blt_Crosshairs $grm.hbx
173
lappend hdata hbx1
174
#array set hbxa { "n" [ nbxx length ] "x" "nbxx" "y" "hbxy" }
175
 
176
barchart $grm.nco -rightmargin 10 -title "Channel occupancy"
177
$grm.nco element create nco1 -xdata ncox -ydata nco4y -foreground $m4color
178
$grm.nco element create nco2 -xdata ncox -ydata nco16y -foreground $m16color
179
$grm.nco configure -barwidth 1. -barmode overlap
180
$grm.nco axis configure x -stepsize 10.
181
Blt_ZoomStack $grm.nco
182
Blt_Crosshairs $grm.nco
183
 
184
barchart $grm.nrep -rightmargin 10 -title "Repetition freq."
185
$grm.nrep element create nrep1 \
186
    -xdata nrepx -ydata nrepy -foreground "#a0a000"
187
$grm.nrep element create nrep2 \
188
    -xdata nrepx -ydata nrep64y -foreground "#00a0a0"
189
$grm.nrep configure -barwidth 1. -barmode overlap
190
$grm.nrep axis configure x -stepsize 10.
191
Blt_ZoomStack $grm.nrep
192
Blt_Crosshairs $grm.nrep
193
 
194
.ev.gr create window 2 1 -window $grm.nh -width 276 -height 198 -anchor nw
195
.ev.gr create window 2 201 -window $grm.nbx -width 276 -height 198 -anchor nw
196
.ev.gr create window 2 401 -window $grm.hbx -width 276 -height 198 -anchor nw
197
.ev.gr create window 2 601 -window $grm.nco -width 276 -height 198 -anchor nw
198
.ev.gr create window 2 801 -window $grm.nrep -width 276 -height 198 -anchor nw
199
.ev.gr configure  -scrollregion {0 0 280 1000}
200
 
201
 
202
#MENUBAR definitions
203
 
204
menu .ev.mb -type menubar -font $tfont -relief raised
205
 
206
  menu .ev.mb.f -font $tfont
207
    .ev.mb.f add command -label "Open" -command { set sreset 1 ; evopenp } \
208
                         -underline 0
209
    lappend open_disable ".ev.mb.f entryconfigure Open"
210
    .ev.mb.f add command -label "Append" -command { set sreset 0 ; evopenp } \
211
                         -underline 0
212
    lappend open_disable ".ev.mb.f entryconfigure Append"
213
    .ev.mb.f add command -label "Close" -command { evclosep 0 } \
214
                         -underline 0 -state disabled
215
    lappend open_enable ".ev.mb.f entryconfigure Close"
216
    .ev.mb.f add command -label "CloseGzip" -command { evclosep 1 } \
217
                         -underline 5 -state disabled
218
    lappend open_enable ".ev.mb.f entryconfigure CloseGzip"
219
    .ev.mb.f add separator
220
    .ev.mb.f add command -label "Print" -underline 0 \
221
          -command { if { $evprwin } {
222
         .ev.det postscript -file det.ps -pagewidth 17c -fontmap PSfontmap
223
        } else {
224
         .ev.det postscript -file det.ps -rotate 1 -x 0 -y 0 -pagewidth 25c \
225
                            -width [expr $evmag*350] \
226
                            -height [expr $evmag*300] -fontmap PSfontmap } }
227
    .ev.mb.f add separator
228
    .ev.mb.f add command -label "Exit" -command { evexit } -underline 0
229
 
230
  menu .ev.mb.t -font $tfont
231
    .ev.mb.t add command -label "Scan" -command evscanp -underline 0 \
232
                         -state disabled
233
    lappend open_enable ".ev.mb.t entryconfigure Scan"
234
    .ev.mb.t add command -label "Dump" -command evdumpp -underline 0 \
235
                         -state disabled
236
    lappend open_enable ".ev.mb.t entryconfigure Dump"
237
    menu .ev.mb.t.h -font $tfont
238
      foreach hname $hdata {
239
        .ev.mb.t.h add command -label $hname -command {
240
            set hid [ open hist.dat w ]
241
            set nl 0
242
            foreach i [ $grm.hbx element cget hbx1 -data ] {
243
              if $nl { puts $hid $i } else { puts -nonewline $hid "$i "}
244
              set nl [ expr ! $nl ] }
245
            close $hid } }
246
    .ev.mb.t add cascade -menu .ev.mb.t.h -label "Hout" -underline 0
247
  menu .ev.mb.tb -font $tfont
248
 
249
  menu .ev.mb.o -font $tfont
250
    menu .ev.mb.o.c -font $tfont
251
      foreach cfd [ split [ glob [file join [file dirname $config_dir] \
252
                   "*" ] ] " " ] {
253
        if [ file isdirectory $cfd] {
254
          .ev.mb.o.c add radiobutton -label [ file tail $cfd ] \
255
                     -value $cfd -variable config_dir \
256
                     -command evinitp }}
257
    .ev.mb.o add cascade -menu .ev.mb.o.c -label "Config" -underline 0
258
    lappend open_disable ".ev.mb.o entryconfigure Config"
259
    menu .ev.mb.o.mag -font $tfont
260
      .ev.mb.o.mag add radiobutton -value 1. -variable evmag -label "1x" \
261
               -command mag -underline 0
262
      .ev.mb.o.mag add radiobutton -value 2. -variable evmag -label "2x" \
263
               -command mag -underline 0
264
      .ev.mb.o.mag add radiobutton -value 4. -variable evmag -label "4x" \
265
               -command mag -underline 0
266
      .ev.mb.o.mag add radiobutton -value 8. -variable evmag -label "8x" \
267
               -command mag -underline 0
268
    .ev.mb.o add cascade -menu .ev.mb.o.mag -label "Magnification" -underline 0
269
    menu .ev.mb.o.pal -font $tfont
270
      .ev.mb.o.pal add command -label "BWpal" -underline 0 -command {
271
         foreach ctag $paltags cval $BWpal {
272
           .ev.det itemconfigure $ctag -fill $cval }}
273
      .ev.mb.o.pal add command -label "BRpal" -underline 1 -command {
274
         foreach ctag $paltags cval $BRpal {
275
           .ev.det itemconfigure $ctag -fill $cval }}
276
    .ev.mb.o add cascade -menu .ev.mb.o.pal -label "Palette" -underline 0
277
 
278
  .ev.mb add cascade -menu .ev.mb.f -label "File" -underline 0
279
  .ev.mb add cascade -menu .ev.mb.t -label "Tools" -underline 0
280
  .ev.mb add cascade -menu .ev.mb.tb -label "Toolbar" -underline 4
281
  .ev.mb add cascade -menu .ev.mb.o -label "Options" -underline 0
282
 
283
 
284
# TOOLBAR definitions
285
 
286
frame .ev.tb -height [expr $evmag*14] -background "#00AA00"
287
 
288
# OPEN & CLOSE button
289
button .ev.tb.opcl -text "Open" -command { set sreset 1 ; evopenp } \
290
                   -font $tfont
291
pack .ev.tb.opcl -side left -padx 2 -pady 2
292
 
293
# PREVIOUS event
294
button .ev.tb.prev -text "<" -command evprevplotp -state disabled \
295
       -font $tfont -width 0
296
lappend open_enable ".ev.tb.prev configure"
297
pack .ev.tb.prev -side left  -pady 2
298
bind .ev.tb.prev <2> { set curev [expr [.ev.tb.curev get]-10]
299
                       evgoto [expr [expr $curev>0]?$curev:1]
300
                       evplotp}
301
bind .ev.tb.prev <3> { set curev [expr [.ev.tb.curev get]-100]
302
                       evgoto [expr [expr $curev>0]?$curev:1]
303
                       evplotp}
304
 
305
# CURENT event
306
entry .ev.tb.curev -width 5 -font $tfont -state disabled
307
lappend open_enable ".ev.tb.curev configure"
308
pack .ev.tb.curev -side left  -pady 2
309
bind .ev.tb.curev <KeyPress-Return> { evgoto [.ev.tb.curev get]
310
                        evplotp}
311
 
312
# NEXT event
313
button .ev.tb.next -text ">" -command evplotp -state disabled \
314
       -font $tfont -width 0
315
lappend open_enable ".ev.tb.next configure"
316
pack .ev.tb.next -side left  -pady 2
317
bind .ev.tb.next <2> { evgoto [expr [.ev.tb.curev get]+10]
318
                       evplotp}
319
bind .ev.tb.next <3> { evgoto [expr [.ev.tb.curev get]+100]
320
                       evplotp}
321
 
322
# SCAN events
323
button .ev.tb.scan -text "Scan" -command { evscanp ; evscanplotp } \
324
       -state disabled -font $tfont -width 4
325
lappend open_enable ".ev.tb.scan configure"
326
pack .ev.tb.scan -side left -padx 2 -pady 2
327
 
328
# MAXIMUM of the scan
329
entry .ev.tb.scmax -width 3 -font $tfont
330
.ev.tb.scmax insert 0 "100"
331
pack .ev.tb.scmax -side left -padx 2 -pady 2
332
 
333
# JOIN & SPLIT detectors
334
button .ev.tb.join -text "Join" -command evjoin -font $tfont
335
pack .ev.tb.join -side left -padx 2 -pady 2
336
 
337
# AMOUNT of chenels to move
338
entry .ev.tb.jmove -width 3 -font $tfont
339
.ev.tb.jmove insert 0 "80"
340
pack .ev.tb.jmove -side left -padx 2 -pady 2
341
 
342
# PRINT button
343
button .ev.tb.print -text "Print" -font $tfont \
344
          -command { if { $evprwin } {
345
         .ev.det postscript -file det.ps -pagewidth 17c -fontmap PSfontmap
346
         .ev.fed postscript -file fed.ps -pageheight 25c
347
        } else {
348
         .ev.det postscript -file det.ps -rotate 1 -x 0 -y 0 -pagewidth 25c \
349
                            -width [expr $evmag*350] \
350
                            -height [expr $evmag*300] -fontmap PSfontmap
351
         .ev.fed postscript -file fed.ps -x 0 -y 0 -pageheight 25c \
352
		 -width 280 -height 738 }
353
         $grm.nh postscript output g1.eps -width 560 -height 400
354
         $grm.nbx postscript output g2.eps -width 560 -height 400
355
         $grm.hbx postscript output g3.eps -width 560 -height 400
356
         $grm.nco postscript output g4.eps -width 560 -height 400
357
         canvas .eps
358
         .eps create eps 4 4 -file g1.eps -showimage no
359
         .eps create eps 4 404 -file g2.eps -showimage no
360
         .eps create eps 564 4 -file g3.eps -showimage no
361
         .eps create eps 564 404 -file g4.eps -showimage no
362
         .eps postscript -file gr.ps -x 0 -y 0 -pagewidth 16c \
363
                         -width 1120 -height 800
364
         destroy .eps
365
         }
366
pack .ev.tb.print -side left -padx 2 -pady 2
367
 
368
 
369
# OPTIONS menu
370
menubutton .ev.tb.opt -menu .ev.tb.opt.m -text "Opt" -relief raised \
371
                      -font $tfont
372
menu .ev.tb.opt.m -font $tfont
373
.ev.tb.opt.m add checkbutton -variable evrescan -label "allways rescan"
374
.ev.tb.opt.m add checkbutton -variable evnorm -label "norm. to events"
375
.ev.tb.opt.m add checkbutton -variable evm4norm -label "norm. M4 channels"
376
.ev.tb.opt.m add checkbutton -variable evreverse -label "reverse scale"
377
.ev.tb.opt.m add checkbutton -variable evhot -label "rescan hot"
378
.ev.tb.opt.m add checkbutton -variable evmask -label "remove hot"
379
.ev.tb.opt.m add separator
380
.ev.tb.opt.m add checkbutton -variable evmap -label "focal plane map" \
381
                             -command { evinitp }
382
.ev.tb.opt.m add separator
383
.ev.tb.opt.m add checkbutton -variable evprwin -label "print only visible"
384
pack .ev.tb.opt -side right -padx 2 -pady 2
385
 
386
 
387
# MAGNIFICATION menu
388
menubutton .ev.tb.mag -menu .ev.tb.mag.m -text "Mag" -relief raised \
389
                      -font $tfont
390
menu .ev.tb.mag.m -font $tfont
391
.ev.tb.mag.m add radiobutton -value 1. -variable evmag -label "1x" -command mag
392
.ev.tb.mag.m add radiobutton -value 2. -variable evmag -label "2x" -command mag
393
.ev.tb.mag.m add radiobutton -value 4. -variable evmag -label "4x" -command mag
394
.ev.tb.mag.m add radiobutton -value 8. -variable evmag -label "8x" -command mag
395
pack .ev.tb.mag -side right -padx 2 -pady 2
396
 
397
frame .ev.tb1 -height [expr $evmag*14] -background "#0000AA"
398
 
399
# EXIT button
400
button .ev.tb1.ex -text {exit} -command { evexit } -font $tfont
401
pack .ev.tb1.ex -side right -padx 2 -pady 2
402
 
403
 
404
#*** STATUSLINE definitions
405
 
406
label .ev.mapping -relief ridge -anchor w -text "" -font $tfont
407
label .ev.evdata -relief ridge -anchor w -text "" -font $tfont
408
label .ev.status -relief ridge -anchor w -text "" -font $tfont
409
 
410
button .ev.yy -background "#000000"
411
 
412
 
413
#*** GEOMETRY MANAGER
414
  table .ev \
415
    0,0 .ev.mb -fill both -cspan 4 \
416
    1,0 .ev.tb -fill both -cspan 2 \
417
    1,2 .ev.tb1 -fill both -cspan 2 \
418
    2,0 .ev.det -fill both \
419
    2,1 .ev.detvs -fill both \
420
    3,0 .ev.deths -fill both \
421
    4,0 .ev.mapping -fill both -cspan 2 \
422
    5,0 .ev.evdata -fill both -cspan 2 -rspan 2 \
423
    2,2 .ev.gr -fill both -rspan 4 \
424
    6,2 .ev.grhs -fill both \
425
    2,3 .ev.grvs -fill both -rspan 4 \
426
    6,3 .ev.yy -fill both \
427
    7,0 .ev.status -fill both -cspan 4
428
  table configure .ev c1 c2 c3 r0 r1 r3 r4 r5 r6 r7 -resize none
429
  table configure .ev c2 -width [expr $evmag*140]
430
  table configure .ev c1 c3 -width [expr 8+$evmag*5]
431
  table configure .ev r3 r6 -height [expr 8+$evmag*5]
432
  table configure .ev r0 r1 -height [expr 10+$evmag*12]
433
  table configure .ev r2 -height { 100 1000 } -resize both
434
  table configure .ev c0 -width { 100 1200 } -resize both
435
  table arrange .ev
436
 
437
 
438
 
439
#*** display initialisation procedure
440
 
441
proc evinitp {} {
442
  global evmap evmag m4color m16color tfont config_dir
443
  .ev.det delete all
444
  .ev.fed delete all
445
  set xy [expr $evmag*10]
446
  if $evmap {
447
    .ev.det create text $xy $xy -text "FOCAL PLANE MAP" -fill "#00AA00" \
448
            -anchor w -font $tfont -tags t
449
    catch {table forget .ev.fed .ev.fedvs .ev.fedhs}
450
    table .ev \
451
    2,2 .ev.gr -fill both -rspan 4 \
452
    6,2 .ev.grhs -fill both \
453
    2,3 .ev.grvs -fill both -rspan 4
454
    } else {
455
    .ev.det create text $xy $xy -text "PMT PLANE MAP" -fill "#AA0000" \
456
            -anchor w -font $tfont -tags t
457
    catch {table forget .ev.gr .ev.grvs .ev.grhs}
458
    table .ev \
459
    2,2 .ev.fed -fill both -rspan 4 \
460
    6,2 .ev.fedhs -fill both \
461
    2,3 .ev.fedvs -fill both -rspan 4
462
    }
463
  puts  " $config_dir  $evmag"
464
  evinit .ev.det .ev.fed $evmag
465
  .ev.det lower m4 m16
466
}
467
evinitp
468
 
469
#*** FILE open procedure
470
 
471
proc evopenp {} {
472
  global data_dir evmag new_scan evfile tfont evhot open_enable open_disable
473
  set new_scan 1
474
  if ![file isdirectory $data_dir] { set data_dir "." }
475
      set evfile [tk_getOpenFile -initialdir $data_dir -parent .ev \
476
          -filetypes { \
477
                      {"all data" {.dat .dat.gz .daq .daq.gz \
478
                                   .daq1 .daq1.gz .dst .dst.gz \
479
				   .ric .ric.gz}} \
480
                      {"old data format" {.dat .dat.gz}} \
481
                      {"common-daq" {.daq .daq.gz}} \
482
                      {"mare-daq+rec" {.daq1 .daq1.gz}} \
483
                      {"common-dst" {.dst .dst.gz}} \
484
                      {"rich" {.ric .ric.gz}} \
485
                      {"all" {*}} \
486
                     }]
487
  if { $evfile != "" } {
488
    if { [set ztip [string last ".gz" $evfile]] != -1 } {
489
      exec gunzip $evfile
490
      set evfile [string range $evfile 0 [expr $ztip-1]]
491
    }
492
    set data_dir [file dirname $evfile]
493
    evopen $evfile
494
    foreach com $open_enable { eval $com -state normal }
495
    foreach com $open_disable { eval $com -state disabled }
496
    .ev.tb.opcl configure -text "Close" -command {evclosep 0}
497
    .ev.tb.curev delete 0 end
498
    .ev.det delete ev sc
499
    .ev.fed delete sc
500
    .ev.det delete tf
501
    .ev.det create text [expr $evmag*10] [expr $evmag*293] \
502
            -text [file tail $evfile] -fill "#00c0c0" \
503
            -anchor w -font $tfont -tags tf
504
    bind .ev.tb.opcl <2> {evclosep 1}
505
  }
506
}
507
 
508
#*** FILE close procedure
509
 
510
proc evclosep {gzipit} {
511
  global evfile gzip_stat withBLT open_enable open_disable
512
  set gzip_stat {}
513
# use of middle button will gzip file after close
514
  bind .ev.tb.opcl <2> {}
515
  evclose
516
  foreach com $open_enable { eval $com -state disabled }
517
  foreach com $open_disable { eval $com -state normal }
518
  if { $gzipit } {
519
    .ev.tb.opcl configure -state disabled
520
      if { $withBLT } {
521
	bgexec gzip_stat gzip $evfile } else {
522
        exec gzip $evfile }
523
    .ev.tb.opcl configure -state normal }
524
  .ev.tb.opcl configure -text "Open" -command evopenp
525
}
526
 
527
#*** FILE dump procedure
528
 
529
proc evdumpp {} {
530
  global dump_dir
531
  if ![file isdirectory $dump_dir] { set dump_dir "." }
532
      set dumpfile [tk_getSaveFile -initialdir $dump_dir -parent .ev \
533
          -filetypes { \
534
                      {"rich" {.ric}} \
535
                      {"all" {*}} \
536
                     }]
537
  if { $dumpfile != "" } {
538
    set dump_dir [file dirname $dumpfile]
539
    evdump $dumpfile
540
  }
541
}
542
 
543
#*** procedure to produce occupancy plot
544
 
545
proc evscanp {} {
546
  global evmag new_scan evrescan evnorm evreverse evmask
547
#  global nhy nbxy hbxy nco4y nco16y nrepy nrep64y
548
    if { $new_scan || $evrescan} {
549
      uplevel #0 { evscan }
550
      set new_scan 0
551
    }
552
}
553
 
554
proc evscanplotp {} {
555
  .ev.det delete ev sc
556
  .ev.fed delete ev sc
557
  .ev.status configure -text \
558
     [ uplevel #0 { evscanplot .ev.det $evmag [ .ev.tb.scmax get ] .ev.fed } ]
559
}
560
 
561
#*** procedure to join detector halfs
562
 
563
proc evjoin {} {
564
  global evmag jmove
565
  .ev.tb.jmove configure -state disabled
566
  .ev.tb.scan configure -state disabled
567
  set jmove [.ev.tb.jmove get]
568
  .ev.det addtag ld enclosed 0 [expr $evmag*150] [expr $evmag*350] \
569
          [expr $evmag*300]
570
  .ev.det move ld 0 [expr -$evmag*$jmove]
571
  .ev.tb.join configure -text "Split" -command evsplit
572
}
573
 
574
#*** procedure to split detector halfs
575
 
576
proc evsplit {} {
577
  global evmag jmove
578
  .ev.tb.jmove configure -state normal
579
  .ev.tb.scan configure -state normal
580
  .ev.det move ld 0 [expr $evmag*$jmove]
581
  set jmove 0
582
  .ev.tb.join configure -text "Join" -command evjoin
583
}
584
 
585
#*** procedure to plot previose event
586
 
587
proc evprevplotp {} {
588
  set curev [expr [.ev.tb.curev get]-1]
589
  evgoto [expr [expr $curev>0]?$curev:1]
590
  evplotp
591
}
592
 
593
#*** procedure to plot next event
594
 
595
proc evplotp {} {
596
  global evmag evcolor jmove tfont evmask
597
  .ev.det delete ev sc ri
598
  .ev.fed delete ev sc
599
  .ev.evdata configure -text [evplot .ev.det $evmag .ev.fed]
600
}
601
 
602
#*** called when magnification factor is changed
603
 
604
proc mag {} {
605
  global evmag oldevmag
606
  set sc [expr $evmag/$oldevmag]
607
  set xf [lindex [.ev.det xview] 0]
608
  set yf [lindex [.ev.det yview] 0]
609
  .ev.det configure -scrollregion "0 0 [expr $evmag*350] [expr $evmag*300]"
610
  .ev.det xview moveto $xf
611
  .ev.det yview moveto $yf
612
  .ev.det scale all 0 0 $sc $sc
613
  set oldevmag $evmag
614
}
615
 
616
proc evexit {} {
617
  exit
618
}
619
 
620
proc center {x y} {
621
  puts [table cget .ev c0 -width]
622
}
623