当前位置: 首页>>代码示例>>Python>>正文


Python DriftTEAPOT.setLength方法代码示例

本文整理汇总了Python中orbit.teapot.DriftTEAPOT.setLength方法的典型用法代码示例。如果您正苦于以下问题:Python DriftTEAPOT.setLength方法的具体用法?Python DriftTEAPOT.setLength怎么用?Python DriftTEAPOT.setLength使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在orbit.teapot.DriftTEAPOT的用法示例。


在下文中一共展示了DriftTEAPOT.setLength方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: addTeapotCollimatorNode

# 需要导入模块: from orbit.teapot import DriftTEAPOT [as 别名]
# 或者: from orbit.teapot.DriftTEAPOT import setLength [as 别名]
def addTeapotCollimatorNode(lattice, position, collimator_node):
	"""
	It will put one Teapot collimation node in the lattice 
	"""
	length_tolerance = 0.0001
	lattice.initialize()
	if(position > lattice.getLength() ):
		position = lattice.getLength();
		print "User-specified aperture position is larger than lattice length.  Resetting it to lattice length."
	collimator_node.setPosition(position);
	position_start = position
	position_stop = position + collimator_node.getLength()
	(node_start_ind,node_stop_ind,z,ind) = (-1,-1, 0., 0)
	for node in lattice.getNodes():
		if(position_start >= z and position_start <= z + node.getLength()):
			node_start_ind = ind
		if(position_stop >= z and position_stop <= z + node.getLength()):
			node_stop_ind = ind
		ind += 1
		z += node.getLength()
	#-------now we check that between start and end we have only non-modified drift elements
	#-------if the space charge was added first - that is a problem. The collimation should be added first.
	for node in lattice.getNodes()[node_start_ind:node_stop_ind+1]:
		#print "debug node=",node.getName()," type=",node.getType()," L=",node.getLength()
		if(not isinstance(node,DriftTEAPOT)):
			print "Non-drift node=",node.getName()," type=",node.getType()," L=",node.getLength()
			orbitFinalize("We have non-drift element at the place of the collimator! Stop!")
			#if(node.getNumberOfChildren() != 4):
			#print "Node=",node.getName()," type=",node.getType()," L=",node.getLength()," N children nodes=",node.getNumberOfChildren()
			#orbitFinalize("Drift element was modified with additional functionality (SC or something else)! Add collimation first! Stop!")
	# make array of nodes from collimator in the center and possible two drifts if their length is more than length_tolerance [m]
	nodes_new_arr = [collimator_node,]
	drift_node_start = lattice.getNodes()[node_start_ind]
	drift_node_stop = lattice.getNodes()[node_stop_ind]	
	#------now we will create two drift nodes: before the collimator and after
	#------if the length of one of these additional drifts less than length_tollerance [m] we skip this drift 
	if(position_start > lattice.getNodePositionsDict()[drift_node_start][0] +  length_tolerance):
		drift_node_start_new = DriftTEAPOT(drift_node_start.getName())
		drift_node_start_new.setLength(position_start - lattice.getNodePositionsDict()[drift_node_start][0])
		nodes_new_arr.insert(0,drift_node_start_new)
	if(position_stop < lattice.getNodePositionsDict()[drift_node_stop][1] - length_tolerance):
		drift_node_stop_new = DriftTEAPOT(drift_node_stop.getName())
		drift_node_stop_new.setLength(lattice.getNodePositionsDict()[drift_node_stop][1] - position_stop)
		nodes_new_arr.append(drift_node_stop_new)
	#------ now we will modify the lattice by replacing the found part with the new nodes
	lattice.getNodes()[node_start_ind:node_stop_ind+1] = nodes_new_arr
	# initialize the lattice
	lattice.initialize()
开发者ID:luxiaohan,项目名称:py-orbit-code,代码行数:50,代码来源:collimationLatticeModifications.py

示例2: addTeapotDiagnosticsNode

# 需要导入模块: from orbit.teapot import DriftTEAPOT [as 别名]
# 或者: from orbit.teapot.DriftTEAPOT import setLength [as 别名]
def addTeapotDiagnosticsNode(lattice, position, diagnostics_node):
	"""
	It will put one Teapot diagnostics node in the lattice 
	"""
	length_tollerance = 0.0001
	lattice.initialize()
	position_start = position
	position_stop = position + diagnostics_node.getLength()
	diagnostics_node.setPosition(position)
	diagnostics_node.setLatticeLength(lattice.getLength())
	(node_start_ind,node_stop_ind,z,ind) = (-1,-1, 0., 0)
	for node in lattice.getNodes():
		if(position_start >= z and position_start <= z + node.getLength()):
			node_start_ind = ind
		if(position_stop >= z and position_stop <= z + node.getLength()):
			node_stop_ind = ind
		ind += 1
		z += node.getLength()
	#-------now we check that between start and end we have only non-modified drift elements
	#-------if the space charge was added first - that is a problem. The collimation should be added first.
	for node in lattice.getNodes()[node_start_ind:node_stop_ind+1]:
		#print "debug node=",node.getName()," type=",node.getType()," L=",node.getLength()
		if(not isinstance(node,DriftTEAPOT)):
			print "Non-drift node=",node.getName()," type=",node.getType()," L=",node.getLength()
			orbitFinalize("We have non-drift element at the place of the diagnostics! Stop!")
			
	# make array of nodes from diagnostics in the center and possible two drifts if their length is more than length_tollerance [m]
	nodes_new_arr = [diagnostics_node,]
	drift_node_start = lattice.getNodes()[node_start_ind]
	drift_node_stop = lattice.getNodes()[node_stop_ind]	
	#------now we will create two drift nodes: before the diagnostics and after
	#------if the length of one of these additional drifts less than length_tollerance [m] we skip this drift 
	if(position_start > lattice.getNodePositionsDict()[drift_node_start][0] +  length_tollerance):
		drift_node_start_new = DriftTEAPOT(drift_node_start.getName())
		drift_node_start_new.setLength(position_start - lattice.getNodePositionsDict()[drift_node_start][0])
		nodes_new_arr.insert(0,drift_node_start_new)
	if(position_stop < lattice.getNodePositionsDict()[drift_node_stop][1] - length_tollerance):
		drift_node_stop_new = DriftTEAPOT(drift_node_stop.getName())
		drift_node_stop_new.setLength(lattice.getNodePositionsDict()[drift_node_stop][1] - position_stop)
		nodes_new_arr.append(drift_node_stop_new)
	#------ now we will modify the lattice by replacing the found part with the new nodes
	lattice.getNodes()[node_start_ind:node_stop_ind+1] = nodes_new_arr
	# initialize the lattice
	lattice.initialize()
