Python forScientistsDewesQuantronics Group Seminar
Python: Qu'est-ce que c'est?Multi-paradigm(objectoriented, functional…)print“Easy as…“fori in [1,2,3]:printictypes,sockets,files,regex,…Matplotlib,SciPy,NumPy,PyQT,…
Whytouseit: A Scientific Workflow
Software makeslifeeasier…
Using Python…
Data Acquisition  http://pyvisa.sourceforge.net                                  http://docs.python.org/library/ctypes.html
PyVisaExample: MWG & VNAfromvisaimport*#Open a connectionto an Anritsu MWGanritsu = instrument(“GPIB0::12“)#Askfortheoutputfrequencyprint anritsu.ask(“OF1“)#Set theoutput poweranritsu.write(“L15DM“)#Turn on themicrowaveanritsu.write(“RF0“)vna = instrument(„GPIB0::15“)x = vna.ask_for_values(“fma;ofv;“)y = vna.ask_for_values(“fma;ofd;“)VNA FrontpanelKeypointsClear, object-orientedinterface
Directly process & analyze measured data
Fast, flexible programming
Not toomuchworryingabouttechnicaldetails…
VNA exampleusesPyQtfortheuserinterfacectypesExample: Taming an AcqiriscardObjective: Loadtheexternal DLL, transfersomemeasurementdataandprocessit on thefly.frompylabimport*;fromctypesimport*vi_session= c_uint32()temperature= c_int32() time_us= c_int32()timestamp= c_int32()nsegments_returned= c_int32()npoints_returned= c_int32()acqiris=windll.LoadLibrary(r‘C:\projects\python\pylab\instruments\dllAcqiris.dll‘)acqiris.FindDevicesV1(byref(vi_session),byref(temperature))#Configuration...acqiris.AcquireV1(vi_session,1,byref(time_us))waveforms = zeros((4,250 *100))acqiris.DMATransferV1(vi_session,15,100,250,0,1,4e-9,                byref(timestamp),waveforms[0,:].ctypes.data,waveforms[1,:].ctypes.data,waveforms[2,:].ctypes.data,waveforms[3,:].ctypes.data,byref(time_us),byref(nsegments_returned),byref(npoints_returned))#Waveformdatanowisstored in „waveforms“ arrayandcanbeprocessed, e.g. apply FFT & plot:plot(range(len(waveforms[0,:])),fft(waveforms[0,:]))
Data Analysis  http://www.scipy.org                                                 http://numpy.scipy.org
SciPy & NumPyExampleimportscipy.optimize#Define the model to befittedfitfunc= lambda p, x: p[0]+p[1]*exp(-x*abs(p[2]))*cos(p[3]+p[4]*x)#Define the errorfunctionerrfunc = lambda p, x, y: fitfunc(p, x)– y#Make a fit by minimizing the errorfunctionp1 = scipy.optimize.fmin(lambdap,x,y: norm(errfunc(p,x,y)), p0, args=(data [:,0], data[:,1]))#Print the returnedparametersprint p1#Plot the data and the fit…plot(data[:,0], data[:,1], "ro", data[:,0], fitfunc(p1, data[:,0]), "b-")#Add a legendlegend(("data","fit"))#Add a titletitle("Ramsey - $V_{fluxline}= %d mV$, 	$T_2 = %d$ ns, $A = %f$ " % (int(voltage) 	, abs(int(1.0/p1[2])),p1[1]))
Presentation & Visualizationhttp://matplotlib.sourceforge.net/                            http://qt.nokia.com/
MatplotlibExamplesgrid()#Add gridlinestotheplot#Plot 4 datasetsplot(x1,y1,x2,y2,x3,y3,x4,y4)#Add a legendlegend((“Amplification…“,“…“))#Set theaxislabelsxlabel(“frequency[GHz]“)ylabel(“attenuation[dB]“)#Save thefigureas a PDFsavefig(“attenuation.pdf“)jet() #Select a colorsheme#Plot the matriximshow(dataMatrix,aspect = 'auto',origin = 'lower',extent = (xmin,xmax,ymin,ymax))xlabel("$A$ [V]")ylabel("$f$ [GHz]")#Use Latex for text…title("Qubit 1 – Modulated by $V_{flux2} = A \cdot \sin{(20 MHz \cdot 2\pi t)}$")
Somemoreexamples…
PyQTExample: Instrument frontpanelstitle = QLabel(„Qubit 1")splitter = QSplitter(Qt.Horizontal)SetButton= QPushButton("Set")splitter.addWidget(SetButton)#...grid = QGridLayout(self)grid.addWidget(title,0,0)grid.addWidget(QLabel("Voltage"),1,0)#...self.connect(SetButton,SIGNAL("clicked()"),self.changeVoltage)self.setLayout(grid)Or useQt Designer:

Python for Scientists

  • 1.
  • 2.
    Python: Qu'est-ce quec'est?Multi-paradigm(objectoriented, functional…)print“Easy as…“fori in [1,2,3]:printictypes,sockets,files,regex,…Matplotlib,SciPy,NumPy,PyQT,…
  • 3.
  • 4.
  • 5.
  • 6.
    Data Acquisition http://pyvisa.sourceforge.net http://docs.python.org/library/ctypes.html
  • 7.
    PyVisaExample: MWG &VNAfromvisaimport*#Open a connectionto an Anritsu MWGanritsu = instrument(“GPIB0::12“)#Askfortheoutputfrequencyprint anritsu.ask(“OF1“)#Set theoutput poweranritsu.write(“L15DM“)#Turn on themicrowaveanritsu.write(“RF0“)vna = instrument(„GPIB0::15“)x = vna.ask_for_values(“fma;ofv;“)y = vna.ask_for_values(“fma;ofd;“)VNA FrontpanelKeypointsClear, object-orientedinterface
  • 8.
    Directly process &analyze measured data
  • 9.
  • 10.
  • 11.
    VNA exampleusesPyQtfortheuserinterfacectypesExample: Tamingan AcqiriscardObjective: Loadtheexternal DLL, transfersomemeasurementdataandprocessit on thefly.frompylabimport*;fromctypesimport*vi_session= c_uint32()temperature= c_int32() time_us= c_int32()timestamp= c_int32()nsegments_returned= c_int32()npoints_returned= c_int32()acqiris=windll.LoadLibrary(r‘C:\projects\python\pylab\instruments\dllAcqiris.dll‘)acqiris.FindDevicesV1(byref(vi_session),byref(temperature))#Configuration...acqiris.AcquireV1(vi_session,1,byref(time_us))waveforms = zeros((4,250 *100))acqiris.DMATransferV1(vi_session,15,100,250,0,1,4e-9, byref(timestamp),waveforms[0,:].ctypes.data,waveforms[1,:].ctypes.data,waveforms[2,:].ctypes.data,waveforms[3,:].ctypes.data,byref(time_us),byref(nsegments_returned),byref(npoints_returned))#Waveformdatanowisstored in „waveforms“ arrayandcanbeprocessed, e.g. apply FFT & plot:plot(range(len(waveforms[0,:])),fft(waveforms[0,:]))
  • 12.
    Data Analysis http://www.scipy.org http://numpy.scipy.org
  • 13.
    SciPy & NumPyExampleimportscipy.optimize#Definethe model to befittedfitfunc= lambda p, x: p[0]+p[1]*exp(-x*abs(p[2]))*cos(p[3]+p[4]*x)#Define the errorfunctionerrfunc = lambda p, x, y: fitfunc(p, x)– y#Make a fit by minimizing the errorfunctionp1 = scipy.optimize.fmin(lambdap,x,y: norm(errfunc(p,x,y)), p0, args=(data [:,0], data[:,1]))#Print the returnedparametersprint p1#Plot the data and the fit…plot(data[:,0], data[:,1], "ro", data[:,0], fitfunc(p1, data[:,0]), "b-")#Add a legendlegend(("data","fit"))#Add a titletitle("Ramsey - $V_{fluxline}= %d mV$, $T_2 = %d$ ns, $A = %f$ " % (int(voltage) , abs(int(1.0/p1[2])),p1[1]))
  • 14.
  • 15.
    MatplotlibExamplesgrid()#Add gridlinestotheplot#Plot 4datasetsplot(x1,y1,x2,y2,x3,y3,x4,y4)#Add a legendlegend((“Amplification…“,“…“))#Set theaxislabelsxlabel(“frequency[GHz]“)ylabel(“attenuation[dB]“)#Save thefigureas a PDFsavefig(“attenuation.pdf“)jet() #Select a colorsheme#Plot the matriximshow(dataMatrix,aspect = 'auto',origin = 'lower',extent = (xmin,xmax,ymin,ymax))xlabel("$A$ [V]")ylabel("$f$ [GHz]")#Use Latex for text…title("Qubit 1 – Modulated by $V_{flux2} = A \cdot \sin{(20 MHz \cdot 2\pi t)}$")
  • 16.
  • 17.
    PyQTExample: Instrument frontpanelstitle= QLabel(„Qubit 1")splitter = QSplitter(Qt.Horizontal)SetButton= QPushButton("Set")splitter.addWidget(SetButton)#...grid = QGridLayout(self)grid.addWidget(title,0,0)grid.addWidget(QLabel("Voltage"),1,0)#...self.connect(SetButton,SIGNAL("clicked()"),self.changeVoltage)self.setLayout(grid)Or useQt Designer:
  • 18.
    HowToGetStarted1. Download it…2.Check out thedocumentation & tutorial (online)3. Go &contributetotheWiki4. Askyourcolleagues… http://www.python.org http://docs.python.org/tutorial/ http://wiki-quantro.extra.cea.fr
  • 19.
  • 20.