5 * Revision 1.1.1.1 1995/10/24 10:20:56 cernlib
9 #include "geant321/pilot.h"
10 *CMZ : 3.21/02 29/03/94 15.41.30 by S.Giani
12 SUBROUTINE GSPOSP(NAME,NR,MOTHER,X,Y,Z,IROT,KONLY,UPAR,NP)
14 C. ******************************************************************
16 C. * Place a copy of generic volume 'NAME' with user number *
17 C. * 'NR' inside 'MOTHER', with its parameters UPAR(1..NP) *
19 C. * JVO=pointer to mother volume *
20 C. * JIN=pointer to the copy 'NAME','NR' *
23 C. * Q(JIN+1)=NENTRY *
24 C. * Q(JIN+2)=VOLUME NUMBER *
25 C. * Q(JIN+3)=USER NUMBER *
32 C. * Q(JIN+10 ..)=PAR .. *
34 C. * ==>Called by : <USER> *
35 C. * Authors R.Brun, F.Bruyant, A.McPherson ********* *
37 C. ******************************************************************
39 #include "geant321/gcbank.inc"
40 #include "geant321/gcflag.inc"
41 #include "geant321/gcunit.inc"
42 #include "geant321/gcnum.inc"
43 #include "geant321/gconsp.inc"
44 CHARACTER*4 NAME,MOTHER,KONLY
45 DIMENSION UPAR(*),PAR(50)
47 C. ------------------------------------------------------------------
49 C Check if volume master bank exists
51 IF(JVOLUM.GT.0)GO TO 10
56 C Check if mother volume exists
58 10 CALL GLOOK(MOTHER,IQ(JVOLUM+1),NVOLUM,IVO)
60 WRITE(CHMAIL,2000)MOTHER
64 C Check if NAME volume exists
66 20 CALL GLOOK(NAME,IQ(JVOLUM+1),NVOLUM,IN)
68 WRITE(CHMAIL,2000)NAME
72 C Check if rotation matrix exists
74 30 IF(IROT.LE.0)GO TO 50
75 IF(JROTM.GT.0)GO TO 40
76 WRITE(CHMAIL,3000)IROT
79 40 IF(LQ(JROTM-IROT).GT.0)GO TO 50
80 WRITE(CHMAIL,3000)IROT
84 C Check if mother is not divided
92 WRITE(CHMAIL,4000)MOTHER
96 * *** Copy user parameters into local array PAR
98 IF (ISH.EQ. 4) NPAR=35
99 IF (ISH.EQ.28) NPAR=30
100 CALL UCOPY(UPAR,PAR,NP)
102 * *** Check if ('NAME',NUMBER') exists
106 IF(Q(JIN+2).NE.IN)GO TO 70
107 IF(Q(JIN+3).NE.NR)GO TO 70
108 WRITE(CHMAIL,5000)NAME,NR
114 * *** Create bank for that copy
116 IF(ICOPY.GT.NINL)CALL MZPUSH(IXCONS,JVO,50,0,'I')
117 CALL MZBOOK(IXCONS,JIN,JVO,-ICOPY,'VOPP',1,1,NPAR+9,3,0)
118 IF(IEOTRI.NE.0)GO TO 95
119 IQ(JIN-5)=100*IVO+ICOPY
122 * *** Now store parameters into bank area
129 IF(KONLY.EQ.'ONLY')Q(JIN+8)=1.
134 TTH= TAN(PAR(2)*DEGRAD)
136 PAR(2) = TTH*COS(PHI)
137 PAR(3) = TTH*SIN(PHI)
138 PAR(7) = TAN(PAR(7) *DEGRAD)
139 PAR(11)= TAN(PAR(11)*DEGRAD)
141 ELSE IF (ISH.EQ.10) THEN
143 PAR(4)=TAN(PAR(4)*DEGRAD)
144 TTH=TAN(PAR(5)*DEGRAD)
148 ELSE IF (ISH.EQ.28) THEN
149 * General twisted trapezoid.
150 CALL GTRAIN(UPAR,PAR)
153 CALL UCOPY(PAR,Q(JIN+10),NPAR)
157 95 WRITE(CHMAIL,6000)NAME,NR,MOTHER
160 1000 FORMAT(' ***** GSPOSP CALLED AND NO VOLUMES DEFINED *****')
161 2000 FORMAT(' ***** GSPOSP VOLUME ',A4,' DOES NOT EXISTS *****')
162 3000 FORMAT(' ***** GSPOSP ROTATION MATRIX',I5,' DOES NOT EXIST *****')
163 4000 FORMAT(' ***** GSPOSP MOTHER ',A4,' ALREADY DIVIDED *****')
164 5000 FORMAT(' ***** GSPOSP COPY ',A4,' NUMBER ',I5,
165 + ' ALREADY CREATED IN ',A4,' *****')
166 6000 FORMAT(' ***** GSPOSP NOT ENOUGH SPACE TO STORE COPY ',A4,
167 + ' NUMBER ',I5,' IN ',A4,' *****')