53 cerr <<
"Instance of MinuitMinimizationManager exists on worker node" 62 const vector<IntensityManager*>& intenManagers ) :
69 cerr <<
"Instance of MinuitMinimizationManager exists on worker node" 85 cerr <<
"Master ParameterManager has no MinuitMinimizationManager" 91 m_intenManagers.push_back( intenManager );
97 m_intenManagers( intenManagers )
103 cerr <<
"Master ParameterManager has no MinuitMinimizationManager" 118 for( map<
string, complex< double >* >::iterator mapItr = m_prodParMap.begin();
119 mapItr != m_prodParMap.end();
121 delete mapItr->second;
123 for( map< string, double* >::iterator mapItr = m_ampParMap.begin();
124 mapItr != m_ampParMap.end();
126 delete mapItr->second;
131 ParameterManagerMPI::setupMPI()
133 MPI_Comm_rank( MPI_COMM_WORLD, &m_rank );
134 MPI_Comm_size( MPI_COMM_WORLD, &m_numProc );
136 m_isMaster = ( m_rank == 0 );
140 bool real,
bool fixed )
155 vector< IntensityManager* >::iterator intenManPtr = m_intenManagers.begin();
156 for( ; intenManPtr != m_intenManagers.end(); ++intenManPtr ){
157 if( (*intenManPtr)->hasTerm( termName ) )
break;
160 if( intenManPtr == m_intenManagers.end() ){
162 cout <<
"ParameterManager ERROR: Could not find production amplitude for " 170 m_prodParMap[termName] =
171 new complex< double >( (**intenManPtr).productionFactor( termName ) );
174 (**intenManPtr).setExternalProductionFactor( termName,
175 m_prodParMap[termName] );
183 const string& parName = parInfo->
parName();
196 if( m_ampParMap.find( parName ) == m_ampParMap.end() ){
199 m_ampParMap[parName] =
new double( parInfo->
value() );
203 bool foundOne =
false;
204 vector< IntensityManager* >::iterator intenManPtr = m_intenManagers.begin();
205 for( ; intenManPtr != m_intenManagers.end(); ++intenManPtr ){
207 if( !(*intenManPtr)->hasTerm( termName ) )
continue;
211 if( parInfo->
fixed() ){
217 (**intenManPtr).setParValue( termName, parName, parInfo->
value() );
221 (**intenManPtr).setParPtr( termName, parName, m_ampParMap[parName] );
227 cout <<
"WARNING: could not find term named " << termName
228 <<
" while trying to set parameter " << parName << endl;
244 double* parData =
new double[2*m_prodParMap.size()+m_ampParMap.size()];
247 for( map<
string, complex< double >* >::iterator
248 parItr = m_prodParMap.begin();
249 parItr != m_prodParMap.end();
252 parData[i++] = real( *(parItr->second) );
253 parData[i++] = imag( *(parItr->second) );
256 for( map< string, double* >::iterator
257 parItr = m_ampParMap.begin();
258 parItr != m_ampParMap.end();
261 parData[i++] = *(parItr->second);
264 MPI_Bcast( parData, i, MPI_DOUBLE, 0, MPI_COMM_WORLD );
269 for( map<
string, complex< double >* >::iterator
270 parItr = m_prodParMap.begin();
271 parItr != m_prodParMap.end();
274 (*(parItr->second)) = complex< double >( parData[i],
279 for( map< string, double* >::iterator
280 parItr = m_ampParMap.begin();
281 parItr != m_ampParMap.end();
284 (*(parItr->second)) = parData[i++];
303 map< string, double* >::iterator parItr =
304 m_ampParMap.find( parName );
308 assert( parItr != m_ampParMap.end() );
310 nameLength = parItr->first.length();
312 strcpy( parNameArr, parItr->first.c_str() );
314 MPI_Bcast( &nameLength, 1, MPI_INT, 0, MPI_COMM_WORLD );
315 MPI_Bcast( parNameArr, nameLength, MPI_CHAR, 0, MPI_COMM_WORLD );
317 value = *(parItr->second);
319 MPI_Bcast( &value, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD );
324 MPI_Bcast( &nameLength, 1, MPI_INT, 0, MPI_COMM_WORLD );
325 MPI_Bcast( parNameArr, nameLength, MPI_CHAR, 0, MPI_COMM_WORLD );
326 MPI_Bcast( &value, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD );
329 for(
int i = 0; i < nameLength; ++i ) name << parNameArr[i];
332 map< string, double* >::iterator parItr = m_ampParMap.find( name.str() );
333 assert( parItr != m_ampParMap.end() );
334 (*(parItr->second)) = value;
349 assert( m_isMaster );
double * getAmpParPtr(const string &parName)
void updateAmpParameter(const string &parName="")
static void broadcastToFirst(FitCommand command)
void addAmplitudeParameter(const string &termName, const ParameterInfo *parInfo)
virtual void addAmplitudeParameter(const string &Name, const ParameterInfo *parInfo)
void addProductionParameter(const string &termName, bool real=false, bool fixed=false)
void update(const MISubject *parPtr)
virtual void addProductionParameter(const string &Name, bool real=false, bool fixed=false)
complex< double > * getProdParPtr(const string &Name)
ParameterManagerMPI(MinuitMinimizationManager *minuitManager, IntensityManager *intenManager)
void update(const string &parName)