EvtGen 2.2.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
Loading...
Searching...
No Matches
EvtModel.cpp
Go to the documentation of this file.
1
2/***********************************************************************
3* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
4* *
5* This file is part of EvtGen. *
6* *
7* EvtGen is free software: you can redistribute it and/or modify *
8* it under the terms of the GNU General Public License as published by *
9* the Free Software Foundation, either version 3 of the License, or *
10* (at your option) any later version. *
11* *
12* EvtGen is distributed in the hope that it will be useful, *
13* but WITHOUT ANY WARRANTY; without even the implied warranty of *
14* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15* GNU General Public License for more details. *
16* *
17* You should have received a copy of the GNU General Public License *
18* along with EvtGen. If not, see <https://www.gnu.org/licenses/>. *
19***********************************************************************/
20
22
24#include "EvtGenBase/EvtPDL.hh"
30
31#include <assert.h>
32#include <ctype.h>
33#include <fstream>
34#include <iomanip>
35#include <iostream>
36#include <stdlib.h>
37#include <string>
38using std::fstream;
39
40thread_local EvtModel* EvtModel::m_instance = nullptr;
41
45
46EvtDecayBase* EvtModel::getFcn( std::string model_name )
47{
48 EvtDecayBase* model = nullptr;
49 if ( m_modelNameHash.find( model_name ) != m_modelNameHash.end() ) {
50 model = m_modelNameHash[model_name];
51 }
52
53 if ( !model ) {
54 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
55 << "Did not find the right model:" << model_name.c_str() << "\n";
56 return nullptr;
57 }
58
59 return model->clone();
60}
61
63{
64 std::string modelName = prototype->getName();
65
66 m_modelNameHash[modelName] = prototype;
67
68 std::string commandName = prototype->commandName();
69
70 if ( commandName != "" ) {
71 m_commandNameHash[commandName] = prototype;
72 }
73}
74
75int EvtModel::isModel( std::string model_name )
76{
77 if ( m_modelNameHash.find( model_name ) != m_modelNameHash.end() ) {
78 return 1;
79 }
80 return 0;
81}
82
83int EvtModel::isCommand( std::string cmd )
84{
85 if ( m_commandNameHash.find( cmd ) != m_commandNameHash.end() ) {
86 return 1;
87 }
88 return 0;
89}
90
91void EvtModel::storeCommand( std::string cmd, std::string cnfgstr )
92{
93 EvtDecayBase* model = nullptr;
94 if ( m_commandNameHash.find( cmd ) != m_commandNameHash.end() ) {
95 model = m_commandNameHash[cmd];
96 }
97
98 assert( model );
99
100 model->command( cnfgstr );
101}
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=nullptr)
Definition EvtReport.cpp:32
@ EVTGEN_ERROR
Definition EvtReport.hh:49
virtual std::string getName() const =0
virtual void command(std::string cmd)
virtual EvtDecayBase * clone() const =0
virtual std::string commandName()
std::map< std::string, EvtDecayBase * > m_modelNameHash
Definition EvtModel.hh:51
static EvtModel * m_instance
Definition EvtModel.hh:49
EvtDecayBase * getFcn(std::string model_name)
Definition EvtModel.cpp:46
void storeCommand(std::string cmd, std::string cnfgstr)
Definition EvtModel.cpp:91
void registerModel(EvtDecayBase *prototype)
Definition EvtModel.cpp:62
std::map< std::string, EvtDecayBase * > m_commandNameHash
Definition EvtModel.hh:52
int isModel(std::string name)
Definition EvtModel.cpp:75
int isCommand(std::string cmd)
Definition EvtModel.cpp:83