C C $DEBUG C SUBROUTINES:IO4,SUB5,S1N C $STORAGE:2 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C HAEKEL 07.01.1986 VARIATION MIT COMPLEXEN ZAHLEN C C HAEKEL 20.03.1986 VARIATION FUER LINMAX LINIEN C C HAEKEL 26.03.1986 UMGESCHRIEBEN ZUM HAUPTPROGRAMM C C HAEKEL 25.04.1986 AUSGABE AUCH AUF FILES C C HAEKEL 2.10.1986 UMBAU FUER PC (GEKUERZT U. ERW.) C C DATEN VON INTEGER*2 AUF REAL*8 UMFORMATIERT C C ' DECAYFIT 1' C C HAEKEL 4.12.1986 TEXT UEBERARBEITET C C HAEKEL 26.02.1987 DECAY 3.01: FUER 4K MESSPUNKTE UND C C AUSGABE DES MESSPROGRAMMS FUER DIE PC'S C C HAEKEL 27.01.1989 DECAYSBN 1: C C HAEKEL 12.05.1989 DECAYSBN 2: KORREKTUR DER BERECHNETEN C C AMPLITUDEN- U. PHASENKORREKTUREN (SIEHE DOKTORARB.) C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C UNTERPROGRAMME: C C C C IO4: INPUT/OUTPUT VON DATENSAETZEN MIT: C C EINGABE C C EIN : KURZFORMAT C C EINA : ASCII-FILES C C EINAB: ASCII-FILES MIT `BESTMANN`-PROGRAMM GEMESSEN C C EINAR: MESSFILES ZUR BESTIMMUNG VON RELAXATIONSZEITEN C C AUSGABE DER RESIDUEN: C C AUS : KURZFORMAT C C AUSA : ASCII-FILE C C C C SUB5: SONSTIGE UNTERPROGRAMME: C C ABL5 : BERECHNUNG DER MATRIX FUER DIE FITROUTINE UEBER C C DIE ABLEITUNGEN NACH DEN FITPARAMETERN. C C FIT6 : FITROUTINE C C ACHTUNG(!): NICHT DIE STANDARDFITROUTINE: C C EIN TEIL DER BERECHNUNGEN MUESSEN IM HAUPTPROGRAMM C ODER IN ANDEREN UNTERPROGRAMMEN DURCHGEFUERT C C WERDEN, DA SONST ZU GROSSE ARRAYS ANGELEGT C C WERDEN MUESSTEN. C C SIM2 : SIMULATION EINES DECAYS UND ADDITION ZU ODER C C SUBTRAKTION VON EINEM ANDEREN DECAY. BERECHNUNG C C DES STANDARDABWEICHUNGSQUDRATS. C C DOPP : DOPPLERKORREKTUR,BASELINEKORREKTUR,BERECHNUNG C C VON STARTWERTEN FUER PHASE UND AMPLITUDE C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C FIT NACH DEM PRINZIP DES KLEINSTEN FEHLERQUADRATS AN: C C DATEN(I)=A*COS(FREQ*IS*I+PHASE)* C C *EXP(-IS*I*(T2+((T22+DOPPL)*(2*DELAY+IS*I)))) C C FITPARAMETER: AMPLITUDE:A C C PHASE :PHASE C C FREQUENZ :FREQ C C 1/RELAXATIONSZEIT:T2 C C d(1/RELAXATIONSZEIT)/d(IS*I):T22 C C KONSTANTEN: IS=SAMPLEINTERVALL IN NS C C I=DATENPUNKTNUMMER C C DELAY=ZEIT ZWISCHEN PULSENDE UND MESSBEGINN C C DOPPL=BERECHNETER WERT FUER DOPPLERVERBREITERUNG C C (SIEHE SUBROUTINE DOPP) C C BIS ZU 30 LINIEN GLEICHZEITIG FITBAR; DABEI WIRD IMMER NUR C C EINE LINIE ZUR ZEIT GEFITTET D.H. MIT HILFE DER ERSTEN C C ABLEITUNGEN NACH DEN FITPARAMETERN WERDEN KORREKTURWERTE C C BERECHNET. ERGIBT EINE KORREKTUR DER PARAMETER EINE AB- C C WEICHUNGSQUADRATSUMME, DIE NICHT UM EINEN BESTIMMTEN FAKTOR C C KLEINER IST ALS DIE VORHERIGE, SO WIRD EINE KORREKTUR MIT C C HALBIERTEN KORREKTURWERTEN VERSUCHT. NACH 4-MALIGER C C (4=ICORMX-1) HALBIERUNG WIRD DER FIT OHNE KORREKTUR C C BEENDET. ES IST MOEGLICH EINE LINIE MEHR ALS EINMAL ZU FITTEN, C WAS BEI STARKEN LINIEN NEBEN SCHWACHEN SINNVOLL SEIN KANN, C C DA DIE KORREKTUR JA NUR AUF DEN ERSTEN ABLEITUNGEN BERUHT. C C DER SO BERECHNETE DECAY DER LINIE WIRD VOM GEMESSENEN DECAY C C ABGEZOGEN UND DIE NAECHSTE LINIE ANGEPASST. SIND SO ALLE C C LINIEN EINMAL ANGEPASST UND IHRE SIMULIERTEN DECAYS VOM C C GEMESSENEN DECAY ABGEZOGEN, SO WIRD DER SIMULIERTE DECAY C C DER ERSTEN LINIE ZUM RESTDECAY (=RESIDUUM) ADDIERT UND DIE C C ERSTE LINIE NOCH EINMAL ANGEPASST UND EIN NEUER SIMULIERTER C C DECAY WIEDER ABGEZOGEN. ENTSPRECHEND WIRD MIT ALLEN LINIEN C C VERFAHREN UND DIE PROZEDUR WIRD MEHRFACH WIEDERHOLT. C C DADURCH WIRD DER FEHLER IN DER ANPASSUNG DER EINZELLINIEN, C C DER DURCH DIE ANDEREN LINIEN HERVORGERUFEN WIRD, SUCZESSIVE C C VERRINGERT. DAS RESIDUUM WIRD AUF WUNSCH NACH DEM FIT ALS C C DATENFILE AUSGEGEBEN. C C C C MASSNAHMEN UM AUCH MIT NICHT SO GUTEN STARTWERTEN FITTEN ZU C C KOENNEN: C C IN DEN ERSTEN BEIDENSUPERZYKLEN WERDEN NUR DIE PHASEN UND C C DIE AMPLITUDEN ANGEPASST. DIE AENDERUNGEN DER FREQUENZ UND C C DER RELAXATIONSZEIT IN EINEM EIN-LINIEN-FIT DARF EINEN C C MAXIMALWERT NICHT UEBERSCHREITEN. C C C C ZYKLEN=ZAHL DER ANPASSUNGEN EINER LINIE BEVOR IHR SIMULIERTER C DECAY ABGEZOGEN WIRD. (STANDARD=1) C C SUPERZYKLEN=ZAHL WIE OFT DER FIT UEBER ALLE LINIEN C C MAXIMAL WIEDERHOLT WIRD. (STANDARD=100) C C WIRD IN EINEM SUPERZYKLUS KEIN PARAMETER MEHR C C KORRIGIERT, SO WIRD NUR NOCH DER LETZTE SUPERZYKLUS C C DURCHGEFUEHRT, UM DIE ENDERGEBNISSE ABSPEICHERN ZU C C KOENNEN. C C " IQ " ERMOEGLICHT ES, EINZELNE FITPARAMETER AUS DEM FIT C C HERAUSZUNEHMEN. SIE BLEIBEN DANN KONSTANT. C C RESIDUEN: GEMESSENE - BERECHNETE DATEN C C C C SIEHE AUCH: BESCHREIBUNG DER STEUERPARAMETER C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C IMPLICIT INTEGER*2 (I-N) IMPLICIT REAL*8(A-H,O-Z) INTEGER*4 KPPI COMMON/DAT/DATENN(4096),AVGSUM(16),IKAVG REAL*8 U(6),V(6),SE(6),CO(6,6),VCOR(6),DNF(6),ARRAY(6,6), X DATEN(4096),DMF(6),AR(6,6) REAL*8 FREQE(30),FREQS(30),T2S(30),AS(30),PHASES(30) X ,RPAR(24),TE(30),AE(30),PE(30),TA2(30),TB2(30),TD2(30) X ,TDP2(30),FDP(30),T22(30),OM2(30),AVGS(16) INTEGER*2 IPAR(32),OUT,OUTA,OUTD,IQ(16),KQ(7),IDQ(7) X ,IQEIN(7),IFSTP(30),IQH(5) C ,IQR(7) INTEGER*4 IERR,hhflag COMPLEX*16 C1,C11 CHARACTER*24 FILND,FILNST,FILAR,FILBLK CHARACTER*2 DATE(3),APAR(128) CHARACTER*10 KENN,KENNA,SYS CHARACTER FRAG EQUIVALENCE(KENNA,APAR(24)) EQUIVALENCE(SYS,APAR(1)) C KENN='DECAYSBN2B' 1001 FORMAT(' ') CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C INITIALISIEREN C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C PARAMETER AUF NULL SETZEN DO 1707 I=1,128 APAR(I)=' ' 1707 CONTINUE DO 1705 I=1,32 IPAR(I)=0 1705 CONTINUE DO 1706 I=1,24 RPAR(I)=0. 1706 CONTINUE C "NOTKENNUNG" SYS='$$SYSD3.02' C " FFT:1K" IPAR(4)=512 C AUSGABE BILDSCHIRM OUT=6 IOUT=OUT C EINGABE TASTATUR INPAR=5 C BLOCKFILE IBLK=93 C ARRAY-FILE:FILAR OUTA=94 C STEUERFILE:FILNST INSTF=95 C EINLESEN MESSDATEN INFILE=96 C AUSGABE RESIDUEN ('RESTSPEKTREN') IOFILE=97 C AUSGABE PROTOKOLLFILE OUTD=99 C NRFILE=0 ISTFF=0 PI=2.D+00*DASIN(1.D+00) PI2=2.D+00*PI GOTO 117 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C STEUERUNG FUER: WEITERE DATENFILES C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 22 CONTINUE IF(ISTEUER.EQ.1) GOTO 44 CLOSE(IOFILE) CLOSE(OUTD) WRITE(OUT,1111) 1111 FORMAT(' NEUER DATENFILE(Y=1)') READ(INPAR,'(BN,I4)') INDS write(*,*) inds IF(INDS.EQ.1) GOTO 7117 STOP CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C DATEN AUS STEUERFILE EINLESEN ALS OB SIE VOM BILDSCHIRM KAEMEN C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 117 WRITE(OUT,'(3X,A10)') KENN WRITE(OUT,7317) 7317 FORMAT(' AUSGABEFILES: NAME . NR DES DATENSATZES ') WRITE(OUT,1307) 1307 FORMAT(/,' STEUERFILE?(Y=1)',/) READ(INPAR,'(BN,I4)') ISTFF write(*,*) istff IF(ISTFF.NE.1) GOTO 110 WRITE(OUT,1308) 1308 FORMAT( ' STEUERFILE: ',/ ) READ(INPAR,'(A24)') FILNST write(*,*) filnst OPEN(INSTF,FILE=FILNST,IOSTAT=IERR) IF(IERR.NE.0)THEN WRITE(OUT,1400)IERR GOTO 117 ENDIF INPAR=INSTF CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C PROTOKOLL-FILE EROEFFNEN C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 110 CONTINUE WRITE(OUT,1253) 1253 FORMAT(' ASCII-FILE:1,RELAX-FILE:2,BESTM.-ASCII-FILE:3,' X ,/,' KURZFORMAT:0 ') READ(INPAR,'(BN,I4)') IMUELL write(*,*) imuell WRITE(OUT,1300) 1300 FORMAT( ' DATENAUSGABE FILE: ',/ ) READ(INPAR,'(A24)') FILND write(*,*) filnd JQ=21 DO 9010 I=1,20 FRAG=FILND(I:I) IF (FRAG.EQ.'.') JQ=I 9010 CONTINUE FILND(JQ:JQ)='.' JQ=JQ+1 7117 CONTINUE ******************** NRFILE=NRFILE+1 NQQ=NRFILE/100 NQQ1=(NRFILE-NQQ*100)/10 NQQ2=NRFILE-NQQ*100-NQQ1*10 FILND(JQ:JQ)=CHAR(NQQ+48) FILND(JQ+1:JQ+1)=CHAR(NQQ1+48) FILND(JQ+2:JQ+2)=CHAR(NQQ2+48) NRFILE=NRFILE-1 ******************** OPEN(OUTD,FILE=FILND,IOSTAT=IERR) IF(IERR.NE.0)THEN WRITE(OUT,1400)IERR 1400 FORMAT(' OPEN FILE ERROR ',I4) GOTO 110 ENDIF WRITE(OUTD,14001) FILND 14001 FORMAT(' PROTOKOLLFILE:',A24) WRITE(OUTD,'(A10)') KENN C WRITE(OUTD,7814) C 7814 FORMAT(' DIE ANGEGEBENEN STANDARDFEHLER GELTEN NUR' C X ,/,' FUER ISOLIERTE LINIEN UND GIBT AUCH DORT NICHT' C X ,/,' UNBEDINGT DIE REPRODUZIERBARKEIT DER MESSUNG WIEDER') CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C INITIALISIEREN C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC INEUFT=0 PNULL=0. IFITS=0 IBITF=0 IAUS=1 ISTAUS=0 ILA=0 IT2TST=0 IT2TS2=1 IT2TS3=0 BASESUM=0. TEMP=0. DELAY=0. DELAYI=0. IRLXA=0 IPA=1 LINES=1024 INDS=0 LINMAX=30 IZYKLEN=1 IZSUPM=100 IZPHAM=2 IZPHAA=IZPHAM IZPHAS=2 T2START=.1 RKL1=0.99998 RKL2=1.D+00 DT2M=0.5 DFREQM=20. ICORMX=5 LINJH=30 IMHZ=0 IPH=0 INF=0 ISTF=0 IDK=0 IKDOP=0 IKAVG=1 IFPAR=0 IT2G=0 IRLXA=0 IZS=0 IIQ=0 IDA=0 IDAS=0 T2MAXW=100. T2MINW=0. DO 1 I=8,16 IQ(I)=0 1 CONTINUE IQ(1)=4 IQ(2)=1 IQ(3)=2 IQ(4)=3 IQ(5)=4 IQ(6)=0 IQ(7)=5 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C STEUERPARAMETER EINLESEN C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC WRITE(OUT,1302) 1302 FORMAT( ' RESIDUEN ABSPEICHERN,WEITERE PARAMETER' X ,' ,SONDERFIT,DATENBLOCK(Y=1)',/) READ(INPAR,'(BN,4I4)') IRES,INF,IFITS,IBLOCK C write(*,*) IRES,INF,IFITS,IBLOCK IF(IBLOCK.EQ.1) THEN CLOSE(IBLK) WRITE(OUT,*) ' BLOCKFILE' READ(INPAR,'(A24)') FILBLK OPEN(IBLK,FILE=FILBLK) ENDIF IF(IRES.EQ.1) THEN WRITE(OUT,1753) 1753 FORMAT(' RESIDUEN: ASCII-FILE:1,KURZFORMAT:0 ') READ(INPAR,'(BN,I4)') IMUEL2 write(*,*) imuel2 ENDIF C IF(INF.EQ.1) THEN WRITE(OUT,13021) 13021 FORMAT(' STOERUNG FITTEN,DECAY KUERZEN,', X ' DOPPLERKORREKTUR,' X ,/,' AVERAGERKORR.', X ' (1=BESTM.,2= 20 ns KLEIB./AND.,4=10 ns KLEIB./AND.,),' X ,/,' ALLE EINGEGEBENEN LINIEN VOR FITBEGINN ABZIEHEN,' X ,/,' KEINE AUSFUEHRLICHE BILDSCHIRMAUSGABE,' X ,/,' BITFEHLER KORRIGIEREN(Y=1)') READ(INPAR,'(BN,7I4)') ISTF,IDK,IKDOP,IKAVG,ILA,IAUS,IBITF write(*,*) ISTF,IDK,IKDOP,IKAVG,ILA,IAUS,IBITF IKAVG=IKAVG*4 IF(IKAVG.LE.0) IKAVG=1 ENDIF IF(IAUS.EQ.1) THEN IAUS=0 ELSE IAUS=1 ENDIF C IF(IDK.EQ.1) THEN WRITE(OUT,1303) 1303 FORMAT(' ERSTER,LETZTER DATENPUNKT:') READ(INPAR,'(BN,2I8)') IPA,LINES write(*,*) IPA,LINES ENDIF C IF(IBITF.EQ.1) THEN WRITE(OUT,1316) 1316 FORMAT(' FAKTOR (INTEGER) UM DEN BITFEHLER', X ' UEBER DEM RAUSCHEN:') READ(INPAR,'(BN,I8)') IBITFP ENDIF C IF(INF.EQ.1) THEN WRITE(OUT,1699) 1699 FORMAT(' DIVERSE FITPARAMETER,1/T2-GRENZEN,',/ X ,' AUSGABE FUER RELAX.-MESS.,ZYKLEN SETZEN,',/ X ,' IQ NEU SETZEN,DRUCKABH. PARAMETER,',/ X ,' ZUSAETZLICHER 1/T22 FIT(Y=1)',/) READ(INPAR,'(BN,7I4)') IFPAR,IT2G,IRLXA,IZS,IIQ,IDA,IT2TST write(*,*) IFPAR,IT2G,IRLXA,IZS,IIQ,IDA,IT2TST IF(IRLXA.EQ.1) RKL1=.9999998 IF(IT2TST.GE.1) THEN WRITE(OUT,1325) 1325 FORMAT(' ZAHL DER 1/T22-FITS:') READ(INPAR,'(BN,I8)') IT2TSI ENDIF C IF(IIQ.NE.1) GOTO 11703 WRITE(OUT,1700) 1700 FORMAT(' EINGABE IQ(1-6),STANDARD=4,1,2,3,4,0' X ,/,' STEUERPARAMETER FUER DEN FIT DER LINIE' X ,/,' IQ(2-5)=0, WENN ZUGEHOERIGER PARAMETER NICHT' X ,/,' GEFITTET WERDEN SOLL, SONST GANZE ZAHL, BEI 1' X ,/,' BEGINNEND IN AUFSTEIGENDER REIHENFOLGE' X ,/,' IQ(1)= ZAHL DER PARAMETER,IQ(2)=AMPL,IQ(3)=1/T2,' X ,/,' IQ(4)=PHASE,IQ(5)=FREQ,IQ(6)=d(1/T2)/dt' X ,/,' z.B.: EINGABE FUER " PHASE SOLL NICHT GEFITTET' X ,/,' WERDEN": 3,1,2,0,3,0',/) READ(INPAR,'(BN,6I4)') (IQ(I),I=1,6) IF(IQ(1).LE.0) THEN IQ(1)=4 IQ(2)=1 IQ(3)=2 IQ(4)=3 IQ(5)=4 IQ(6)=0 ENDIF IQ(7)=IQ(1)+1 11703 CONTINUE C IF(IFPAR.NE.1) GOTO 11704 WRITE(OUT,7003) 7003 FORMAT(' ICORMX,RKL1,RKL2,DT2M,DFREQM,T2START',/ X ,' STANDARD:5,0.99998,1.,0.5,20.,.1',/ X ,' ICORMX: ZAHL WIE OFT KORREKTURWERTE MAXIMAL HALBIERT WERDEN', X /,' RKL1: FAKTOR DER ERZWINGT,DASS DIE SUMME DER ABWEICHUNGS-',/ X ,' QUADRATE BEI JEDEM FIT KLEINER WERDEN MUSS. DIE',/ X ,' ALTE SUMME MAL RKL1 MUSS KLEINER/GEICH DER NEUEN',/ X ,' SUMME SEIN.',/ X ,' RKL2: RKL1 FUER LETZTEN SUPERZYKLUS',/ X ,' DT2M,DFREQM:2*MAXIMALE AENDERUNG VON 1/T2 UND DER ',/ X ,' FREQUENZ[KHZ]!! IN EINEM FITZYKLUS',/ X ,' T2START: STARTWERT:1/T2',/) READ(INPAR,'(BN,I4,5F20.14)') ICORMX,RKL1,RKL2 X ,DT2M,DFREQM,T2START 11704 CONTINUE C IF(IT2G.NE.1) GOTO 11705 WRITE(OUT,1704) 1704 FORMAT(' OBERE GRENZE,UNTERE GRENZE FUER 1/T2',/, X ' (VORSCHLAG:0.1,0.0)',/) READ(INPAR,'(BN,2E16.9)') T2MAXW,T2MINW T2MAXW=T2MAXW/1000. T2MINW=T2MINW/1000. 11705 CONTINUE ENDIF C IF(ISTF.EQ.1) THEN WRITE(OUT,1771) 1771 FORMAT(' EINGABE IDQ(1-6),STANDARD=2,1,0,2,0,0' X ,/,' STEUERPARAMETER FUER DEN FIT DER STOERUNG' X ,//,' IDQ(2-5)=0, WENN ZUGEHOERIGER PARAMETER NICHT' X ,/,' GEFITTET WERDEN SOLL, SONST GANZE ZAHL, BEI 1' X ,/,' BEGINNEND IN AUFSTEIGENDER REIHENFOLGE' X ,/,' IDQ(1)= ZAHL DER PARAMETER,IDQ(2)=AMPL,IDQ(3)=1/T2,' X ,/,' IDQ(4)=PHASE,IDQ(5)=FREQ' X ,/,' z.B.: EINGABE FUER " PHASE SOLL NICHT GEFITTET' X ,/,' WERDEN": 3,1,2,0,3,0',/) READ(INPAR,'(BN,6I4)') (IDQ(I),I=1,6) IF(IDQ(1).LE.0) THEN IDQ(1)=2 IDQ(2)=1 IDQ(3)=0 IDQ(4)=2 IDQ(5)=0 IDQ(6)=0 ENDIF IDQ(7)=IDQ(1)+1 WRITE(OUT,1318) 1318 FORMAT(' ZAHL DER LINIEN (OHNE STOERUNGEN):') READ(INPAR,'(BN,I4)') LINJH WRITE(OUT,1378) 1378 FORMAT(' DIE STOERUNGEN MUESSEN NACH DEN EIGENTLICHEN LINIEN' X ,/,' WIE LINIEN EINGEGEBEN WERDEN. LINIENZAHL=LINIEN+STOERUNGEN') IF(LINJH.LE.0) LINJH=1 ENDIF C IF(IRLXA.EQ.1) THEN 1397 WRITE(OUT,1387) 1387 FORMAT( ' ARRAY-FILE: ',/ ) READ(INPAR,'(A24)') FILAR OPEN(OUTA,FILE=FILAR,STATUS='NEW',IOSTAT=IERR) IF(IERR.NE.0)THEN WRITE(OUT,1400)IERR GOTO 1397 ENDIF ENDIF CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C ZYKLEN SETZEN C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC IF(IZS.EQ.1) THEN WRITE(OUT,6363) READ(INPAR,'(BN,3I8)') INSUPM,INYKLEN,IZPHAM IZPHAA=IZPHAM 6363 FORMAT(' SUPERZYKLEN,ZYKLEN,SUPERZYKLEN ' X ,' FUER PHASENKORR.',/, X ' STANDARD:100,1,2',/, X ' ZYKLEN:FITZYKLEN FUER EINE EINZELNE LINIE',/, X ' SUPERZYKLEN:FITZYKLEN UEBER ALLE LINIEN',/) IF(INSUPM.GT.0) IZSUPM=INSUPM IF(INYKLEN.GT.0) IZYKLEN=INYKLEN ENDIF CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C SONDERFIT C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC IF(IFITS.EQ.1) THEN WRITE(OUT,1343) 1343 FORMAT(' FIT FUER ALLE LINIEN GLEICHZEITIG:',/, X ' DELAY,PHASE BEI PULSENDE,RELAXATIONSZEIT(Y=1)',/) READ(INPAR,'(3I4)') (IQH(I),I=4,2,-1) IQH(1)=IQH(2)+IQH(3)+IQH(4) IQH(3)=IQH(3)*(IQH(2)+1) IQH(4)=IQH(4)*(IQH(3)+1) IQH(5)=IQH(1)+1 WRITE(OUT,1344) 1344 FORMAT(' STARTWERTE:DELAY[NS],PHASE AM PULSENDE,1/T2', X /,' NUR DELAY UNBEDINGT NOETIG') READ(INPAR,'(3F20.6)') DELAYI,PNULLI,T2ALLI IF((IDA.EQ.1).AND.(IQH(2).GE.1)) THEN IDA=0 IDAS=1 WRITE(OUT,13431) 13431 FORMAT(' RELAXATIONSZEIT:ACHSENABSCHNITT,STEIGUNG') READ(INPAR,'(2E20.10)') TAALLI,TBALLI ENDIF IF(IQH(2).EQ.1) THEN DO 13441 I=1,7 IQ(I)=IQ(I)-1 13441 CONTINUE IQ(2)=IQ(2)+1 IQ(3)=0 ENDIF IF((IQH(3).GT.0).OR.(IQH(4).GT.0)) THEN IZPHAM=IZPHAS+IZPHAM IQ(1)=IQ(1)-1 IQ(5)=IQ(5)-1 IQ(6)=IQ(6)-1 IQ(7)=IQ(7)-1 IQ(4)=0 ENDIF DO 13442 I=1,7 IF(IQ(I).LT.0) IQ(I)=0 13442 CONTINUE ENDIF CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C EINGABE DER STARTPARAMETER C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 33 WRITE(OUT,61) DOMEGM=DFREQM*2.*PI/(1000.*1000.) DT2ME=DT2M/1000. 61 FORMAT(' LINIENZAHL:',/) C ZYKLEN:FITZYKLEN FUER EINE EINZELNE LINIE C SUPERZYKLEN: >1 NUR SINNVOLL WENN WICHTUNG ODER MEHRERE LINIEN C GIBT AN,WIE OFT DIE FITPROZEDUR UEBER ALLE LINIEN C WIEDERHOLT WIRD 62 FORMAT(I4,' . FREQUENZ(MHZ),1/T2,AMPLITUDE,PHASE',/ X ,' NUR FREQUENZ UNBEDINGT NOETIG',/) 63 FORMAT(' TA2,TB2,TD2,TDP2,FDP ',/) READ(INPAR,'(BN,I4)') LINM IF(LINJH.GT.LINM) LINJH=LINM IZPHA1=IZPHAM+1 IF((IAUS.EQ.1).OR.(IZSUP.EQ.IZSUPM)) WRITE(OUT,1001) IF(LINM.GT.0) LINMAX=LINM DO 7 I=1,LINMAX WRITE(OUT,62) I READ(INPAR,'(4F16.6)') FREQE(I),TE(I),AE(I),PE(I) write(*,*) FREQE(I),TE(I),AE(I),PE(I) IF(TE(I).NE.0) TE(I)=TE(I)/1000. PE(I)=PE(I)*2.*PI/360. IF(IDA.EQ.1) THEN WRITE(OUT,63) READ(INPAR,'(5F16.10)') TA2(I),TB2(I),TD2(I),TDP2(I),FDP(I) TA2(I)=TA2(I)/1000. TB2(I)=TB2(I)/1000. TD2(I)=TD2(I)/1.E+06 TDP2(I)=TDP2(I)/1.E+06 ENDIF IF((IAUS.EQ.1).OR.(IZSUP.EQ.IZSUPM)) WRITE(OUT,1001) 7 CONTINUE CCC EINSCHUB CCCC DO 9527 I=1,7 IQEIN(I)=IQ(I) 9527 CONTINUE IKYKLEN=IZYKLEN CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C EINLESEN DES DATENSATZES C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 44 CONTINUE DO 95277 I=1,7 IQ(I)=IQEIN(I) KQ(I)=IQ(I) 95277 CONTINUE IF(IMUELL.EQ.1)THEN CALL EINA(OUTD,IOUT,INPAR,INFILE,ISTEUER,DATEN,APAR,IPAR,RPAR) IF(IDK.NE.1) LINES=IPAR(5) ELSE IF(IMUELL.EQ.3)THEN CALL EINAB(OUTD,IOUT,INPAR,INFILE,ISTEUER,DATEN,APAR,IPAR,RPAR) ELSE IF(IMUELL.EQ.2)THEN CALL EINAR(OUTD,IOUT,INPAR,INFILE,ISTEUER,DATEN,APAR,IPAR,RPAR) ELSE CALL EIN(OUTD,IOUT,INPAR,INFILE,ISTEUER,DATEN,APAR,IPAR,RPAR) IF(IDK.NE.1) LINES=IPAR(5) ENDIF ENDIF ENDIF IF(ISTEUER.EQ.2) THEN ISTEUER=0 GOTO 22 ENDIF IF(IFITS.EQ.1) INEUFT=1 ILAA=0 write(*,*) 'ipar(5) ',ipar(5) DO 9175 I=1,IPAR(5) DATENN(I)=DATEN(I) 9175 CONTINUE DO 7813 I=1,16 AVGSUM(I)=0. 7813 CONTINUE DELAY=0. IF(IBITF.EQ.2) IBITF=1 IS=IPAR(1) IF(IPA.LE.0) IPA=1 IF(LINES.LE.0) LINES=IPAR(5) WRITE(OUT,'(2(A,I4))') X ' AUSGEWERTET: DATENPUNKTE',IPA,' - ',LINES WRITE(OUTD,'(2(A,I4))') X ' AUSGEWERTET: DATENPUNKT',IPA,' - ',LINES C DATENFILE ZUENDE C BEARBEITUNG DES NEU EINGELESENEN DATENSATZES NRFILE=NRFILE+1 WRITE(OUTD,1112) NRFILE WRITE(OUT,1112) NRFILE 1112 FORMAT(' DATENSATZ NR.',I4) DELAY=DELAY*1000. FREQ=FREQE(1) CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C INITIALISIEREN DES SONDERFITS C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC IF(IFITS.EQ.1) THEN IF(IQH(2).GT.0) THEN IF(IDAS.EQ.1) THEN T2ALLI=TAALLI+RPAR(6)*TBALLI ENDIF IF(T2ALLI.NE.0.) THEN T2ALL=T2ALLI/1000. T2START=T2ALLI ELSE T2ALL=T2START/1000. ENDIF ENDIF PNULL=PNULLI*PI/180. IF(DELAYI.NE.0.) DELAY=DELAYI ENDIF CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C DOPPLER- + BASELINEKORREKTUR AMPL.+PHASENBEST. C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC IF(IRLXA.EQ.1) THEN WRITE(OUT,1579) RPAR(6) WRITE(OUTD,1579) RPAR(6) 1579 FORMAT(' DRUCK:',F6.2) ENDIF CALL DOPP(OUTD,INPAR,IPA,LINES,IKDOP,DATEN,APAR,IPAR,RPAR X ,FREQ,PHASE,A,TEMP,RMOL,DOPPL,DELAY) DOPPLS=0.D+00 IF(IDQ(3).NE.0) DOPPLS=DOPPL CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C BESTIMMUNG DER STANDARDABWEICHUNG DES C C UNGEFITTETEN DATENSATZES C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC AVSUM=0. DO 77 I=IPA,LINES AVSUM=DATEN(I)*DATEN(I)+AVSUM 77 CONTINUE ASUM=AVSUM/DBLE(LINES-IPA+1) ASUM=DSQRT(ASUM) WRITE(OUT,1007) ASUM WRITE(OUTD,1007) ASUM 1007 FORMAT(' STANDARDABWEICHUNG VON DER NULLINIE:',11X,F16.4) ASUMALT=ASUM BSUM=ASUM CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C INITIALISIEREN DES FITS C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC IT2TS3=IT2TSI DO 6 I=1,LINMAX IF(IPH.NE.1) PHASES(I)=PHASE FREQS(I)=FREQE(I) AS(I)=A/LINMAX T2S(I)=T2START/1000. IF((LINJH.LT.I).AND.(IDQ(3).EQ.0)) T2S(I)=0. IF(IDA.EQ.1) THEN T2S(I)=TA2(I)+RPAR(6)*TB2(I) ENDIF IF(TE(I).NE.0.) T2S(I)=TE(I) IF(AE(I).NE.0.) AS(I)=AE(I) IF(PE(I).NE.0.) PHASES(I)=PE(I) 6 CONTINUE IF(IDA.EQ.1) THEN DO 606 I=1,LINMAX T22(I)=TDP2(I)*RPAR(6)+TD2(I) OM2(I)=FDP(I)*RPAR(6)*2.*PI IF(I.GT.LINJH) THEN T22(I)=0. OM2(I)=0. ENDIF 606 CONTINUE ENDIF IF((IDA.EQ.0).AND.(IKDOP.EQ.1)) THEN DO 607 I=1,LINMAX T22(I)=0. OM2(I)=0. 607 CONTINUE ENDIF C CCCC EINSCHUB ENDE CCCC IFITSP=0 CCCCCCCCC ALLE EINGEGEBENEN LINIEN VOR FITBEGINN ABZIEHEN CCCCCCCCC IF(ILA.EQ.1) THEN DO 1125 LIN=1,LINMAX CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C BESTIMMUNG DER JEWEILIGEN STARTWERTE C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC T22F=T22(LIN) T2=T2S(LIN) FREQ=FREQS(LIN) A=AS(LIN) PHASE=PHASES(LIN) C C UMRECHNUNG FREQ->OMEGA OMEGA=FREQ*2.*PI/1000. FAK=-1.D+00 IF((LIN.GT.LINJH).AND.(IDQ(3).EQ.0)) THEN DOPPLI=0. ELSE DOPPLI=DOPPL ENDIF CALL SIM2(DATEN,PHASE,T2,OMEGA,A,IS,IPA, X LINES,DELAY,T22F,OM2(LIN),FAK,VSUM,0,DOPPLI) 1125 CONTINUE ENDIF CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C BEGINN FITSCHLEIFE SUPERZYKLEN C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 9521 DO 952 IZSUP=1,IZSUPM C IF(IAUS.NE.1) WRITE(*,'(I8)') IZSUP IF(IZSUP.LE.IZPHA1) IFITSP=0 IF((IFITSP.EQ.1).AND.(IZSUP.LT.IZSUPM) X .AND.(IBITF.NE.1)) GOTO 952 CCCC EINSCHUB CCCCC IF(IZSUP.LE.IZPHAA) THEN IQ(1)=2 IQ(2)=1 IQ(3)=0 IQ(4)=2 IQ(5)=0 IQ(6)=0 IQ(7)=3 C IZYKLEN=3 IF((IFITS.EQ.1).AND.((IQH(3).GT.0).OR.(IQH(4).GT.0)).AND. X (IZSUP.GT.IZPHAA)) THEN IQ(1)=1 IQ(7)=2 IQ(4)=0 IZYKLEN=1 ENDIF ELSE DO 9528 I=1,7 IQ(I)=KQ(I) 9528 CONTINUE IZYKLEN=IKYKLEN ENDIF CCC EINSCHUB ENDE CCCCC DO 211 I=1,5 V(I)=0. SE(I)=0. 211 CONTINUE IF((IAUS.EQ.1).OR.(IZSUP.EQ.IZSUPM)) WRITE(OUT,1001) CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C BEGINN FITSCHLEIFE UEBER ALLE LINIEN C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 9511 DO 951 LIN=1,LINMAX IF(ISTF.EQ.1) THEN IF(IZSUP.LE.IZPHAM) THEN IQ(1)=2 IQ(2)=1 IQ(3)=0 IQ(4)=2 IQ(5)=0 IQ(6)=0 IQ(7)=3 IZYKLEN=3 IF(IZSUP.GT.1) IZYKLEN=1 IF((IFITS.EQ.1).AND.((IQH(3).GT.0).OR.(IQH(4).GT.0)).AND. X (IZSUP.GT.(IZPHAM-IZPHAS))) THEN IQ(1)=1 IQ(7)=2 IQ(4)=0 ENDIF ELSE IF(LIN.LE.LINJH) THEN DO 10203 I=1,7 IQ(I)=KQ(I) 10203 CONTINUE ELSE DO 10204 I=1,7 IQ(I)=IDQ(I) 10204 CONTINUE ENDIF IZYKLEN=IKYKLEN ENDIF ENDIF CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C KORREKTUR DES DATEN-ARRAYS C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC IF((LIN.NE.1).OR.(IZSUP.NE.1)) THEN IF(NFAIL.NE.0) GOTO 5 FAK=-1.D+00 IF(((LIN.GT.LINJH+1).OR.((LIN.EQ.1).AND.(LINMAX.GT.LINJH))) X .AND.(IDQ(3).EQ.0)) THEN DOPPLI=0. IF((IAUS.EQ.1).OR.(IZSUP.EQ.IZSUPM)) WRITE(OUT,1718) IF((IZSUP.EQ.IZSUPM).AND.(LIN.NE.1)) X WRITE(OUTD,1718) 1718 FORMAT(' LETZTE LINIE OHNE DOPPLERKORR.') ELSE DOPPLI=DOPPL ENDIF CALL SIM2(DATEN,PHASE,T2,OMEGA,A,IS,IPA, X LINES,DELAY,T22F,OM2(LIN),FAK,VSUM,0,DOPPLI) ENDIF 5 CONTINUE CCCC BASELINEKORREKTUR ODER SPEICHERKORREKTUR CCCC IF(LIN.EQ.1) THEN DO 9733 L=1,16 AVGS(L)=0. 9733 CONTINUE DO 9731 I=IPA-1,LINES-1,IKAVG DO 9732 L=1,IKAVG IF((I+L).LE.LINES) X AVGS(L)=AVGS(L)+DATEN(I+L) 9732 CONTINUE 9731 CONTINUE DO 9737 L=1,IKAVG AVGS(L)=AVGS(L)*DFLOAT(IKAVG)/DBLE(LINES-IPA+1) 9737 CONTINUE IF(IAUS.EQ.1) WRITE(OUT,9734) (AVGS(L),L=1,IKAVG) 9734 FORMAT(' SPEICHERKORR.:',4E12.4) DO 9738 L=1,IKAVG AVGSUM(L)=AVGSUM(L)+AVGS(L) 9738 CONTINUE IF(IZSUP.EQ.IZSUPM)WRITE(OUT,9739) (AVGSUM(L),L=1,IKAVG) 9739 FORMAT(' SPEICHERKORR. IN ALLEN SZ:',4E12.4) DO 9735 I=IPA-1,LINES-1,IKAVG DO 9736 L=1,IKAVG IF((I+L).LE.LINES) X DATEN(I+L)=DATEN(I+L)-AVGS(L) 9736 CONTINUE 9735 CONTINUE ENDIF CCCCCC ENDE BASELINE- ODER SPEICHERKORREKTUR CCCCCC IF((IZSUP.EQ.IZSUPM).AND.(LIN.EQ.1).AND.(IFITS.NE.1)) THEN CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C SUBTRAKTION DER AVERAGERKORR. UND DER LINIEN C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC WRITE(*,*) ' RUECKGRIFF AUF ORIGINALDATEN' DO 97361 I=IPA-1,LINES-1,IKAVG DO 97361 L=1,IKAVG IF((I+L).LE.LINES) X DATEN(I+L)=DATENN(I+L)-AVGSUM(L) 97361 CONTINUE FAK=-1.D+00 DO 6731 LIN2=1,LINMAX OMEGA=FREQS(LIN2)*2.*PI/1000. A=AS(LIN2) T2=T2S(LIN2) PHASE=PHASES(LIN2) IF(LIN2.GT.LINJH) THEN DOPPLI=DOPPLS ELSE DOPPLI=DOPPL ENDIF CALL SIM2(DATEN,PHASE,T2,OMEGA,A,IS,IPA, X LINES,DELAY,T22F,OM2(LIN2),FAK,VSUM,0,DOPPLI) 6731 CONTINUE ENDIF C IF(((IAUS.EQ.1).OR.(IZSUP.EQ.IZSUPM)).AND.(LIN.EQ.1)) X WRITE(OUT,1001) CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C BITFEHLER KORRIGIEREN C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC IF((IFITSP.EQ.1).AND.(IBITF.EQ.1)) THEN IFITSP=0 IBITF=2 BITFP=ASUM*IBITFP DO 1317 I=IPA,LINES IF(ABS(DATEN(I)).GT.BITFP) THEN WRITE(OUT,1319) I,DATEN(I) WRITE(OUTD,1319) I,DATEN(I) 1319 FORMAT(' BITFEHLER IN DATENPUNKT ',I6,' KORRIGIERT', X ' VORHER:', F12.4) DATEN(I)=0. ENDIF 1317 CONTINUE ENDIF C IF(IZSUP.LE.IZPHAM-IZPHAS) GOTO 19371 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C SONDERFIT C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC IF((LIN.EQ.1).AND.(IFITS.EQ.1)) THEN IF((PNULL.EQ.0.).AND.(INEUFT.EQ.1)) THEN DO 134 LLIN=1,LINJH PMERK=PHASES(LLIN)-FREQS(LLIN)*DELAY*PI/500.D+00 PMERK=PMERK-2.D+00*PI*(DINT(PMERK/(2.D+00*PI))-1.D+00) IF(LLIN.EQ.1) THEN IPMERK=0 IF(PMERK.GT.4.5) IPMERK=1 IF(PMERK.LT.1.5) IPMERK=-1 ELSE IF((IPMERK.EQ.1).AND.(PMERK.LT.1.5)) PMERK=PMERK+PI2 IF((IPMERK.EQ.-1).AND.(PMERK.GT.4.5)) PMERK=PMERK-PI2 ENDIF PNULL=PNULL+PMERK 134 CONTINUE PNULL=PNULL/DFLOAT(LINJH) ENDIF IF(BSUM.GT.ASUM) BSUM=ASUM CALL S1N(DATEN,PHASES,T2S,FREQS,AS,IS,IPA, X LINES,DELAY,T22,OM2,ARRAY,DNF,DOPPL,LINJH,IQH,PI, X IFSTPL,T2ALL,PNULL,OUT,IZSUP,IZYKLEN,ICORMX,IZSUPM X ,RKL1,DT2ME,T2MAXW,T2MINW,AVSUM,IAUS,OUTD, X INEUFT,T2OUTF,LINMAX,DOPPLS) ILAA=1 INEUFT=0 ENDIF 19371 CONTINUE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C BESTIMMUNG DER JEWEILIGEN STARTWERTE C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC T22F=T22(LIN) T2=T2S(LIN) FREQ=FREQS(LIN) A=AS(LIN) PHASE=PHASES(LIN) C C UMRECHNUNG FREQ->OMEGA OMEGA=FREQ*2.*PI/1000. IF((A.LT.0.).AND.(IFITS.NE.1)) THEN A=-1*A PHASE=PHASE+PI2/2. ENDIF IF(PHASE.GT.PI2) PHASE=PHASE-PI2 IF(PHASE.LT.0.) PHASE=PHASE+PI2 IF(IZSUP.EQ.1) AVSUM=0. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C ADDITION DES ALTEN BERECHNETEN DECAYS C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC IF((IZSUP.NE.1).OR.(IZPHAM.LE.0).OR. X (ILA.EQ.1).OR.(ILAA.EQ.1)) THEN FAK=+1.D+00 IF((LIN.GT.LINJH).AND.(IDQ(3).EQ.0)) THEN DOPPLI=0. ELSE DOPPLI=DOPPL ENDIF CALL SIM2(DATEN,PHASE,T2,OMEGA,A,IS,IPA, X LINES,DELAY,T22F,OM2(LIN),FAK,VSUM,0,DOPPLI) ENDIF CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C BEGINN FITSCHLEIFE FUER EINE LINIE C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC DO 90 KZYKLEN=1,IZYKLEN CCCCCCCC INITIALISIEREN CCCCCCCCCCCCCCCC DO 8 K1=1,6 DNF(K1)=0. DMF(K1)=0. ARRAY(K1,K1)=1.D+00 AR(K1,K1)=1.D+00 NK1=K1+1.D+00 DO 9 K2=NK1,6 ARRAY(K1,K2)=0. AR(K1,K2)=0. 9 CONTINUE 8 CONTINUE CCCCC BERECHNUNG ARRAY,DNF MIT U(1)-U(5) CCCCCC IF((LIN.GT.LINJH).AND.(IDQ(3).EQ.0)) THEN DOPPLI=0. ELSE DOPPLI=DOPPL ENDIF IF(IQ(1).EQ.1) THEN DO 1275 I12=2,6 IF(IQ(I12).EQ.1) IMERK=I12-1 1275 CONTINUE ELSE IMERK=0 ENDIF IPKOPP=0 IF((IFITS.EQ.1).AND.(INEUFT.NE.1).AND.(IQH(4)+IQH(3).GT.0) X .AND.(LIN.LE.LINJH)) IPKOPP=1 CALL ABL5(DATEN,PHASE,T2,OMEGA,A,IS,IPA,IPKOPP, X LINES,DELAY,T22F,OM2(LIN),ARRAY,DNF,DOPPLI,IQ(1),IMERK,SOUT) IF((KZYKLEN.EQ.1).AND.(IZSUP.EQ.1)) X AVSUM=DNF(6) IF(IQ(1).NE.1) GOTO 95842 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C EINPARAMETERFIT C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC V(1)=ARRAY(IMERK,6)/DNF(IMERK) SE(1)=1.D+00/DSQRT(SOUT/(LINES-IPA)) GOTO 12751 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C ENDE EINPARAMETERFIT C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 95842 CONTINUE DO 16 K1=1,6 DNF(K1)=1.D+00/DSQRT(DNF(K1)) 16 CONTINUE DO 14 IK1=1,5 NK1=IK1+1.D+00 DO 15 IK2=NK1,6 IF(IQ(IK1+1).EQ.0) THEN GOTO 14 ELSE K1=IQ(IK1+1) ENDIF IF(IQ(IK2+1).EQ.0) THEN GOTO 15 ELSE K2=IQ(IK2+1) ENDIF DMF(K1)=DNF(IK1) AR(K1,K2)=ARRAY(IK1,IK2)*DNF(IK1)*DNF(IK2) 15 CONTINUE 14 CONTINUE DMF(IQ(7))=DNF(6) DO 114 K1=1,5 NK1=K1+1 DO 115 K2=1,6 AR(K2,K1)=AR(K1,K2) 115 CONTINUE 114 CONTINUE NFAIL=0 CCCCCCCCCCC CALL FIT CCCCCCCCCCCC NVAR=IQ(1) NVAR1=NVAR+1 LINESM=LINES+1-IPA CALL FIT6(DMF,AR,V,NVAR,NVAR1,1024,LINESM,SE,CO,NFAIL) IF(NFAIL.NE.0) THEN WRITE(OUT,1000) NFAIL 1000 FORMAT(' FIT NICHT OK,NFAIL=',I4) STOP ENDIF 12751 CONTINUE XCOR=2. CCCCCCCCCCC SICHERN DER ALTEN WERTE CCCCCCCCCCCCCCC AA=A AT2=T2 APHASE=PHASE AOMEGA=OMEGA AT22=T22F DO 50 IV=1,5 IF(IQ(IV+1).EQ.0) THEN VCOR(IV)=0. ELSE VCOR(IV)=V(IQ(IV+1))*2. ENDIF 50 CONTINUE ICOR=0 C PRO FITZYKLUS NUR FREQUENZAENDERUNGEN VON 50 KHZ C UND RELAXATIONSZEITAENDERUNGEN VON 0.5 MOEGLICH IF(VCOR(4).GT.DOMEGM) VCOR(4)=DOMEGM ROMEGM=-1.D+00*DOMEGM IF(VCOR(4).LT.ROMEGM) VCOR(4)=ROMEGM IF(VCOR(2).GT.DT2ME) VCOR(2)=DT2ME RT2M=-2.*DT2ME IF(VCOR(2).LT.RT2M) VCOR(2)=RT2M CCCC SCHLEIFE MIT FEHLERQUADRAT SOLL KLEINER WERDEN CCC IF(IPKOPP.EQ.1) VCOR(3)=VCOR(4)*DELAY 600 CONTINUE ICOR=ICOR+1 7001 continue IF ((ICOR.GE.ICORMX).or.(hhflag.eq.1)) THEN if (hhflag.eq.1) goto 700 A=AA T2=AT2 PHASE=APHASE OMEGA=AOMEGA T22F=AT22 700 CONTINUE hhflag=0 IF(KZYKLEN.EQ.1) THEN IFSTP(LIN)=1 ELSE IFSTP(LIN)=0 ENDIF IF(LIN.EQ.LINMAX) THEN IFITSP=1 IF(IFITS.EQ.1) IFITSP=IFSTPL DO 10501 I=1,LINMAX IFITSP=IFITSP*IFSTP(I) 10501 CONTINUE IF((IFITSP.EQ.1).AND.(IZSUP.LT.IZSUPM) X .AND.(IBITF.NE.1)) THEN CCCCCCCCCCC IF((IT2TST.GE.1).AND.(IT2TS2.GE.0).AND.(IT2TS3.GT.0) X .AND.(IZSUP.GT.IZPHA1)) THEN IFITSP=0 IT2TS3=IT2TS3-1 IT2TS2=-1 C DO 11511 I=1,7 C IQR(I)=IQ(I) C11511 CONTINUE KQ(1)=2 KQ(2)=0 KQ(3)=1 KQ(4)=0 KQ(5)=0 KQ(6)=2 KQ(7)=3 ELSE IF((IZSUP.GT.IZPHA1).AND.(IT2TST.GE.1)) THEN IF(IT2TS3.GE.1) IFITSP=0 IT2TS2=1 DO 11512 I=1,7 KQ(I)=IQEIN(I) C IQR(I) 11512 CONTINUE IF((IT2TST.GE.1).AND.(IT2TS3.LE.0)) THEN KQ(1)=KQ(1)+1 KQ(7)=KQ(7)+1 KQ(6)=KQ(1) IZYKA=IKYKLEN IKYKLEN=3 IZSUPPE=IZSUP ENDIF ELSE IZSUPPE=IZSUP ENDIF ENDIF ENDIF ENDIF GOTO 95 ENDIF DO 60 IV=1,5 IF(VCOR(IV).NE.0.) VCOR(IV)=VCOR(IV)/XCOR 60 CONTINUE T2=AT2+VCOR(2) IF(IT2G.EQ.1) THEN IF(T2.GT.T2MAXW) T2=T2MAXW IF(T2.LT.T2MINW) T2=T2MINW ENDIF IF((IFITS.EQ.1).AND.(A.LT.10.)) A=10. IF((VCOR(1).NE.0.0).AND.(VCOR(3).NE.0.0) X .AND.(IPKOPP.NE.1)) THEN DPMERK=DATAN((AA*VCOR(3))/(AA+VCOR(1))) PHASE=APHASE+DPMERK A=(AA+VCOR(1))/DCOS(DPMERK) ELSE A=AA+VCOR(1) PHASE=APHASE+VCOR(3) ENDIF OMEGA=AOMEGA+VCOR(4) T22F=AT22+VCOR(5) C WRITE(OUT,'(5E12.6)') A,T2,PHASE,OMEGA,T22F VSUM=0. FAK=+1.D+00 IF((LIN.GT.LINJH).AND.(IDQ(3).EQ.0)) THEN DOPPLI=0. ELSE DOPPLI=DOPPL ENDIF IF(A.LT.0.) THEN IF(IPKOPP.EQ.1) THEN A=10. ELSE A=-A PHASE=PHASE+PI ENDIF ENDIF CALL SIM2(DATEN,PHASE,T2,OMEGA,A,IS,IPA, X LINES,DELAY,T22F,OM2(LIN),FAK,VSUM,1,DOPPLI) C FEHLERQUADRAT SOLL KLEINER WERDEN C WRITE(OUT,*) ' VSUM',VSUM,'AVSUM',AVSUM IF(VSUM.GT.AVSUM) GOTO 600 AVALT=AVSUM BSUM=AVSUM/DBLE(LINES-IPA+1) BSUM=DSQRT(BSUM) AVSUM=VSUM hhflag=0 IF(IZSUP.LT.IZSUPM) THEN IF (VSUM.GT.RKL1*AVALT) hhflag=1 ELSE IF (VSUM.GT.RKL2*AVALT) hhflag=1 ENDIF if (hhflag.eq.1) then write (*,*) hhflag goto 7001 end if IFSTP(LIN)=0 C IF(XCOR.LT.0.) GOTO 200 90 CONTINUE 95 CONTINUE ASUM=VSUM/DBLE(LINES-IPA+1) ASUM=DSQRT(ASUM) IC=ICOR-1 300 CONTINUE KZYK1=KZYKLEN-1 C FREQ=OMEGA*159.155 FREQ=OMEGA*1000./(2.*PI) CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C SICHERUNG DER FITERGEBNISSE C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC KPPI=DINT(PHASE/PI2) IF(KPPI.NE.0) PHASE=PHASE-KPPI*PI2 FREQS(LIN)=FREQ T2S(LIN)=T2 AS(LIN)=A PHASES(LIN)=PHASE T22(LIN)=T22F CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C AUSGABE DER FITERGEBNISSE C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC IF((IAUS.NE.1).AND.(IZSUP.NE.IZSUPM)) GOTO 951 T2OUT=T2*1000. PHAS=360.*PHASES(LIN)/PI2 T22OUT=T22F*1.E6 C DO 19174 IRI=5,1,-1 IF(IQ(IRI+1).GT.0) THEN SE(IRI)=SE(IQ(IRI+1)) C22.8 VCOR(IRI)=V(IQ(IRI+1)) ELSE SE(IRI)=0. C22.8 VCOR(IRI)=0. ENDIF 19174 CONTINUE C SE(5)=SE(5)*1.E6 SE(4)=SE(4)*1000./(2.*PI) SE(3)=360.*SE(3)/PI2 SE(2)=SE(2)*1000. VCOR(4)=VCOR(4)*1000./(2.*PI) VCOR(2)=VCOR(2)*1000. VCOR(3)=360.*VCOR(3)/PI2 VCOR(5)=VCOR(5)*1.E6 CCCCCCC AUSGABEFORMATE CCCCCCCCCCCC 9004 FORMAT(' SZ Z K FREQUENZ 1/T2(MHZ) AMPLITUDE PHASE', X ' d(1/T2)/dt STDABW. NEU/ALT') 19002 FORMAT(' FEHLER ',F10.6,F10.6,F10.2,F10.4,F10.6,F12.4) 19001 FORMAT(' LETZTE KORR. ',F8.6,F10.6,F10.2,F10.4,F10.6) C 29004 FORMAT(' SZ Z K FREQUENZ 1/T2(MHZ) AMPLITUDE PHASE', X ' STDABW. NEU/ALT') 29002 FORMAT(' FEHLER ',F10.6,F10.6,F10.2,F10.4,F12.4) 29001 FORMAT(' LETZTE KORR. ',F8.6,F10.6,F10.2,F10.4) CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C UNTERSCHIEDLICHE AUSGABE FUER FITS C C MIT UND OHNE DELAYABHAENGIGKEIT VON 1/T2 C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC IF(IT2TST.EQ.1) THEN CCCCCCCCCC AUSGABE DER ERGEBNISSE AUF DEN BILDSCHIRM CCCCCCCC IF((LIN.EQ.1).AND.((IAUS.EQ.1).OR.(IZSUP.EQ.1))) X WRITE(OUT,9004) IF(IFITSP.NE.1) IZSUPPE=IZSUP WRITE(OUT,'(3I4,F10.6,F10.6,F10.2,F10.4,F10.6,F12.4)') X IZSUPPE,KZYK1,IC,FREQS(LIN),T2OUT,AS(LIN),PHAS,T22OUT,ASUM WRITE(OUT,19002) SE(4),SE(2),SE(1),SE(3),SE(5),BSUM WRITE(OUT,19001) VCOR(4),VCOR(2),VCOR(1),VCOR(3),VCOR(5) CCCCCCCC AUSGABE DER ENDERGEBNISSE AUF FILES CCCCCCCCCCC IF((LIN.EQ.1).AND.(IZSUP.EQ.IZSUPM)) X WRITE(OUTD,9004) IF(IZSUP.EQ.IZSUPM) THEN WRITE(OUTD,'(3I4,F10.6,F10.6,F10.2,F10.4,F10.6,F12.4)') X IZSUPPE,KZYK1,IC,FREQS(LIN),T2OUT,AS(LIN),PHAS,T22OUT,ASUM WRITE(OUTD,19002) SE(4),SE(2),SE(1),SE(3),SE(5),BSUM WRITE(OUTD,19001) VCOR(4),VCOR(2),VCOR(1),VCOR(3),VCOR(5) IF((LIN.LE.LINJH).AND.(IRLXA.EQ.1)) THEN IF((SE(2).EQ.0.).AND.(IFITS.EQ.1).AND.(IQH(2).GT.0.)) X SE(2)=T2OUTF WRITE(OUTA,'(F12.4,F12.4,F12.8,F12.8,F16.8, X F12.8,F12.6,F12.6,F12.8,F12.8)') X RPAR(6),RPAR(4),T2OUT,SE(2),FREQS(LIN), X SE(4),PHAS,SE(3),T22OUT,SE(5) ENDIF ENDIF ELSE CCCCCCCCCC AUSGABE DER ERGEBNISSE AUF DEN BILDSCHIRM CCCCCCCC IF((LIN.EQ.1).AND.((IAUS.EQ.1).OR.(IZSUP.EQ.1))) X WRITE(OUT,29004) IF(IFITSP.NE.1) IZSUPPE=IZSUP WRITE(OUT,'(3I4,F10.6,F10.6,F10.2,F10.4,F12.4)') X IZSUPPE,KZYK1,IC,FREQS(LIN),T2OUT,AS(LIN),PHAS,ASUM WRITE(OUT,29002) SE(4),SE(2),SE(1),SE(3),BSUM WRITE(OUT,29001) VCOR(4),VCOR(2),VCOR(1),VCOR(3) CCCCCCCC AUSGABE DER ENDERGEBNISSE AUF FILES CCCCCCCCCCC IF((LIN.EQ.1).AND.(IZSUP.EQ.IZSUPM)) X WRITE(OUTD,29004) IF(IZSUP.EQ.IZSUPM) THEN IF(IBLOCK.EQ.1) X WRITE(IBLK,'(4F16.6)') X FREQS(LIN),T2OUT,AS(LIN),PHAS C WRITE(OUTD,'(3I4,F10.6,F10.6,F10.2,F10.4,F12.4)') X IZSUPPE,KZYK1,IC,FREQS(LIN),T2OUT,AS(LIN),PHAS,ASUM WRITE(OUTD,29002) SE(4),SE(2),SE(1),SE(3),BSUM WRITE(OUTD,29001) VCOR(4),VCOR(2),VCOR(1),VCOR(3) IF((LIN.LE.LINJH).AND.(IRLXA.EQ.1)) THEN IF((SE(2).EQ.0.).AND.(IFITS.EQ.1).AND.(IQH(2).GT.0.)) X SE(2)=T2OUTF WRITE(OUTA,'(F12.4,F12.4,F12.8,F12.8,F16.8, X F12.8,F12.6,F12.6,F12.8,F12.8)') X RPAR(6),RPAR(4),T2OUT,SE(2),FREQS(LIN), X SE(4),PHAS,SE(3),T22OUT,SE(5) ENDIF ENDIF ENDIF 951 CONTINUE 952 CONTINUE IF(IT2TST.GE.1) THEN DO 11513 I=1,7 KQ(I)=IQEIN(I) C IQR(I) 11513 CONTINUE IZYKLEN=IZYKA IKYKLEN=IZYKA ENDIF CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C KORREKTUR DES DATEN-ARRAYS C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC FAK=-1.D+00 LIN=LINMAX IF((LIN.GT.LINJH).AND.(IDQ(3).EQ.0)) THEN DOPPLI=0. WRITE(OUTD,1718) ELSE DOPPLI=DOPPL ENDIF CALL SIM2(DATEN,PHASE,T2,OMEGA,A,IS,IPA, X LINES,DELAY,T22F,OM2(LIN),FAK,VSUM,0,DOPPLI) WRITE(OUTD,9739) (AVGSUM(L),L=1,IKAVG) C IF(IS.NE.10) GOTO 81 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C AUSGABE DER MIKROWELLEN-FREQUENZEN IN ERGEBNIS-FILE C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C WRITE(OUTD,*) ' MW-FREQUENZEN NUR FUER 10 NS AUFNAHMEN RICHTIG' 29010 FORMAT(//,' MIKROWELLEN-FREQUENZEN IN MHz: ',/) 29015 FORMAT(' LINIE ZF-FREQUENZ MW-FREQUENZ ',/) 29020 FORMAT(' ',I4,F16.6,F18.6) IF (IPAR(1).EQ.10) THEN WRITE(OUTD,29010) WRITE(OUTD,29015) DO 80 LIN=1,LINMAX FRQMW=RPAR(1)-(IPAR(8)*30.0)+(IPAR(8)*FREQS(LIN)) WRITE(OUTD,29020) LIN,FREQS(LIN),FRQMW 80 CONTINUE ENDIF IF (IPAR(1).EQ.20) THEN WRITE(OUTD,29010) WRITE(OUTD,29015) DO 82 LIN=1,LINMAX FRQMW=RPAR(1)-(IPAR(8)*20.0)+(IPAR(8)*FREQS(LIN)) WRITE(OUTD,29020) LIN,FREQS(LIN),FRQMW 82 CONTINUE ENDIF CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 81 CONTINUE C IF(IRES.NE.1) GOTO 22 IF(IPA.GT.2) THEN DO 54 I=1,IPA-1 DATEN(I)=0 54 CONTINUE ENDIF IF(LINES.LT.1023) THEN DO 541 I=LINES+1,1024 DATEN(I)=0 541 CONTINUE ENDIF ASUM=DSQRT(ASUM/DBLE(LINES-IPA+1)) C KENNA=KENN IF(IMUEL2.EQ.1) THEN CALL AUSA(OUTD,IOUT,INPAR,IOFILE,ISTAUS,DATEN,APAR,IPAR,RPAR) ELSE CALL AUS(OUTD,IOUT,INPAR,IOFILE,ISTAUS,DATEN,APAR,IPAR,RPAR) ENDIF GOTO 22 END