Example #1
0
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()
Example #3
0
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()
	
Example #6
0
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)
Example #7
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()
Example #8
0
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()

#-------------------------------------------