diff --git a/elettra2test.py b/elettra2test.py
index e273be7203ab47bb2ed0b79d2f8a9efc861aa52a..7d64ab0e9666c3685496fa25782f66fe64b5ee3b 100755
--- a/elettra2test.py
+++ b/elettra2test.py
@@ -2,7 +2,9 @@
 import os
 import at
 import matplotlib.pylab as mp
-lattfile = "~/src/gitlab/dt/machine/lattice/elettra2/srElettra2_9_4_beta.mat"
+#import matplotlib.pyplot as mp
+#lattfile = "~/src/gitlab/dt/machine/lattice/elettra2/srElettra2_9_4_beta.mat"
+lattfile = "~/src/gitlab/dt/machine/lattice/elettra2/srElettra2_9_4_beta_test_digital_twins.mat"
 #lattfile = "~/esrf_visit/last.mat"
 lattfile = os.path.expanduser(lattfile)
 ring=at.load_lattice(lattfile, energy=2.4e9)
diff --git a/kickandpoly.py b/kickandpoly.py
new file mode 100755
index 0000000000000000000000000000000000000000..753d9a62df54a7db864844962ec5bb26e919ff3a
--- /dev/null
+++ b/kickandpoly.py
@@ -0,0 +1,34 @@
+#!/usr/bin/python3
+
+import at
+
+
+#--------- test PolynomA ,PolynomB and kicks of at multipoles ---------------
+
+QF = at.Quadrupole('QF:', 0.24, 5.518) #create a Quadrupole
+print("QF B[i]",QF.PolynomB)
+print("QF A[i]",QF.PolynomA)
+
+SD = at.Sextupole('SD:', 2.0, 0.2) #create a Sextupole
+print("SD B[i]",SD.PolynomB)
+print("SD A[i]",SD.PolynomA)
+SD.PolynomB[1]=0.6 #add quad component - equivalen to settin K
+print("SD B[i]",SD.PolynomB,"K=",SD.K, "H=",SD.H)
+SD.PolynomB[1]=0.0
+SD.PolynomA[1]=0.6 #add skew quad component , K is not modified!!!!
+print("SD A[i]",SD.PolynomA,"K=",SD.K, "H=",SD.H)
+
+OC = at.Octupole('OC', 0.12, poly_a=[0,0,0],poly_b=[0, 0, 0, 264.232] )#create an Octupole
+print("OC B[i]",OC.PolynomB)
+print("OC A[i]",OC.PolynomA)
+print("OC max order",OC.MaxOrder)
+OC.PolynomB[0]=0.5
+print("OC B[i]",OC.PolynomB)
+
+
+
+
+
+
+
+
diff --git a/lattgetinfo.py b/lattgetinfo.py
index 71a6e75a777bf8437fdebc893cd88132d96dc111..9849fda8a30a4c6d0868a91440047dc40eef6d10 100755
--- a/lattgetinfo.py
+++ b/lattgetinfo.py
@@ -3,8 +3,8 @@
 import os
 import LatticeInfo
 homedir=os.path.expanduser('~')
-#lattname = "srElettra2_9_4_beta.mat"
-lattname = "srElettra2_high_betax_long_straights_ring.m"
+lattname = "srElettra2_9_4_beta.mat"
+#lattname = "srElettra2_high_betax_long_straights_ring.m"
 latticefile = homedir + "/src/gitlab/dt/machine/lattice/elettra2/" + lattname
 
 
diff --git a/list_ele_elettra2.py b/list_ele_elettra2.py
index 4696af303671c4757c143f71b70c9967bf57c87c..8355f265203b0717ef5c042a25100c0b366bcae0 100755
--- a/list_ele_elettra2.py
+++ b/list_ele_elettra2.py
@@ -7,6 +7,7 @@ import os
 homedir=os.path.expanduser('~')
 #lattname = "srElettra2_9_4_beta.mat"
 lattname = "srElettra2_high_betax_long_straights_ring.m"
+#lattname = "srElettra2_9_4_beta_test_digital_twins.mat"
 latticefile = homedir + "/src/gitlab/dt/machine/lattice/elettra2/" + lattname
 ring=at.load_lattice(latticefile, energy=2.4e9)
 refpts = range(len(ring) + 1)
diff --git a/list_lattice.py b/list_lattice.py
index acaf083c4f140925810524280e8b3b671b7010c9..c1eefe7d6aa44c3998ca4c8a751329bcad0700ac 100755
--- a/list_lattice.py
+++ b/list_lattice.py
@@ -28,8 +28,8 @@ def lattlister(ring,geo,selector):
         #return i,ename,length,spos,iscorr,isskew
 
 homedir=os.path.expanduser('~')
-#lattname = "srElettra2_9_4_beta.mat"
-lattname = "srElettra2_high_betax_long_straights_ring.m"
+lattname = "srElettra2_9_4_beta.mat"
+#lattname = "srElettra2_high_betax_long_straights_ring.m"
 latticefile = homedir + "/src/gitlab/dt/machine/lattice/elettra2/" + lattname
 ring=at.load_lattice(latticefile, energy=2.4e9)
 """
@@ -38,7 +38,7 @@ magnet strenghts
 ring=at.load_lattice("../../machine/lattice/elettra2/srElettra2_low_beta.mat",energy=2.4e9)
 """
 #ring geometry
-geo,radius=ring.get_geometry((0,0,0),True)
+geo,radius=ring.get_geometry(centered=True)
 print('i','\t','ename','\t','length','\t','spos','\t','iscorr','\t','isskew','\t','x','\t','y','\t','angle')
 
 
diff --git a/shiftrotate.py b/shiftrotate.py
index 4bb655188f8a448641b389cc2250d5602b4192dd..fc8ac724d961d2e7416730f312464fff0330dec5 100755
--- a/shiftrotate.py
+++ b/shiftrotate.py
@@ -17,8 +17,8 @@ def get_elem_shift(elem):
 	dy1=elem.T1[2]
 	
 	#check coherency
-	if dx1+dx2 != 0.0 or dy1+dy2 !=0.0:
-		print(elem.FamName,"incoherent T1 and T2 vectors")
+	#if dx1+dx2 != 0.0 or dy1+dy2 !=0.0:
+	#	print(elem.FamName,"incoherent T1 and T2 vectors")
 	return dx2,dy2
 
 	
@@ -55,13 +55,20 @@ print("rotations")
 SD = at.Sextupole('SD', 1.0, 0.2) #create a Quadrupole
 at.shift_elem(SD,0,0)
 a,b=get_elem_shift(SD)
-#print("dx",a,"dy",b)
-tilt = math.asin(0.01)  # rotation around s-axis
-pitch = math.asin(0.02) # rotation around x-axis
+print("initial dx",a,"initial dy",b)
+tilt = math.asin(0.00)  # rotation around s-axis
+pitch = math.asin(0.00) # rotation around x-axis
 yaw = math.asin(0.03)   # rotation around y-axis
-at.rotate_elem(SD,tilt,pitch,yaw,relative=False)
+at.rotate_elem(SD,tilt,pitch,yaw,relative=True)
+
 a2,b2=get_elem_shift(SD)
-print("dx",a2,"dy",b2)
+print("rot only dx",a2,"dy",b2)
+
+
+
+at.shift_elem(SD,0.3,0.0,relative=True)
+a3,b3=get_elem_shift(SD)
+print("dx",a3,"dy",b3)