Something went wrong on our end
-
Bertram Kopf authoredfb57b944
ParamDepGFacToFixGFacsWidthMass.cc 8.01 KiB
//************************************************************************//
// //
// Copyright 2014 Bertram Kopf (bertram@ep1.rub.de) //
// Julian Pychy (julian@ep1.rub.de) //
// - Ruhr-Universität Bochum //
// //
// This file is part of Pawian. //
// //
// Pawian is free software: you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation, either version 3 of the License, or //
// (at your option) any later version. //
// //
// Pawian is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with Pawian. If not, see <http://www.gnu.org/licenses/>. //
// //
//************************************************************************//
// Copyright 2014 Julian Pychy
#include <iostream>
#include <sstream>
#include "FitParams/ParamDepGFacToFixGFacsWidthMass.hh"
#include "FitParams/AbsPawianParameters.hh"
#include "ConfigParser/KMatrixParser.hh"
#include "ErrLogger/ErrLogger.hh"
#include "qft++/relativistic-quantum-mechanics/Utils.hh"
ParamDepGFacToFixGFacsWidthMass::ParamDepGFacToFixGFacsWidthMass(std::istringstream& configLine, std::shared_ptr<AbsPawianParameters> params){
std::vector<std::string> targetParameterVec;
std::string pathToKMatrixConfig;
configLine >> pathToKMatrixConfig;
_kMatrixParser=std::shared_ptr<KMatrixParser>(new KMatrixParser(pathToKMatrixConfig));
_gFactorStartMap=_kMatrixParser->gFactorMap();
const std::vector<std::string> gFactorFixPoles= _kMatrixParser->gFactorFixPoles();
std::vector<std::string>::const_iterator it;
for(it=gFactorFixPoles.begin(); it!=gFactorFixPoles.end(); ++it){
Info << (*it) <<endmsg;
FixGFacsWidthMassData newData;
std::string poleMassName=(*it)+"Mass";
newData.poleMass=poleMassName;
targetParameterVec.push_back(*it);
_dataMap[*it]=newData;
}
const std::vector<std::string> gFactorFixReleaseGFactor = _kMatrixParser->gFactorFixReleaseGFactor();
for(it=gFactorFixReleaseGFactor.begin(); it!=gFactorFixReleaseGFactor.end(); ++it){
std::istringstream currentStream(*it);
std::string currentPoleName;
currentStream >> currentPoleName;
std::string currentReleasgFactorName;
currentStream >> currentReleasgFactorName;
_dataMap.at(currentPoleName).gFacReleaseName=currentReleasgFactorName;
}
const std::vector<std::string> gFactorFixKeepGRatio = _kMatrixParser->gFactorFixKeepGRatio();
for(it=gFactorFixKeepGRatio.begin(); it!=gFactorFixKeepGRatio.end(); ++it){
std::istringstream currentStream(*it);
std::string currentPoleName;
currentStream >> currentPoleName;
while (!currentStream.eof()) {
std::string currentToBeScaledgFactorName;
currentStream >> currentToBeScaledgFactorName;
_dataMap.at(currentPoleName).gFacScaleNames.push_back(currentToBeScaledgFactorName);
targetParameterVec.push_back(currentToBeScaledgFactorName);
}
}
const std::vector<std::string> gFactorFixMassPol = _kMatrixParser->gFactorFixMassPol();
for(it=gFactorFixMassPol.begin(); it!=gFactorFixMassPol.end(); ++it){
std::istringstream currentStream(*it);
std::string currentPoleName;
currentStream >> currentPoleName;
_dataMap.at(currentPoleName).massCorPol.resize(4);
std::string p0Str;
currentStream >> p0Str;
_dataMap.at(currentPoleName).massCorPol[0] = atof(p0Str.c_str());
std::string p1Str;
currentStream >> p1Str;
_dataMap.at(currentPoleName).massCorPol[1] = atof(p1Str.c_str());
std::string p2Str;
currentStream >> p2Str;
_dataMap.at(currentPoleName).massCorPol[2] = atof(p2Str.c_str());
std::string p3Str;
currentStream >> p3Str;
_dataMap.at(currentPoleName).massCorPol[3] = atof(p3Str.c_str());
}
const std::vector<std::string> gFactorFixWidthPol = _kMatrixParser->gFactorFixWidthPol();
for(it=gFactorFixWidthPol.begin(); it!=gFactorFixWidthPol.end(); ++it){
std::istringstream currentStream(*it);
std::string currentPoleName;
currentStream >> currentPoleName;
_dataMap.at(currentPoleName).widthCorPol.resize(4);
std::string p0Str;
currentStream >> p0Str;
_dataMap.at(currentPoleName).widthCorPol[0] = atof(p0Str.c_str());
std::string p1Str;
currentStream >> p1Str;
_dataMap.at(currentPoleName).widthCorPol[1] = atof(p1Str.c_str());
std::string p2Str;
currentStream >> p2Str;
_dataMap.at(currentPoleName).widthCorPol[2] = atof(p2Str.c_str());
std::string p3Str;
currentStream >> p3Str;
_dataMap.at(currentPoleName).widthCorPol[3] = atof(p3Str.c_str());
}
const std::vector<std::string> gFactorFixSeparateScale = _kMatrixParser->gFactorFixSeparateScale();
for(it=gFactorFixSeparateScale.begin(); it!=gFactorFixSeparateScale.end(); ++it){
std::istringstream currentStream(*it);
std::string currentPoleName;
currentStream >> currentPoleName;
std::string currentgFacNameToBeScaled;
currentStream >> currentgFacNameToBeScaled;
std::string scaleStr;
currentStream >> scaleStr;
_dataMap.at(currentPoleName).gFacSeparateScales[currentgFacNameToBeScaled] = atof(scaleStr.c_str());
targetParameterVec.push_back(currentgFacNameToBeScaled);
}
Fill(targetParameterVec, params);
Info << "*****ParamDepGFacToFixGFacsWidthMass*****" << endmsg;
std::map<std::string, FixGFacsWidthMassData>::iterator itMap;
for(itMap=_dataMap.begin(); itMap!=_dataMap.end(); ++itMap) itMap->second.print(std::cout);
}
ParamDepGFacToFixGFacsWidthMass::~ParamDepGFacToFixGFacsWidthMass(){
}
void ParamDepGFacToFixGFacsWidthMass::FillDerived(std::istringstream& configLine){
}
void ParamDepGFacToFixGFacsWidthMass::Apply(std::shared_ptr<AbsPawianParameters> params){
std::map<std::string, FixGFacsWidthMassData>::iterator itMap;
for(itMap=_dataMap.begin(); itMap!=_dataMap.end(); ++itMap){
std::string currentPoleMassName= itMap->second.poleMass;
double currengFacVal=params->Value(itMap->second.gFacReleaseName);
double newKpoleMass=itMap->second.massCorPol.at(0)
+itMap->second.massCorPol.at(1)*currengFacVal
+itMap->second.massCorPol.at(2)*currengFacVal*currengFacVal
+itMap->second.massCorPol.at(3)*currengFacVal*currengFacVal*currengFacVal;
params->SetValue(currentPoleMassName, newKpoleMass);
double newgFacorScaler=itMap->second.widthCorPol.at(0)
+itMap->second.widthCorPol.at(1)*currengFacVal
+itMap->second.widthCorPol.at(2)*currengFacVal*currengFacVal
+itMap->second.widthCorPol.at(3)*currengFacVal*currengFacVal*currengFacVal;
std::vector<std::string>::iterator itStr;
for(itStr=itMap->second.gFacScaleNames.begin(); itStr!=itMap->second.gFacScaleNames.end(); ++itStr){
// double newVal= params->Value(*itStr)*newgFacorScaler;
double newVal= _gFactorStartMap.at(*itStr)*newgFacorScaler;
params->SetValue((*itStr), newVal);
}
std::map<std::string, double>::iterator itStrD;
for (itStrD=itMap->second.gFacSeparateScales.begin(); itStrD!=itMap->second.gFacSeparateScales.end(); ++itStrD){
std::string currentgFacName=itStrD->first;
double newVal=currengFacVal*itStrD->second;
params->SetValue(currentgFacName, newVal);
}
}
}