From d47cff168858e8432e7a86270b0dcfd1bce8d77e Mon Sep 17 00:00:00 2001 From: Yngve Inntjore Levinsen <Yngve.Levinsen@esss.se> Date: Tue, 14 Jun 2016 10:27:08 +0200 Subject: [PATCH] adding changes from example.zip of Ryoichi --- ess/lib_tw.py | 68 +++++--- ess/lib_tw_elem.py | 421 +++++++++++++++++++++++++++++++++++---------- 2 files changed, 378 insertions(+), 111 deletions(-) diff --git a/ess/lib_tw.py b/ess/lib_tw.py index 7628b46..e70da71 100644 --- a/ess/lib_tw.py +++ b/ess/lib_tw.py @@ -47,12 +47,32 @@ class LATTICE: if isinstance(file_name_fmap,basestring): file_name_fmap=[file_name_fmap] # Elem/comm class dict - dic_cls={'DRIFT':DRIFT, - 'QUAD':QUAD,'BEND':BEND,'EDGE':EDGE,'THIN_STEERING':THIN_STEERING, - 'GAP':GAP,'DTL_CEL':DTL_CEL, - 'APERTURE':APERTURE,'DIAG_POSITION':DIAG_POSITION, - 'STEERER':STEERER,'CHOPPER':CHOPPER, - 'FREQ':FREQ,'MARKER':MARKER,'ADJUST':ADJUST} + dic_cls={'DRIFT' : DRIFT , + 'QUAD' : QUAD , + 'THIN_STEERING' : THIN_STEERING , + 'GAP' : GAP , + 'DTL_CEL' : DTL_CEL , + # + 'BEND' : BEND , + 'EDGE' : EDGE , + 'APERTURE' : APERTURE , + 'DIAG_POSITION' : DIAG_POSITION , + # + 'STEERER' : STEERER , + 'CHOPPER' : CHOPPER , + # + 'FREQ' : FREQ , + 'MARKER' : MARKER , + 'ADJUST' : ADJUST , + # + 'ERROR_BEAM_STAT' : ERROR_BEAM_STAT , + 'ERROR_BEAM_DYN' : ERROR_BEAM_DYN , + 'ERROR_QUAD_NCPL_STAT': ERROR_QUAD_NCPL_STAT, + 'ERROR_QUAD_CPL_STAT' : ERROR_QUAD_CPL_STAT , + 'ERROR_CAV_NCPL_STAT' : ERROR_CAV_NCPL_STAT , + 'ERROR_CAV_NCPL_DYN' : ERROR_CAV_NCPL_DYN , + 'ERROR_CAV_CPL_STAT' : ERROR_CAV_CPL_STAT , + 'ERROR_CAV_CPL_DYN' : ERROR_CAV_CPL_DYN } # Field map dict dic_fmap={} @@ -76,10 +96,10 @@ class LATTICE: typ =lin.split()[0 ].upper() para=lin.split()[1:] # Map to a class - if typ == 'FIELD_MAP' : lst.append( FIELD_MAP(name,typ,para,dic_fmap)) - elif typ in dic_cls.keys() : lst.append(dic_cls[typ](name,typ,para) ) - elif 'DIAG' in typ : lst.append( DIAG(name,typ,para) ) - else : lst.append( COMM(name,typ,para) ) + if typ == 'FIELD_MAP' : lst.append( FIELD_MAP(name,typ,para,dic_fmap)) + elif typ in dic_cls.keys() : lst.append(dic_cls[typ](name,typ,para) ) + elif 'DIAG' in typ : lst.append( DIAG(name,typ,para) ) + else : lst.append( COMM(name,typ,para) ) # in case of field map path, update dictionary with new path if typ == 'FIELD_MAP_PATH' : _update_field_map_dict(dic_fmap,para[0]) @@ -105,7 +125,7 @@ class LATTICE: found=False correctors=[] for element in self.lst: - if found: + if found: #WARNING I worry that there could be an inactive comment/element between the ADJUST and actual corrector logging.debug("Found element {} for corrector family {}".format(element.typ,i)) correctors.append(element) @@ -143,6 +163,9 @@ class LATTICE: # Assign/update idx, idx_elem, s, freq for i in range(len(self.lst)): if i==0: + self.lst[0].idx =-1 + self.lst[0].idx_elem=-1 + self.lst[0].s = 0.0 self.lst[0].freq=self.freq if i!=0: self.lst[i].idx =self.lst[i-1].idx @@ -150,6 +173,7 @@ class LATTICE: self.lst[i].s =self.lst[i-1].s self.lst[i].freq =self.lst[i-1].freq self.lst[i].update_idx() + # Assign apt (using apt of the previous elem for diag elem) for i in range(len(self.lst)): try: @@ -342,14 +366,14 @@ class PROJECT: class PARTRAN: ''' Note: - + - The list not complete. Add parameters as needed. - + History: - + - 2016.02.17: Changed how to identify the line of indices. - 2016.02.17: Added a logic to avoid #/0 for LEBT. - + ''' def __init__(self,file_name): @@ -362,7 +386,7 @@ class PARTRAN: with open(file_name) as file: for lin in file.readlines(): lin=lin.split() - if '##' in lin[0]: + if '##' in lin[0]: idx_s =lin.index("z(m)" ); idx_gamma=lin.index("gama-1" ) idx_x =lin.index("x0" ); idx_y =lin.index("y0" ); idx_phs =lin.index("p0" ) idx_sigx =lin.index("SizeX" ); idx_sigy =lin.index("SizeY" ); idx_sigz=lin.index("SizeZ"); idx_sigp=lin.index("SizeP") @@ -393,7 +417,7 @@ class PARTRAN: for i in range(len(self.s)): if self.epsz[i]==0.0: self.epsz[i]=inf if self.epsp[i]==0.0: self.epsp[i]=inf - + # Additional instances self.gamma= data[idx_gamma]+1.0 self.beta = sqrt(1.0-1.0/self.gamma**2) @@ -411,7 +435,7 @@ class PARTRAN: for i in range(len(self.s)): if self.epsz[i]==inf: self.epsz[i]=0.0 if self.epsp[i]==inf: self.epsp[i]=0.0 - + # Convert to list (not necessary?) self.s =self.s.tolist() ; self.gamma=self.gamma.tolist(); self.beta=self.beta.tolist() self.x =self.x.tolist() ; self.y =self.y.tolist() ; self.z =self.z.tolist() ; self.phs =self.phs.tolist() @@ -483,11 +507,11 @@ class DENSITY: Nelem : loss_num_(..), loss_pow_(..) Nelem x Nstep: den - + - History: - + * 2015.11.12: Baseline ver - * 2016.03.29: Adapted to ver 9 (apt includes shifts) + * 2016.03.29: Adapted to ver 9 (apt includes shifts) ''' def __init__(self,file_name): @@ -520,7 +544,7 @@ class DENSITY: Ibeam.append(fromfile(file,dtype=float32,count=1)[0]) s.append( fromfile(file,dtype=float32,count=1)[0]) if ver>=9: apt.append(fromfile(file,dtype=float32,count=4)) - else : apt.append(fromfile(file,dtype=float32,count=2)) + else : apt.append(fromfile(file,dtype=float32,count=2)) Nstep=fromfile(file,dtype=uint32,count=1)[0] cent_ave.append(fromfile(file,dtype=float32,count=7)) cent_rms.append(fromfile(file,dtype=float32,count=7)) diff --git a/ess/lib_tw_elem.py b/ess/lib_tw_elem.py index a9da63b..95a0837 100644 --- a/ess/lib_tw_elem.py +++ b/ess/lib_tw_elem.py @@ -64,7 +64,16 @@ PLOT_DST - 2016.01.19 + - History + + * 2016.01.19 + + - Initial ver. + + * 2016.05.07 + + - ADJUST activated. + - max added to THIN_STEERING. ''' #---- Libs @@ -90,9 +99,6 @@ class FIELD_MAP_DATA: ''' def __init__(self,file_name): - if file_name.split('.')[-1]!='edz': - raise ValueError('Only 1D field maps (Ez) is supported for now') - # Read file with open(file_name) as file: lin=file.readlines() @@ -121,12 +127,6 @@ class ELEM: self.gamma = 1.0 self.freq = 352.21 - def update(self): - ''' - Updates element based on para - ''' - pass - def update_idx(self): # Update idx, idx_elem, s @@ -168,13 +168,6 @@ class COMM: self.gamma = 1.0 self.freq = 352.21 - def __repr__(self): - S="lib_tw_elem.COMM: " + self.name + ", type: " + self.typ + ", para: " + str(self.para) - S+="\n idx: " + str(self.idx) + ", idx_elem: " + str(self.idx_elem) - S+="\n s: " + str(self.s) + ", gamma:" + str(self.gamma) - S+="\n freq: " + str(self.freq) - return S - def update_idx(self): # Update idx @@ -196,16 +189,17 @@ class FIELD_MAP(ELEM): def __init__(self,name,typ,para,dic_fmap): ELEM.__init__(self,name,typ,para) + # TW instances - self.name_fmap= para[8] - self.typ_fmap = para[0] - self.L =float(para[1])*1e-3 # mm => m + self.name_fmap= str(para[8]) + self.typ_fmap = str(para[0]) + self.L =float(para[1])*1e-3 # mm => m self.phs_rf =float(para[2])*pi/180.0 # deg => rad self.apt =float(para[3]) self.Bnom =float(para[4]) self.Enom =float(para[5]) self.sc_comp =float(para[6]) - self.flag_apt = para[7] + self.flag_apt = str(para[7]) # Option instances self.data=dic_fmap[self.name_fmap] @@ -241,15 +235,15 @@ class FIELD_MAP(ELEM): if self.name!='': lin=self.name+': '+self.typ+' ' if self.name=='': lin= self.typ+' ' - lin+= self.typ_fmap +' ' + lin+=str(self.typ_fmap ) +' ' lin+=str(self.L*1e3 )+' ' lin+=str(self.phs_rf*180.0/pi)+' ' lin+=str(self.apt )+' ' lin+=str(self.Bnom )+' ' lin+=str(self.Enom )+' ' lin+=str(self.sc_comp )+' ' - lin+= self.flag_apt +' ' - lin+= self.name_fmap + lin+=str(self.flag_apt )+' ' + lin+=str(self.name_fmap ) return lin @@ -300,7 +294,7 @@ class DRIFT(ELEM): # TW option instances try : self.apty=float(para[2]) - except: self.apty=0.0 + except: self.apty= 0.0 def get_tw(self): @@ -350,28 +344,22 @@ class QUAD(ELEM): ELEM.__init__(self,name,typ,para) # TW instances - self.update() - self.tilt=0.0 + self.L =float(para[0])*1e-3 # mm => m + self.G =float(para[1]) + self.apt =float(para[2]) + self.tilt= 0.0 # TW option instances try : self.b3 =float(para[4]) - except: self.b3 =0.0 + except: self.b3 = 0.0 try : self.b4 =float(para[5]) - except: self.b4 =0.0 + except: self.b4 = 0.0 try : self.b5 =float(para[6]) - except: self.b5 =0.0 + except: self.b5 = 0.0 try : self.b6 =float(para[7]) - except: self.b6 =0.0 + except: self.b6 = 0.0 try : self.r_good=float(para[8]) - except: self.r_good=0.0 - - def update(self): - ''' - Updates element based on para - ''' - self.L =float(self.para[0])*1e-3 # mm => m - self.G =float(self.para[1]) - self.apt =float(self.para[2]) + except: self.r_good= 0.0 def get_tw(self): @@ -429,16 +417,13 @@ class THIN_STEERING(ELEM): ELEM.__init__(self,name,typ,para) # TW instances - self.update() - self.typ_EM='0' - - def update(self): - ''' - Updates element based on para - ''' self.BLx =float(self.para[0]) self.BLy =float(self.para[1]) self.apt =float(self.para[2]) + self.typ_EM='0' + + # Option instances + self.max =0.0 def get_tw(self): @@ -447,7 +432,7 @@ class THIN_STEERING(ELEM): lin+=str(self.BLx )+' ' lin+=str(self.BLy )+' ' lin+=str(self.apt )+' ' - lin+= self.typ_EM + lin+=str(self.typ_EM) return lin @@ -497,13 +482,13 @@ class GAP(ELEM): # TW option instances try : self.beta_s=float(para[4]) - except: self.beta_s=0.0 + except: self.beta_s= 0.0 try : self.T0 =float(para[5]) - except: self.T0 =0.0 + except: self.T0 = 0.0 try : self.T1 =float(para[6]) - except: self.T1 =0.0 + except: self.T1 = 0.0 try : self.T2 =float(para[7]) - except: self.T2 =0.0 + except: self.T2 = 0.0 # Option instances self.E0TL=self.E0T0L @@ -586,13 +571,13 @@ class DTL_CEL(ELEM): # TW option instances try : self.beta_s=float(para[10]) - except: self.beta_s=0.0 + except: self.beta_s= 0.0 try : self.T0 =float(para[11]) - except: self.T0 =0.0 + except: self.T0 = 0.0 try : self.T1 =float(para[12]) - except: self.T1 =0.0 + except: self.T1 = 0.0 try : self.T2 =float(para[13]) - except: self.T2 =0.0 + except: self.T2 = 0.0 # Option instances self.E0TL=self.E0T0L @@ -749,7 +734,7 @@ class BEND(ELEM): self.angle=float(para[0])*pi/180.0 # deg => rad self.rho =float(para[1])*1e-3 # mm => m self.apt =float(para[3]) - self.plane= para[4] + self.plane= str(para[4]) # Option instances if self.plane=='0': self.tilt=0.0 @@ -816,7 +801,7 @@ class EDGE(ELEM): self.ff_coef1=float(para[3]) self.ff_coef2=float(para[4]) self.apt =float(para[5]) - self.plane = para[6] + self.plane = str(para[6]) # Option instances if self.plane=='0': self.tilt=0.0 @@ -848,7 +833,7 @@ class APERTURE(ELEM): # TW instances self.apt =float(para[0]) self.apty =float(para[1]) - self.typ_apt= para[2] + self.typ_apt= str(para[2]) def get_madx(self): @@ -973,9 +958,9 @@ class STEERER(COMM): # TW option instances try : self.max =float(para[2]) - except: self.max =0.0 + except: self.max = 0.0 try : self.nonlin=float(para[5]) - except: self.nonlin=0.0 + except: self.nonlin= 0.0 def get_tw(self): @@ -998,21 +983,21 @@ class CHOPPER(COMM): COMM.__init__(self,name,typ,para) # TW instances - self.Nelem= int(para[0]) - self.volt =float(para[1]) - self.gap =float(para[2])*2.0 - self.d_pos=float(para[3]) - self.plane= para[4] + self.Nelem = int(para[0]) + self.volt =float(para[1]) + self.gap =float(para[2])*2.0 + self.gap_cent=float(para[3]) + self.plane = str(para[4]) def get_tw(self): if self.name!='': lin=self.name+': '+self.typ+' ' if self.name=='': lin= self.typ+' ' - lin+=str(self.Nelem )+' ' - lin+=str(self.volt )+' ' - lin+=str(self.gap*0.5)+' ' - lin+=str(self.d_pos )+' ' - lin+= self.plane + lin+=str(self.Nelem )+' ' + lin+=str(self.volt )+' ' + lin+=str(self.gap*0.5 )+' ' + lin+=str(self.gap_cent)+' ' + lin+=str(self.plane ) return lin @@ -1062,25 +1047,283 @@ class MARKER(COMM): ## return lin -#---- No longer needed ?? +class ADJUST(COMM): + ''' + - Uncommented for THIN_STEERING. + ''' + def __init__(self,name,typ,para): + + COMM.__init__(self,name,typ,para) + + # TW instances + self.fam=str(para[0]) + self.var=int(para[1]) + + # TW option instances + try : self.link= str(self.para[2]) + except: self.link= '0' + try : self.min =float(self.para[3]) + except: self.min = 0.0 + try : self.max =float(self.para[4]) + except: self.max = 0.0 + try : self.ini =float(self.para[5]) + except: self.ini = 0.0 + +#---- Error commands (active) + +#-- + +class ERROR_BEAM(COMM): + ''' + ''' + def __init__(self,name,typ,para): + + COMM.__init__(self,name,typ,para) + + # TW instances + self.typ_dist=str(para[0]) + + # TW option instances + try : self.x =float(para[ 1]) + except: self.x = 0.0 + try : self.y =float(para[ 2]) + except: self.y = 0.0 + try : self.phs =float(para[ 3])*pi/180.0 # deg => rad + except: self.phs = 0.0 + try : self.xp =float(para[ 4]) + except: self.xp = 0.0 + try : self.yp =float(para[ 5]) + except: self.yp = 0.0 + try : self.ken =float(para[ 6]) + except: self.ken = 0.0 + try : self.epsx =float(para[ 7])*1e-2 # % => 1 + except: self.epsx = 0.0 + try : self.epsy =float(para[ 8])*1e-2 # % => 1 + except: self.epsy = 0.0 + try : self.epsz =float(para[ 9])*1e-2 # % => 1 + except: self.epsz = 0.0 + try : self.mx =float(para[10])*1e-2 # % => 1 + except: self.mx = 0.0 + try : self.my =float(para[11])*1e-2 # % => 1 + except: self.my = 0.0 + try : self.mz =float(para[12])*1e-2 # % => 1 + except: self.mz = 0.0 + try : self.Ibeam =float(para[13]) + except: self.Ibeam = 0.0 + try : self.alfx_min=float(para[14]) + except: self.alfx_min= 0.0 + try : self.alfx_max=float(para[15]) + except: self.alfx_max= 0.0 + try : self.betx_min=float(para[16]) + except: self.betx_min= 0.0 + try : self.betx_max=float(para[17]) + except: self.betx_max= 0.0 + try : self.alfy_min=float(para[18]) + except: self.alfy_min= 0.0 + try : self.alfy_max=float(para[19]) + except: self.alfy_max= 0.0 + try : self.bety_min=float(para[20]) + except: self.bety_min= 0.0 + try : self.bety_max=float(para[21]) + except: self.bety_max= 0.0 + try : self.alfz_min=float(para[22]) + except: self.alfz_min= 0.0 + try : self.alfz_max=float(para[23]) + except: self.alfz_max= 0.0 + try : self.betz_min=float(para[24]) + except: self.betz_min= 0.0 + try : self.betz_max=float(para[25]) + except: self.betz_max= 0.0 + + def get_tw(self): + + if self.name!='': lin=self.name+': '+self.typ+' ' + if self.name=='': lin= self.typ+' ' + lin+=str(self.typ_dist )+' ' + lin+=str(self.x )+' ' + lin+=str(self.y )+' ' + lin+=str(self.phs*180.0/pi)+' ' + lin+=str(self.xp )+' ' + lin+=str(self.yp )+' ' + lin+=str(self.ken )+' ' + lin+=str(self.epsx*1e2 )+' ' + lin+=str(self.epsy*1e2 )+' ' + lin+=str(self.epsz*1e2 )+' ' + lin+=str(self.mx *1e2 )+' ' + lin+=str(self.my *1e2 )+' ' + lin+=str(self.mz *1e2 )+' ' + lin+=str(self.Ibeam )+' ' + lin+=str(self.alfx_min )+' ' + lin+=str(self.alfx_max )+' ' + lin+=str(self.betx_min )+' ' + lin+=str(self.betx_max )+' ' + lin+=str(self.alfy_min )+' ' + lin+=str(self.alfy_max )+' ' + lin+=str(self.bety_min )+' ' + lin+=str(self.bety_max )+' ' + lin+=str(self.alfz_min )+' ' + lin+=str(self.alfz_max )+' ' + lin+=str(self.betz_min )+' ' + lin+=str(self.betz_max ) + + return lin + +class ERROR_BEAM_STAT(ERROR_BEAM): + ''' + ''' + def __init__(self,name,typ,para): + + ERROR_BEAM.__init__(self,name,typ,para) + +class ERROR_BEAM_DYN(ERROR_BEAM): + ''' + ''' + def __init__(self,name,typ,para): + + ERROR_BEAM.__init__(self,name,typ,para) + +#-- + +class ERROR_QUAD(COMM): + ''' + ''' + def __init__(self,name,typ,para): + + COMM.__init__(self,name,typ,para) + + # TW instances + self.Nelem =int(para[0]) + self.typ_dist=str(para[1]) + + # TW option instances + try : self.x =float(para[ 2]) + except: self.x = 0.0 + try : self.y =float(para[ 3]) + except: self.y = 0.0 + try : self.rotx=float(para[ 4])*pi/180.0 # deg => rad + except: self.rotx= 0.0 + try : self.roty=float(para[ 5])*pi/180.0 # deg => rad + except: self.roty= 0.0 + try : self.rotz=float(para[ 6])*pi/180.0 # deg => rad + except: self.rotz= 0.0 + try : self.G =float(para[ 7])*1e-2 # % => 1 + except: self.G = 0.0 + try : self.z =float(para[ 8]) + except: self.z = 0.0 + try : self.b3 =float(para[ 9])*1e-2 # % => 1 + except: self.b3 = 0.0 + try : self.b4 =float(para[10])*1e-2 # % => 1 + except: self.b4 = 0.0 + try : self.b5 =float(para[11])*1e-2 # % => 1 + except: self.b5 = 0.0 + try : self.b6 =float(para[12])*1e-2 # % => 1 + except: self.b6 = 0.0 + + def get_tw(self): + + if self.name!='': lin=self.name+': '+self.typ+' ' + if self.name=='': lin= self.typ+' ' + lin+=str(self.Nelem )+' ' + lin+=str(self.typ_dist )+' ' + lin+=str(self.x )+' ' + lin+=str(self.y )+' ' + lin+=str(self.rotx*180.0/pi )+' ' + lin+=str(self.roty*180.0/pi )+' ' + lin+=str(self.rotz*180.0/pi )+' ' + lin+=str(self.G*1e2 )+' ' + lin+=str(self.z )+' ' + lin+=str(self.b3*1e2 )+' ' + lin+=str(self.b4*1e2 )+' ' + lin+=str(self.b5*1e2 )+' ' + lin+=str(self.b6*1e2 ) + + return lin + +class ERROR_QUAD_NCPL_STAT(ERROR_QUAD): + ''' + ''' + def __init__(self,name,typ,para): + + ERROR_QUAD.__init__(self,name,typ,para) + +class ERROR_QUAD_CPL_STAT(ERROR_QUAD): + ''' + ''' + def __init__(self,name,typ,para): + + ERROR_QUAD.__init__(self,name,typ,para) + +#-- + +class ERROR_CAV(COMM): + ''' + ''' + def __init__(self,name,typ,para): + + COMM.__init__(self,name,typ,para) -## class ADJUST(COMM): -## ''' -## ''' -## def __init__(self,name,typ,para): + # TW instances + self.Nelem =int(para[0]) + self.typ_dist=str(para[1]) + + # TW option instances + try : self.x =float(para[2]) + except: self.x = 0.0 + try : self.y =float(para[3]) + except: self.y = 0.0 + try : self.rotx =float(para[4])*pi/180.0 # deg => rad + except: self.rotx = 0.0 + try : self.roty =float(para[5])*pi/180.0 # deg => rad + except: self.roty = 0.0 + try : self.E =float(para[6])*1e-2 # % => 1 + except: self.E = 0.0 + try : self.phs_rf=float(para[7])*pi/180.0 # deg => rad + except: self.phs_rf= 0.0 + try : self.z =float(para[8]) + except: self.z = 0.0 + + def get_tw(self): + + if self.name!='': lin=self.name+': '+self.typ+' ' + if self.name=='': lin= self.typ+' ' + lin+=str(self.Nelem )+' ' + lin+=str(self.typ_dist )+' ' + lin+=str(self.x )+' ' + lin+=str(self.y )+' ' + lin+=str(self.rotx*180.0/pi )+' ' + lin+=str(self.roty*180.0/pi )+' ' + lin+=str(self.E*1e2 )+' ' + lin+=str(self.phs_rf*180.0/pi)+' ' + lin+=str(self.z ) + + return lin + +class ERROR_CAV_NCPL_STAT(ERROR_CAV): + ''' + ''' + def __init__(self,name,typ,para): -## COMM.__init__(self,name,typ,para) + ERROR_CAV.__init__(self,name,typ,para) + +class ERROR_CAV_CPL_STAT(ERROR_CAV): + ''' + ''' + def __init__(self,name,typ,para): + + ERROR_CAV.__init__(self,name,typ,para) + +class ERROR_CAV_NCPL_DYN(ERROR_CAV): + ''' + ''' + def __init__(self,name,typ,para): + + ERROR_CAV.__init__(self,name,typ,para) + +class ERROR_CAV_CPL_DYN(ERROR_CAV): + ''' + ''' + def __init__(self,name,typ,para): -## # TW instances -## self.fam= para[0] -## self.var=int(para[1]) + ERROR_CAV.__init__(self,name,typ,para) -## # TW option instances -## try : self.link=self.para[2] -## except: self.link='0' -## try : self.min =float(self.para[3]) -## except: self.min =0.0 -## try : self.max =float(self.para[4]) -## except: self.max =0.0 -## try : self.ini =float(self.para[5]) -## except: self.ini =0.0 +#---- -- GitLab