Repository: qiboteam/qibocal
Issue: Platform instantiated twice

Hi @andrea-pasquale ,
While debugging qblox driver I noticed the platform is being instantiated twice: 

the problem seems to be in auto/runcard.py lines 58 and 59
```python
    @cached_property
    def backend_obj(self) -> Backend:
        """Allocate backend."""
        set_backend(self.backend, self.platform)
        return construct_backend(self.backend, self.platform)
```
each of those lines result in the calling of the `create` method.
Below is a snapshot of the call stack for each of the calls:
![image](https://github.com/qiboteam/qibocal/assets/55031026/28a70c60-e188-4108-961c-a9b4706a8a8a)




Changed files:
src/qibocal/auto/runcard.py, src/qibocal/protocols/characterization/dispersive_shift.py

diff --git a/src/qibocal/auto/runcard.py b/src/qibocal/auto/runcard.py
index 22e7fe41..106a1754 100644
--- a/src/qibocal/auto/runcard.py
+++ b/src/qibocal/auto/runcard.py
@@ -4,7 +4,7 @@ from typing import Any, NewType, Optional, Union
 
 from pydantic import Field
 from pydantic.dataclasses import dataclass
-from qibo.backends import Backend, construct_backend, set_backend
+from qibo.backends import Backend, GlobalBackend
 from qibolab.platform import Platform
 from qibolab.qubits import QubitId
 
@@ -55,8 +55,8 @@ class Runcard:
     @cached_property
     def backend_obj(self) -> Backend:
         """Allocate backend."""
-        set_backend(self.backend, self.platform)
-        return construct_backend(self.backend, self.platform)
+        GlobalBackend.set_backend(self.backend, self.platform)
+        return GlobalBackend()
 
     @property
     def platform_obj(self) -> Platform:
diff --git a/src/qibocal/protocols/characterization/dispersive_shift.py b/src/qibocal/protocols/characterization/dispersive_shift.py
index c6284cfd..8f9ed633 100644
--- a/src/qibocal/protocols/characterization/dispersive_shift.py
+++ b/src/qibocal/protocols/characterization/dispersive_shift.py
@@ -13,6 +13,7 @@ from qibolab.sweeper import Parameter, Sweeper, SweeperType
 
 from qibocal.auto.operation import Data, Parameters, Qubits, Results, Routine
 from qibocal.protocols.characterization.utils import (
+    GHZ_TO_HZ,
     HZ_TO_GHZ,
     V_TO_UV,
     lorentzian,
@@ -204,7 +205,7 @@ def _fit(data: DispersiveShiftData) -> DispersiveShiftResults:
     best_freqs = {}
     best_iqs = {}
     for qubit in qubits:
-        frequencies = data[qubit, 0].freq
+        frequencies = data[qubit, 0].freq * HZ_TO_GHZ
 
         max_index = np.argmax(
             np.linalg.norm(iq_couples[0][qubit] - iq_couples[1][qubit], axis=-1)
@@ -299,7 +300,7 @@ def _plot(data: DispersiveShiftData, fit: DispersiveShiftResults, qubit):
 
     fig.add_trace(
         go.Scatter(
-            x=[fit.best_freq[qubit] * HZ_TO_GHZ, fit.best_freq[qubit] * HZ_TO_GHZ],
+            x=[fit.best_freq[qubit], fit.best_freq[qubit]],
             y=[
                 np.min(np.concatenate((data_0.msr, data_1.msr))),
                 np.max(np.concatenate((data_0.msr, data_1.msr))),
@@ -313,23 +314,23 @@ def _plot(data: DispersiveShiftData, fit: DispersiveShiftResults, qubit):
     )
 
     fig.add_vline(
-        x=fit.best_freq[qubit] * HZ_TO_GHZ,
+        x=fit.best_freq[qubit],
         line=dict(color="orange", width=3, dash="dash"),
         row=1,
         col=1,
     )
 
     fitting_report = fitting_report + (
-        f"{qubit} | State zero freq : {fit_data_0.frequency[qubit]:,.0f} Hz.<br>"
+        f"{qubit} | State zero freq : {fit_data_0.frequency[qubit]*GHZ_TO_HZ:,.0f} Hz.<br>"
     )
     fitting_report = fitting_report + (
-        f"{qubit} | State one freq : {fit_data_1.frequency[qubit]:,.0f} Hz.<br>"
+        f"{qubit} | State one freq : {fit_data_1.frequency[qubit]*GHZ_TO_HZ:,.0f} Hz.<br>"
     )
     fitting_report = fitting_report + (
-        f"{qubit} | Frequency shift : {(fit_data_1.frequency[qubit] - fit_data_0.frequency[qubit]):,.0f} Hz.<br>"
+        f"{qubit} | Chi : {(fit_data_0.frequency[qubit]*GHZ_TO_HZ - fit_data_1.frequency[qubit]*GHZ_TO_HZ)/2:,.0f} Hz.<br>"
     )
     fitting_report = fitting_report + (
-        f"{qubit} | Best frequency : {fit.best_freq[qubit]:,.0f} Hz.<br>"
+        f"{qubit} | Best frequency : {fit.best_freq[qubit]*GHZ_TO_HZ:,.0f} Hz.<br>"
     )
     fig.update_layout(
         showlegend=True,