5 * Revision 1.1.1.1 1995/10/24 10:21:17 cernlib
9 #include "geant321/pilot.h"
10 *CMZ : 3.21/02 29/03/94 15.41.21 by S.Giani
12 SUBROUTINE GROUT(CHOBJT,IDVERS,CHOPT)
14 C. ******************************************************************
16 C. * Routine to write GEANT object(s) in the RZ file *
17 C. * at the Current Working Directory (See RZCDIR) *
18 C. * Input is taken from the data structures in memory *
19 C. * (VOLU,ROTM,TMED,MATE,SETS,PART,SCAN) *
21 C. * CHOBJ The type of object to be written: *
22 C. * MATE write JMATE structure *
23 C. * TMED write JTMED structure *
24 C. * VOLU write JVOLUM structure *
25 C. * ROTM write JROTM structure *
26 C. * SETS write JSET structure *
27 C. * PART write JPART structure *
28 C. * SCAN write LSCAN structure *
29 C. * INIT write all initialisation structures *
31 C. * IDVERS is a positive integer which specifies the version *
32 C. * number of the object(s). *
34 C. * CHOPT List of options (none for the time being) *
36 C. * Note that if the cross-sections and energy loss tables *
37 C. * are available in the data structure JMATE, then they are *
38 C. * saved on the data base. *
41 C. * The data structures saved by this routine can be retrieved *
42 C. * with the routine GRIN. *
44 C. * Before calling this routine a RZ data base must have been *
45 C. * created using GRFILE. *
46 C. * The data base must be closed with RZEND. *
48 C. * The RZ data base can be transported between different *
49 C. * machines in using the ZEBRA RZ utility RZTOFZ. *
51 C. * The interactive version of GEANT provides facilities *
52 C. * to interactively update, create and display objects. *
56 C. * CALL GRFILE(1,'Geometry.dat','N') *
57 C. * CALL GROUT('VOLU',1,' ') *
58 C. * CALL GROUT('MATE',1,' ') *
59 C. * CALL GROUT('TMED',1,' ') *
60 C. * CALL GROUT('ROTM',1,' ') *
61 C. * CALL GROUT('PART',1,' ') *
62 C. * CALL GROUT('SCAN',1,' ') *
63 C. * CALL GROUT('SETS',1,' ') *
65 C. * The same result can be achieved by: *
66 C. * CALL GRFILE(1,'Geometry.dat','NO') *
68 C. * ==>Called by : <USER>,GRFILE *
69 C. * Author R.Brun ********* *
71 C. ******************************************************************
73 #include "geant321/gcbank.inc"
74 #include "geant321/gcflag.inc"
75 #include "geant321/gcnum.inc"
76 #include "geant321/gccuts.inc"
77 #include "geant321/gcscal.inc"
78 #include "geant321/gcdraw.inc"
79 #include "geant321/gcunit.inc"
80 * COMMON/GCLINK/JDIGI ,JDRAW ,JHEAD ,JHITS ,JKINE ,JMATE ,JPART
81 * + ,JROTM ,JRUNG ,JSET ,JSTAK ,JGSTAT,JTMED ,JTRACK,JVERTX
82 * + ,JVOLUM,JXYZ ,JGPAR ,JGPAR2,JSKLT
83 COMMON/QUEST/IQUEST(100)
84 PARAMETER (NLINIT=9,NLKINE=2,NLTRIG=6,NMKEY=22)
85 DIMENSION JNAMES(20),KEYS(2)
86 DIMENSION LINIT(NLINIT),LKINE(NLKINE),LTRIG(NLTRIG),IXD(NMKEY)
87 DIMENSION LINK(NMKEY),LDIV(2)
88 EQUIVALENCE (JNAMES(1),JDIGI)
89 CHARACTER*4 CHOBJ,NAMES(NMKEY)
90 CHARACTER*(*) CHOPT,CHOBJT
91 DATA NAMES/'DIGI','DRAW','HEAD','HITS','KINE','MATE','PART',
92 + 'ROTM','RUNG','SETS','STAK','STAT','TMED','NULL','VERT',
93 + 'VOLU','JXYZ','NULL','NULL','NULL','SCAN','NULL'/
94 DATA IXD/2,1,2,2,2,8*1,2,2,1,2,3*0,1,0/
95 DATA LINIT/2,6,7,8,9,10,13,16,21/
97 DATA LTRIG/1,3,4,5,15,17/
99 C. ------------------------------------------------------------------
106 IOPTI=INDEX(CHOPT,'i')+INDEX(CHOPT,'I')
107 IOPTT=INDEX(CHOPT,'t')+INDEX(CHOPT,'T')
108 IOPTK=INDEX(CHOPT,'k')+INDEX(CHOPT,'K')
109 IOPTQ=INDEX(CHOPT,'q')+INDEX(CHOPT,'Q')
111 IF(CHOBJ.EQ.'INIT') THEN
116 ELSEIF(CHOBJ.EQ.'TRIG') THEN
121 ELSEIF(CHOBJ.EQ.'KINE') THEN
128 IF(CHOBJ.EQ.'*') THEN
134 ELSEIF(IOPTT.NE.0) THEN
139 ELSEIF(IOPTK.NE.0) THEN
148 IF(CHOBJ.EQ.NAMES(J)) THEN
151 IF(LINIT(L).EQ.J) GOTO 70
154 ELSEIF(IOPTT.NE.0) THEN
156 IF(LTRIG(L).EQ.J) GOTO 70
159 ELSEIF(IOPTK.NE.0) THEN
161 IF(LKINE(L).EQ.J) GOTO 70
169 80 WRITE(CHMAIL,10000) CHOBJ, CHOPT
177 100 IF(NLINK.EQ.0) THEN
178 WRITE(CHMAIL,10100) CHOBJ
186 CALL UCTOH(NAMES(NKEY),KEYS,4,4)
190 IF(JNAMES(NKEY).GT.0) THEN
191 CALL RZOUT(IDIV,JNAMES(NKEY),KEYS,ICYCLE,' ')
195 IF(ISLINK(NKEY-20).GT.0) THEN
196 CALL RZOUT(IDIV,ISLINK(NKEY-20),KEYS,ICYCLE,' ')
200 IF(LINK(I).GT.0) THEN
202 WRITE(CHMAIL,10200) NAMES(LINK(I))
206 ELSEIF(LINK(I).LT.0) THEN
207 IF(IQUEST(1).EQ.0) THEN
209 WRITE(CHMAIL,10300) NAMES(-LINK(I)), IDVERS
214 WRITE(CHMAIL,10400) NAMES(-LINK(I))
225 10000 FORMAT(' *** GROUT *** Data structure ',A4,' not written ',
227 10100 FORMAT(' *** GROUT *** Unknown key ',A4)
228 10200 FORMAT(' *** GROUT *** Data structure ',A4,' was not found')
229 10300 FORMAT(' *** GROUT *** Data structure ',A4,' version ',I10,
231 10400 FORMAT(' *** GROUT *** Error in writing data structure ',
233 10500 FORMAT(' *** GROUT *** Nothing written to disk !')