!-------------------------------------- LICENCE BEGIN ------------------------------------
!Environment Canada - Atmospheric Science and Technology License/Disclaimer,
!                     version 3; Last Modified: May 7, 2008.
!This is free but copyrighted software; you can use/redistribute/modify it under the terms
!of the Environment Canada - Atmospheric Science and Technology License/Disclaimer
!version 3 or (at your option) any later version that should be found at:
!http://collaboration.cmc.ec.gc.ca/science/rpn.comm/license.html
!
!This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
!without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
!See the above mentioned License/Disclaimer for more details.
!You should have received a copy of the License/Disclaimer along with this software;
!if not, you can write to: EC-RPN COMM Group, 2121 TransCanada, suite 500, Dorval (Quebec),
!CANADA, H9P 1J3; or send e-mail to service.rpn@ec.gc.ca
!-------------------------------------- LICENCE END --------------------------------------
!

      SUBROUTINE LISTREJ(lobsSpaceData) 1,71
#if defined (DOC)
*
*
************************************************************************
*
*PURPOSE: LIST ALL OBSERVATIONS REJECTED BY THE VARIATIONAL QC
*         SET QC FLAGS CONSISTENT WITH VARQC DECISIONS
*         SET GLOBAL FLAG INDICATING REPORT CONTAINS REJECTED OBSERVATION
*           AS REQUIRED
*
*
*ARGUMENTS:  NONE
*
*AUTHOR: B. BRASNETT (CMDA/MSC) MARCH 2000
*REVISION: B. BRASNETT (CMDA/MSC) NOV 2001
*          - Added idtyp 177
*          S. Pellerin *ARMA/SMC nov. 2001
*          - reordering of declaration dependencies (for Linux compilation)
*          N. Wagnewur (CMDA/MSC) Juin 2002
*          - Added idtyp 180 for GOES Raidiances
*          B. Brasnett (CMDA/MSC) Sept 2003
*          - List TOVS rejects
*          J. Halle (CMDA/MSC) Sept 2005
*          - Added idtyp 182 for MHS.
*          A. Beaulne (CMDA/SMC) June 2006
*          - Added idtyp 183 for AIRS.
*          R. Sarrazin CMDA  April 2008
*          - added idtyp 185 for CSR
*          S. Heilliette
*          - added idtyp 186 for IASI
*          S. Pellerin (ARMA/MRB) January 2009
*          - Use of robdata8(OBS_OMN,*) [2013: now OBS_QCV] as zpost value
*          S. Macpherson (ARMA/MRD) Sep 2009
*          - List GP family (GPS) rejects (idtyp 189)
*          S. Macpherson (ARMA/MRD) Feb 2013
*          - added idtyp=192 for ATMS
************************************************************************
#endif
*
      use EarthConstants_mod
      use MathPhysConstants_mod
      use obsSpaceData_mod
      use columnData_mod
      use bufr
      use minimization_mod
      IMPLICIT NONE
*
      type(struct_obs) :: lobsSpaceData
      INTEGER, parameter :: numFamily = 9
      CHARACTER(len=2), parameter :: listFamily(numFamily) = (/'UA','AI','SF','SW','PR','RO','GP','SC','TO'/)
      INTEGER, parameter :: MAXNUMTYPE=254,NUMITEM=13
      CHARACTER *16 CLOBTP(MAXNUMTYPE)
      INTEGER ICOUNT(NUMITEM,numFamily)
*
*
      INTEGER JFAM,JITEM,INDEX_HEADER
      INTEGER INDEX_BODY,INDEX_BODY2,ISTART,ITYP,ISTYP
      INTEGER ISPDO,IDIRO,ISPDF,IDIRF,ISPDA,IDIRA,ILEV
      INTEGER IDBURP,IOTHER
      REAL*8    ZVAR,ZFCST,ZANA,ZPOST,ZLAT,ZLON,ZUU,ZVV
      REAL*8    SPD,DEG,ZLEV,ZSLEV,ZCUT
      CHARACTER *4 CLITM(NUMITEM),CLDESC
      CHARACTER *2 CLUNITS
*
      LOGICAL LLOK,LLELREJ
