I am trying to do quantum process tomography for one qubit and obtain the unitary for the gates that are applied on the qubit. I have studied the theory on process tomography from mike and ike and the box 8.5 describes a simple procedure for obtaining the chi matrix for our quantum operation.
Now I am a little confused how would I go from the said chi matrix to obtaining the unitary which directly depend upon $E_i$'s.
Note - I am not getting the same chi matrix when I compare my results to qiskit backends but I figured that was happening because of different basis states.
Furthermore I have implemented the above using Qiskit and I dont think I am getting the correct result.
def one_qubit_process_tomography(circuit, samples):
# I, rho_1
qc = QuantumCircuit(1,1)
qc = qc.compose(circuit)
rhod_1 = one_qubit_tomography(qc, samples)
# X, rho_4
qc = QuantumCircuit(1,1)
qc.x(0)
qc = qc.compose(circuit)
rhod_4 = one_qubit_tomography(qc, samples)
# H, rho_h, E(|+><+|)
qc = QuantumCircuit(1,1)
qc.h(0)
qc = qc.compose(circuit)
rhod_h = one_qubit_tomography(qc, samples)
# XH, rho_xh, E(|-><-|)
qc = QuantumCircuit(1,1)
qc.x(0)
qc.h(0)
qc = qc.compose(circuit)
rhod_xh = one_qubit_tomography(qc, samples)
# this is E(|0><1|)
rhod_2 = rhod_h - 1j*rhod_xh - (1-1j)*(rhod_1 + rhod_4)/2
# this is E(|1><0|)
rhod_3 = rhod_h + 1j*rhod_xh - (1+1j)*(rhod_1 + rhod_4)/2
# now we will find the chi matrix
lambdaa = 0.5*np.array([[1,0,0,1],[0,1,1,0],[0,1,-1,0],[1,0,0,-1]])
#print(rhod_1)
#print(rhod_2)
#print(rhod_3)
#print(rhod_4)
rho = np.zeros([4,4],dtype=np.complex_)
rho[0:2,0:2] = rhod_1
rho[0:2,2:4] = rhod_2
rho[2:4,0:2] = rhod_3
rho[2:4,2:4] = rhod_4
chi = np.matmul(np.matmul(lambdaa, rho), lambdaa)
#print(rho)
return chi