#include "elementRfgun.h" #include "mathematicalTools.h" #include "mixedTools.h" elementRfgun::elementRfgun() : abstractElement() { setDefaultValues(); setDefaults(); elementName_ = nomdElements("rfgun"); nbParam_ = elementName_.getElementNbParameters(); parametersString_ = new string[nbParam_+1]; parmelaOk_ = true; } void elementRfgun::setDefaultValues() { defaultPhaseStep_ = 1.0; defaultNmacrop_ = 0; defaultSigma_t_ = 0.0; defaultSigma_r_ = 0.0; defaultE_cin_ = 0.0; defaultSigma_E_ = 0.0; defaultNb_true_particles_ = 1.0; } void elementRfgun::setDefaults() { phaseStep_ = defaultPhaseStep_; nmacrop_ = defaultNmacrop_; sigma_t_ = defaultSigma_t_; sigma_r_ = defaultSigma_r_ ; E_cin_ = defaultE_cin_; sigma_E_ = defaultSigma_E_; nb_true_particles_ = defaultNb_true_particles_ ; } string* elementRfgun::getParametersString() const { parametersString_[0] = mixedTools::intToString(nbParam_); parametersString_[1] = mixedTools::intToString(nmacrop_); parametersString_[2] = mixedTools::doubleToString(sigma_t_); parametersString_[3] = mixedTools::doubleToString(sigma_r_); parametersString_[4] = mixedTools::doubleToString(E_cin_); parametersString_[5] = mixedTools::doubleToString(sigma_E_); parametersString_[6] = mixedTools::doubleToString(nb_true_particles_); return parametersString_; } void elementRfgun::setParametersString(string* param) { if ( param == NULL ) { cerr << " elementRfgun::setParametersString parameters empty parameter set"; return; } int nbparam = atoi(param[0].c_str()); if ( nbparam != nbParam_ ) { cerr << " elementRfgun::setParametersString parameters do not match for a DRIFT"; return; } nmacrop_ = atoi(param[1].c_str()); sigma_t_ = atof(param[2].c_str()); sigma_r_ = atof(param[3].c_str()); E_cin_ = atof(param[4].c_str()); sigma_E_ = atof(param[5].c_str()); nb_true_particles_ = atof(param[6].c_str()); } string elementRfgun::parmelaOutputFlow() const { ostringstream sortie; // on prend les troncatures tmax et rmax à 3 sigmas sortie << "INPUT 10 /np=" << nmacrop_ << " /sigt=" << sigma_t_ << endl; sortie << " /tmax=" << 3.3*sigma_t_ << " /sigr=" << sigma_r_ << endl; sortie << " /rmax=" << 3.0*sigma_r_ << " /W0=" << E_cin_ << " /dw0=" << sigma_E_ << endl; sortie << " /dwt=" << phaseStep_ << " /ran=2" << endl; sortie << "SCHEFF /beami=" << -nb_true_particles_ << " /nprog=2 /point=-1.7"; return sortie.str(); } string elementRfgun::FileOutputFlow() const { ostringstream sortie; // on prend les troncatures tmax et rmax à 3 sigmas // sortie << elementName_.getElementType() << endl; sortie << elementName_.getElementLabel() << endl; sortie << label_ << endl; sortie << nmacrop_ << " " << sigma_t_ << " " << sigma_r_ << endl; sortie << E_cin_ << " " << sigma_E_ << endl; sortie << phaseStep_ << " " << nb_true_particles_ << endl; return sortie.str(); } void elementRfgun::FileInput(ifstream& ifs) { ifs >> label_; ifs >> nmacrop_ >> sigma_t_ >> sigma_r_; ifs >> E_cin_ >> sigma_E_; ifs >> phaseStep_ >> nb_true_particles_; }