I'm struggling to get a program running where I have a circuit with a measurement and reset mid-execution and I want to use noise mitigation and state tomography together.

The circuit is defined

qreg_q = QuantumRegister(2, "q")
creg_c = ClassicalRegister(1, "c")

qc = QuantumCircuit(qreg_q, creg_c)

qc.u(1, 1, 1, qreg_q[0])

qc.cu(1, 0, 0, 0, qreg_q[0], qreg_q[1])
qc.cx(qreg_q[1], qreg_q[0])
qc.measure(qreg_q[1], creg_c[0])

N.B I don't need the measurement result here.

I then create my tomography circuits from this

from qiskit.ignis.verification.tomography import state_tomography_circuits, StateTomographyFitter
qpt_circs = state_tomography_circuits(qc, qreg_q[0])

and the calibration circuits

import qiskit.ignis.mitigation.measurement as mc

cal_qr = QuantumRegister(2)
cal_cr = ClassicalRegister(2)

meas_calibs, state_labels = mc.complete_meas_cal(qublit_list=[0])

Using a simulator with a noise-model

backend = provider.get_backend('ibmqx2')
sim = AerSimulator.from_backend(backend)

I run the calibration circuit

job_cal = sim.run(meas_calibs, shots=8192)

meas_fitter = mc.CompleteMeasFitter(job_cal.result(), state_labels)

I then run the tomography circuits

qpt_circs_compiled = transpile(qpt_circs, sim)
job_tomo = sim.run(qpt_circs_compiled, shots=8192)

result = job_tomo.result()

tomo_state = StateTomographyFitter(result, qpt_circs)

I'm able to obtain a state from the result with tomography

state = tomo_state.fit()

However the noise mitigation fails

meas_filter = meas_fitter.filter
mitigated_results = meas_filter.apply(result)

with QiskitError: "Unexpected state label '0 0', verify the fitter's state labels correspond to the input data".

It seems to me that the tomography circuits add a second classical register that the noise mitigation circuits isn't configured to process properly. How can I get around this so I can mitigate the noise in my density matrix output?

New contributor
NegativeOne is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct.

Your Answer

NegativeOne is a new contributor. Be nice, and check out our Code of Conduct.

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.