* * $Id: hgfit.F,v 1.1.1.1 1996/01/16 17:07:38 mclareni Exp $ * * $Log: hgfit.F,v $ * Revision 1.1.1.1 1996/01/16 17:07:38 mclareni * First import * * #include "hbook/pilot.h" *CMZ : 4.17/02 15/12/92 21.48.30 by Rene Brun *-- Author : SUBROUTINE HGFIT(IDD,NFPAR,NPFITS,FITCHI,FITPAR,FITSIG,FITNAM) *.==========> *. *. Returns fit parameters *. *..==========> (R.Brun) #include "hbook/hcbook.inc" DIMENSION FITPAR(1),FITSIG(1) CHARACTER*(*) FITNAM(3) *.______________________________________ * CHARACTER*4 NAME #if defined(CERNLIB_DOUBLE) PARAMETER (NWW=2) DOUBLE PRECISION SS #endif #if !defined(CERNLIB_DOUBLE) PARAMETER (NWW=1) REAL SS #endif * CALL HFIND(IDD,'HGFIT ') * NFPAR=0 IF(LCID.LE.0)GO TO 999 * LFUNC=LQ(LCONT-1) IF(LFUNC.EQ.0)GO TO 999 IF(IQ(LFUNC-2).EQ.0)GO TO 999 LHFIT =LQ(LFUNC-1) IF(LHFIT.EQ.0)GO TO 999 * IF(JBIT(IQ(LHFIT),5).EQ.0)THEN * Old format NFPAR =Q(LHFIT+1) IF(NFPAR.EQ.0)GO TO 999 NPFITS=Q(LHFIT+2) FITCHI=Q(LHFIT+3) NCH=LEN(FITNAM(1)) IF(NCH.GT.8)NCH=8 DO 10 I=1,NFPAR FITPAR(I)=Q(LHFIT+ 4+I) FITSIG(I)=Q(LHFIT+24+I) FITNAM(I)=' ' CALL UHTOC(Q(LHFIT+43+2*I),4,FITNAM(I),NCH) 10 CONTINUE ELSE * New format (29/07/92). IFITTY=IQ(LHFIT+1) IF(IFITTY.EQ.0)GO TO 999 NFPAR=IQ(LHFIT+2) IF(NFPAR.EQ.0)GO TO 999 NPFITS=IQ(LHFIT+3) NOTHER=IQ(LHFIT+4) FITCHI=Q(LHFIT+6) IF(IFITTY.EQ.4)THEN CALL HQGETF(LHFIT) ELSE NP=MIN(NFPAR,35) II=11 DO 20 I=1,NP CALL UCOPY(Q(LHFIT+II),SS,NWW) FITPAR(I)=SS * Note: FITPAR is only single precision. II=II+NWW 20 CONTINUE NWERR=IQ(LHFIT-1)-NWW*(NFPAR+NOTHER) IF(NWERR.GT.0)THEN II=IQ(LHFIT-1)-NWERR+11 DO 30 I=1,NP CALL UCOPY(Q(LHFIT+II),SS,NWW) FITSIG(I)=SS * Note: FITSIG is only single precision. II=II+NWW 30 CONTINUE ENDIF * Get names if available, otherwise generate from IFITTY. DO 40 I=1,NP FITNAM(I)=' ' 40 CONTINUE IF(IFITTY.EQ.1)THEN * Polynomial. N1=MAX(NP,10) DO 50 I=1,N1 WRITE(FITNAM(I),'(''A'',I1,6X)')I-1 50 CONTINUE IF(NP.GT.10)THEN DO 60 I=11,NP WRITE(FITNAM(I),'(''A'',I2,5X)')I-1 60 CONTINUE END IF ELSE IF(IFITTY.EQ.2)THEN * Exponential. FITNAM(1)='Constant' FITNAM(2)='Slope' ELSE IF(IFITTY.EQ.3)THEN * Gaussian. FITNAM(1)='Constant' FITNAM(2)='Mean' FITNAM(3)='Sigma' ELSE IF(IFITTY.NE.4)THEN L=LQ(LHFIT) 70 CONTINUE IF(L.NE.0)THEN CALL UHTOC(IQ(L-4),4,NAME,4) IF(NAME.EQ.'HFNA')THEN DO 80 I=1,NP CALL UHTOC(Q(L+2*I-1),4,FITNAM(I),8) 80 CONTINUE ELSE GO TO 70 END IF END IF END IF END IF * Get covariances if required and when available. END IF * 999 END