32 std::cout <<
"Successfully created LightSource" << std::endl;
37 std::cout <<
"Failed creating LightSource." << std::endl;
48 result.
z0 = sqrt(-2.0 * log(u1)) * cos(
TWO_PI * u2) * sigma + mu;
49 result.
z1 = sqrt(-2.0 * log(u1)) * sin(
TWO_PI * u2) * sigma + mu;
63 std::cerr <<
"No \"" <<
XML_TAG_X_ANGLE <<
"\" field in xml. Setting to default (0, 0, UNIFORM)." << std::endl;
78 std::cerr <<
"No \"" <<
XML_TAG_Y_ANGLE <<
"\" field in xml. Setting to default (0, 0, UNIFORM)." << std::endl;
93 std::cout <<
"Parsing " << angle << std::endl;
94 TiXmlElement* angleElement = direction->FirstChildElement(angle);
97 TiXmlElement* angleMin = angleElement->FirstChildElement(
XML_TAG_MINIMUM);
100 std::string angleMinText = angleMin->GetText();
101 minimum = std::stod(angleMinText);
103 std::cout <<
"Setting min=" << minimum << std::endl;
108 std::cerr <<
"No \"" <<
XML_TAG_MINIMUM <<
"\" tag in xml. Setting min=0" << std::endl;
112 TiXmlElement* angleMax = angleElement->FirstChildElement(
XML_TAG_MAXIMUM);
115 std::string angleMaxText = angleMax->GetText();
116 maximum = std::stod(angleMaxText);
118 std::cout <<
"Setting max=" << maximum << std::endl;
123 std::cerr <<
"No \"" <<
XML_TAG_MAXIMUM <<
"\" tag in xml. Setting max=0" << std::endl;
127 TiXmlElement* angleMode = angleElement->FirstChildElement(
XML_TAG_MODE);
130 std::string angleModeText = angleMode->GetText();
131 if (strcmp(
"UNIFORM", angleModeText.c_str()) == 0)
133 mode = DistributionMode::UNIFORM;
135 std::cout <<
"Setting mode=UNIFORM" << std::endl;
137 else if (strcmp(
"GAUSSIAN", angleModeText.c_str()) == 0)
139 mode = DistributionMode::GAUSSIAN;
141 std::cout <<
"Setting mode=GAUSSIAN" << std::endl;
147 std::cerr <<
"No \"" <<
XML_TAG_MODE <<
"\" tag in xml. Setting mode=UNIFORM" << std::endl;
148 mode = DistributionMode::UNIFORM;
154 std::cerr <<
"No \"" << angle <<
"\" field in xml. Setting to default (0, 0, UNIFORM)." << std::endl;
158 mode = DistributionMode::UNIFORM;
177 TiXmlElement* energy = element->FirstChildElement(
XML_TAG_ENERGY);
180 std::string energyText = energy->GetText();
183 std::cout <<
"Setting energy=" <<
m_Energy;
188 std::cerr <<
"No \"" <<
XML_TAG_ENERGY <<
"\" field in xml. Setting Energy=1" << std::endl;
195 TiXmlElement* spawnArea = element->FirstChildElement(
"PhotonSpawnArea");
201 std::string spawnTypeText = spawnType->GetText();
222 std::cerr <<
"The provided SpawnType (" << spawnTypeText <<
") did not match any available spawn type. Light source is not valid." << std::endl;
228 std::cerr <<
"The \"" <<
XML_TAG_SPAWN_TYPE <<
"\" element was not provided for this light source. Light source is not valid." << std::endl;
232 TiXmlElement* xLocation = spawnArea->FirstChildElement(
XML_TAG_X);
235 std::string xLocationText = xLocation->GetText();
243 std::cerr <<
"No \"" <<
XML_TAG_X <<
"\" field in xml. Setting " <<
XML_TAG_X <<
"=0" << std::endl;
247 TiXmlElement* yLocation = spawnArea->FirstChildElement(
XML_TAG_Y);
250 std::string yLocationText = yLocation->GetText();
258 std::cerr <<
"No \"" <<
XML_TAG_Y <<
"\" field in xml. Setting " <<
XML_TAG_Y <<
"=0" << std::endl;
262 TiXmlElement* zLocation = spawnArea->FirstChildElement(
XML_TAG_Z);
265 std::string zLocationText = zLocation->GetText();
273 std::cerr <<
"No \"" <<
XML_TAG_Z <<
"\" field in xml. Setting " <<
XML_TAG_Z <<
"=0.1" << std::endl;
277 TiXmlElement* rLocation = spawnArea->FirstChildElement(
XML_TAG_R);
280 std::string rLocationText = rLocation->GetText();
288 std::cerr <<
"No \"" <<
XML_TAG_R <<
"\" field in xml. Setting " <<
XML_TAG_R <<
"=0" << std::endl;
295 std::string xLengthText = xLength->GetText();
310 std::string yLengthText = yLength->GetText();
325 std::string zLengthText = zLength->GetText();
342 double rnd4,
double rnd5,
double gau1,
double gau2)
360 double angle = rnd4 *
TWO_PI;
400 std::cout <<
"Created a new photon at (" << returnValue.
xPosition <<
"|" << returnValue.
yPosition <<
"|" <<
401 returnValue.
zPosition <<
") with angle (" << returnValue.
xAngle <<
"|" << returnValue.
yAngle <<
"|" <<
402 returnValue.
zAngle <<
")" << std::endl;
void ParseEnergy(TiXmlElement *element)
const std::string XML_TAG_SPAWN_TYPE
const std::string XML_TAG_MAXIMUM
const std::string XML_TAG_ENERGY
const std::string XML_TAG_R
TransformResult BoxMuellerTransform(double u1, double u2, double mu, double sigma)
void ParsePhotonDirection(TiXmlElement *element)
const std::string XML_TAG_SPAWN_TYPE_POINT
DistributionMode m_AngleXMode
const std::string XML_TAG_Y_LENGTH
void ParsePhotonSpawnArea(TiXmlElement *element)
double m_SpawnLocationZLength
const std::string XML_TAG_SPAWN_TYPE_CIRCLE
const std::string XML_TAG_X_LENGTH
double m_SpawnLocationRadius
const std::string XML_TAG_Z_LENGTH
void ParseAngle(TiXmlElement *direction, std::string angle)
const std::string XML_TAG_X
const std::string XML_TAG_PHOTON_DIRECTION
const std::string XML_TAG_MODE
const std::string XML_TAG_X_ANGLE
DistributionMode m_AngleYMode
const std::string XML_TAG_Y_ANGLE
const std::string XML_TAG_Z
const std::string XML_TAG_Y
double m_SpawnLocationXLength
double m_SpawnLocationYLength
PhotonInformation GetNextPhoton(double rnd1, double rnd2, double rnd3, double rnd4, double rnd5, double gau1, double gau2)
const std::string XML_TAG_SPAWN_TYPE_RECTANGLE
const std::string XML_TAG_MINIMUM