开发者ID:luxiaohan,项目名称:py-orbit-code,代码行数:46,代码来源:diagnosticsLatticeModifications.py

示例3: printM

# 需要导入模块: from orbit.teapot import DriftTEAPOT [as 别名]
# 或者: from orbit.teapot.DriftTEAPOT import setLength [as 别名]
#---PRINT Function for Matrix
def printM(m):
	print "----matrix--- size=",m.size()
	for i in xrange(m.size()[0]):
		for j in xrange(m.size()[1]):
			print ("(%1d,%1d)=% 6.5e "%(i,j,m.get(i,j))),
		print ""	
		

b = Bunch()
Ekin = 1.0 # in GeV
b.getSyncParticle().kinEnergy(Ekin)

#define TEAPOT drift
node0 = DriftTEAPOT("drift")
node0.setLength(1.0)

#define TEAPOT quad
node1 = QuadTEAPOT("quad")
node1.setLength(1.0)
node1.addParam("kq",0.5)
	
matrixGenerator = MatrixGenerator()

#========matrix for drift =====
m = Matrix(6,6)
matrixGenerator.initBunch(b)
node0.trackBunch(b)
matrixGenerator.calculateMatrix(b,m)	
print "drift matrix L=",node0.getLength()
printM(m)
开发者ID:luxiaohan,项目名称:py-orbit-code,代码行数:33,代码来源:teapot_stand_alone_node_test.py

示例4: addErrorNode

# 需要导入模块: from orbit.teapot import DriftTEAPOT [as 别名]
# 或者: from orbit.teapot.DriftTEAPOT import setLength [as 别名]
def addErrorNode(lattice, position, Error_Node):
	"""
	This will put one error node into the lattice
	"""
	length_tolerance = 0.0001
	lattice.initialize()
	position_start = position
	position_stop  = position + Error_Node.getLength()
	(node_start_ind, node_stop_ind, z, ind) = (-1, -1, 0.0, 0)
	for node in lattice.getNodes():
		if(position_start >= z and position_start <= z + node.getLength()):
			node_start_ind = ind
		if(position_stop  >= z and position_stop  <= z + node.getLength()):
			node_stop_ind  = ind
		ind += 1
		z += node.getLength()

	"""
	Check that between start and end there are only non-modified 
	drift elements. If space charge was added first - that is a problem.
	The collimation should be added first.
	"""

	for node in lattice.getNodes()[node_start_ind:node_stop_ind + 1]:
		"""
		print "debug node = ", node.getName(), " type = ", node.getType(),\
		" L = ", node.getLength()
		"""
		if(not isinstance(node, DriftTEAPOT)):
			print "Non-drift node = ", node.getName(), " type = ",\
			node.getType(), " L = ", node.getLength()
			orbitFinalize("We have non-drift element at the place of \
				the error node! Stop!")
			"""
			if(node.getNumberOfChildren() != 4):
				print "Node = ", node.getName()," type = ", node.getType(),\
				" L = ", node.getLength(), " N child nodes = ",\
				node.getNumberOfChildren()
			orbitFinalize("Drift element was modified with additional \
			functionality (SC or something else)! Add collimation first! \
			Stop!")
			"""

	"""
	Make array of nodes with error node in the center and two possible drifts,
	if their length is more than length_tollerance [m]
	"""

	nodes_new_arr = [Error_Node,]
	drift_node_start = lattice.getNodes()[node_start_ind]
	drift_node_stop  = lattice.getNodes()[node_stop_ind]

	"""
	Now create two drift nodes: before and after the error node.
	If the length of either of these additional drifts is less than
	length_tollerance [m], skip this drift.
	"""

	if(position_start > lattice.getNodePositionsDict()[drift_node_start][0] +\
		length_tolerance):
		drift_node_start_new = DriftTEAPOT(drift_node_start.getName())
		drift_node_start_new.setLength(position_start -\
			lattice.getNodePositionsDict()[drift_node_start][0])
		nodes_new_arr.insert(0, drift_node_start_new)
	if(position_stop  < lattice.getNodePositionsDict()[drift_node_stop][1] -\
		length_tolerance):
		drift_node_stop_new = DriftTEAPOT(drift_node_stop.getName())
		drift_node_stop_new.setLength(lattice.getNodePositionsDict()[drift_node_stop][1] -\
			position_stop)
		nodes_new_arr.append(drift_node_stop_new)

	"""
	Now modify the lattice by replacing the old part with the new nodes
	"""

	lattice.getNodes()[node_start_ind:node_stop_ind + 1] = nodes_new_arr
	"""
	Initialize the lattice
	"""
	lattice.initialize()
开发者ID:luxiaohan,项目名称:py-orbit-code,代码行数:82,代码来源:ErrorLatticeModifications.py


注:本文中的orbit.teapot.DriftTEAPOT.setLength方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。