5 * Revision 1.1.1.1 1995/10/24 10:20:15 cernlib
9 #include "geant321/pilot.h"
10 *CMZ : 3.21/04 10/01/95 17.36.36 by S.Ravndal
12 SUBROUTINE GPLMAT(IMATES,IPART,MECAN,KDIN,TKIN,IDM)
14 C ******************************************************************
16 C. * INTERPOLATE and PLOT the DE/DX and Cross sections *
17 C. * tabulated in JMATE banks corresponding to : *
18 C. * material IMATE, particle IPART, mecanism name HMECAN, *
19 C. * kinetic energies TKIN *
21 C. * The MECANism name can be : *
22 C. * 'HADF' 'INEF' 'ELAF' 'FISF' 'CAPF' *
23 C. * 'HADG' 'INEG' 'ELAG' 'FISG' 'CAPG' *
24 C. * 'LOSS' 'PHOT' 'ANNI' 'COMP' 'BREM' *
25 C. * 'PAIR' 'DRAY' 'PFIS' 'RAYL' 'HADG' *
26 C. * 'MUNU' 'RANG' 'STEP' *
28 C. * For Hadronic particles it also computes the *
29 C. * hadronic cross section from FLUKA ( '***F' ) or *
30 C. * GHEISHA ( '***G' ) programs: *
31 C. * HADF or HADG -- total *
32 C. * INEF or INEG -- inelastic *
33 C. * ELAF or ELAG -- elastic *
34 C. * FISF or FISG -- fission (0.0 for FLUKA) *
35 C. * CAPF or CAPG -- neutron capture (0.0 for FLUKA) *
37 C. * Input parameters *
38 C. * IMATE Geant material number *
39 C. * IPART Geant particle number *
40 C. * MECAN mechanism name of the bank to be fetched *
41 C. * KDIM dimension of the arrays TKIN , VALUE *
42 C. * TKIN array of kinetic energy of incident particle (in Gev) *
43 C. * IDM convention for histogramming mode : *
44 C. * IDM.gt.0 fill , print , keep histogram(s) *
45 C. * IDM.eq.0 fill , print , delete histogram(s) *
46 C. * IDM.lt.0 fill , noprint , keep histogram(s) *
47 C. * The histogram IDentificator will be : *
48 C. * 10000*imate + 100*ipart + imeca *
49 C. * where IMECA is the link number in stucture JMATE *
50 C. * (see Geant3 writeup CONS 199) *
51 C. * for 'HADG' imeca = 17 *
53 C. * ==>Called by : <USER> *
54 C. * Authors R.Brun, M.Maire ********* *
56 C. ******************************************************************
58 #include "geant321/gcbank.inc"
59 #include "geant321/gcnum.inc"
60 #include "geant321/gconsp.inc"
61 #include "geant321/gcunit.inc"
62 #include "geant321/gcphys.inc"
63 PARAMETER (MMX= 201,NCOL= 5)
65 CHARACTER*4 MECA , KU(NCOL)
66 CHARACTER NAPART*16 , NAMATE*16 , CHTITL*68
67 DIMENSION TKIN(KDIN),VALUE(MMX),SIGT(MMX),PCUT(5)
68 DIMENSION KI(NCOL),EK(NCOL)
71 #include "geant321/gcnmec.inc"
73 * ------------------------------------------------------------------
75 IF (KDIN.LE.0) GO TO 999
79 ELSEIF(IMATES.GT.0) THEN
86 IF (JMATE.LE.0) GO TO 999
87 IF (IMATE.GT.NMATE) GO TO 80
89 IF (JMA.LE.0) GO TO 80
90 CALL UHTOC(IQ(JMA+1),4,NAMATE,16)
92 CMIBAR=Q(JMA+6)/(AVO*Q(JMA+8))
97 IF (JPART.LE.0) GO TO 999
98 IF (IPART.LE.0) GO TO 999
99 IF (IPART.GT.NPART) GO TO 80
100 JPA = LQ(JPART-IPART)
101 IF (JPA.LE.0) GO TO 80
102 CALL UHTOC(IQ(JPA+1),4,NAPART,16)
104 * *** Print bin meaning
109 CHMAIL(31:)='Kinetic energy bin meaning'
111 CHMAIL(31:)='--------------------------'
113 NROW = (KDIM-1)/NCOL + 1
116 IKB = IR + (IC-1)*NROW
117 IF (IKB.GT.KDIM) IKB=KDIM
119 CALL GEVKEV(TKIN(IKB),EK(IC),KU(IC))
121 WRITE(CHMAIL,10200) (KI(IC),EK(IC),KU(IC),IC=1,NCOL)
130 IF(MECAN.EQ.'ALL') THEN
136 IF(MECAN.EQ.CHNMEC(IMECA)) THEN
141 WRITE(CHMAIL,'('' *** GPLMAT: Mechanism '',A,
142 + '' not implemented'')') MECAN
150 IF (MECAN.EQ.'ALL') THEN
151 IF (CHNMEC(IMEC).EQ.'RANG') GO TO 60
152 IF (CHNMEC(IMEC).EQ.'STEP') GO TO 60
155 IF(CHNMEC(IMEC).NE.'NULL') THEN
157 CALL GFTMAT(IMATE,IPART,MECA,KDIM,TKIN,VALUE,PCUT,IXST)
158 IF(IXST.EQ.0) GO TO 60
162 IF (MECA.EQ.'LOSS') THEN
163 CHTITL = NAPART//' in '//NAMATE//' dE/dx (MeV/cm)'
164 ELSEIF (MECA.EQ.'RANG') THEN
165 CHTITL = NAPART//' in '//NAMATE//' Stopping range (cm)'
166 ELSEIF (MECA.EQ.'STEP') THEN
167 CHTITL = NAPART//' in '//NAMATE//' continuous step '
170 CHTITL = NAPART//' in '//NAMATE//' '//MECA// ' cross '
173 CHTITL(LNBLNK(CHTITL)+1:) = ' (barn)'
175 CHTITL(LNBLNK(CHTITL)+1:) = ' (1/cm)'
180 ID = 10000*IMATE + 100*IPART + IMEC
181 CALL HBOOKB(ID,CHTITL,KDIM-1,TKIN,0.)
185 VALMI = MAX (BIGINV,VMAX(VALUE,KDIM)*1.E-8)
187 IF (MECA.NE.'LOSS'.AND.MECA.NE.'RANG'
188 + .AND.MECA.NE.'STEP')
189 + VALUE(IKB)=VALUE(IKB)*CMIBAR
190 IF (VALUE(IKB).GE.VALMI) THEN
191 CALL HFILL(ID,TKIN(IKB),0.,VALUE(IKB))
194 IF(MECA(1:3).NE.'INE'.AND.MECA(1:3).NE.'ELA'.AND.
195 + MECA(1:3).NE.'FIS'.AND.MECA(1:3).NE.'CAP'.AND.
196 + MECA(1:3).NE.'HAD'.AND.IMEC.LT.IBLOWN) THEN
197 SIGT(IKB) = SIGT(IKB) + VALUE(IKB)
198 ELSE IF (MECA(1:3).EQ.'HAD') THEN
199 IF ((MECA.EQ.'HADG'.AND.IHADR.LE.2).OR. (MECA.EQ.
200 + 'HADF'.AND.IHADR.EQ.4)) THEN
201 SIGT(IKB) = SIGT(IKB) + VALUE(IKB)
206 CALL HIDOPT(ID,'LOGY')
207 IF(IDM.GE.0) CALL HPHIST(ID,' ',0)
208 IF(IDM.EQ.0) CALL HDELET(ID)
212 * *** plot total cross section and mean free path
213 IF (MECAN.EQ.'ALL') THEN
214 CHTITL= NAPART//' in '//NAMATE//' total cross section'
216 CHTITL(LNBLNK(CHTITL)+1:) = ' (barn)'
218 CHTITL(LNBLNK(CHTITL)+1:) = ' (1/cm)'
220 ID = 10000*IMATE + 100*IPART + NMECA+1
221 CALL HBOOKB(ID,CHTITL,KDIM-1,TKIN,0.)
223 CHTITL= NAPART//' in '//NAMATE//' total mean free path (cm)'
225 CALL HBOOKB(II,CHTITL,KDIM-1,TKIN,0.)
227 VALMI = MAX (BIGINV,VMAX( SIGT,KDIM)*1.E-8)
229 IF (SIGT(IKB).GE.VALMI) THEN
230 CALL HFILL(ID,TKIN(IKB),0., SIGT(IKB))
231 CALL HFILL(II,TKIN(IKB),0.,CMIBAR/SIGT(IKB))
234 CALL HIDOPT(ID,'LOGY')
235 IF(IDM.GE.0) CALL HPHIST(ID,' ',0)
236 IF(IDM.EQ.0) CALL HDELET(ID)
238 CALL HIDOPT(II,'LOGY')
239 IF(IDM.GE.0) CALL HPHIST(II,' ',0)
240 IF(IDM.EQ.0) CALL HDELET(II)
245 80 WRITE(CHMAIL,10000) IMATE ,IPART
247 10000 FORMAT(' ***** GPLMAT error : material',I4,
248 + ' or particle',I4,' not defined' )
249 10100 FORMAT(6X,'BCUTE =',F6.2,A4,3X,'BCUTM =',F6.2,A4,3X,
250 + 'DCUTE =',F6.2,A4,3X,'DCUTM =',F6.2,A4,3X,
251 + 'PPCUTM =',F6.2,A4 )
252 10200 FORMAT(1X,5(' bin ',I3,' =',F7.2,A4))