# SPAM errors

One of the celebrated features of RB is its independence of SPAM errors. In simple terms, it does not matter if your initial state and final measurement are not perfect, the protocol will provide the same average gate fidelity as in the ideal case.

Unfortunately, for non Clifford gate sets by default the protocol is not independent of SPAM errors. It actually matters if your initial state is the ideal or not. To address this issue, we found a relation that solves this at the cost of needing more survival probabilities and thus, more samples.

`ConvolutionHyper.longlongexperiment_xz`

— Method`longlongexperiment_xz(basefilename::String, interval::StepRange, error::Error)`

Computes a list of overlaps storing the result in files with common name `basefilename`

. Moreover, it outputs the theoretical eigenvalues (the values we want to estimate by fitting), *and* the theoretical AGF. *Note* this also uses a random state to verify the SPAM-free error formulas from the manuscript.

**Examples**

```
julia> error = Error(ConvolutionHyper.diagerror, ConvolutionHyper.overrotation, .9999, .99)
julia> longlongexperiment_xz("unique005_1to20_diag9999rot99_", 1:1:100,error)
```

`ConvolutionHyper.longlongexperiment_xz`

— Method`longlongexperiment_xz(basefilename::String, fidelity::Float64, interval::StepRange, error::Error)`

Computes a list of overlaps storing the result in files with common name `basefilename`

. Moreover, it outputs the theoretical eigenvalues (the values we want to estimate by fitting), *and* the theoretical AGF. *Note* it uses the state 0 depolarized by `fidelity`

.

**Examples**

```
julia> error = Error(ConvolutionHyper.diagerror, ConvolutionHyper.overrotation, .9999, .99)
julia> longlongexperiment_xz("unique005_1to20_diag9999rot99_", .99999, 1:1:100,error)
```