-
Notifications
You must be signed in to change notification settings - Fork 0
/
convlv26.scr
96 lines (63 loc) · 2.49 KB
/
convlv26.scr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
\ Electron Drift Instrument 16:13 01-10-91
(
Source Files
WELCOME TO EDI CASS TEAM
DRIVERS FOR HIGH VOLTAGE SYSTEM FOR EDI OPTICS
BY JOE RITTER,SLOBODAN BEROS,SCOTT WEISMAN,CARL MCILWAIN
CONVLV26.SCR
)
\ 16:48 01-17-91
\ THIS MODULE HAS ROUTINES TO PERFORM CONVOLUTIONS ON HISTOGRAM
\ DATA. THE CONVOLUTION ROUTINES ARE GENERALIZED AND CAN USE
\ ANY LENGTH OF QUARTER-SECTOR BINS FOR THE KERNEL. THIS
\ MEANS THAT STANDARD ANODE CONFIGURATIONS (1,2,4,8) CAN BE
\ USED, AS WELL AS ANY AMOUNT OF QUARTER-SECTORS UP TO 32, FOR
\ ODD SIZED KERNELS.
\ 17:18 01-22-91
\ FWHM STANDS FOR FULL WIDTH AT HALF MAX AND IS A 3 PART
\ ROUTINE. FIRST, IT FINDS THE PEAK VALUE IN THE CONVOLUTION
\ AND THE INDEX OF THAT VALUE. THEN, IT LOOP FROM 0 TO THE
\ PEAK INDEX AND LOOKS FOR THE POINT THAT IS JUST GREATER THAN
\ HALF THE PEAK. THEN IT LOOPS FROM THE LAST VALUE (WHICH IS
\ 72+KERNEL_LENGTH) TO THE PEAK (INCREMENT -1) AND LOOKS FOR
\ THE POINT THAT IS JUST _LESS_ THAN HALF THE PEAK. THEN IT
\ TAKES ABS(LEFT-RIGHT) AND MULTS. BY BIN-WIDTH TO GET THE
\ AZIMUTHAL ACCEPTANCE WIDTH
DECIMAL
\ 15:55 01-22-91
: FIND-FWHM ( --- AZIM-ACCEP ) \ RETURNS FLOAT
0 PEAK-CONV-VAL !
104 -32 DO \ FIND PEAK-CONV-VAL AND INDEX
I CONV-DEST@ DUP PEAK-CONV-VAL @ > IF
PEAK-CONV-VAL ! I PEAK-CONV-INDEX ! ELSE DROP THEN
LOOP
PEAK-CONV-INDEX @ 0 DO \ FIND LEFT FWHM VAL
PEAK-CONV-VAL @ S>F 2E F/ I CONV-DEST@ S>F F< IF
I 1- LEAVE THEN
LOOP
PEAK-CONV-INDEX @ 103 DO \ FIND RIGHT FWHM VAL
PEAK-CONV-VAL @ S>F 2E F/ I CONV-DEST@ S>F F< IF
I LEAVE THEN
-1 +LOOP
- ABS S>F BIN-WIDTH F@ F* ; \ FWHM=ABS(LEFT-RIGHT)*BIN_WIDTH
\ 13:11 01-22-91
: CONVOLVE ( N --- F ) \ N=WIDTH OF CONV KERNEL IN BINS
CONV-WIDTH ! \ F=AZIM-ACCEP(FLOAT)
ZERO-CONV
ARC-CENTER[] CONV-SOURCE[] 128 + 288 CMOVE
104 0 DO
I I CONV-WIDTH @ - DO I CONV-SOURCE@ J CONV-DEST+! LOOP
LOOP
FIND-FWHM
;
\ ARC-CENTER[] IS MOVED TO THE CENTER OF CONV-SOURCE[], WHICH
\ HAS 32 FILLER ENTRIES ON EITHER SIDE. THIS EXPLAINS THE
\ 128 (32*4) OFFSET.
\ 13:05 01-22-91
: COMPUTE-AZIM-ACCEP ( --- )
1 4* CONVOLVE 1FWHM F!
2 4* CONVOLVE 2FWHM F!
4 4* CONVOLVE 4FWHM F!
8 4* CONVOLVE 8FWHM F!
;
\ MUST MULT. KERNEL WIDTH BY 4 TO GET BINS, NOT ANODES