*
*  ------NOTE----------
* CURRENTLY SUPPORTED FAMILIES OF DATA 'UA' 'AI' 'SF' 'HU' 'TO' 'GO' 'GP'
*
      DATA ZCUT /0.75D0/
      DATA CLITM(1), CLITM(2), CLITM(3), CLITM(4), CLITM(5), CLITM(6)
     1       /'WND',    'WND',    'HGT',    'TMP',    'DPD',   'STNP'/
      DATA CLITM(7), CLITM(8), CLITM(9), CLITM(10), CLITM(11), CLITM(12)
     1      /'MSLP',   'TSFC',   'SDPD',   'SWND',   'SWND',   'BTMP'/
      DATA CLITM(13) /'ZTD'/
      DATA   CLOBTP(12),   CLOBTP(13),    CLOBTP(14),    CLOBTP(15)
     1    /     'SYNOP',       'SHIP', 'SYNOP MOBIL',       'METAR'/
      DATA   CLOBTP(16),   CLOBTP(18),    CLOBTP(20),    CLOBTP(32)
     1    /     'SPECI',    'DRIFTER',       'RADOB',       'PILOT'/
      DATA   CLOBTP(33),   CLOBTP(34),    CLOBTP(35),    CLOBTP(36)
     1   / 'PILOT SHIP','PILOT MOBIL',        'TEMP',   'TEMP SHIP'/
      DATA   CLOBTP(37),   CLOBTP(38),    CLOBTP(39),    CLOBTP(40)
     1   /  'TEMP DROP', 'TEMP MOBIL',       'ROCOB',  'ROCOB SHIP'/
      DATA   CLOBTP(42),   CLOBTP(54),    CLOBTP(61),    CLOBTP(62)
     1    /     'AMDAR',      'ROFOR',       'MAFOR',     'TRACKOB'/
      DATA   CLOBTP(63),   CLOBTP(64),    CLOBTP(65),    CLOBTP(67)
     1    /     'BATHY',      'TESAC',      'WAVEOB',       'HYDRA'/
      DATA       CLOBTP(68),        CLOBTP(71),       CLOBTP(72)
     1    /         'HYFOR',          'CLIMAT',     'CLIMAT SHIP'/
      DATA       CLOBTP(73),        CLOBTP(75),       CLOBTP(76)
     1    /   'NACLI/CLINP',    'CLIMATE TEMP','CLIMATE TEMP SHP'/
      DATA       CLOBTP(85),        CLOBTP(86),       CLOBTP(87)
     1    /         'SAREP',           'SATEM',          'SARAD'/
      DATA       CLOBTP(88),       CLOBTP(128),      CLOBTP(129)
     1   /          'SATOB',           'AIREP',          'PIREP'/
      DATA      CLOBTP(130),       CLOBTP(131),      CLOBTP(132)
     1    /      'PROFILER',     'SUPER SYNOP',    'SUPER AIREP'/
      DATA      CLOBTP(135),       CLOBTP(136),      CLOBTP(137)
     1    /    'TEMP+PILOT',      'TEMP+SYNOP',    'PILOT+SYNOP'/
      DATA      CLOBTP(138),       CLOBTP(139),      CLOBTP(140)
     1  /'TEMP+PILOT+SYNOP', 'TEMP SHIP+PILOT', 'TEMP SHIP+SHIP'/
      DATA      CLOBTP(141),       CLOBTP(142),      CLOBTP(143)
     1   /'PILOT SHIP+SHIP','TEMPSHP+PILOT+SH',           'SAWR'/
      DATA      CLOBTP(144),       CLOBTP(145),      CLOBTP(146)
     1    /'AUTOMATIC SAWR',    'SYNOP PATROL','AUTOMATIC SYNOP'/
      DATA      CLOBTP(147),       CLOBTP(148),       CLOBTP(149)
     1    /'AUTOMATIC SHIP',    'SAWR SPECIAL','AUTOSAWR SPECIAL'/
      DATA      CLOBTP(150),       CLOBTP(151),       CLOBTP(152)
     1    /'ANAL BOGUS SFC',  'ANAL BOGUS ALT','REPAIR BOGUS SFC'/
      DATA      CLOBTP(153),       CLOBTP(157),       CLOBTP(158)
     1  /'REPAIR BOGUS ALT',           'ACARS',          'HUMSAT'/
      DATA      CLOBTP(159),       CLOBTP(160),       CLOBTP(161)
     1  /'TEMP MOBIL+PILOT','TEMP MOBIL+SYNOP','PILOT MOBIL+SYNP'/
      DATA      CLOBTP(162),       CLOBTP(163),       CLOBTP(164)
     1  /'TEMP MOBIL+PI+SY',           'RADAR',     'TOVS AMSU-A'/
      DATA      CLOBTP(167),       CLOBTP(168),       CLOBTP(169)
     1  /           'ERS-1',           'SSM/I',          'GPSMET'/
      DATA      CLOBTP(170),       CLOBTP(177),       CLOBTP(180)
     1  /           'OZONE',             'ADS',            'GOES'/
      DATA      CLOBTP(181),       CLOBTP(182),       CLOBTP(183)
     1  /     'TOVS AMSU-B',        'TOVS MHS',            'AIRS'/
      DATA      CLOBTP(185),       CLOBTP(186),       CLOBTP(188)
     1  /          'GEORAD',            'IASI',           'SATOB'/
      DATA      CLOBTP(189),       CLOBTP(192),       CLOBTP(193)   
     1  /          'GB-GPS',       'TOVS ATMS',            'CRIS'/
      DATA      CLOBTP(254)  
     1  /   'SCATTEROMETER'/
