Skip to content

Commit ec0af55

Browse files
authored
Merge pull request #22 from amereghe/fixAngleScan
Fix angle scan - issue: #25
2 parents b73486f + 69bbf11 commit ec0af55

File tree

4 files changed

+117
-87
lines changed

4 files changed

+117
-87
lines changed

utilities/bash/dot_profile

+25-34
Original file line numberDiff line numberDiff line change
@@ -621,21 +621,6 @@ sixdeskamps()
621621
sixdeskmess -1 "sixdeskamps: Amps $ampstart to $ampfinish by $ampincl"
622622
#MACRO mymess
623623

624-
}
625-
sixdeskAllFloats(){
626-
# A.Mereghetti, 2017-04-08
627-
# new function, to generate an array of floating point values
628-
local __xMin=$1
629-
local __xMax=$2
630-
local __xDelta=$3
631-
local __lSkipExtremes=$4
632-
# - preliminary checks - to be moved to check_env.sh
633-
if [ -z "${__xMax}" ] || [ -z "${__xDelta}" ] ; then
634-
__xMax=${__xMin}
635-
__xDelta=${__xMin}
636-
fi
637-
# - get all values
638-
python ${SCRIPTDIR}/python/generate_floats.py ${__xMin} ${__xMax} ${__xDelta} ${__lSkipExtremes}
639624
}
640625
sixdeskFixDotFloat(){
641626
# A.Mereghetti, 2017-04-08
@@ -665,7 +650,7 @@ sixdeskAllTunes(){
665650
# hor:
666651
tunesXX=""
667652
inttunesXX=""
668-
local __tunesXX=$(sixdeskAllFloats $tunex $tunex1 $deltax )
653+
local __tunesXX=$(python ${SCRIPTDIR}/python/generate_floats.py $tunex $tunex1 $deltax --forceIntegers --removeTrailZeros)
669654
for tmptn in ${__tunesXX} ; do
670655
tunesXX="${tunesXX} $(sixdeskFixDotFloat ${tmptn})"
671656
inttunesXX="${inttunesXX} $(sixdeskinttune ${tmptn})"
@@ -675,7 +660,7 @@ sixdeskAllTunes(){
675660
# ver:
676661
tunesYY=""
677662
inttunesYY=""
678-
local __tunesYY=$(sixdeskAllFloats $tuney $tuney1 $deltay )
663+
local __tunesYY=$(python ${SCRIPTDIR}/python/generate_floats.py $tuney $tuney1 $deltay --forceIntegers --removeTrailZeros)
679664
for tmptn in ${__tunesYY} ; do
680665
tunesYY="${tunesYY} $(sixdeskFixDotFloat ${tmptn})"
681666
inttunesYY="${inttunesYY} $(sixdeskinttune ${tmptn})"
@@ -695,7 +680,7 @@ sixdeskAllAmplitudes(){
695680
local __lForceIntegers=False
696681

697682
# get all amplitude points
698-
local __allAmplitudes=$(sixdeskAllFloats $ns1l $ns2l $nsincl )
683+
local __allAmplitudes=$(python ${SCRIPTDIR}/python/generate_floats.py $ns1l $ns2l $nsincl --forceIntegers --removeTrailZeros)
699684
__allAmplitudes=( ${__allAmplitudes} )
700685

701686
# get all amplitude intervals
@@ -737,8 +722,8 @@ sixdeskAllAngles(){
737722
kAngs=""
738723
KKs_ampl="0"
739724

740-
# generate regular angle steps:
741725
if ${__lReduceAngsWithAmplitude}; then
726+
# generate scaled angle steps
742727
for (( iAmple=0; iAmple<${#fAmpEnds[@]}; iAmple++ )) ; do
743728
if (( $(echo "${reduce_angs_with_amplitude} ${fAmpEnds[${iAmple}]}" | awk '{print ($1 < $2)}') )); then
744729
# varying number of angles
@@ -761,15 +746,21 @@ sixdeskAllAngles(){
761746
done
762747
else
763748
KKs="${KKs} $(seq 1 ${__angles_nb})"
764-
local __angleStep=`echo ${__totAngle} ${__angles_nb} | awk '{print ($1/($2+1))}'`
765-
Angles="${Angles} $(sixdeskAllFloats 0 ${__totAngle} ${__angleStep} True)"
766-
local __kAngleStep=`echo ${__angles_nb} | awk '{printf ("%.18f",1.0/($1+1))}'`
767-
kAngs="${kAngs} $(sixdeskAllFloats 0.0 1.0 ${__kAngleStep} True)"
749+
local __gridN=${__angles_nb}
750+
let __gridN+=1
751+
Angles="${Angles} $(python ${SCRIPTDIR}/python/generate_floats.py 1 ${__angles_nb} 1 --skipExtremes --gridN ${__gridN} --gridMax ${__totAngle} --forceIntegers --removeTrailZeros )"
752+
# __kAngs will always be in (0,1)
753+
kAngs="${kAngs} $(python ${SCRIPTDIR}/python/generate_floats.py 1 ${__angles_nb} 1 --skipExtremes --gridN ${__gridN} --forceIntegers --removeTrailZeros )"
768754
fi
769755
let nTotAngles+=${__angles_nb}
770756
KKs_ampl+=( ${nTotAngles} )
771757
done
758+
# make arrays
759+
KKs=( ${KKs} )
760+
Angles=( ${Angles} )
761+
kAngs=( ${kAngs} )
772762
else
763+
# generate regular angle steps
773764
if ${__lbackcomp} ; then
774765
local __angleStep=`echo ${__totAngle} ${__kmax} | awk '{print ($1/($2+1))}'`
775766
for (( kk=${__kmin}; kk<=${__kend}; kk+=${__kstep} )) ; do
@@ -784,19 +775,19 @@ sixdeskAllAngles(){
784775
kAngs="${kAngs} ${__kang}"
785776
done
786777
else
787-
KKs="${KKs} $(seq 1 ${__kmax})"
788-
local __angleStep=`echo ${__totAngle} ${__kmax} | awk '{print ($1/($2+1))}'`
789-
Angles="${Angles} $(sixdeskAllFloats 0 ${__totAngle} ${__angleStep} True)"
790-
local __kAngleStep=`echo ${__kmax} | awk '{printf ("%.18f",1.0/($1+1))}'`
791-
kAngs="${kAngs} $(sixdeskAllFloats 0.0 1.0 ${__kAngleStep} True)"
778+
KKs="${KKs} $(seq ${__kmin} ${__kstep} ${__kend})"
779+
local __gridN=${__kmax}
780+
let __gridN+=1
781+
Angles="${Angles} $(python ${SCRIPTDIR}/python/generate_floats.py ${__kmin} ${__kend} ${__kstep} --gridN ${__gridN} --gridMax ${__totAngle} --forceIntegers --removeTrailZeros )"
782+
# __kAngs will always be in (0,1)
783+
kAngs="${kAngs} $(python ${SCRIPTDIR}/python/generate_floats.py ${__kmin} ${__kend} ${__kstep} --gridN ${__gridN} --forceIntegers --removeTrailZeros )"
792784
fi
793-
KKs_ampl=( ${KKs_ampl} ${__kend} )
785+
# make arrays
786+
KKs=( ${KKs} )
787+
Angles=( ${Angles} )
788+
kAngs=( ${kAngs} )
789+
KKs_ampl=( ${KKs_ampl} ${#kAngs[@]} )
794790
fi
795-
796-
# make arrays
797-
KKs=( ${KKs} )
798-
Angles=( ${Angles} )
799-
kAngs=( ${kAngs} )
800791
}
801792
sixdeskrundir()
802793
{

utilities/doc/chNewFeatures.tex

+2
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@ \section{Variable Number of Angles with Amplitude} \label{varAnglesWithAmpli}
110110
\emph{Original work by: D.~Pellegrini} \\
111111
\emph{Updated by: S.~Kostoglou, A.~Mereghetti}
112112
\end{flushright}
113+
Angular steps are forced to be consecutive, i.e.~\texttt{kstep} is
114+
ignored and \texttt{1} is hardcoded in the logics.
113115

114116
\section{External Scans} \label{ExternalScans}
115117
\begin{flushright}

utilities/doc/sixdesk.pdf

109 Bytes
Binary file not shown.

utilities/python/generate_floats.py

+90-53
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,60 @@
11
import sys
22

3+
def start():
4+
5+
lGrid=False
6+
gridMin=0.0
7+
gridMax=1.0
8+
gridN=1
9+
10+
import argparse
11+
12+
parser = argparse.ArgumentParser(prog='generate_floats.py', usage=' %(prog)s <xmin> <xmax> <xstep> [options]', description='''
13+
by A.Mereghetti
14+
with relevant modifications by A. Mereghetti
15+
16+
Script for generating numerical series
17+
''' )
18+
19+
# positional arguments
20+
parser.add_argument('xstart', metavar='xstart', help='first value')
21+
parser.add_argument('xstop' , metavar='xstop' , help='last value')
22+
parser.add_argument('xdelta', metavar='xdelta', help='delta')
23+
24+
# optional arguments
25+
parser.add_argument('--skipExtremes', action='store_true', help="skip extremes;")
26+
parser.add_argument('--floatBased', action='store_true', help="algorithm based on true floats;")
27+
parser.add_argument('--forceIntegers', action='store_true', help="possible integers are printed as such;")
28+
parser.add_argument('--removeTrailZeros', action='store_true', help="remove (useless) trailing zeros;")
29+
parser.add_argument('--prec', action='store', type=float, nargs=1, help="precision (true float-based algorithm);")
30+
parser.add_argument('--debug', action='store_true', help="print (additional) debug messages;")
31+
parser.add_argument('--invertExtremes', action='store_true', help="invert extremes and not step;")
32+
parser.add_argument('--gridMin', action='store', type=float, nargs=1, help="grid mode - lower extreme of range;")
33+
parser.add_argument('--gridMax', action='store', type=float, nargs=1, help="grid mode - highest extreme of range;")
34+
parser.add_argument('--gridN', action='store', type=int, nargs=1, help="grid mode - total number of points in grid;")
35+
36+
args=parser.parse_args()
37+
38+
if args.prec is None:
39+
prec=1.0E-15
40+
else:
41+
prec=args.prec[0]
42+
43+
if ( args.gridN is not None ):
44+
# requesting grid mode implies at least the number of points
45+
lGrid=True
46+
gridN=args.gridN[0]
47+
if ( args.gridMin is not None ):
48+
gridMin=args.gridMin[0]
49+
if ( args.gridMax is not None ):
50+
gridMax=args.gridMax[0]
51+
elif not ( args.gridMin is None and args.gridMax is None and args.gridN is None ):
52+
# incomplete grid request
53+
print 'incomplete grid request - please type in at least number of steps'
54+
sys.exit()
55+
56+
return args.xstart, args.xstop, args.xdelta, args.skipExtremes, args.floatBased, args.forceIntegers, args.removeTrailZeros, prec, args.debug, args.invertExtremes, lGrid, gridMin, gridMax, gridN
57+
358
# ==============================================================================
459
# floating-point based
560
# ==============================================================================
@@ -183,7 +238,7 @@ def genIntValues( istart, istop, idelta, ll, sym='.' ):
183238
output+=tmp[:-ll]+sym+tmp[-ll:]
184239
if ( lForceIntegers and output[-ll:]==''.ljust(ll,'0') ):
185240
output=output[:len(output)-(ll+1)] # skip also the sym
186-
if ( lRemoveTrailingZeros and sym in output ):
241+
if ( lRemoveTrailZeros and sym in output ):
187242
while( output[-1]=='0' ):
188243
output=output[:-1]
189244
else:
@@ -200,74 +255,56 @@ def genIntValues( istart, istop, idelta, ll, sym='.' ):
200255
# ==============================================================================
201256

202257
if ( __name__ == "__main__" ):
203-
# some flags
204-
lDebug=False
205-
lInvertExtremes=False
206258

207-
# terminal-line input parameters
208-
xstart=sys.argv[1]
209-
xstop=sys.argv[2]
210-
xdelta=sys.argv[3]
259+
# terminal line input paramters
260+
xstart, xstop, xdelta, lSkipExtremes, lFloatBased, lForceIntegers, lRemoveTrailZeros, prec, lDebug, lInvertExtremes, lGrid, gridMin, gridMax, gridN = start()
211261

212-
# skip extremes?
213-
if ( len(sys.argv)>4 ):
214-
lSkipExtremes=sys.argv[4].lower()=="true"
215-
else:
216-
lSkipExtremes=False
217-
218-
# float-based or int-based loop?
219-
if ( len(sys.argv)>5 ):
220-
lIntegerBased=sys.argv[5].lower()=="true"
221-
else:
222-
lIntegerBased=True
223-
224-
# dump an integer as .0 or as int?
225-
if ( len(sys.argv)>6 ):
226-
lForceIntegers=sys.argv[6].lower()=="true"
227-
else:
228-
lForceIntegers=False
262+
if ( lFloatBased ):
229263

230-
if ( lIntegerBased ):
231-
232-
# remove trailing zeros
233-
if ( len(sys.argv)>7 ):
234-
lRemoveTrailingZeros=sys.argv[7].lower()=="true"
264+
# make them float
265+
if ( lGrid ):
266+
gridStep=abs(gridMax-gridMin)/gridN
267+
xstart=gridMin+int(xstart)*gridStep
268+
xstop=gridMin+int(xstop)*gridStep
269+
xdelta=int(xdelta)*gridStep
235270
else:
236-
lRemoveTrailingZeros=True
237-
238-
# acquire values
239-
istart, istop, idelta, ll = extremesInt( xstart, xstop, xdelta )
271+
xstart=float(xstart)
272+
xstop=float(xstop)
273+
xdelta=float(xdelta)
274+
prec=float(prec)
240275
if (lDebug):
241-
print 'ints:', istart, istop, idelta, ll
276+
print 'floats:',xstart,xstop,xdelta,prec
242277
# sanity checks
243-
istart, istop, idelta = checkInts( istart, istop, idelta )
278+
xstart, xstop, xdelta = checkValues( xstart, xstop, xdelta, prec )
244279
if (lDebug):
245-
print 'after sanity checks:', istart, istop, idelta, ll
280+
print 'after sanity checks:',xstart,xstop,xdelta,prec
246281
# loop
247-
values = genIntValues( istart, istop, idelta, ll )
282+
values = genValues( xstart, xstop, xdelta, prec )
248283
for value in values:
249284
print value
250285
if (lDebug):
251-
print 'end loop:', istart, istop, idelta, ll
286+
print 'end loop:',xstart,xstop,xdelta,prec
287+
252288
else:
253-
if ( len(sys.argv)>7 ):
254-
prec=float(sys.argv[7])
255-
else:
256-
prec=1.0E-15
257-
# make them float, in case
258-
xstart=float(xstart)
259-
xstop=float(xstop)
260-
xdelta=float(xdelta)
261-
prec=float(prec)
289+
290+
# acquire values
291+
if ( lGrid ):
292+
ll=15
293+
tmpFmt="%."+str(ll)+"f"
294+
gridStep=abs(gridMax-gridMin)/gridN
295+
xstart=tmpFmt%(gridMin+int(xstart)*gridStep)
296+
xstop=tmpFmt%(gridMin+int(xstop)*gridStep)
297+
xdelta=tmpFmt%(int(xdelta)*gridStep)
298+
istart, istop, idelta, ll = extremesInt( xstart, xstop, xdelta )
262299
if (lDebug):
263-
print 'floats:',xstart,xstop,xdelta,prec
300+
print 'ints:', istart, istop, idelta, ll
264301
# sanity checks
265-
xstart, xstop, xdelta = checkValues( xstart, xstop, xdelta, prec )
302+
istart, istop, idelta = checkInts( istart, istop, idelta )
266303
if (lDebug):
267-
print 'after sanity checks:',xstart,xstop,xdelta,prec
304+
print 'after sanity checks:', istart, istop, idelta, ll
268305
# loop
269-
values = genValues( xstart, xstop, xdelta, prec )
306+
values = genIntValues( istart, istop, idelta, ll )
270307
for value in values:
271308
print value
272309
if (lDebug):
273-
print 'end loop:',xstart,xstop,xdelta,prec
310+
print 'end loop:', istart, istop, idelta, ll

0 commit comments

Comments
 (0)