def getSiversRowP(x, p, f, mu=-1):
    result = []
    M2_proton = 0.932**2
    if (mu == -1):
        for j in range(rSet.numberOfReplicas):
            rSet.SetReplica(j)
            result.append(
                harpy.get_SiversTMDPDF_kT(x, p, 1)[f + 5] * M2_proton / p)
    else:
        for j in range(rSet.numberOfReplicas):
            rSet.SetReplica(j)
            result.append(
                harpy.get_SiversTMDPDF_kT(x, p, 1, mu=mu)[f + 5] * M2_proton /
                p)
    return result
def getSiversRowP(x, p, mu=-1):
    result = []
    M2_proton = 0.932**2
    for j in range(rSet.numberOfReplicas + 1):
        rSet.SetReplica(j)
        result.append(
            numpy.array(harpy.get_SiversTMDPDF_kT(x, p, 1)) * M2_proton / p)
    return numpy.array(result)
def getTomography(x, px, py, mu=-1., n=-1):
    M_proton = 0.932
    p = numpy.sqrt(px**2 + py**2)
    if (n < 0):
        SetUnTMD(numpy.random.randint(1, unSet.numberOfReplicas + 1))
        rSet.SetReplica(numpy.random.randint(1, rSet.numberOfReplicas + 1))
    else:
        SetUnTMD(n)
        rSet.SetReplica(n)
    tmd = numpy.array(harpy.get_uTMDPDF_kT(
        x, p, 1, mu=mu)) - px * M_proton / p * numpy.array(
            harpy.get_SiversTMDPDF_kT(x, p, 1, mu=mu))
    return tmd
#########################################################
## Evaluates pp which is the list of [kT,mean,low,up] for various values of x
#########################################################
pp = []
xValues = [0.001, 0.005, 0.01, 0.05, 0.1, 0.5]
f = 1
for xx in xValues:
    M2_proton = 0.932**2
    kk = []
    for j in range(21):
        kT = 0.05 * j
        if (j == 0):
            kT = 0.001
        p0 = ComputeParameters(getSiversRowP(xx, kT, f, mu=2.))
        rSet.SetReplica(0)
        tmd = harpy.get_SiversTMDPDF_kT(xx, kT, 1, mu=2.)
        kk.append([kT, M2_proton / kT * tmd[f + 5], p0[1], p0[2], p0[3]])
    pp.append(kk)

#%%
print("{", end="")
for j in range(len(pp)):
    kk = pp[j]
    print("{", end="")
    for i in range(len(kk)):
        #print("{","{:2.4f},{:12.9f},{:12.9f},{:12.9f},{:12.9f}".format(kk[i][0],kk[i][1],kk[i][2],kk[i][3],kk[i][4]),"}",end="")
        print("{",
              "{:2.4f},{:12.9f},{:12.9f},{:12.9f}".format(
                  kk[i][0], kk[i][2], kk[i][4], kk[i][5]),
              "}",
              end="")
rSet.SetReplica(num=0, part="TMDR")
harpy.setNPparameters_SiversTMDPDF(central)

for i in range(len(Qrange)):
    for j in range(len(Xrange)):
        for k in range(len(Rrange)):
            Qval = float(Qrange[i])
            xval = Xrange[j]
            rval = Rrange[k]

            if (xval == 1):
                TMDval = [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]
            else:
                TMDval = harpy.get_SiversTMDPDF_kT(xval,
                                                   rval * Qval,
                                                   1,
                                                   Qval,
                                                   Qval**2,
                                                   includeGluon=False)

            valuesList[-5][i][j][k] = '{:g}'.format(xval * TMDval[0])
            valuesList[-4][i][j][k] = '{:g}'.format(xval * TMDval[1])
            valuesList[-3][i][j][k] = '{:g}'.format(xval * TMDval[2])
            valuesList[-2][i][j][k] = '{:g}'.format(xval * TMDval[3])
            valuesList[-1][i][j][k] = '{:g}'.format(xval * TMDval[4])
            #valuesList[0][i][j][k]='{:g}'.format(xval*TMDval[5])
            valuesList[1][i][j][k] = '{:g}'.format(xval * TMDval[6])
            valuesList[2][i][j][k] = '{:g}'.format(xval * TMDval[7])
            valuesList[3][i][j][k] = '{:g}'.format(xval * TMDval[8])
            valuesList[4][i][j][k] = '{:g}'.format(xval * TMDval[9])
            valuesList[5][i][j][k] = '{:g}'.format(xval * TMDval[10])