Commit | Line | Data |
---|---|---|
81e70d48 PH |
1 | C -+-+-+-+-+ \ e H A E S P L . F T \ e -+-+-+-+-+\r |
2 | C\r | |
3 | C * UP 1-OCT-82\r | |
4 | C * UP 3-NOV-82\r | |
5 | C * UP 26-NOV-82\r | |
6 | C * UP 12-JAN-83\r | |
7 | C * UP 25-APR-83\r | |
8 | C * UP 26-APR-83\r | |
9 | C * UP 28-APR-83\r | |
10 | C * UP 5-MAY-83\r | |
11 | C * UP 10-MAY-83\r | |
12 | C * UP 11-NOV-83 TIME SCALE OF PLOT MAY EXCEED SAMPLE TIME \r | |
13 | C * UP 8-DEC-83 DEBUGGING\r | |
14 | C * UP 30-NOV-84 SOME NEW ENHANCEMENTS FOR I/O AND PLOTTER\r | |
15 | C * UP 10-DEC-84\r | |
16 | C * UP 3-JUL-85 OUTPUT SCHMITT TRIGGER CHANNELS\r | |
17 | C * UP 15-AUG-85 \r | |
18 | C * UP 22-AUG-85 REMOVES SOME BUGS CONCERNING TRIGG OUTPUT \r | |
19 | C * UP 3-SEP-85 IF SW 8 UP: INSERTS TRIGG FREQUENCY PLOT\r | |
20 | C * UP 1-NOV-85 DEBUGGS ASZISSA SCALE ROUTINE\r | |
21 | C * UP 19-NOV-85 REMOVES SOME BUGS\r | |
22 | C\r | |
23 | C PLOT THE DATA POINTS\r | |
24 | C\r | |
25 | SUBROUTINE SPLOT\r | |
26 | INCLUDE HAEPTI.FI\r | |
27 | INCLUDE HAEBUF.FI\r | |
28 | INCLUDE HAEGSA.FI\r | |
29 | INCLUDE HAETTY.FI\r | |
30 | INCLUDE HABRK.FI\r | |
31 | INCLUDE HAECSZ.FI\r | |
32 | INCLUDE HAEHAS.FI\r | |
33 | INCLUDE HAECSP.FI\r | |
34 | INCLUDE HAECTR.FI\r | |
35 | INCLUDE HAPPEN.FI\r | |
36 | REAL XYSAM,COND\r | |
37 | LOGICAL BETW\r | |
38 | INTEGER NCOND,TOASCI,IXTA,FLD\r | |
39 | EXTERNAL XYSAM,NCOND,COND,TOASCI,IXTA,FLD,BETW\r | |
40 | C\r | |
41 | \fC\r | |
42 | REAL ORDMIN(8),ORDMAX(8)\r | |
43 | EQUIVALENCE (SRDMIN(1),ORDMIN(1)),(SRDMAX(1),ORDMAX(1)) @ EQUIVALENCE INTO THE HAECSP COMMON BLOCK\r | |
44 | LOGICAL TIMABZ,TIMORD, @ ABZISSE / ORDINATE IS TIME SCALE\r | |
45 | * ABISMI, @ IF THE ABZISSA SCALE EXCEEDS 5 MINUTES THEN .TRUE. ELSE .FALSE.\r | |
46 | * BOTH,L1,ADPLT @ PLOT MIN&MAX OF SOME Y POINTS, WE ARE PLOTTING A/D CHANNELS\r | |
47 | INTEGER I,K,K1,J,PENPOS,MSG, @ MSG HOLDS TEMP MESSAGE FOR FORMAT 5 AND 6\r | |
48 | * STEP,STEPS, @ INCREMENT IN SAMBUF SCAN\r | |
49 | * CA,CO, @ CHANNEL OF ABZISSE, ORDINATE\r | |
50 | * PLBEG,PLEND, @ START/END OF TIME SCALE\r | |
51 | * NUMCN, @ NUMBER OF CHANNELS TO SCAN (NO MEANING IF TIMABZ IS SET .FALSE.)\r | |
52 | * NUMTRI,ALLCHS, @ NUMBER OF TRIGGER INPUTS TO PLOTT, TOTAL # OF CHANNELS TO SCAN (A/D +STRIGG)\r | |
53 | * EXPAND @ IF THE TIME SCALE .LE. 5 SECONDS THEN WE MARK EACH 1/10 SECOND ELSE EACH SECOND\r | |
54 | * ,TS1 @ HOLDS PLEND*SAMRAT FOR SCALEING THE ABZISSA\r | |
55 | REAL TEMSET, @ DIFFERENCE PLOTTER 0,0 AND PICTURE 0,0 (NO MEANING IF TIMABZ IS SET TO .FALSE.)\r | |
56 | * LEFT,RIGHT,UP,DOWN, @ PLOT SCALES ABZISSE/ ORDINATE\r | |
57 | * TE1,TE2,TE3, @ TEMPS\r | |
58 | * X,Y,YFMIN,YFMAX, @ USED TO COMPRESS PLOT OUTPUT\r | |
59 | * OLDX @ USED TO COMPRESS PLOT OUTPUT\r | |
60 | * ,OMAX,OMIN @ MAXIMUM AND MINIMUM OF ORDINATE DATA\r | |
61 | INTEGER TEXT0(4) @ DIMENSION OF THE TIME AXIS (MIN OR SEC)\r | |
62 | * ,TEXT1(2) @ MSG FOR FORMAT 3 OUTPUT\r | |
63 | DATA CA,CO,NUMCN,STEP,NUMTRI,ALLCHS /0,8,2,3,0,2/,\r | |
64 | * TEXT0 /'TIME [MIN] TIME [SEC]'/\r | |
65 | * ,TEXT1 /'A/D','TRG'/\r | |
66 | C\r | |
67 | C STATEMENT FUNCTIONS ARE:\r | |
68 | C\r | |
69 | BOX(AP1)=AMAX1(AMIN1(AP1,UP-DOWN),-.01)\r | |
70 | XF(IP1)=XYSAM(IP1,CA)-LEFT @ RETURNS THE VALUE OF THE ABZISSA WITH CORRECT OFFSET\r | |
71 | YF(IP1)=XYSAM(IP1,CO)-DOWN @ RETURNS THE VALUES OF THE ORDINATE WITH THE CORRECT OFFSET\r | |
72 | DEFALT(I1,I2)=NCOND(I1.EQ.1H ,I2,IXTA(FLD(0,6,I1))-48) @ RETURNS DEFAULT VALUES\r | |
73 | \fC\r | |
74 | IF (SAMCNT.EQ.0) RETURN @ NO SAMPLE, NOTHING TO DO\r | |
75 | C \r | |
76 | C COMPUTE THE DEFAULT VALUES FOR THE PLOT\r | |
77 | C\r | |
78 | IF (OPTION.EQ.11) GOTO 15 @ SP- SKIPS QUESTIONS AND TAKES THE LAST VALUES USED\r | |
79 | IF (OPTION.NE.12) CALL ASKHIM (2) @ SP* DOES NOT ASK SCILLY QUESTIONS\r | |
80 | 14 CO=0 @ THE ORDINATE IS CHANNEL 0\r | |
81 | CA=8 @ THE ABZISSA IS THE TIME SCALE\r | |
82 | NUMCN=CHNLS-CO @ ALL CHANNELS TO PLOT\r | |
83 | STEP=1 @ WE PLOT EACH POINT OF THE DATA\r | |
84 | WRITE (TTO,1) CA,CO,STEP @ READ CHANNEL ##\r | |
85 | READ (TTI,2) I,J,K @ AND STEP INCREMENTS\r | |
86 | IF BREAK(11) RETURN\r | |
87 | CA=DEFALT(I,CA)\r | |
88 | CO=DEFALT(J,CO)\r | |
89 | STEP=NCOND(K,K,STEP) @ CA,CO, STEP DEFAULT VALUES FOR BLANK INPUT\r | |
90 | IF (.NOT.(CA.LT.0 .OR. CO.LT.0 .OR. STEP.LE.0)) GOTO 12\r | |
91 | 13 WRITE (TTO,9)CA,CO,STEP\r | |
92 | GOTO 14\r | |
93 | 12 IF (CA.GE.CHNLS .AND. CA.LT.8) GOTO 13 @ TEST FOR VALID CHANNEL NUMBER\r | |
94 | IF (CO.GE.CHNLS .AND. CO.LT.8) GOTO 13\r | |
95 | C\r | |
96 | TIMABZ=CA.GT.7 @ ABZISSE IS THE TIME SCALE\r | |
97 | TIMORD=CO.GT.7 @ ORDINATE IS THE TIME SCALE\r | |
98 | IF (.NOT.TIMABZ) GOTO 15 @ ABZISSA IS NO TIME SCALE: ONLY TWO CHANNELS (CO,CO+1) TO PLOT\r | |
99 | NUMCN=MIN0(NUMCN,CHNLS-CO) @ COMPUTE CORRECT NUMBER OF CHANNELS\r | |
100 | WRITE (TTO,3) TEXT1(1),NUMCN @ READ THE NUMBER OF CHANNELS TO SCAN\r | |
101 | READ (TTI,2) I\r | |
102 | CA=DEFALT(I,CA)\r | |
103 | CO=DEFALT(J,CO)\r | |
104 | I=DEFALT(I,NUMCN) @ FOR BLANK INPUT DEFAULT IS NUMCN\r | |
105 | NUMCN=MIN0(CHNLS-CO,NCOND(I,I,NUMCN)) @ NO INPUT MEANS CHNLS-CO\r | |
106 | NUMTRI=STRIGS\r | |
107 | ALLCHS=NUMCN+NUMTRI @ NUMBER OF A/D AND STRIGG CHANNELS TO PLOT\r | |
108 | C\r | |
109 | C ASK FOR NUMBER OF STRIGG CHANNELS TO PLOT\r | |
110 | C\r | |
111 | IF (STRIGS.EQ.0) GOTO 11 @ NO STRIGS, NO QUESTIONS\r | |
112 | NUMTRI=STRIGS @ INSERT DEFAULT VALUE\r | |
113 | WRITE (TTO,3) TEXT1(2),NUMTRI @ READ THE NUMBER OF STRIGG CHANNELS TO SCAN\r | |
114 | READ (TTI,2) I\r | |
115 | I=DEFALT(I,NUMTRI) @ BLANK INPUTS DEFAULTS TO NUMTRI\r | |
116 | NUMTRI=MIN0(STRIGS,MAX0(0,I)) @ INSERT CORRECT VALUE\r | |
117 | ALLCHS=MIN0(NUMCN+NUMTRI,7) @ ONLY 8 CHANNELS ALLOWED\r | |
118 | 11 CONTINUE\r | |
119 | C\r | |
120 | C ASK FOR SCALE OF THE ORDINATE (MINIMUM AND MAXIMUM)\r | |
121 | C\r | |
122 | K=CO-1\r | |
123 | DO 80 I=1,ALLCHS\r | |
124 | K=K+1\r | |
125 | MSG=NCOND(K.GE.CO+NUMCN,TEXT1(2),TEXT1(1)) @ EITHER A/D OR TRG MESSAGE TO PRINT\r | |
126 | J=NCOND(K.GE.CO+NUMCN,1+K-CO-NUMCN,K) @ NUMBER OF A/D OR TRIGGER CHANNEL\r | |
127 | WRITE (TTO,5) MSG,J,ORDMAX(K+1) @ READ THE MAXIMUM\r | |
128 | READ (TTI,7) TE1\r | |
129 | ORDMAX(K+1)=COND(TE1,TE1,ORDMAX(K+1))\r | |
130 | IF (BREAK(11)) RETURN\r | |
131 | WRITE (TTO,6) MSG,J,ORDMIN(K+1) @ READ THE MINIMUM\r | |
132 | READ (TTI,7) TE1\r | |
133 | ORDMIN(K+1)=COND(TE1,TE1,ORDMIN(K+1))\r | |
134 | IF (BREAK(11)) RETURN\r | |
135 | 80 CONTINUE\r | |
136 | 15 CONTINUE\r | |
137 | \fC\r | |
138 | C COMPUTE THE SCALING LIMITS\r | |
139 | C\r | |
140 | S0=BEGIN*SAMRAT @ HERE WE START THE OUTPUT PLOT\r | |
141 | S1=ENDS*SAMRAT @ AND HERE WE END THE PLOT\r | |
142 | TS1=S1\r | |
143 | C PLBEG HOLDS THE FIRST SECOND OF THE TIME SCALE (LEFTMOST )\r | |
144 | C PLEND HOLDS THE LAST SECOND OF THE TIME SCALE ( RIGHTMOST DOT)\r | |
145 | C TS1 HOLDS FACTOR FOR TIME SCALE (PLEND*SAMRAT)\r | |
146 | C S0 HOLDS THE STARTING INDEX OF DATA TO PLOT ( PLBEG*SAMRAT)\r | |
147 | C S1 HOLDS THE INDEX OF LAST DATA POINT (MIN0(SAMCNT,TS1))\r | |
148 | PLBEG=BEGIN\r | |
149 | PLEND=ENDS\r | |
150 | C\r | |
151 | IF (S1.LE.SAMCNT) GOTO 17 @ IF THE INTERVALL TO PLOT EXCEEDS THE\r | |
152 | TE1=SAMCNT/SAMRAT @ DATA POINTS THEN\r | |
153 | TE2=S1/SAMRAT\r | |
154 | WRITE (TTO,4) TE1,TE2 @ WE PRINT THE OVERFLOW MSG AND\r | |
155 | S1=SAMCNT-1 @ TAKE CARE FOR TRUNCATION ERRORS\r | |
156 | 17 CONTINUE @ INTERVALL OK, COMPUTE UPPER AND LOWER MARGIN OF PLOT DATA\r | |
157 | RIGHT=COND(TIMABZ,FLOAT(TS1),512.) @ ABZISSE MARGIN EITHER TIME OR 10 BIT CONVERTER\r | |
158 | LEFT =COND(TIMABZ,FLOAT(S0),-512.)\r | |
159 | UP =COND(TIMORD,FLOAT(TS1),512.) @ ORDINATE MARGIN\r | |
160 | DOWN =COND(TIMORD,FLOAT(S0),-512.)\r | |
161 | IF BREAK(11) RETURN @ USER GETS RID OF PRGRM\r | |
162 | CALL STPLT @ START THE PLOTTER ( CALL PLOTS)\r | |
163 | CALL XYPLOT (XOFSET,YOFSET,-PENUP) @ DRIVE PEN TO PICTURE ZERO\r | |
164 | C\r | |
165 | C LOOP TO PLOT EACH CHANNEL WITH CORRECT OFFSET, FACTOR AND SCALE\r | |
166 | C TEMSET HOLDS THE ORIGIN FOR EACH CHANNEL\r | |
167 | C TEMSET=0 PLOT ONE CHANNEL/TIME OR X/Y\r | |
168 | C TEMSET=YLEN/(NUMCN+NUMTRI) FOR MORE THAN ONE CHANNEL\r | |
169 | C THE TEMSET ORIGIN OFFSET IS RESET AT THE END OF THE LOOP ( ST. 25)\r | |
170 | C\r | |
171 | C\r | |
172 | TEMSET=0 @ CO HOLDS THE FIRST CHANNEL TO PLOT (INCREMENTED AT END OF LOOP)\r | |
173 | DO 20 K=1,NCOND(TIMABZ,ALLCHS,1) @ SCAN ALLCHS CHANNELS WITH INDEX K FROM 1 TO ALLCHS\r | |
174 | C\r | |
175 | C HERE WE COMPUTE THE ACTUAL CHANNEL NUMBER:\r | |
176 | C EITHER A/D CO TO NUMCN-1 (0 TO CHNLS-1) OR\r | |
177 | C TRIGG EVENT FROM CHNLS TO CHNLS+STRIGS\r | |
178 | C\r | |
179 | C ADPLT IS SET TRUE FOR A/D CHANNELS TO SCAN\r | |
180 | C STEPSIZE IS THE INCREMENT FOR THE SCAN;\r | |
181 | C FOR A/D CHANNELS THE MAXIMUM VALUE OF THE SPECIFIED: STEP OR\r | |
182 | C IF LOWER SAMPLE FREQUENCY THAN MAXRAT THE PACK-VALUE.\r | |
183 | C FOR TRIGG EVENT CHANNELS STEP MUST ALLWAYS BE 1!\r | |
184 | C\r | |
185 | IF (K.GT.NUMCN)CO=CHNLS+K-NUMCN-1 @ CO RUNS FROM CO TO CO+NUMCN FOR AD, FOR TRIGG'S FROM CHNLS TO CHNLS+TRIGS\r | |
186 | ADPLT=CO.LT.CHNLS @ WE ARE PLOTTING A/D CHANNELS\r | |
187 | STEPS=NCOND(ADPLT,MAX0(STEP,PACK(CO+1)),1) @ COMPUTE STEPSIZE FOR SCAN\r | |
188 | C\r | |
189 | C HERE WE DECIDE : X OVER Y PLOT \r | |
190 | C OR X OVER TIME\r | |
191 | C\r | |
192 | IF (.NOT. TIMABZ) GOTO 51\r | |
193 | C\r | |
194 | C X OVER TIME\r | |
195 | C \r | |
196 | C IF THERE IS MORE THAN ONE CHANNEL WE HAVE TO PREPARE A LOT OF SMALL\r | |
197 | C Y - AXIS FOR EACH CHANNEL TO SCAN. SO WE SET A TEMPORARY Y OFFSET CALLED TEMSET\r | |
198 | TEMSET=FLOAT(ALLCHS-K)*(YLEN-ALLCHS*.5+.5)/\r | |
199 | * FLOAT(ALLCHS)+(ALLCHS-K)*.5 @ TEMPORARY Y OFFSET\r | |
200 | CALL XYPLOT (0,TEMSET,-PENUP) @ SWITCH TO CORRECT PART OF PICTURE\r | |
201 | C\r | |
202 | C COMPUTE THE FACTOR TO GET A PRETTY PLOT\r | |
203 | C\r | |
204 | K1=CO+1 @ INDEX TO ORDMIN/MAX SINCE CO STARTS WITH 0\r | |
205 | UP=ORDMAX(K1)\r | |
206 | DOWN=ORDMIN(K1) @ INSERT THE DEFAULT SCALING LIMITS\r | |
207 | IF (ORDMAX(K1).LE.ORDMIN(K1)) GOTO 21 @ AUTOMATIC SCALING DESIRED\r | |
208 | OMAX=UP\r | |
209 | OMIN=DOWN\r | |
210 | GOTO 51 @ SCALING ALREADY DONE\r | |
211 | \fC\r | |
212 | C HERE WE DO AUTOMATIC SCALING\r | |
213 | C\r | |
214 | 21 CONTINUE\r | |
215 | OMAX=-99999.\r | |
216 | OMIN=-OMAX\r | |
217 | DO 50 J=S0,S1,STEPS @ FETCH MIN & MAX OF THE DATA\r | |
218 | IF (BREAK(11)) GOTO 25 @ IF THE USER GETS RID OF PLOT THEN WE EXIT VIA 25\r | |
219 | TE1=XYSAM(J,CO) @ DATA POINT --> TE1\r | |
220 | OMAX=AMAX1(OMAX,TE1) @ MAXIMUM --> OMAX\r | |
221 | 50 OMIN=AMIN1(OMIN,TE1) @ MINIMUM --> OMIN\r | |
222 | C\r | |
223 | IF (UP .GT. DOWN-1.) GOTO 52 @ IF UP.LE.DOWN THEN WE MAKE A FIXED SCALE\r | |
224 | C FIXED SCALE IF POSSIBLE:\r | |
225 | IF (OMIN.GE.OMAX-(DOWN-UP)) GOTO 53 @ MAKE A FIXED SCALE AT 53\r | |
226 | DOWN=OMIN @ DIFFERENCE BETWEEN MIN AND MAX EXCEEDS THE FIX SCALE LENGTH, SO WE TAKE DEFAULT VALUES\r | |
227 | UP=OMAX @ ELSE DOWN=UP-(OMIN-OMAX) (FIXED DIFFERENCE SCALE)\r | |
228 | GOTO 51 @ WORK DONE\r | |
229 | C FIXED SCALE POSSIBLE, MAKE IT AND CENTER THE PLOT\r | |
230 | 53 TE1=OMIN-((DOWN-UP)-(OMAX-OMIN))*.5\r | |
231 | UP=TE1+DOWN-UP @ UPPER LIMIT\r | |
232 | DOWN=TE1 @ WE SHIFT THE LINE INTO THE CENTER\r | |
233 | GOTO 51 @ FIXED DIFFERENCE SCALE DONE\r | |
234 | C AUTOMATIC SCALE BUT WITH INCREMENTAL STEPPED LIMITS\r | |
235 | 52 CONTINUE\r | |
236 | DOWN=COND(OMIN.LT.-512.,OMIN,OMIN.LT.-255.,-512.,\r | |
237 | * OMIN.LT.0,-255.,OMIN.LT.256.,0, 255.) @ MAKE 255 STEPS INCREMENT\r | |
238 | UP=COND(OMAX.GT.512.,OMAX,OMAX.GT.255.,512.,\r | |
239 | * OMAX.GT.0,255.,OMAX.GT.-255.,0, -255.) @ 255 STEPS INCREMENT\r | |
240 | C\r | |
241 | UP=COND(DOWN.GE.UP,DOWN+255.,UP) @ SOMETIMES IT WILL HAPPEN: UP=DOWN\r | |
242 | 51 CONTINUE @ HERE WE COMPUTE THE FACTOR FOR ONE LINE\r | |
243 | IF (TIMABZ) CALL FACTOR (XLEN/(RIGHT-LEFT),\r | |
244 | * (YLEN-ALLCHS*.5+.5)/FLOAT(ALLCHS)/(UP-DOWN))\r | |
245 | IF (.NOT.TIMABZ) CALL FACTOR (AMIN1(XLEN,YLEN)/(RIGHT-LEFT),\r | |
246 | * AMIN1(XLEN,YLEN)/(UP-DOWN))\r | |
247 | IF BREAK(11) GOTO 25 @ USER GETS RID OF PRGRM\r | |
248 | \fC\r | |
249 | C HERE WE COMPRESS ( TO SAVE PLOTTER TIME) AND PLOT THE DATA POINTS\r | |
250 | C\r | |
251 | CALL WHERE (TE1,TE1,TE1,TE2) @ FETCH THE X FACTOR --> TE1\r | |
252 | YFMIN=9999.\r | |
253 | YFMAX=-YFMIN @ PREP TEMPS TO FETCH THE MIN/MAX OF THE ORDINATE POINTS\r | |
254 | BOTH=.FALSE.\r | |
255 | C\r | |
256 | OLDX=XF(S0)-0.4/TE1*XLEN\r | |
257 | PENPOS=PENUP\r | |
258 | L1=.FALSE. @ L1 HOLDS: YF(I) INSIDE LOWER/UPPER LIMIT OF PLOT\r | |
259 | C\r | |
260 | C IF THERE IS A X MOVEMENT LESS THAN .3 MM THEN WE DO NOT PLOT THE\r | |
261 | C POINT. WE FETCH THE MIN/MAX OF Y AND PLOT A LINE FROM MIN TO MAX AT THIS X LOCATION.\r | |
262 | C THIS IS TO COMPRESS USELESS OUTPUT TO THE PLOTTER.\r | |
263 | C\r | |
264 | C\r | |
265 | C\r | |
266 | DO 10 I=S0,S1,STEPS @ HERE WE PLOT THE DATA POINTS ONE BY ONE \r | |
267 | X=XF(I) @ TEMP TO SAVE COMPUTING TIME\r | |
268 | 75 Y=YF(I) @ IF MORE THAN ONE SPIKE SET IN THE TRIGGER TIME WORD, WE REENTER HERE\r | |
269 | IF BREAK(11) GOTO 25 @ USER GETS RID OF PROGRAM\r | |
270 | IF(ADPLT)PENPOS=NCOND(BETW(-.1,Y,UP-DOWN+.5).OR.L1,PENPOS,PENUP) @ WE DO NOT PLOT ANY POINTS EXCEEDING THE UPPER/LOWER LIMIT\r | |
271 | IF (.NOT.ADPLT) GOTO 74 @ TRIGGER EVENTS WITHOUT ANY COMPRESSION!\r | |
272 | IF (ABS(OLDX-X)*TE1.GE.0.25/XLEN) GOTO 71 @ PLOT THIS POINT\r | |
273 | YFMIN=AMIN1(Y,YFMIN) @ NO X MOVEMENT, GET THE MIN Y VALUE\r | |
274 | YFMAX=AMAX1(Y,YFMAX) @ FETCH THE MAX Y VALUE\r | |
275 | BOTH=.TRUE. @ TWO Y POINTS TO PLOT!! (MIN & MAX)\r | |
276 | GOTO 10 @ WITH THE NEXT REAL X MOVEMENT\r | |
277 | C\r | |
278 | 74 CALL XYPLOT(X,BOX(-DOWN),PENPOS) @ DELTA SPIKE FOR TRIGGER CHANNEL\r | |
279 | 71 IF (BOTH) GOTO 72 @ IF THERE ARE TWO POINTS TO PLOT THEN GO 72 ELSE\r | |
280 | CALL XYPLOT (X,BOX(Y),PENPOS) @ WE PLOT THIS ONE AND PRESS IT INTO U/L LIMITS\r | |
281 | IF (.NOT.ADPLT)\r | |
282 | * CALL XYPLOT(X,BOX(-DOWN),PENPOS) @ DELTA SPIKE FOR TRIGGER CHANNEL\r | |
283 | GO TO 73\r | |
284 | 72 CALL XYPLOT (X,BOX(YFMIN),PENPOS) @ UPPER AND LOWER Y VALUE TO PLOT\r | |
285 | CALL XYPLOT (X,BOX(YFMAX),PENPOS)\r | |
286 | YFMIN=9999. @ SET UP NEW MIN/MAX FETCH CYCLE\r | |
287 | YFMAX=-YFMIN\r | |
288 | BOTH =.FALSE. @ CLEAR UPPER/LOWER FLAG\r | |
289 | 73 CONTINUE\r | |
290 | OLDX=X @ SAVE LAST X VALUE\r | |
291 | L1=BETW(-.1,Y,UP-DOWN) @ L1:= Y INSIDE U/L LIMITS!\r | |
292 | PENPOS=PENDWN\r | |
293 | IF (NXTBIT.GE.0) GOTO 10 @ NO MORE SPIKES IN THIS TRIGG TIME WORD, SKIP TO 10\r | |
294 | X=X+(XF(I+1)-XF(I))/TTRGW @ COMPUTE NEW X FOR MULTIPLE SPIKE EVENTS\r | |
295 | GOTO 75 @ REPEAT FOR NEXT SPIKE IN THIS TIME WORD\r | |
296 | 10 CONTINUE\r | |
297 | IF (.NOT. TIMABZ) GOTO 25 @ WORK DONE FOR X-Y GRAPHICS\r | |
298 | C\r | |
299 | C MAKE A SCALE FOR THE ORDINATE ( INPUT VOLTAGE )\r | |
300 | C\r | |
301 | CALL WHERE (TE1,TE1,TE1,TE2)\r | |
302 | CALL FACTOR (1.,TE2)\r | |
303 | CALL XYPLOT (-.5,0,-PENUP)\r | |
304 | PENPOS=PENUP\r | |
305 | DO 55 I=0,10\r | |
306 | TE1=DOWN+I*(UP-DOWN)/10.\r | |
307 | CALL XYPLOT (0,TE1-DOWN,PENPOS)\r | |
308 | PENPOS=PENDWN\r | |
309 | J=MOD(I,5)\r | |
310 | TE3=COND(J.EQ.0,-.5,-.3)\r | |
311 | CALL XYPLOT (TE3,TE1-DOWN,PENDWN)\r | |
312 | CALL XYPLOT (0,TE1-DOWN,PENDWN)\r | |
313 | IF (MOD(I,10).NE.0) GOTO 55\r | |
314 | CALL FACTOR (1.,1.) @ WRITE LOWER AND UPPER LIMIT ONTO THE\r | |
315 | CALL NUMBER (-XOFSET+2.*YZ,(TE1-DOWN)*TE2-YN*.38,YN*.75,TE1,0,\r | |
316 | * -1) @ AXIS\r | |
317 | CALL FACTOR (1.,TE2)\r | |
318 | CALL XYPLOT (0,TE1-DOWN,PENUP)\r | |
319 | 55 CONTINUE\r | |
320 | CALL XYPLOT (.5,0,-PENUP)\r | |
321 | CALL FACTOR (1.,1.)\r | |
322 | CALL SYMBOL (-XOFSET+YZ,\r | |
323 | * AMAX1(0.,((YLEN-ALLCHS*.5)/ALLCHS-4.*YZ))*.5,YZ,\r | |
324 | * NCOND(ADPLT,'CH ','TRG'),90.,3)\r | |
325 | CALL NUMBER (999.,999.,YZ,\r | |
326 | * NCOND(ADPLT,CO,CO-CHNLS+1),90.,-1) @ AD CHANNEL # : 0 .. CHNLS, TRG CHAN#: 1 .. STRIGS\r | |
327 | C\r | |
328 | C\r | |
329 | CO=CO+1 @ HERE WE INCREMENT THE CHANNEL NUMBER\r | |
330 | 25 CALL FACTOR (1.,1.)\r | |
331 | CALL XYPLOT (0.,-TEMSET,-PENUP) @ RESET CORRECT ORIGIN OF DIAGRAM\r | |
332 | IF BREAK(11) GOTO 40\r | |
333 | 20 CONTINUE\r | |
334 | \fC\r | |
335 | C IF ABZISSA IS TIME SCALE THEN DRAW A TIME SCALE\r | |
336 | C\r | |
337 | IF (.NOT.TIMABZ) GOTO 40\r | |
338 | CALL FACTOR (XLEN/(PLEND-PLBEG),1.)\r | |
339 | CALL XYPLOT (0.,-.5,-PENUP)\r | |
340 | C HERE WE PLOT THE LITTLE BAR INDICATING A SECOND OR MINUTE\r | |
341 | ABISMI=PLEND-PLBEG.GT.300 @ ABZISSE EXCEEDS 5 MINUTES SO WE DRAW A MINUTE SCALING\r | |
342 | EXPAND=NCOND(PLEND-PLBEG.LE.5,10,1) @ IF THE TIME SCALE IS .LE. 5 SECONDS THEN WE MARK EACH 1/10 SEC\r | |
343 | C @ REMEMBER : IF (ABISMI) EXPAND=.FALSE. FOR CORRECT ACTION \r | |
344 | DO 30 I=PLBEG*EXPAND,PLEND*EXPAND @ 1 SEC INCREMENTS\r | |
345 | TE1=I-PLBEG*EXPAND\r | |
346 | CALL XYPLOT (TE1/EXPAND,0,PENDWN)\r | |
347 | IF (.NOT.ABISMI) TE2=COND(MOD(I,10).EQ.0,-.7, MOD(I,5).EQ.0,-.5,\r | |
348 | * -.3)\r | |
349 | IF (ABISMI) TE2=COND(MOD(I,600).EQ.0,-.7,\r | |
350 | * MOD(I,300).EQ.0,-.5, MOD(I,60).EQ.0,-.3)\r | |
351 | CALL XYPLOT (TE1/EXPAND,TE2,PENDWN) @ HERE WE PLOT THE SMALL BAR\r | |
352 | CALL XYPLOT (TE1/EXPAND,0,PENDWN)\r | |
353 | C HERE WE COMPUTE WHERE TO WRITE A NUMBER ONTO THE TIME AXIS\r | |
354 | TE2=PLEND-PLBEG @ COMPUTE THE SIZE OF THE TIME AXIS\r | |
355 | IF (.NOT.ABISMI) GOTO 31 @ IF WE PLOT A SECONDS AXIS THEN GOTO 31\r | |
356 | IF (MOD(I,\r | |
357 | * NCOND(TE2.GT.5400,1800,TE2.GE.1800,600,TE2.GT.900,300,\r | |
358 | * TE2.GT.290,120,60)).GT.0) GOTO 29 @ COMPUTE THE MINUTE WHERE TO PLOT THE NUMBER\r | |
359 | GOTO 32 @ SKIP TO PLOT THE NUMBER\r | |
360 | 31 IF (MOD(I,NCOND(TE2.GT.180,30,TE2.GT.60,20,TE2.GT.30,10,\r | |
361 | * TE2.GT.10,5,TE2.GT.5,2,10)).GT.0) @ WE ASSUME: TE2.LE.5 THEN EXPAND:=10 ELSE EXPAND:=1 !!!\r | |
362 | * GOTO 30\r | |
363 | C\r | |
364 | C HERE WE PLOT THE NUMBER ONTO THE AXIS\r | |
365 | C\r | |
366 | 32 CONTINUE\r | |
367 | CALL WHERE (TE2,TE2,TE2,TE3) @ GET THE X FACTOR\r | |
368 | CALL FACTOR (1.,1.) @ RESET TO THE NORMAL FACTOR FOR SYMBOL\r | |
369 | CALL NUMBER (TE1/EXPAND*TE2-INT(ALOG10(AMAX0(COND(ABISMI,\r | |
370 | * I/60.,I/EXPAND),1))+.01)\r | |
371 | * *YN/2.-YN*.3,\r | |
372 | * -1.3,YN,COND(ABISMI,I/60.,I/EXPAND),0,-1)\r | |
373 | CALL FACTOR (TE2,TE3)\r | |
374 | CALL XYPLOT (TE1/EXPAND,0,PENUP)\r | |
375 | CALL XYPLOT (TE1/EXPAND,0,PENDWN)\r | |
376 | 29 I=NCOND(ABISMI,MIN0(I+59,\r | |
377 | * NCOND(I.EQ.PLEND*EXPAND,I,PLEND*EXPAND-1)),I) @ MINUTE SCALE HAS 60 SEC INCREMENT\r | |
378 | C SECOND NCOND ABOVE PREVENTS ENDLESS LOOP\r | |
379 | C\r | |
380 | 30 CONTINUE\r | |
381 | CALL FACTOR (1.,1.)\r | |
382 | CALL XYPLOT (0,.5,-PENUP)\r | |
383 | CALL SYMBOL (XLEN/1.5,-YOFSET,YZ,TEXT0(NCOND(ABISMI,1,3)),0,10)\r | |
384 | C\r | |
385 | C\r | |
386 | 40 CALL FACTOR (1.,1.)\r | |
387 | IF (BREAK(11)) GOTO 60 @ USER SWITCHED OFF THE PLOTTER\r | |
388 | CALL LABPLT (0,-YOFSET,PLEND)\r | |
389 | IF (BREAK(11)) GOTO 60\r | |
390 | CALL SYMBOL (YZ,YLEN+YZ,YZ,LABEL,0,MIN0(42,LABCNT*6)) @ PLOT 42 CHARACTERS INTO THE FIRST LINE OF LABEL\r | |
391 | IF (LABCNT.GT.7)\r | |
392 | * CALL SYMBOL (YZ,YLEN,YZ,LABEL(8),0,LABCNT*6-42) @ AND THE REMAINING INTO THE NEXT LINE\r | |
393 | 60 CONTINUE\r | |
394 | CALL XYPLOT (38.,25.,PENUP)\r | |
395 | CALL EXPLT\r | |
396 | RETURN\r | |
397 | 1 FORMAT (' KANAL ABZISSE/ORDINATE (ZEITBASIS=8), SCHRITTWEITE',\r | |
398 | * ' (2I1,I3) (',\r | |
399 | * 2I1,I3,')? ',$)\r | |
400 | 2 FORMAT (2A1,I3)\r | |
401 | 3 FORMAT (' ANZAHL DER DARZUSTELLENDEN ',A3,' KANAELE (I1) (',I1,\r | |
402 | * ') ? ',$)\r | |
403 | 4 FORMAT (' NUR FUER',F6.1,' SEK. MESSDATEN JEDOCH',F6.1,\r | |
404 | * ' SEC. ANGEFORDERT. ')\r | |
405 | 5 FORMAT (' ORDINATEN MAXIMUM FUER ',A3,' KANAL',I2,' (',F5.0,')?',$)\r | |
406 | 6 FORMAT (' " " MINIMUM FUER ',A3,' KANAL',I2,' (',F5.0,')?',$)\r | |
407 | 7 FORMAT (F5.0)\r | |
408 | 9 FORMAT (' ABZISSEN/ ORDINATEN KANAL ODER SCHRITTWEITE ',\r | |
409 | * ' FEHLERHAFT: ',3I4)\r | |
410 | END\r | |
411 | \1a\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 |