#include "setup.h"

int Setup::getPixelPos()
{
    // get sipm pixel pos
    for (int i = 0; i < numZ; i++)
    {
        double zi = i * pitchZ - (numZ - 1) * pitchZ / 2.0;
        for (int j = 0; j < numX; j++)
        {
            double xj = j * pitchX - (numX - 1) * pitchX / 2.0;
            for (int k = 0; k < numY; k++)
            {
                double yk = k * pitchY - (numY - 1) * pitchY / 2.0;
                pixels.push_back(Vector3D(xj, yk, zi));
            }
        }
    }
    return 0;
}

int Setup::pixelateSphere() {
    xbs.resize(thetaBins, std::vector<Vector3D>(phiBins, Vector3D(0, 0, 0)));
    thetaBinCenters.resize(thetaBins, 0);
    phiBinCenters.resize(phiBins, 0);
    double phi = phiMin;
    double theta = thetaMin;
    for (int i = 0; i < thetaBins; i++)
    {
        thetaBinCenters[i] = theta;
        phi = phiMin;
        for (int j = 0; j < phiBins; j++)
        {
            if (i==0)
                phiBinCenters[j] = phi;

            xbs[i][j].X = R * std::cos(theta) * std::cos(phi);
            xbs[i][j].Y = R * std::cos(theta) * std::sin(phi);
            xbs[i][j].Z = R * std::sin(theta);
            phi += dphi;
        }
        theta += dtheta;
    }

    return 0;
}

int Setup::randSource(){
    // random  theta and phi
    // trueTheta = float(std::rand()) / RAND_MAX * (thetaMax - thetaMin) + thetaMin;
    // truePhi = float(std::rand()) / RAND_MAX * (phiMax - phiMin) + phiMin;
    trueTheta = float(std::rand()) / RAND_MAX * M_PI_2 - M_PI_4;
    truePhi = float(std::rand()) / RAND_MAX * M_PI - M_PI_2;
    trueSource = Vector3D(R*std::cos(trueTheta)*std::cos(truePhi),
                          R*std::cos(trueTheta)*std::sin(truePhi),
                          R*std::sin(trueTheta));
    return 0;
}