*
      IF(.NOT.min_lvarqc) RETURN

      DO JFAM=1,numFamily
        DO JITEM=1,NUMITEM
          ICOUNT(JITEM,JFAM) = 0
        ENDDO
      ENDDO
      WRITE(*,610)
 610  FORMAT(//'LIST OF DATA REJECTED BY VARIATIONAL QUALITY CONTROL')
*
*_____LOOP OVER ALL REPORTS, ONE FAMILY AT A TIME
*
      FAMILY: DO JFAM = 1,numFamily

        WRITE(*,600)
 600    FORMAT(1X)
        IF (listFamily(JFAM) .NE. 'TO') THEN
          WRITE(*,601)
        ELSE
          WRITE(*,602)
        ENDIF
 601    FORMAT('IDENT     TYPE DESCRIPTION     LAT   LONG    ',
     1    'LEVEL  ITEM   OBSVD     BKGND     ANAL  POST PROB',
     2    ' REPORT')
 602    FORMAT('IDENT     TYPE DESCRIPTION     LAT   LONG    ',
     1    'CHNL   ITEM   OBSVD     BKGND     ANAL  POST PROB',
     2    ' REPORT')
*
        ! loop over all header indices of the family
        call obs_set_current_header_list(lobsSpaceData,listFamily(jfam))
        HEADER: do
          index_header = obs_getHeaderIndex(lobsSpaceData)
          if (index_header < 0) exit HEADER

          LLELREJ = .FALSE.
          IDBURP  = obs_headElem_i(lobsSpaceData,OBS_ITY,INDEX_HEADER)
          ZLAT = obs_headElem_r(lobsSpaceData,OBS_LAT,INDEX_HEADER)*MPC_DEGREES_PER_RADIAN_R8
          ZLON = obs_headElem_r(lobsSpaceData,OBS_LON,INDEX_HEADER)*MPC_DEGREES_PER_RADIAN_R8

          ! loop over all body indices for this index_header
          call obs_set_current_body_list(lobsSpaceData, index_header)
          BODY: do 
             index_body = obs_getBodyIndex(lobsSpaceData)
             if (index_body < 0) exit BODY
             ITYP = obs_bodyElem_i(lobsSpaceData,OBS_VNM,INDEX_BODY)
             IF (ITYP .EQ. BUFR_NETS .OR. ITYP .EQ. BUFR_NEPS .OR.
     1           ITYP .EQ. BUFR_NEPN .OR. ITYP .EQ. BUFR_NESS .OR.
     2           ITYP .EQ. BUFR_NEUS .OR. ITYP .EQ. BUFR_NEVS .OR.
     3           ITYP .EQ. BUFR_NEZD) THEN
                LLOK = (obs_bodyElem_i(lobsSpaceData,OBS_ASS,INDEX_BODY) .EQ. 1)
             ELSE
                LLOK = (obs_bodyElem_i(lobsSpaceData,OBS_ASS,INDEX_BODY) .EQ. 1 .AND.
     1                  obs_bodyElem_i(lobsSpaceData,OBS_XTR,INDEX_BODY) .EQ. 0) .OR.
     2                 (obs_bodyElem_i(lobsSpaceData,OBS_XTR,INDEX_BODY) .EQ. 2 .AND.
     3                  obs_bodyElem_i(lobsSpaceData,OBS_VNM,INDEX_BODY) .EQ. BUFR_NEGZ)
             ENDIF
             IF (LLOK) THEN
               zpost = obs_bodyElem_r(lobsSpaceData,OBS_QCV,INDEX_BODY)
               ZLEV = obs_bodyElem_r(lobsSpaceData,OBS_PPP,INDEX_BODY)*MPC_MBAR_PER_PA_R8
               IF (obs_bodyElem_i(lobsSpaceData,OBS_VCO,INDEX_BODY) .EQ. 2) THEN
                 ZLEV = obs_bodyElem_r(lobsSpaceData,OBS_PPP,INDEX_BODY)*MPC_MBAR_PER_PA_R8
                 CLUNITS = 'MB'
               ENDIF
               IF (obs_bodyElem_i(lobsSpaceData,OBS_VCO,INDEX_BODY) .EQ. 1) THEN
*
*________________VERTICAL COORDINATE IS HEIGHT
*
                 ZLEV = obs_bodyElem_r(lobsSpaceData,OBS_PPP,INDEX_BODY)
                 CLUNITS = ' M'
               ENDIF
               IF (obs_bodyElem_i(lobsSpaceData,OBS_VCO,INDEX_BODY) .EQ. -1) THEN
*
*________________TOVS CHANNEL NUMBER
*
                 ZLEV = obs_bodyElem_r(lobsSpaceData,OBS_PPP,INDEX_BODY)
                 CLUNITS = '  '
               ENDIF
               ZVAR = obs_bodyElem_r(lobsSpaceData,OBS_VAR,INDEX_BODY)
               ZFCST= ZVAR - obs_bodyElem_r(lobsSpaceData,OBS_OMP,INDEX_BODY)
               ZANA = ZVAR - obs_bodyElem_r(lobsSpaceData,OBS_OMA,INDEX_BODY)
*
*_____________TREAT WINDS AS SPECIAL CASE
*              BUFR_NEUU       = 011003 (U COMPONENT)           (m/s)
*              BUFR_NEVV       = 011004 (V COMPONENT)           (m/s)
*              BUFR_NEUS       = 011215 (U COMPONENT AT 10 M)   (m/s)
*              BUFR_NEVS       = 011216 (V COMPONENT AT 10 M)   (m/s)
*
               IF (((ITYP.EQ.BUFR_NEUU .OR. ITYP .EQ. BUFR_NEUS) .AND.
     1              col_varExist('UU')).OR.
     2             ((ITYP.EQ.BUFR_NEVV .OR. ITYP .EQ. BUFR_NEVS) .AND.
     3              col_varExist('VV'))) THEN
                 IOTHER = -1
                 IF (ITYP .EQ. BUFR_NEUU .OR. ITYP .EQ. BUFR_NEUS) THEN
                   ISTART=obs_headElem_i(lobsSpaceData,OBS_RLN,INDEX_HEADER)
                   DO INDEX_BODY2=ISTART,INDEX_BODY
                     ISTYP = obs_bodyElem_i(lobsSpaceData,OBS_VNM,INDEX_BODY2)
                     IF (obs_bodyElem_i(lobsSpaceData,OBS_VCO,INDEX_BODY2) .EQ. 2) THEN
                       ZSLEV = obs_bodyElem_r(lobsSpaceData,OBS_PPP,INDEX_BODY2)*MPC_MBAR_PER_PA_R8
                     ENDIF
                     IF (obs_bodyElem_i(lobsSpaceData,OBS_VCO,INDEX_BODY2) .EQ. 1) THEN
                       ZSLEV = obs_bodyElem_r(lobsSpaceData,OBS_PPP,INDEX_BODY2)
                     ENDIF
                     IF ((ISTYP .EQ. BUFR_NEVV .OR. ISTYP .EQ. BUFR_NEVS)
     1                    .AND. ZLEV .EQ. ZSLEV) THEN
                       IOTHER = INDEX_BODY2
                     ENDIF
                   ENDDO
                 ELSE
                   ISTART=obs_headElem_i(lobsSpaceData,OBS_RLN,INDEX_HEADER)
                   DO INDEX_BODY2=ISTART,INDEX_BODY
                     ISTYP = obs_bodyElem_i(lobsSpaceData,OBS_VNM,INDEX_BODY2)
                     IF (obs_bodyElem_i(lobsSpaceData,OBS_VCO,INDEX_BODY2) .EQ. 2) THEN
                       ZSLEV = obs_bodyElem_r(lobsSpaceData,OBS_PPP,INDEX_BODY2)*MPC_MBAR_PER_PA_R8
                     ENDIF
                     IF (obs_bodyElem_i(lobsSpaceData,OBS_VCO,INDEX_BODY2) .EQ. 1) THEN
                       ZSLEV = obs_bodyElem_r(lobsSpaceData,OBS_PPP,INDEX_BODY2)
                     ENDIF
                     IF ((ISTYP .EQ. BUFR_NEUU .OR. ISTYP .EQ. BUFR_NEUS)
     1                    .AND. ZLEV .EQ. ZSLEV) THEN
                       IOTHER = INDEX_BODY2
                     ENDIF
                   ENDDO
                 ENDIF
                 IF (IOTHER .NE. -1) THEN
                   IF (ITYP .EQ. BUFR_NEVV .OR. ITYP .EQ. BUFR_NEUS) THEN
                     ZUU = ZVAR
                     ZVV = obs_bodyElem_r(lobsSpaceData,OBS_VAR,IOTHER)
                   ELSE
                     ZVV = ZVAR
                     ZUU = obs_bodyElem_r(lobsSpaceData,OBS_VAR,IOTHER)
                   ENDIF
                   SPD = SQRT(ZUU*ZUU + ZVV*ZVV)
                   ISPDO = NINT(SPD)
                   IF (ZUU.EQ.0.D0 .AND. ZVV.EQ.0.D0)THEN
                     IDIRO = 999
                   ELSE
                     DEG = 270. - ATAN2(ZVV,ZUU)*MPC_DEGREES_PER_RADIAN_R8
                     IF (DEG .GT. 360.D0)DEG = DEG - 360.D0
                     IF (DEG .LT. 0.D0)  DEG = DEG + 360.D0
                     IDIRO = NINT(DEG)
                   ENDIF
                   IF (ITYP .EQ. BUFR_NEUU .OR. ITYP .EQ. BUFR_NEUS) THEN
                     ZUU = ZFCST
                     ZVV = obs_bodyElem_r(lobsSpaceData,OBS_VAR,IOTHER)
     1                   - obs_bodyElem_r(lobsSpaceData,OBS_OMP,IOTHER)
                   ELSE
                     ZVV = ZFCST
                     ZUU = obs_bodyElem_r(lobsSpaceData,OBS_VAR,IOTHER)
     1                   - obs_bodyElem_r(lobsSpaceData,OBS_OMP,IOTHER)
                   ENDIF
                   SPD=SQRT(ZUU*ZUU + ZVV*ZVV)
                   ISPDF = NINT(SPD)
                   IF (ZUU .EQ. 0.D0 .AND. ZVV .EQ. 0.D0) THEN
                     IDIRF = 999
                   ELSE
                     DEG = 270.D0 - ATAN2(ZVV,ZUU)*MPC_DEGREES_PER_RADIAN_R8
                     IF (DEG .GT. 360.D0)DEG = DEG - 360.D0
                     IF (DEG .LT. 0.D0)  DEG = DEG + 360.D0
                     IDIRF = NINT(DEG)
                   ENDIF
                   IF (ITYP .EQ. BUFR_NEUU .OR. ITYP .EQ. BUFR_NEUS) THEN
                     ZUU = ZANA
                     ZVV = obs_bodyElem_r(lobsSpaceData,OBS_VAR,IOTHER)
     1                   - obs_bodyElem_r(lobsSpaceData,OBS_OMA,IOTHER)
                   ELSE
                     ZVV = ZANA
                     ZUU = obs_bodyElem_r(lobsSpaceData,OBS_VAR,IOTHER)
     1                   - obs_bodyElem_r(lobsSpaceData,OBS_OMA,IOTHER)
                   ENDIF
                   SPD=SQRT(ZUU*ZUU + ZVV*ZVV)
                   ISPDA = NINT(SPD)
                   IF (ZUU.EQ.0.D0 .AND. ZVV.EQ.0.D0) THEN
                     IDIRA = 999
                   ELSE
                     DEG = 270.D0 - ATAN2(ZVV,ZUU)*MPC_DEGREES_PER_RADIAN_R8
                     IF (DEG .GT. 360.D0)DEG = DEG - 360.D0
                     IF (DEG .LT. 0.D0)  DEG = DEG + 360.D0
                     IDIRA = NINT(DEG)
                   ENDIF
                   ILEV = NINT(ZLEV)
                   IF (ZPOST .GT. ZCUT) THEN
                     LLELREJ = .TRUE.
                     call obs_bodySet_i(lobsSpaceData,OBS_FLG,INDEX_BODY,
     1               IBSET(obs_bodyElem_i(lobsSpaceData,OBS_FLG,INDEX_BODY),9))
                     call obs_bodySet_i(lobsSpaceData,OBS_FLG,IOTHER,
     1               IBSET(obs_bodyElem_i(lobsSpaceData,OBS_FLG,IOTHER),9))
                     call obs_bodySet_i(lobsSpaceData,OBS_FLG,INDEX_BODY,
     1               IBSET(obs_bodyElem_i(lobsSpaceData,OBS_FLG,INDEX_BODY),17))
                     call obs_bodySet_i(lobsSpaceData,OBS_FLG,IOTHER,
     1               IBSET(obs_bodyElem_i(lobsSpaceData,OBS_FLG,IOTHER),17))
                     IF (ITYP .EQ. BUFR_NEUU .OR.
     1                   ITYP .EQ. BUFR_NEVV) THEN
                       ICOUNT(1,JFAM) = ICOUNT(1,JFAM) + 1
                     ENDIF
                     IF (ITYP .EQ. BUFR_NEUS .OR. ITYP .EQ. BUFR_NEVS) THEN
                       ICOUNT(10,JFAM) = ICOUNT(10,JFAM) + 1
                     ENDIF
                     WRITE(*,620)
     1                obs_elem_c(lobsSpaceData,'STID',INDEX_HEADER),IDBURP,CLOBTP(IDBURP),ZLAT,ZLON,
     2                ILEV,CLUNITS,IDIRO,ISPDO,IDIRF,ISPDF,IDIRA,
     3                ISPDA,ZPOST,obs_headElem_i(lobsSpaceData,OBS_ONM,INDEX_HEADER)
 620                 FORMAT(A9,1X,i3,1x,A16,F5.1,2X,F5.1,2X,I4,A2,2X,
     1                'WND',3X,I3,'/',I3,3X,I3,'/',I3,3X,I3,
     2                '/',I3,2X,F6.4,1X,I5)
                   ENDIF
                 ENDIF
               ELSE
                 ILEV = NINT(ZLEV)
                 IF (ZPOST .GT. ZCUT) THEN
                   LLELREJ = .TRUE.
                   IF (ITYP .EQ. BUFR_NEGZ) THEN
                     CLDESC = CLITM(3)
                     ICOUNT(3,JFAM) = ICOUNT(3,JFAM) + 1
*
*________________CONVERT FROM GEOPOTENTIAL TO GEOPOTENTIAL HEIGHT
*
                     ZVAR = ZVAR/RG
                     ZFCST = ZFCST/RG
                     ZANA  = ZANA/RG
                   ENDIF
                   IF (ITYP .EQ. BUFR_NETT) THEN
                     CLDESC = CLITM(4)
                     ICOUNT(4,JFAM) = ICOUNT(4,JFAM) + 1
*
*________________CONVERT FROM KELVIN TO CELCIUS
*
                     ZVAR = ZVAR - MPC_K_C_DEGREE_OFFSET_R8
                     ZFCST = ZFCST - MPC_K_C_DEGREE_OFFSET_R8
                     ZANA  = ZANA - MPC_K_C_DEGREE_OFFSET_R8
                   ENDIF
                   IF (ITYP .EQ. BUFR_NEES) THEN
                     CLDESC = CLITM(5)
                     ICOUNT(5,JFAM) = ICOUNT(5,JFAM) + 1
                   ENDIF
                   IF (ITYP .EQ. BUFR_NEPS) THEN
                     CLDESC = CLITM(6)
                     ICOUNT(6,JFAM) = ICOUNT(6,JFAM) + 1
*
*________________CONVERT FROM PASCALS TO MILLIBARS
*
                     ZVAR = ZVAR*MPC_MBAR_PER_PA_R8
                     ZANA = ZANA*MPC_MBAR_PER_PA_R8
                     ZFCST = ZFCST*MPC_MBAR_PER_PA_R8
                   ENDIF
                   IF (ITYP .EQ. BUFR_NEPN) THEN
                     CLDESC = CLITM(7)
                     ICOUNT(7,JFAM) = ICOUNT(7,JFAM) + 1
*
*________________CONVERT FROM PASCALS TO MILLIBARS
*
                     ZVAR = ZVAR*MPC_MBAR_PER_PA_R8
                     ZANA = ZANA*MPC_MBAR_PER_PA_R8
                     ZFCST = ZFCST*MPC_MBAR_PER_PA_R8
                   ENDIF
                   IF (ITYP .EQ. BUFR_NETS) THEN
                     CLDESC = CLITM(8)
                     ICOUNT(8,JFAM) = ICOUNT(8,JFAM) + 1
*
*________________CONVERT FROM KELVIN TO CELCIUS
*
                     ZVAR = ZVAR - MPC_K_C_DEGREE_OFFSET_R8
                     ZFCST = ZFCST - MPC_K_C_DEGREE_OFFSET_R8
                     ZANA  = ZANA - MPC_K_C_DEGREE_OFFSET_R8
                   ENDIF
                   IF (ITYP .EQ. BUFR_NESS) THEN
                     CLDESC = CLITM(9)
                     ICOUNT(9,JFAM) = ICOUNT(9,JFAM) + 1
                   ENDIF
                   IF ( ITYP.EQ.BUFR_NBT1 .OR. ITYP.EQ.BUFR_NBT2 .OR.
     1                  ITYP.EQ.BUFR_NBT3      ) THEN
                     CLDESC = CLITM(12)
                     ICOUNT(12,JFAM) = ICOUNT(12,JFAM) + 1
                   ENDIF
                   IF (ITYP .EQ. BUFR_NEZD) THEN
                     CLDESC = CLITM(13)
                     ICOUNT(13,JFAM) = ICOUNT(13,JFAM) + 1
*
*________________CONVERT ZTD FROM METRES TO MILLIMETRES
*
                     ZVAR = ZVAR * 1000.D0
                     ZFCST = ZFCST * 1000.D0
                     ZANA  = ZANA * 1000.D0
                   ENDIF
*
                   call obs_bodySet_i(lobsSpaceData,OBS_FLG,INDEX_BODY,
     1             IBSET(obs_bodyElem_i(lobsSpaceData,OBS_FLG,INDEX_BODY),9))
                   call obs_bodySet_i(lobsSpaceData,OBS_FLG,INDEX_BODY,
     1             IBSET(obs_bodyElem_i(lobsSpaceData,OBS_FLG,INDEX_BODY),17))
                   WRITE(*,630) obs_elem_c(lobsSpaceData,'STID',INDEX_HEADER),IDBURP,
     1              CLOBTP(IDBURP),ZLAT,ZLON,ILEV,CLUNITS,CLDESC,
     2              ZVAR,ZFCST,ZANA,ZPOST,obs_headElem_i(lobsSpaceData,OBS_ONM,INDEX_HEADER)
 630               FORMAT(A9,1X,I3,1X,A16,F5.1,2X,F5.1,2X,I4,A2,2X,
     2                A4,2X,F7.1,3X,F7.1,3X,F7.1,2X,F6.4,1X,I5,1X)
                 ENDIF
               ENDIF
             ENDIF
          ENDDO BODY
*
*_________NOW SET THE GLOBAL FLAGS IN THE BURP RECORD HEADER
*
          IF (LLELREJ) THEN
            call obs_headSet_i(lobsSpaceData,OBS_ST1,INDEX_HEADER, IBSET( obs_headElem_i(lobsSpaceData,OBS_ST1,INDEX_HEADER), 06))
          ENDIF
        ENDDO HEADER
      ENDDO FAMILY
*
*
      WRITE(*,640)
 640  FORMAT(//)
      WRITE(*,665)
 665  FORMAT(' REJECTED DATA ACCORDING TO FAMILY OF REPORT.')
      WRITE(*,670)(listFamily(JFAM),JFAM=1,numFamily)
 670  FORMAT(5X,11(7X,A2))
      DO JITEM=1,NUMITEM
        IF ( .NOT. (JITEM .EQ. 2 .OR. JITEM .EQ. 11)) THEN
          WRITE(*,680)CLITM(JITEM),(ICOUNT(JITEM,JFAM),JFAM=1,numFamily)
 680      FORMAT(1X,A4,11(4X,I5))
        ENDIF
      ENDDO
      WRITE(*,640)
*
      RETURN
      END