#include "GenerateTable.h" #include "MassLookup.h" #include #include #include #include #include "catima/gwm_integrators.h" namespace PunchTable { void GenerateTable(const TableParameters& params) { static double s_deg2rad = M_PI/180.0; //deg -> radians static double s_energyPrecision = 0.001; // keV precision static double s_ug2g = 1.0e-6; //ug -> g MassLookup& masses = MassLookup::GetInstance(); catima::Projectile projectile(masses.FindMassU(params.projectileZ, params.projectileA), params.projectileZ, 0.0, 0.0); std::vector materials; if(params.targetZ.size() != params.targetA.size() || params.targetZ.size() != params.targetS.size() || params.targetZ.size() != params.targetThickness.size()) { std::cerr<<"ERR -- Invalid target parameters passed to GenerateTable. Mismatching target arrays."< energyInData; std::vector energyDepositedData; double theta, ke; double edep; double totalDep; bool stopped; size_t totalBins = thetaBins*energyBins; double flush_percent=0.01; size_t count=0, flush_val = flush_percent*totalBins, flush_count=0; for(size_t i=0; i < thetaBins; i++) { theta = (params.minTheta + i*params.stepTheta)*s_deg2rad; energyInData.clear(); energyDepositedData.clear(); for(size_t j=0; j s_energyPrecision) { energyInData.push_back(ke); energyDepositedData.push_back(edep); } } output<<"begin_theta "< g MassLookup& masses = MassLookup::GetInstance(); catima::Projectile projectile(masses.FindMassU(params.projectileZ, params.projectileA), params.projectileZ, 0.0, 0.0); std::vector materials; if(params.targetZ.size() != params.targetA.size() || params.targetZ.size() != params.targetS.size() || params.targetZ.size() != params.targetThickness.size()) { std::cerr<<"ERR -- Invalid target parameters passed to GenerateTable. Mismatching target arrays."<