def replace_QD_with_QDth_lattice(slices,k0,length,label,particle,aperture): lattice = Lattice() thinlen = length/slices for nb in range(slices): if FLAGS['express']: instance = ELM.QDthx(k0=k0,length=thinlen,label=label,particle=particle,aperture=aperture) else: instance = ELM.QDth(k0=k0,length=thinlen,label=label,particle=particle,aperture=aperture) lattice.add_element(instance) return lattice
def make_lattice(latticeList,in_data): """ instanciate all elements from flattened node list""" lattice = Lattice() DEBUG_OFF('make_lattice for sollteilchen\n'+PARAMS['sollteilchen'].string()) elements = read_elements(in_data) for ID in lattice_list: element = elements[ID] element = liofd2d(element) elementClass = element['type'] elmItem = (elementClass,element) # !!INSTANCIATE!! (label,instance) = instanciate_element(elmItem) section = instance.section if FLAGS['sections'] else '*' DEBUG_MODULE('instance {} {} {}'.format(label,instance,section)) # add element instance to lattice if isinstance(instance,ELM._Node): lattice.add_element(instance) # elif isinstance(instance,Lattice): # lattice.concat(instance) # concatenate partial with lattice return lattice # the complete lattice
def m_fodo(params): kq = params['kq [1/m^2]'] lq = params['quad [m]'] ld = params['drift [m]'] particle = params['particle'] qf = elm.QF(k0=kq, length=lq/2., label='QF/2', particle=particle) qd = elm.QD(k0=kq, length=lq, label='QD', particle=particle) dr = elm.D( length=ld, label='D', particle=particle) cell = Lattice() cell.add_element(qf) cell.add_element(dr) cell.add_element(qd) cell.add_element(dr) cell.add_element(qf) return cell
def make_thin (kf1,kf2,ld,anz=1,verbose=False): kd1 = kf1 # k1 for qf1 & qd1 ld1 = lf1 = 0.4 # len qf1 & qd1 ff1 = kf1*lf1 # focal length qf1 fd1 = kd1*ld1 # focal length qd1 kf2 = kf2 kd2 = kf2 # same as above for qf2 & qd2 lf2 = ld2 = lf1 ff2 = kf2*lf2 fd2 = kd2*ld2 slices = 1 # present the quad by 1 thin-quads (bad!) slices = 3 # present the quad by 3 thin-quads (better!) slices = 6 # present the quad by 6 thin-quads (near perfect!) DL = D(length=ld,label='L') QF1 = QFth(k0=kf1,length=0.5*lf1/slices,label='QF1') QF2 = QFth(k0=kf2,length=0.5*lf2/slices,label='QF2') QD1 = QDth(k0=kd1,length=0.5*ld1/slices,label='QD1') QD2 = QDth(k0=kd2,length=0.5*ld2/slices,label='QD2') cell = Lattice() for i in range(slices): cell.add_element(QD1) for i in range(slices): cell.add_element(QF1) cell.add_element(DL) for i in range(slices): cell.add_element(QD2) for i in range(slices): cell.add_element(QF2) for i in range(slices): cell.add_element(QF2) for i in range(slices): cell.add_element(QD2) cell.add_element(DL) for i in range(slices): cell.add_element(QF1) for i in range(slices): cell.add_element(QD1) lat = Lattice() for i in range(anz): lat.concat(cell) lat.cell() mcell = lat.accel betax = lat.betax0 betay = lat.betay0 if verbose: # {:.3f} print('L= {:.3f}'.format(ld),end=' ') print('triplet 1: kf= {:.3f}, kd={:.3f}'.format(kf1,kd1),end=' | ') print('triplet 2: kf= {:.3f}, kd={:.3f}'.format(kf2,kd2),end=' | ') print('betax= {:.3f}, betay= {:.3f}'.format(betax,betay)) return lat,betax,betay
def make_thick(kf1,kf2,ld,anz=1,verbose=False): kf1 = kf1 kd1 = kf1 lf1 = 0.4 ld1 = lf1 ff1 = kf1*lf1 fd1 = kd1*ld1 kf2 = kf2 kd2 = kf2 lf2 = lf1 ld2 = lf2 ff2 = kf2*lf2 fd2 = kd2*ld2 ld = ld DL = D(length=ld,label='L') QF1 = QF(k0=kf1,length=0.5*lf1,label='QF1') QF2 = QF(k0=kf2,length=0.5*lf2,label='QF2') QD1 = QD(k0=kd1,length=0.5*ld1,label='QD1') QD2 = QD(k0=kd2,length=0.5*ld2,label='QD2') cell = Lattice() cell.add_element(QD1) cell.add_element(QF1) cell.add_element(DL) cell.add_element(QD2) cell.add_element(QF2) cell.add_element(QF2) cell.add_element(QD2) cell.add_element(DL) cell.add_element(QF1) cell.add_element(QD1) lat = Lattice() for i in range(anz): lat.concat(cell) lat.cell() mcell = lat.accel betax = lat.betax0 betay = lat.betay0 if verbose: # {:.3f} print('L= {:.3f}'.format(ld),end=' ') print('triplet 1: kf= {:.3f}, kd={:.3f}'.format(kf1,kd1),end=' | ') print('triplet 2: kf= {:.3f}, kd={:.3f}'.format(kf2,kd2),end=' | ') print('betax= {:.3f}, betay= {:.3f}'.format(betax,betay)) return lat,betax,betay