5 * Revision 1.1.1.1 1999/05/18 15:55:17 fca
8 * Revision 1.1.1.1 1995/10/24 10:20:56 cernlib
12 #include "geant321/pilot.h"
13 *CMZ : 3.21/02 29/03/94 15.41.30 by S.Giani
15 SUBROUTINE GSPOSP(NAME,NR,MOTHER,X,Y,Z,IROT,KONLY,UPAR,NP)
17 C. ******************************************************************
19 C. * Place a copy of generic volume 'NAME' with user number *
20 C. * 'NR' inside 'MOTHER', with its parameters UPAR(1..NP) *
22 C. * JVO=pointer to mother volume *
23 C. * JIN=pointer to the copy 'NAME','NR' *
26 C. * Q(JIN+1)=NENTRY *
27 C. * Q(JIN+2)=VOLUME NUMBER *
28 C. * Q(JIN+3)=USER NUMBER *
35 C. * Q(JIN+10 ..)=PAR .. *
37 C. * ==>Called by : <USER> *
38 C. * Authors R.Brun, F.Bruyant, A.McPherson ********* *
40 C. ******************************************************************
42 #include "geant321/gcbank.inc"
43 #include "geant321/gcflag.inc"
44 #include "geant321/gcunit.inc"
45 #include "geant321/gcnum.inc"
46 #include "geant321/gconsp.inc"
47 CHARACTER*4 NAME,MOTHER,KONLY
48 DIMENSION UPAR(*),PAR(100)
50 C. ------------------------------------------------------------------
52 C Check if volume master bank exists
54 IF(JVOLUM.GT.0)GO TO 10
59 C Check if mother volume exists
61 10 CALL GLOOK(MOTHER,IQ(JVOLUM+1),NVOLUM,IVO)
63 WRITE(CHMAIL,2000)MOTHER
67 C Check if NAME volume exists
69 20 CALL GLOOK(NAME,IQ(JVOLUM+1),NVOLUM,IN)
71 WRITE(CHMAIL,2000)NAME
75 C Check if rotation matrix exists
77 30 IF(IROT.LE.0)GO TO 50
78 IF(JROTM.GT.0)GO TO 40
79 WRITE(CHMAIL,3000)IROT
82 40 IF(LQ(JROTM-IROT).GT.0)GO TO 50
83 WRITE(CHMAIL,3000)IROT
87 C Check if mother is not divided
95 WRITE(CHMAIL,4000)MOTHER
99 * *** Copy user parameters into local array PAR
101 IF (ISH.EQ. 4) NPAR=35
102 IF (ISH.EQ.28) NPAR=30
103 CALL UCOPY(UPAR,PAR,NP)
105 * *** Check if ('NAME',NUMBER') exists
109 IF(Q(JIN+2).NE.IN)GO TO 70
110 IF(Q(JIN+3).NE.NR)GO TO 70
111 WRITE(CHMAIL,5000)NAME,NR
117 * *** Create bank for that copy
119 IF(ICOPY.GT.NINL)CALL MZPUSH(IXCONS,JVO,50,0,'I')
120 CALL MZBOOK(IXCONS,JIN,JVO,-ICOPY,'VOPP',1,1,NPAR+9,3,0)
121 IF(IEOTRI.NE.0)GO TO 95
122 IQ(JIN-5)=100*IVO+ICOPY
125 * *** Now store parameters into bank area
132 IF(KONLY.EQ.'ONLY')Q(JIN+8)=1.
137 TTH= TAN(PAR(2)*DEGRAD)
139 PAR(2) = TTH*COS(PHI)
140 PAR(3) = TTH*SIN(PHI)
141 PAR(7) = TAN(PAR(7) *DEGRAD)
142 PAR(11)= TAN(PAR(11)*DEGRAD)
144 ELSE IF (ISH.EQ.10) THEN
146 PAR(4)=TAN(PAR(4)*DEGRAD)
147 TTH=TAN(PAR(5)*DEGRAD)
151 ELSE IF (ISH.EQ.28) THEN
152 * General twisted trapezoid.
153 CALL GTRAIN(UPAR,PAR)
156 CALL UCOPY(PAR,Q(JIN+10),NPAR)
160 95 WRITE(CHMAIL,6000)NAME,NR,MOTHER
163 1000 FORMAT(' ***** GSPOSP CALLED AND NO VOLUMES DEFINED *****')
164 2000 FORMAT(' ***** GSPOSP VOLUME ',A4,' DOES NOT EXISTS *****')
165 3000 FORMAT(' ***** GSPOSP ROTATION MATRIX',I5,' DOES NOT EXIST *****')
166 4000 FORMAT(' ***** GSPOSP MOTHER ',A4,' ALREADY DIVIDED *****')
167 5000 FORMAT(' ***** GSPOSP COPY ',A4,' NUMBER ',I5,
168 + ' ALREADY CREATED IN ',A4,' *****')
169 6000 FORMAT(' ***** GSPOSP NOT ENOUGH SPACE TO STORE COPY ',A4,
170 + ' NUMBER ',I5,' IN ',A4,' *****')