def make_Test_Swarm_And_Lattice(numParticles=100, totalTime=.1 ) -> (Swarm, ParticleTracerLattice): PTL = ParticleTracerLattice(200.0) PTL.add_Lens_Ideal(.4, 1.0, .025) PTL.add_Drift(.1) PTL.add_Lens_Ideal(.4, 1.0, .025) # PTL.add_Bender_Ideal_Segmented_With_Cap(200,.01,.1,1.0,.01,1.0,.001,1e-6) PTL.add_Bender_Ideal(np.pi, 1.0, 1.0, .025) PTL.add_Drift(.2) PTL.add_Lens_Ideal(.2, 1.0, .025) PTL.add_Drift(.1) PTL.add_Lens_Ideal(.2, 1.0, .025) PTL.add_Drift(.2) PTL.add_Bender_Ideal(np.pi, 1.0, 1.0, .025) PTL.end_Lattice() swarmTracer = SwarmTracer(PTL) swarm = swarmTracer.initalize_PseudoRandom_Swarm_In_Phase_Space( 5e-3, 5.0, 1e-5, numParticles) swarm = swarmTracer.trace_Swarm_Through_Lattice(swarm, 5e-6, totalTime, fastMode=False, parallel=True) # file=open('swarmFile','wb') # dill.dump(swarm,file) # file=open('swarmFile','rb') # swarm=dill.load(file) print('swarm and lattice done') return swarm, PTL
def generate_Lattice(configuration): #a variety of lattice configurations are tested if configuration == '1': PTL = ParticleTracerLattice(200.0, latticeType='storageRing') PTL.add_Drift(.25) PTL.add_Halbach_Bender_Sim_Segmented_With_End_Cap(.0254, .01, 150, 1.0, 0.0, rOffsetFact=1.015) PTL.add_Lens_Ideal(1.0, 1.0, .01) PTL.add_Halbach_Lens_Sim(.01, 1.0) PTL.add_Drift(.1) PTL.end_Lattice(constrain=False, surpressWarning=True, enforceClosedLattice=False) elif configuration in ('2', '5'): PTL = ParticleTracerLattice(200.0, latticeType='injector') PTL.add_Drift(.25) PTL.add_Halbach_Lens_Sim(.01, .5) PTL.add_Drift(.1) if configuration == '2': PTL.add_Combiner_Sim('combinerV3.txt') else: PTL.add_Combiner_Sim_Lens(.1, .02) PTL.add_Halbach_Lens_Sim(.01, .5) PTL.end_Lattice() elif configuration == '3': PTL = ParticleTracerLattice(200.0, latticeType='storageRing') PTL.add_Lens_Ideal(1.0, 1.0, .01) PTL.add_Bender_Ideal(np.pi, 1.0, 1.0, .01) PTL.add_Lens_Ideal(1.0, 1.0, .01) PTL.add_Bender_Ideal(np.pi, 1.0, 1.0, .01) PTL.end_Lattice() elif configuration in ('4', '6'): PTL = ParticleTracerLattice(200.0, latticeType='storageRing') PTL.add_Halbach_Lens_Sim(.01, .5) if configuration == '4': PTL.add_Combiner_Sim('combinerV3.txt') else: PTL.add_Combiner_Sim_Lens(.1, .02) PTL.add_Halbach_Lens_Sim(.01, .5) PTL.add_Halbach_Bender_Sim_Segmented_With_End_Cap(.0254 / 2, .01, None, 1.0, 0.0, rOffsetFact=1.015) PTL.add_Halbach_Lens_Sim(.01, None, constrain=True) PTL.add_Halbach_Bender_Sim_Segmented_With_End_Cap(.0254 / 2, .01, None, 1.0, 0.0, rOffsetFact=1.015) PTL.end_Lattice(enforceClosedLattice=True, constrain=True) PTL.elList[0].fieldFact = .3 PTL.elList[2].fieldFact = .3 else: raise Exception('no proper configuration name provided') return PTL