Something went wrong on our end
-
Bertram Kopf authored
added a global set for WigngerD ref keys; bug fix for decay tree check containing omega decay to three particles
bb9e7ab7
GlobalEnv.cc 4.95 KiB
//************************************************************************//
// //
// Copyright 2013 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/>. //
// //
//************************************************************************//
// GlobalEnv class definition file. -*- C++ -*-
// Copyright 2013 Julian Pychy
#include "PwaUtils/GlobalEnv.hh"
#include "ConfigParser/ParserBase.hh"
#include "PwaUtils/AbsLh.hh"
#include "Particle/PdtParser.hh"
#include "ErrLogger/ErrLogger.hh"
#include "FitParams/AbsPawianParameters.hh"
#include "FitParams/ParamFactory.hh"
GlobalEnv* GlobalEnv::_instance=0;
GlobalEnv* GlobalEnv::instance(){
if(0==_instance) _instance = new GlobalEnv();
return _instance;
}
GlobalEnv::GlobalEnv() :
_alreadySetUp(false) ,
_channelEnvsAlredySetup(false),
_theParser(0)
{
}
const std::shared_ptr<AbsChannelEnv> GlobalEnv::Channel(int id) const
{
return _channelEnvs.at(id).first;
}
const std::shared_ptr<AbsChannelEnv> GlobalEnv::PbarpChannel(int id) const
{
if(_channelEnvs.at(id).second != AbsChannelEnv::CHANNEL_PBARP){
Alert << "Faultily accessing non-pbarp channel environment." << endmsg;
}
return _channelEnvs.at(id).first;
}
const std::shared_ptr<AbsChannelEnv> GlobalEnv::EpemChannel(int id) const
{
if(_channelEnvs.at(id).second != AbsChannelEnv::CHANNEL_EPEM){
Alert << "Faultily accessing non-epem channel environment." << endmsg;
}
return _channelEnvs.at(id).first;
}
const std::shared_ptr<AbsChannelEnv> GlobalEnv::GammapChannel(int id) const
{
if(_channelEnvs.at(id).second != AbsChannelEnv::CHANNEL_GAMMAP){
Alert << "Faultily accessing non-epem channel environment." << endmsg;
}
return _channelEnvs.at(id).first;
}
const std::shared_ptr<AbsChannelEnv> GlobalEnv::ResChannel(int id) const
{
if(_channelEnvs.at(id).second != AbsChannelEnv::CHANNEL_RES){
Alert << "Faultily accessing non-res channel environment." << endmsg;
}
return _channelEnvs.at(id).first;
}
void GlobalEnv::AddEnv(std::shared_ptr<AbsChannelEnv> newEnv, short envType){
_channelEnvs.push_back(std::pair<std::shared_ptr<AbsChannelEnv>, short>(newEnv, envType));
}
void GlobalEnv::setupChannelEnvs(){
if(_channelEnvsAlredySetup){
Alert << "channel environments already setup!!!" << endmsg;
exit(1);
}
int id=0;
for(auto it = _channelEnvs.begin(); it!=_channelEnvs.end();++it){
(*it).first->setup(id);
if (!(*it).first->checkReactionChain()){
Alert << "Something wrong with the reaction chain for channelTypeName: " << (*it).first->channelTypeName() << endmsg;
exit(1);
}
(*it).first->setWignerDRefs();
++id;
}
_channelEnvsAlredySetup=true;
}
std::shared_ptr<AbsPawianParameters> GlobalEnv::defaultPawianParams(){
std::shared_ptr<AbsPawianParameters> result=ParamFactory::instance()->getParametersPointer("Pawian");
for(auto it = _channelEnvs.begin(); it!=_channelEnvs.end();++it){
(*it).first->Lh()->fillDefaultParams(result);
}
return result;
}
void GlobalEnv::setStartPawianParams(std::shared_ptr<AbsPawianParameters> startParams){
std::shared_ptr<AbsPawianParameters> defaultParams=GlobalEnv::instance()->defaultPawianParams();
_startParams=defaultParams->paramsWithSameOrder(startParams);
}
void GlobalEnv::setup(ParserBase* theParser){
if(_alreadySetUp){
Alert << "GlobalEnv already set up!" << endmsg;
exit(1);
}
_alreadySetUp = true;
_theParser = theParser;
_outputFileNameSuffix = theParser->outputFileNameSuffix();
_serializationFileName = theParser->serializationFile();
// pdtTable
PdtParser pdtParser;
std::string theSourcePath=getenv("TOP_DIR");
std::string pdtFileRelPath=theParser->pdgTableFile();
std::string pdtFile(theSourcePath+pdtFileRelPath);
_particleTable = new ParticleTable;
if (!pdtParser.parse(pdtFile, *_particleTable)) {
Alert << "can not parse particle table " << pdtFile << endmsg;
exit(1);
}
}
void GlobalEnv::replaceParser(ParserBase* theParser){
_alreadySetUp = false;
Info << "Now replace the parser!!!" << endmsg;
setup(theParser);
}