summaryrefslogtreecommitdiff
path: root/Donjon/src/DETREAD.f
blob: cdac6be57f5c408c2aa60d88b796b9c024f95e0d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
*DECK DETREAD
      SUBROUTINE DETREAD(IPDET,TYPE,NREP,IPRT,LHEX)
*
*-----------------------------------------------------------------------
*
*Purpose:
*  This subroutine reads detector parameters and store them
*
*Copyright:
* Copyright (C) 2010 Ecole Polytechnique de Montreal.
*
*Author(s): 
* J. Koclas, E. Varin, M. Guyot
*
*Parameters: input/output
* IPDET   pointer to the L_DETECT object.
* TYPE
* NREP    number of values stored for detector response
* IPRT    printing flag
* LHEX    =.TRUE. if it is an hexagonal geometry
*
*-----------------------------------------------------------------------
*
      USE GANLIB
      IMPLICIT NONE
*----
*  SUBROUTINE ARGUMENTS
*----
      TYPE(C_PTR) IPDET
      INTEGER     NREP,IPRT
      LOGICAL     LHEX
      CHARACTER   TYPE*12
*----
*  LOCAL VARIABLES
*----
      CHARACTER TEXT*12,NAMDET*12
      INTEGER ITYP,NITMA,NHEX,I
      REAL FLOT,DEVPOS(6)
      DOUBLE PRECISION DFLOT
      LOGICAL LEND,LPOS,LRESP,LHEX2
      INTEGER, ALLOCATABLE, DIMENSION(:) :: IHEX
      REAL, ALLOCATABLE, DIMENSION(:) :: REP
*----
*  READING INFORMATION LINKED TO DETECTOR PARAMETERS
*----
      LEND=.FALSE.
      LPOS=.FALSE.
      LRESP=.FALSE.
      LHEX2=.FALSE.

      ALLOCATE(REP(NREP))

   10 CALL REDGET(ITYP,NITMA,FLOT,TEXT,DFLOT)
      IF(ITYP.NE.3) CALL XABORT('@DETREAD: CHARACTER DATA'
     +    //' EXPECTED(1)')
      IF(TEXT.EQ.'NAME') THEN
        CALL REDGET(ITYP,NITMA,FLOT,NAMDET,DFLOT)
        IF(ITYP.NE.3) CALL XABORT('@DETREAD: CHARACTER DATA'
     +    //' EXPECTED(2)')
      ELSEIF(TEXT.EQ.'NHEX') THEN
        LHEX2=.TRUE.
        IF(.NOT.LHEX )CALL XABORT('@DETREAD: INVALID KEYWORD NHEX')
        CALL REDGET(ITYP,NHEX,FLOT,TEXT,DFLOT)
        IF (ITYP.NE.1) CALL XABORT('@DETREAD: INTEGER DATA'
     +       //' EXPECTED(1)')
        ALLOCATE(IHEX(NHEX))
        CALL REDGET(ITYP,NITMA,FLOT,TEXT,DFLOT)
        IF((ITYP.NE.3).AND.(TEXT.EQ.'HEX')) CALL XABORT('@DETREAD:'
     +           //' CHARACTER DATA EXPECTED HEX')
      ELSEIF(TEXT.EQ.'HEX') THEN
        DO 20 I=1,NHEX
          CALL REDGET(ITYP,IHEX(I),FLOT,TEXT,DFLOT)
          IF(ITYP.NE.1)
     +      CALL XABORT('@DETREAD: INTEGER DATA EXPECTED FOR HEX')
   20   CONTINUE
      ELSEIF(TEXT.EQ.'POSITION') THEN
        LPOS=.TRUE.
        DO 30 I=1,6
          CALL REDGET(ITYP,NITMA,DEVPOS(I),TEXT,DFLOT)
          IF (ITYP.NE.2) CALL XABORT('@DETREAD: REAL DATA EXPECTED(2)')
   30   CONTINUE
      ELSEIF(TEXT.EQ.'RESP') THEN
         LRESP=.TRUE.
         DO 40 I=1,NREP
            CALL REDGET(ITYP,NITMA,REP(I),TEXT,DFLOT)
            IF (ITYP.NE.2)CALL XABORT('@DETREAD: REAL DATA EXPECTED(2)')
   40   CONTINUE
      ELSEIF(TEXT.EQ.'ENDN') THEN
        LEND=.TRUE.
      ELSE
         CALL XABORT('@DETREAD: WRONG KEYWORD')
      ENDIF

      IF(.NOT.LEND) GOTO 10
*----
*  READING INFORMATION LINKED TO DETECTOR PARAMETERS
*----
      IF((.NOT.LPOS).OR.(.NOT.LRESP)) CALL XABORT('@DETREAD: POSITIONS'
     +       //' OR RESP NOT SPECIFIED')
      IF(LHEX.NEQV.LHEX2) CALL XABORT('@DETREAD: NHEX SHOULD BE'
     +       //' SPECIFIED')

      CALL LCMSIX(IPDET,' ',0)
      CALL LCMSIX(IPDET,TYPE,1)
      CALL LCMSIX(IPDET,NAMDET,1)
      CALL LCMPUT(IPDET,'POSITION',6,2,DEVPOS)
      IF(LHEX)CALL LCMPUT(IPDET,'NHEX',NHEX,1,IHEX)
      CALL LCMPUT(IPDET,'RESPON',NREP,2,REP)
      IF(IPRT.GT.5) THEN
         IF(LHEX) WRITE(6,50) (IHEX(I),I=1,NHEX)
         WRITE(6,60) (REP(I),I=1,NREP)
      ENDIF
      IF(LHEX) DEALLOCATE(IHEX)
      DEALLOCATE(REP)
      RETURN
*
   50 FORMAT(/20H DETREAD: IHEX ARRAY/(10X,20I6))
   60 FORMAT(/19H DETREAD: REP ARRAY/(10X,1P,10E12.4))
      END