print "P[GeV/c] = ", P print "lambda [mm] =", lmbd * 1000. print "beta*lambda/360 deg [mm/deg] =", lmbd * syncPart.beta() * 1000. / 360. b.addParticle(0.002, 0.001, 0.002, 0.001, 0.005, 0.) b.addParticle(0.0, 0.0, 0.0, 0., -0.005, 0.) b.compress() print "initial syncPart (px,py,pz) =", (syncPart.px(), syncPart.py(), syncPart.pz()) length = grid2D_Ez.getMaxX() - grid2D_Ez.getMinX() tracker = RungeKuttaTracker(length) #------------------------------------------------------------------------------- # for the symmetric fields (if zSimmetric == +1) the grid2D has only z = 0,z_max #------------------------------------------------------------------------------- if (fieldSource.getSymmetry() == 1): tracker.entrancePlane(0, 0, -1., -grid2D_Ez.getMaxX()) else: tracker.entrancePlane(0, 0, -1., grid2D_Ez.getMinX()) tracker.exitPlane(0, 0, 1., -grid2D_Ez.getMaxX()) tracker.spatialEps(0.0000001) tracker.stepsNumber(60) print "Entrance plane (a,b,c,d)=", tracker.entrancePlane() print "Exit plane (a,b,c,d)=", tracker.exitPlane() print "Length[m]=", tracker.length()
b1 = Bunch() b.copyBunchTo(b1) twiss_analysis = BunchTwissAnalysis() twiss_analysis.analyzeBunch(b) print "============before==================" print "X Twiss =", twiss_analysis.getTwiss(0) print "Y Twiss =", twiss_analysis.getTwiss(1) print "Z Twiss =", twiss_analysis.getTwiss(2) #b.dumpBunch() G = 30.0 # [T/m] length = 0.1 # [m] fieldSource = FieldSource(G) tracker = RungeKuttaTracker(length) print "Tracker Entrance plane (a,b,c,d)=", tracker.entrancePlane() print "Tracker Exit plane (a,b,c,d)=", tracker.exitPlane() # the spatial eps is useless because we have quad field = 0 on axis for the syncPart #tracker.spatialEps(0.00000000001) # we have to specify the number of time steps tracker.stepsNumber(40) tracker.trackBunch(b, fieldSource) twiss_analysis.analyzeBunch(b) print "============after RK4 quad tracker===========" print "Runge-Kutta N steps=", tracker.stepsNumber() print "X Twiss =", twiss_analysis.getTwiss(0) print "Y Twiss =", twiss_analysis.getTwiss(1) print "Z Twiss =", twiss_analysis.getTwiss(2) #b.dumpBunch()
field_container.addFieldSource(qv01_3d) field_container.addFieldSource(qh02_3d) field_container.addFieldSource(qv03_3d) field_container.addFieldSource(qh04_3d) for kicker_3d in kickers_3d: field_container.addFieldSource(kicker_3d) #----------------------------------------------------- #---- Now let's define RK4 tracker and entrance and exit planes #---- as (r_vector - r0_vector)*n_vector = 0 #---- where n_vector is a normal vector to the plane #---- For all planes these normal vectors should be directed to the #---- outer space. length = qh04_pos_end - qv01_pos_start tracker = RungeKuttaTracker(length) #------------------------------------------------------------------------ #----- This is accuracy parameter in meters for the synchronous particle #----- tracking using RK4. In normal circumstances it defines the #----- size of time steps for integration, but here it is useless #----- because the field on the axis is equal to zero. tracker.spatialEps(0.001) #----- palnes setup tracker.entrancePlane(0., 0., -1., (qv01_pos_start - qv01_pos_center)) tracker.exitPlane(0., 0., 1., -(qh04_pos_end - qv01_pos_center)) print "Tracker Entrance plane (a,b,c,d)=", tracker.entrancePlane() print "Tracker Exit plane (a,b,c,d)=", tracker.exitPlane() # we have to specify an initial guess for number of time steps
print "P[GeV/c] = ",P b.addParticle(0.,0.,0.,0.,0.,P) b.compress() # radius estimation R = P*1.0e9/(c_light*b.charge()*1.0) print "R[m] = ",R n_step = 1000 time_step = (2*3.1415926*R/(c_light*P/E))/n_step fS = FieldSource() extEff = ExternalEffects() print "ExternalEffects name=",extEff.name() tracker = RungeKuttaTracker(10000.0) print "Entrance plane (a,b,c,d)=",tracker.entrancePlane() print "Exit plane (a,b,c,d)=",tracker.exitPlane() print "Length[m]=",tracker.length() print "Start tracking." time_start = 0. time_max = time_step*n_step print "================================================" print "Step_Index x y z " tracker.track(b,time_start, time_max, time_step,fS,extEff) print "================================================" print "Stop tracking." print "time step=",tracker.timeStep() print "Stop."
print "TK[GeV] = ",TK print "P[GeV/c] = ",P print "lambda [mm] =",lmbd*1000. print "beta*lambda/360 deg [mm/deg] =",lmbd*syncPart.beta()*1000./360. b.addParticle(0.002,0.001,0.002,0.001,0.005,0.) b.addParticle(0.0,0.0,0.0,0.,-0.005,0.) b.compress() print "initial syncPart (px,py,pz) =",(syncPart.px(),syncPart.py(),syncPart.pz()) length = grid2D_Ez.getMaxX()-grid2D_Ez.getMinX() tracker = RungeKuttaTracker(length) #------------------------------------------------------------------------------- # for the symmetric fields (if zSimmetric == +1) the grid2D has only z = 0,z_max #------------------------------------------------------------------------------- if(fieldSource.getSymmetry() == 1): tracker.entrancePlane(0,0,-1.,-grid2D_Ez.getMaxX()) else: tracker.entrancePlane(0,0,-1.,grid2D_Ez.getMinX()) tracker.exitPlane(0,0,1.,-grid2D_Ez.getMaxX()) tracker.spatialEps(0.0000001) tracker.stepsNumber(60) print "Entrance plane (a,b,c,d)=",tracker.entrancePlane() print "Exit plane (a,b,c,d)=",tracker.exitPlane() print "Length[m]=",tracker.length()
print "P[GeV/c] = ", P b.addParticle(0., 0., 0., 0., 0., P) b.compress() # radius estimation R = P * 1.0e9 / (c_light * b.charge() * 1.0) print "R[m] = ", R n_step = 1000 time_step = (2 * 3.1415926 * R / (c_light * P / E)) / n_step fS = FieldSource() extEff = ExternalEffects() print "ExternalEffects name=", extEff.name() tracker = RungeKuttaTracker(10000.0) print "Entrance plane (a,b,c,d)=", tracker.entrancePlane() print "Exit plane (a,b,c,d)=", tracker.exitPlane() print "Length[m]=", tracker.length() print "Start tracking." print "================================================" print "Step_Index x y z " tracker.track(b, time_step * n_step, time_step, fS, extEff) print "================================================" print "Stop tracking." print "time step=", tracker.timeStep() print "Stop." sys.exit(1)
b_init.z(0), b_init.dE(0)) print "(x,xp,y,yp,z,dE)= (%12.9f,%12.9f,%12.9f,%12.9f,%12.9f,%12.9f)" % ( x, xp, y, yp, z, dE) #------------------------------------------- # z- acceleration #------------------------------------------- b = Bunch() b_init.copyBunchTo(b) Ex = 0. Ey = 0. E0 = 100000. # [V/m] length = 1.0 # [m] fieldSource = FieldSource(Ex, Ey, E0) tracker = RungeKuttaTracker(length) print "Tracker Entrance plane (a,b,c,d)=", tracker.entrancePlane() print "Tracker Exit plane (a,b,c,d)=", tracker.exitPlane() tracker.spatialEps(0.0000001) # we can to specify the number of time steps tracker.stepsNumber(40) tracker.trackBunch(b, fieldSource) print "============after RK4 Ez non-zero tracker===========================================" (x, xp, y, yp, z, dE) = (b.x(0), b.xp(0), b.y(0), b.yp(0), b.z(0), b.dE(0)) print "(x,xp,y,yp,z,dE)= (%12.9f,%12.9f,%12.9f,%12.9f,%12.9f,%12.9f)" % ( x, xp, y, yp, z, dE) print "theory said we should have dE [GeV] =", E0 * length / 1.0e+9 #b.dumpBunch()
print "Start." b = Bunch() b.addParticle(0., 0., 0., 0., 0., 0.) b.compress() syncPart = b.getSyncParticle() syncPart.kinEnergy(1.0) print "synch. part. m=", syncPart.mass() print "synch. part. p=", syncPart.momentum() fS = FieldSource() extEff = ExternalEffects() print "ExternalEffects name=", extEff.name() tracker = RungeKuttaTracker(2.0) print "Entrance plane (a,b,c,d)=", tracker.entrancePlane() print "Exit plane (a,b,c,d)=", tracker.exitPlane() print "Spatial Eps[m]=", tracker.spatialEps(0.0001) print "Length[m]=", tracker.length() print "steps number=", tracker.stepsNumber() print "tracker.isOutside(0,0,2)=", tracker.isOutside(0, 0, 2) print "tracker.isAfterEntrance(0,0,2)=", tracker.isAfterEntrance(0, 0, 2) print "tracker.isBeforeExit(0,0,2)=", tracker.isBeforeExit(0, 0, 2) print "Start tracking." tracker.trackBunch(b, fS, extEff) print "Stop tracking." print "time step=", tracker.timeStep() print "steps number=", tracker.stepsNumber()
b = Bunch() b.addParticle(0.,0.,0.,0.,0.,0.) b.compress() syncPart = b.getSyncParticle() syncPart.kinEnergy(1.0) print "synch. part. m=",syncPart.mass() print "synch. part. p=",syncPart.momentum() fS = FieldSource() extEff = ExternalEffects() print "ExternalEffects name=",extEff.name() tracker = RungeKuttaTracker(2.0) print "Entrance plane (a,b,c,d)=",tracker.entrancePlane() print "Exit plane (a,b,c,d)=",tracker.exitPlane() print "Spatial Eps[m]=",tracker.spatialEps(0.0001) print "Length[m]=",tracker.length() print "steps number=",tracker.stepsNumber() print "tracker.isOutside(0,0,2)=",tracker.isOutside(0,0,2) print "tracker.isAfterEntrance(0,0,2)=",tracker.isAfterEntrance(0,0,2) print "tracker.isBeforeExit(0,0,2)=",tracker.isBeforeExit(0,0,2) print "Start tracking." tracker.trackBunch(b,fS,extEff) print "Stop tracking." print "time step=",tracker.timeStep() print "steps number=",tracker.stepsNumber()
twiss_analysis = BunchTwissAnalysis() twiss_analysis.analyzeBunch(b) print "============before==================" print "X Twiss =",twiss_analysis.getTwiss(0) print "Y Twiss =",twiss_analysis.getTwiss(1) print "Z Twiss =",twiss_analysis.getTwiss(2) #b.dumpBunch() G = 30.0 # [T/m] length = 0.1 # [m] fieldSource = FieldSource(G) tracker = RungeKuttaTracker(length) print "Tracker Entrance plane (a,b,c,d)=",tracker.entrancePlane() print "Tracker Exit plane (a,b,c,d)=",tracker.exitPlane() # the spatial eps is useless because we have quad field = 0 on axis for the syncPart #tracker.spatialEps(0.00000000001) # we have to specify the number of time steps tracker.stepsNumber(40) tracker.trackBunch(b,fieldSource) twiss_analysis.analyzeBunch(b) print "============after RK4 quad tracker===========" print "Runge-Kutta N steps=",tracker.stepsNumber() print "X Twiss =",twiss_analysis.getTwiss(0) print "Y Twiss =",twiss_analysis.getTwiss(1) print "Z Twiss =",twiss_analysis.getTwiss(2) #b.dumpBunch()
print "============before================================================================" (x,xp,y,yp,z,dE) = (b_init.x(0),b_init.xp(0),b_init.y(0),b_init.yp(0),b_init.z(0),b_init.dE(0)) print "(x,xp,y,yp,z,dE)= (%12.9f,%12.9f,%12.9f,%12.9f,%12.9f,%12.9f)"%(x,xp,y,yp,z,dE) #------------------------------------------- # z- acceleration #------------------------------------------- b = Bunch() b_init.copyBunchTo(b) Ex = 0. Ey = 0. E0 = 100000. # [V/m] length = 1.0 # [m] fieldSource = FieldSource(Ex,Ey,E0) tracker = RungeKuttaTracker(length) print "Tracker Entrance plane (a,b,c,d)=",tracker.entrancePlane() print "Tracker Exit plane (a,b,c,d)=",tracker.exitPlane() tracker.spatialEps(0.0000001) # we can to specify the number of time steps tracker.stepsNumber(40) tracker.trackBunch(b,fieldSource) print "============after RK4 Ez non-zero tracker===========================================" (x,xp,y,yp,z,dE) = (b.x(0),b.xp(0),b.y(0),b.yp(0),b.z(0),b.dE(0)) print "(x,xp,y,yp,z,dE)= (%12.9f,%12.9f,%12.9f,%12.9f,%12.9f,%12.9f)"%(x,xp,y,yp,z,dE) print "theory said we should have dE [GeV] =",E0*length/1.0e+9 #b.dumpBunch() #-------------------------------------------