57 const string& reactionName) :
58 m_reactionName(reactionName),
59 m_renormalizeTerms( false ),
87 const string& scale ){
90 m_termNames.push_back( name );
93 m_termIndex[name] = m_termNames.size() - 1;
95 m_prodFactorVec.push_back(
static_cast< complex< double >*
>( 0 ) );
100 return m_termIndex[name];
104 const vector< string >&
119 map< string, int >::const_iterator mapItr = m_termIndex.find( termName );
120 assert( mapItr != m_termIndex.end() );
122 return mapItr->second;
128 map< string, const complex< double >* >::const_iterator prodItr = m_prodFactor.find( name );
129 return (prodItr != m_prodFactor.end()) ?
true :
false;
136 if( m_prodFactor.find( name ) == m_prodFactor.end() ){
138 cout <<
"ERROR: cannot provide production amplitude for " << name << endl;
148 return *m_prodFactorVec.at( ampIndex ) *
149 static_cast< double >( m_termScaleVec.at( ampIndex ) );
155 complex< double > value;
157 for(
int i = 0; i < m_prodFactorVec.size(); ++i ){
159 value = *m_prodFactorVec[i] *
160 static_cast< double >( m_termScaleVec[i] );
162 array[2*i] = real( value );
163 array[2*i+1] = imag( value );
169 complex< double > prodFactor )
171 m_defaultProdFactor[name] = prodFactor;
172 m_prodFactor[name] = &(m_defaultProdFactor[name]);
173 m_prodFactorVec[m_termIndex[name]] = &(m_defaultProdFactor[name]);
178 const complex< double >* prodAmpPtr )
180 map< string, const complex< double >* >::iterator prodItr = m_prodFactor.find( name );
182 if( prodItr == m_prodFactor.end() ){
184 cout <<
"ERROR: amplitude " << name <<
" has no factors!" << endl;
188 m_prodFactor[name] = prodAmpPtr;
189 m_prodFactorVec[m_termIndex[name]] = prodAmpPtr;
195 for( map<
string, complex< double > >::iterator
196 prodItr = m_defaultProdFactor.begin();
197 prodItr != m_defaultProdFactor.end(); ++prodItr ){
199 m_prodFactor[prodItr->first] = &(m_defaultProdFactor[prodItr->first]);
200 m_prodFactorVec[m_termIndex[prodItr->first]] = &(m_defaultProdFactor[prodItr->first]);
206 const double* ampParPtr ){
208 if( m_termScaleVec[m_termIndex[name]].name() == parName ){
210 m_termScaleVec[m_termIndex[name]].setExternalValue( ampParPtr );
218 if( m_termScaleVec[m_termIndex[name]].name() == parName ){
220 m_termScaleVec[m_termIndex[name]].setValue( val );
void setExternalProductionFactor(const string &Name, const complex< double > *prodAmpPtr)
void allocateTerms(const IntensityManager &intenMan, bool bAllocIntensity=false)
void prodFactorArray(double *array) const
double calcIntensity(const Kinematics *kinematics) const
virtual void setParValue(const string &termName, const string &parName, double ampParValue)
bool hasTerm(const string &termName) const
IntensityManager(const vector< string > &reaction, const string &reactionName)
virtual double calcIntensities(AmpVecs &Vecs) const =0
int termIndex(const string &termName) const
virtual void setParPtr(const string &termName, const string &parName, const double *ampParPtr)
const vector< string > & getTermNames() const
void setDefaultProductionFactor(const string &termName, complex< double > prodAmp)
const AmpParameter & getScale(const string &name) const
int addTerm(const string &termName, const string &scale="1.0")
void resetProductionFactors()
complex< double > productionFactor(const string &termName) const
void loadEvent(const Kinematics *pKinematics, unsigned long long iEvent=0, unsigned long long iNTrueEvents=1, bool bForceNegativeWeight=false)