
	options /extend_source

	program MAKE_E0_LIST
c 	====================

	implicit none

c===============================================================================
c Dieses Fortran-Programm erstellt Files 'E0-Intervalls.input_', die durch
c Editieren (falls noetig) und Umbenennen in 'E0-Intervalls.input' (ohne
c '_' am Ende) als entsprechende Eingabefiles fuer ACCEL verwendet werden
c koennen. Der Inhalt dieser Datei umfasst die Definition von Startenergie-
c intervallen, fuer die ACCEL-Simulationen durchgefuehrt werden sollen.
c
c Hierbei geht es um die Bereitstellung der fuer die Anpassung der Austritts-
c energie der langsamen MYonen benoetigten Simulationen.
c
c Der untere Wert des ersten Startenergieintervalles, die Breite des ersten
c Intervalles, und die Zunahme der Intervallbreite von einem zum naechsten
c Intervall sowie die Anzahl der so zu erstellenden Intervalle werden zunaechst
c eingelesen und die entsprechenden Daten in das Ausgabefile geschrieben.
c
c Um weiter Intervalle mit anderen Intervallbreiten-Incrementen anhaengen zu
c koennen, wird dann wiederum die Breite des ersten hinzuzufuegenden Intervalles
c sowie das neue Increment und die Anzahl damit anzuhaengender Intervalle
c eingelesen. Das wiederholt sich dann so lange, bis eine negative Zahl 
c eingegeben wird. Dann wird das File geschlossen und das Programm beendet.
c
c Das File wird in 'ACCEL$READdirectory' erstellt
c
c   Anselm Hofer
c===============================================================================

	integer lunOUT
	parameter (lunOUT = 10)

	integer E0 /0/ ,E0Binwidth /2/ ,BinwidthIncr /0/
	integer E0_    ,E0Binwidth_    ,BinwidthIncr_   
	integer nBins /20/, nBins_, i, lun, indx /1/, indx_

	character*10 answer

c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

c Oeffnen des Files:

	open (lunOUT,file='E0-Intervalls.input_',status='new',
     +	  defaultFile='ACCEL$READdirectory')

	write(lunOUT,*) '*==============================================================================='
	write(lunOUT,*) '* In dieser Datei koennen (aneinandergrenzende) E0-Intervalle fuer ACCEL'
	write(lunOUT,*) '* vorgegeben werden! Die Intervalle laufen dabei von der Angabe der i. bis'
	write(lunOUT,*) '* zur Angabe der i+1. Datenzeile. Die DATENzeilen 2 bis n-1 geben also'
	write(lunOUT,*) '* jeweils das Ende des einen sowie gleichzeitig den Anfang des anderen'
	write(lunOUT,*) '* Intervalls an.'
	write(lunOUT,*) '*'
	write(lunOUT,*) '* Die E0-Angaben erfolgen in keV-Einheiten!'
	write(lunOUT,*) '*'
	write(lunOUT,*) '* Beispiel:'
	write(lunOUT,*) '* Die Datenzeilen'
	write(lunOUT,*) '*'
	write(lunOUT,*) '*      0.010'
	write(lunOUT,*) '*      0.040'
	write(lunOUT,*) '*      0.100'
	write(lunOUT,*) '*'
	write(lunOUT,*) '* geben zwei E0-Intervalle an: von 10 eV bis 40 eV und von 40 eV bis 100 eV.'
	write(lunOUT,*) '*'
	write(lunOUT,*) '* eine Zeile mit mindestens 5 aufeinanderfolgenden x (''xxxxx'') markiert ge-'
	write(lunOUT,*) '* gebenenfalls das Ende der Datenzeilen. Nachfolgende Zeilen werden ignoriert.'
	write(lunOUT,*) '*'
	write(lunOUT,*) '* Der Inhalt dieser Datei wird mit ''E0InterFromFile = .true.'' in ACCEL.INPUT'
	write(lunOUT,*) '* aktiviert.'
	write(lunOUT,*) '*==============================================================================='


1000	format ($,x,A,:' (.LT.0 => finish)   [',I4,'] > ')
1001	format ($,x,A,:'                     [',I4,'] > ')

	write(*,*)
	write(*,*) 'alle Eingaben in eV!'
	write(*,*)
	write(*,1001) ' lower E0              ',E0
	read(*,'(A)') answer
	if (answer.NE.' ') read(answer,*) E0

	write(lunOUT,'(x,F8.3)') real(E0) / 1000.


c Einlesen und Ausgeben ...:

10	write(*,*)

	write(*,1000) ' first E0-Binwidth     ',E0Binwidth
	read(*,'(A)') answer
	if (answer.NE.' ') read(answer,*) E0Binwidth
	if (E0Binwidth.LE.0) goto 100

	write(*,1000) ' Binwidth-increment    ',BinwidthIncr
	read(*,'(A)') answer
	if (answer.NE.' ') read(answer,*) BinwidthIncr
	if (BinwidthIncr.LT.0) goto 100
 
	write(*,1000) ' number of bins to add ', nBins
	read(*,'(A)') answer
	if (answer.NE.' ') read(answer,*) nBins
	if (nBins.LE.0) goto 100

	E0_ = E0
	E0Binwidth_ = E0Binwidth
	BinwidthIncr_ = BinwidthIncr
	nBins_ = nBins
	indx_ = indx

	lun = 6
	write(*,*) 
	write(*,*) ' so, next intervalls would be:  (number, lowerE0, upperE0, binWidth)'
	write(*,*) 
	write(*,2000) indx,E0, E0 + E0BinWidth,E0BinWidth

2000	format (x,I3,': ',I5,'-',I5, 4x,'(',I4,')')
50	do i = 1, nBins
	    indx = indx + 1
	    E0 = E0 + E0BinWidth
	    if (lun.EQ.6) then
		if (i.NE.nBins) write(*,2000) indx,E0, E0+E0BinWidth+BinwidthIncr,E0BinWidth+BinwidthIncr
	    else
		write(lun,'(x,F8.3)') real(E0) / 1000.
	    endif
	    E0BinWidth = E0BinWidth + BinwidthIncr
	enddo

	if (lun.EQ.6) then

	    write(*,*)
	    write(*,1001) ' add them to file ?   > '
	    read(*,'(A)') answer
	    call str$upcase(answer,answer)

	    E0 = E0_
	    E0Binwidth = E0Binwidth_
	    BinwidthIncr = BinwidthIncr_
	    nBins = nBins_
	    indx = indx_

	    if (index(answer,'Y').NE.0 .OR. index(answer,'J').NE.0) then
		lun = lunOUT
		goto 50
	    else
		write(*,*) '=> cancel'
	    endif
	endif

	goto 10

c Schliessen des Ausgabefiles:

100	close (lunOUT)

	write(*,*)
	write(*,*) ' -> created file ''accel$READdirectory:E0-Intervalls.input_'''
	write(*,*)


	END


