57 vector<string> keywords;
58 for (map<
string, vector< vector<string> > >::const_iterator
59 mapItr = m_userKeywordMap.begin();
60 mapItr != m_userKeywordMap.end(); mapItr++){
61 keywords.push_back(mapItr->first);
67 vector< vector<string> >
70 if (m_userKeywordMap.find(userKeyword) != m_userKeywordMap.end())
71 return m_userKeywordMap.find(userKeyword)->second;
72 return vector< vector<string> >();
79 vector<ReactionInfo*> reactions;
80 for (
unsigned int i = 0; i < m_reactions.size(); i++){
81 if ((reactionName ==
"") || (m_reactions[i]->reactionName() == reactionName)){
82 reactions.push_back(m_reactions[i]);
90 vector<CoherentSumInfo*>
92 const string& sumName)
const {
93 vector<CoherentSumInfo*> sums;
94 for (
unsigned int i = 0; i < m_sums.size(); i++){
95 if (((reactionName ==
"") || (m_sums[i]->reactionName() == reactionName)) &&
96 ((sumName ==
"") || (m_sums[i]->sumName() == sumName))){
97 sums.push_back(m_sums[i]);
104 vector<AmplitudeInfo*>
106 const string& sumName,
107 const string& ampName)
const {
108 vector<AmplitudeInfo*> amplitudes;
109 for (
unsigned int i = 0; i < m_amplitudes.size(); i++){
110 if (((reactionName ==
"") || (m_amplitudes[i]->reactionName() == reactionName)) &&
111 ((sumName ==
"") || (m_amplitudes[i]->sumName() == sumName)) &&
112 ((ampName ==
"") || (m_amplitudes[i]->ampName() == ampName))){
113 amplitudes.push_back(m_amplitudes[i]);
119 vector<ParameterInfo*>
121 const string& sumName,
122 const string& ampName,
123 const string& parName)
const {
124 if ((reactionName ==
"") &&
127 (parName ==
""))
return m_parameters;
128 vector<ParameterInfo*> parameters;
129 for (
unsigned int i = 0; i < m_amplitudes.size(); i++){
130 if (((reactionName ==
"") || (m_amplitudes[i]->reactionName() == reactionName)) &&
131 ((sumName ==
"") || (m_amplitudes[i]->sumName() == sumName)) &&
132 ((ampName ==
"") || (m_amplitudes[i]->ampName() == ampName))){
133 vector<ParameterInfo*> ampParameters = m_amplitudes[i]->parameters();
134 for (
unsigned int j = 0; j < ampParameters.size(); j++){
135 bool foundParameter =
false;
136 for (
unsigned int k = 0; k < parameters.size(); k++){
137 if (parameters[k]->parName() == ampParameters[j]->parName()) foundParameter =
true;
139 if (!foundParameter){
140 if ((parName ==
"") || (ampParameters[j]->parName() == parName)){
141 parameters.push_back(ampParameters[j]);
154 for (
unsigned int i = 0; i < m_reactions.size(); i++){
155 if (m_reactions[i]->reactionName() == reactionName){
156 return m_reactions[i];
166 const string& sumName)
const {
167 for (
unsigned int i = 0; i < m_sums.size(); i++){
168 if ((m_sums[i]->reactionName() == reactionName) &&
169 (m_sums[i]->sumName() == sumName)){
180 const string& sumName,
181 const string& ampName)
const {
182 for (
unsigned int i = 0; i < m_amplitudes.size(); i++){
183 if ((m_amplitudes[i]->reactionName() == reactionName) &&
184 (m_amplitudes[i]->sumName() == sumName) &&
185 (m_amplitudes[i]->ampName() == ampName)){
186 return m_amplitudes[i];
196 for (
unsigned int i = 0; i < m_parameters.size(); i++){
197 if (m_parameters[i]->parName() == parName){
198 return m_parameters[i];
210 vector< vector<string> > argList = m_userKeywordMap[userKeyword];
211 argList.push_back(arguments);
212 m_userKeywordMap[userKeyword] = argList;
218 const vector<string>& particleList){
222 m_reactions.push_back(rctn);
234 const string& sumName){
239 cout <<
"ConfigurationInfo: Trying to create coherentSum for unknown reaction" << endl;
240 cout <<
"\tcreateCoherentSum(" << reactionName <<
"," << sumName <<
")" << endl;
244 m_sums.push_back(sum);
256 const string& sumName,
257 const string& ampName){
262 cout <<
"ConfigurationInfo: Trying to create amplitude for unknown reaction" << endl;
263 cout <<
"\tcreateAmplitude(" << reactionName <<
"," << sumName <<
"," << ampName <<
")" << endl;
268 cout <<
"ConfigurationInfo: Trying to create amplitude for unknown coherent sum" << endl;
269 cout <<
"\tcreateAmplitude(" << reactionName <<
"," << sumName <<
"," << ampName <<
")" << endl;
273 m_amplitudes.push_back(amp);
289 m_parameters.push_back(par);
303 if (userKeyword ==
"") m_userKeywordMap.clear();
304 m_userKeywordMap.erase(userKeyword);
311 vector<ReactionInfo*> removeList =
reactionList(reactionName);
312 unsigned int removeListSize = removeList.size();
313 for (
unsigned int i = 0; i < removeListSize; i++){
314 for (
unsigned int j = 0; j < m_reactions.size(); j++){
315 if (removeList[i]->reactionName() == m_reactions[j]->reactionName()){
316 m_reactions[j]->clear();
317 delete m_reactions[j];
318 m_reactions.erase(m_reactions.begin()+j,m_reactions.begin()+j+1);
319 j = m_reactions.size();
327 const string& sumName){
329 vector<CoherentSumInfo*> removeList =
coherentSumList(reactionName, sumName);
330 unsigned int removeListSize = removeList.size();
331 for (
unsigned int i = 0; i < removeListSize; i++){
332 for (
unsigned int j = 0; j < m_sums.size(); j++){
333 if ((removeList[i]->reactionName() == m_sums[j]->reactionName()) &&
334 (removeList[i]->sumName() == m_sums[j]->sumName())){
337 m_sums.erase(m_sums.begin()+j,m_sums.begin()+j+1);
346 const string& sumName,
347 const string& ampName){
348 vector<AmplitudeInfo*> removeList =
amplitudeList(reactionName, sumName, ampName);
349 unsigned int removeListSize = removeList.size();
350 for (
unsigned int i = 0; i < removeListSize; i++){
351 for (
unsigned int j = 0; j < m_amplitudes.size(); j++){
352 m_amplitudes[j]->removeConstraint(removeList[i]);
355 for (
unsigned int i = 0; i < removeListSize; i++){
356 for (
unsigned int j = 0; j < m_amplitudes.size(); j++){
357 if ((removeList[i]->reactionName() == m_amplitudes[j]->reactionName()) &&
358 (removeList[i]->sumName() == m_amplitudes[j]->sumName()) &&
359 (removeList[i]->ampName() == m_amplitudes[j]->ampName())){
360 m_amplitudes[j]->clear();
361 delete m_amplitudes[j];
362 m_amplitudes.erase(m_amplitudes.begin()+j,m_amplitudes.begin()+j+1);
363 j = m_amplitudes.size();
372 vector<ParameterInfo*> removeList;
374 removeList = m_parameters;
378 if (parinfo) removeList.push_back(parinfo);
380 unsigned int removeListSize = removeList.size();
381 for (
unsigned int i = 0; i < removeListSize; i++){
382 for (
unsigned int j = 0; j < m_amplitudes.size(); j++){
383 m_amplitudes[j]->removeParameter(removeList[i]);
386 for (
unsigned int i = 0; i < removeListSize; i++){
387 for (
unsigned int j = 0; j < m_parameters.size(); j++){
388 if (removeList[i]->parName() == m_parameters[j]->parName()){
389 m_parameters[j]->clear();
390 delete m_parameters[j];
391 m_parameters.erase(m_parameters.begin()+j,m_parameters.begin()+j+1);
392 j = m_parameters.size();
398 map< string, vector< string > >
401 map< string, vector< string > > cMap;
403 for( vector< AmplitudeInfo* >::const_iterator aItr = m_amplitudes.begin();
404 aItr != m_amplitudes.end();
407 cMap[(**aItr).fullName()] = vector< string >( 0 );
409 vector< AmplitudeInfo* > constraints = (**aItr).constraints();
411 for( vector< AmplitudeInfo* >::const_iterator bItr = constraints.begin();
412 bItr != constraints.end();
415 cMap[(**aItr).fullName()].push_back( (**bItr).fullName() );
426 ofstream ff(fileName.c_str());
439 ff <<
"### FIT CONFIGURATION ###" << endl;
444 ff <<
"fit " <<
fitName() << endl;
450 for (
unsigned int i = 0; i < keywords.size(); i++){
452 int min = 0;
int max = 0;
453 for (
unsigned int j = 0; j < argslist.size(); j++){
454 if (argslist[j].size() < min) min = argslist[j].size();
455 if (argslist[j].size() > max) max = argslist[j].size();
457 ff <<
"keyword " << keywords[i] <<
" " << min <<
" " << max << endl;
458 for (
unsigned int j = 0; j < argslist.size(); j++){
459 vector<string> args = argslist[j];
460 ff << keywords[i] <<
" ";
461 for (
unsigned int k = 0; k < args.size(); k++){
462 ff << args[k] <<
" ";
471 for (
unsigned int i = 0; i < Rs.size(); i++){
475 for (
unsigned int j = 0; j < particles.size(); j++){ ff <<
" " << particles[j];}
481 for (
unsigned int i = 0; i < Ss.size(); i++){
483 ff <<
"sum " << S->
fullName() << endl;}
488 for (
unsigned int i = 0; i < As.size(); i++){
490 vector< vector<string> > Fs = A->
factors();
491 for (
unsigned int j = 0; j < Fs.size(); j++){
492 ff <<
"amplitude " << A->
fullName();
493 vector<string> args = Fs[j];
494 for (
unsigned int k = 0; k < args.size(); k++){
495 ff <<
" " << args[k];}
501 for (
unsigned int i = 0; i < Ps.size(); i++){
503 ff <<
"parameter " << P->
parName() <<
" " << P->
value();
504 if (P->
fixed()){ ff <<
" fixed"; }
514 for (
unsigned int i = 0; i < As.size(); i++){
516 ff <<
"scale " << A->
fullName() <<
" " << A->
scale() << endl;}
521 for (
unsigned int i = 0; i < As.size(); i++){
524 for (
unsigned int j = 0; j < constr.size(); j++){
525 ff <<
"constrain " << A->
fullName() <<
" " << constr[j]->fullName() << endl;}}
530 for (
unsigned int i = 0; i < As.size(); i++){
532 ff <<
"initialize " << A->
fullName() <<
" cartesian " 533 << A->
value().real() <<
" " 534 << A->
value().imag();
535 if (!A->
real() && A->
fixed()) {ff <<
" fixed";}
536 else if ( A->
real() && !A->
fixed()) {ff <<
" real";}
537 else if ( A->
real() && A->
fixed()) {ff <<
" fixed real";}
543 for (
unsigned int i = 0; i < As.size(); i++){
546 for (
unsigned int j = 0; j < perms.size(); j++){
548 vector<int> perm = perms[j];
549 for (
unsigned int k = 0; k < perm.size(); k++){
550 ff <<
" " << perm[k];}
556 for (
unsigned int i = 0; i < Rs.size(); i++){
558 string cls = R->
data().first;
559 vector<string> args = R->
data().second;
562 for (
unsigned int j = 0; j < args.size(); j++){ ff <<
" " << args[j];}
568 for (
unsigned int i = 0; i < Rs.size(); i++){
570 string cls = R->
genMC().first;
571 vector<string> args = R->
genMC().second;
574 for (
unsigned int j = 0; j < args.size(); j++){ ff <<
" " << args[j];}
580 for (
unsigned int i = 0; i < Rs.size(); i++){
582 string cls = R->
accMC().first;
583 vector<string> args = R->
accMC().second;
586 for (
unsigned int j = 0; j < args.size(); j++){ ff <<
" " << args[j];}
592 for (
unsigned int i = 0; i < Rs.size(); i++){
596 ff <<
"normintfile " << R->
reactionName() <<
" " << ni << endl;}
598 ff <<
"normintfile " << R->
reactionName() <<
" " << ni <<
" input" << endl;}}
614 ci->
display( fileName, append );
622 streambuf* cout_sbuf = cout.rdbuf();
625 outfile.open(fileName.c_str(), ios::out | ios::app);
628 outfile.open(fileName.c_str());
630 cout.rdbuf(outfile.rdbuf());
634 cout <<
"## CONFIGURATION INFO DISPLAY ##" << endl;
639 cout.rdbuf(cout_sbuf);
642 for (
unsigned int i = 0; i < m_reactions.size(); i++){
643 m_reactions[i]->display(fileName,
true);
644 vector<CoherentSumInfo*> sums =
coherentSumList(m_reactions[i]->reactionName());
645 for (
unsigned int j = 0; j < sums.size(); j++){
646 sums[j]->display(fileName,
true);
647 vector<AmplitudeInfo*> amps =
amplitudeList(m_reactions[i]->reactionName(),sums[j]->sumName());
648 for (
unsigned int k = 0; k < amps.size(); k++){
649 amps[k]->display(fileName,
true);
653 for (
unsigned int l = 0; l < m_parameters.size(); l++){
654 m_parameters[l]->display(fileName,
true);
664 streambuf* cout_sbuf = cout.rdbuf();
667 outfile.open(fileName.c_str(), ios::out | ios::app);
670 outfile.open(fileName.c_str());
672 cout.rdbuf(outfile.rdbuf());
675 cout <<
"############################################" << endl;
676 cout <<
"############# REACTION INFO #############" << endl;
677 cout <<
"############################################" << endl;
678 cout <<
" REACTION NAME: " << m_reactionName << endl;
679 cout <<
" PARTICLE LIST: " << m_particleList.size() << endl;
680 for (
unsigned int i = 0; i < m_particleList.size(); i++){
681 cout <<
"\t\t" << i+1 <<
". " << m_particleList[i] << endl;
683 cout <<
" DATA READER: " << m_data.first << endl;
684 for (
unsigned int i = 0; i < m_data.second.size(); i++){
685 cout <<
"\t\t\t\t" << m_data.second[i] << endl;
687 if( m_bkgnd.first !=
"" ){
688 cout <<
" BACKGROUND READER: " << m_bkgnd.first << endl;
689 for (
unsigned int i = 0; i < m_bkgnd.second.size(); i++){
690 cout <<
"\t\t\t\t" << m_bkgnd.second[i] << endl;
693 cout <<
" ACC MC READER: " << m_accMC.first << endl;
694 for (
unsigned int i = 0; i < m_accMC.second.size(); i++){
695 cout <<
"\t\t\t\t" << m_accMC.second[i] << endl;
697 cout <<
" GEN MC READER: " << m_genMC.first << endl;
698 for (
unsigned int i = 0; i < m_genMC.second.size(); i++){
699 cout <<
"\t\t\t\t" << m_genMC.second[i] << endl;
701 cout <<
" NORMALIZATION INTEGRAL FILE: " << endl;
702 if (m_normIntFile !=
"") cout <<
"\t\t " << m_normIntFile << endl;
703 if (m_normIntFileInput) cout <<
"\t\t (use as input)" << endl;
707 cout.rdbuf(cout_sbuf);
717 streambuf* cout_sbuf = cout.rdbuf();
720 outfile.open(fileName.c_str(), ios::out | ios::app);
723 outfile.open(fileName.c_str());
725 cout.rdbuf(outfile.rdbuf());
728 cout <<
"********************************************" << endl;
729 cout <<
"*********** COHERENT SUM INFO ************" << endl;
730 cout <<
"********************************************" << endl;
731 cout <<
" REACTION NAME: " << m_reactionName << endl;
732 cout <<
" COHERENT SUM NAME: " << m_sumName << endl;
736 cout.rdbuf(cout_sbuf);
746 streambuf* cout_sbuf = cout.rdbuf();
749 outfile.open(fileName.c_str(), ios::out | ios::app);
752 outfile.open(fileName.c_str());
754 cout.rdbuf(outfile.rdbuf());
757 cout <<
"++++++++++++++++++++++++++++++++++++++++++++" << endl;
758 cout <<
"+++++++++++++ AMPLITUDE INFO +++++++++++++" << endl;
759 cout <<
"++++++++++++++++++++++++++++++++++++++++++++" << endl;
760 cout <<
" REACTION NAME: " << m_reactionName << endl;
761 cout <<
" COHERENT SUM NAME: " << m_sumName << endl;
762 cout <<
" AMPLITUDE NAME: " << m_ampName << endl;
763 cout <<
" FACTORS: " << m_factors.size() << endl;
764 for (
unsigned int i = 0; i < m_factors.size(); i++){
765 vector<string> factor = m_factors[i];
766 cout <<
"\t\t" << i+1 <<
". ";
767 for (
unsigned int j = 0; j < factor.size(); j++){
768 cout <<
" " << factor[j];
772 cout <<
" PERMUTATIONS: " << m_permutations.size() << endl;
773 for (
unsigned int i = 0; i < m_permutations.size(); i++){
774 vector<int> permutation = m_permutations[i];
775 cout <<
"\t\t" << i+1 <<
". ";
776 for (
unsigned int j = 0; j < permutation.size(); j++){
777 cout <<
" " << permutation[j];
781 cout <<
" CONSTRAINTS: " << m_constraints.size() << endl;
782 for (
unsigned int i = 0; i < m_constraints.size(); i++){
783 cout <<
"\t\t" << i+1 <<
". " << m_constraints[i]->reactionName()
784 <<
" " << m_constraints[i]->sumName()
785 <<
" " << m_constraints[i]->ampName() << endl;
787 cout <<
" PARAMETERS: " << m_parameters.size() << endl;
788 for (
unsigned int i = 0; i < m_parameters.size(); i++){
789 cout <<
"\t\t" << i+1 <<
". " << m_parameters[i]->parName() << endl;
791 cout <<
" INITIAL VALUE: " << m_value << endl;
792 cout <<
" REAL? " << m_real << endl;
793 cout <<
" FIXED? " << m_fixed << endl;
794 cout <<
" SCALE: " << m_scale << endl;
798 cout.rdbuf(cout_sbuf);
808 streambuf* cout_sbuf = cout.rdbuf();
811 outfile.open(fileName.c_str(), ios::out | ios::app);
814 outfile.open(fileName.c_str());
816 cout.rdbuf(outfile.rdbuf());
819 cout <<
"--------------------------------------------" << endl;
820 cout <<
"------------- PARAMETER INFO -------------" << endl;
821 cout <<
"--------------------------------------------" << endl;
822 cout <<
" PARAMETER NAME: " << m_parName << endl;
823 cout <<
" INITIAL VALUE: " << m_value << endl;
824 cout <<
" FIXED? " << m_fixed << endl;
825 cout <<
" BOUNDED? " << m_bounded << endl;
826 cout <<
" LOWER BOUND: " << m_lowerBound << endl;
827 cout <<
" UPPER BOUND: " << m_upperBound << endl;
828 cout <<
" GAUSSIAN BOUNDED? " << m_gaussianBounded << endl;
829 cout <<
" CENTRAL VALUE: " << m_centralValue << endl;
830 cout <<
" GAUSSIAN ERROR: " << m_gaussianError << endl;
834 cout.rdbuf(cout_sbuf);
843 if ((this->reactionName() == constraint->
reactionName()) &&
844 (this->sumName() == constraint->
sumName()) &&
845 (this->ampName() == constraint->
ampName()))
return;
847 if (!hasConstraint(constraint)) m_constraints.push_back(constraint);
849 vector<AmplitudeInfo*> constraints = constraint->
constraints();
850 for (
unsigned int i = 0; i < constraints.size(); i++){
851 if (!hasConstraint(constraints[i])) addConstraint(constraints[i]);
860 bool foundConstraint =
false;
861 for (
unsigned int i = 0; i < m_constraints.size(); i++){
862 if ((m_constraints[i]->reactionName() == constraint->
reactionName()) &&
863 (m_constraints[i]->sumName() == constraint->
sumName()) &&
864 (m_constraints[i]->ampName() == constraint->
ampName())) foundConstraint =
true;
866 return foundConstraint;
873 if (hasConstraint(constraint)){
874 for (
unsigned int i = 0; i < m_constraints.size(); i++){
875 if ((m_constraints[i]->reactionName() == constraint->
reactionName()) &&
876 (m_constraints[i]->sumName() == constraint->
sumName()) &&
877 (m_constraints[i]->ampName() == constraint->
ampName())){
878 m_constraints.erase(m_constraints.begin()+i,m_constraints.begin()+i+1);
879 i = m_constraints.size();
884 vector<AmplitudeInfo*> constraints = constraint->
constraints();
885 for (
unsigned int i = 0; i < constraints.size(); i++){
886 if (hasConstraint(constraints[i])) removeConstraint(constraints[i]);
895 bool foundParameter =
false;
896 for (
unsigned int i = 0; i < m_parameters.size(); i++){
897 if (m_parameters[i]->parName() == parameter->
parName()) foundParameter =
true;
899 if (!foundParameter) m_parameters.push_back(parameter);
904 for (
unsigned int i = 0; i < m_parameters.size(); i++){
905 if (m_parameters[i]->parName() == parameter->
parName()){
906 m_parameters.erase(m_parameters.begin()+i,m_parameters.begin()+i+1);
907 i = m_parameters.size();
915 vector<string> empty;
916 m_data = pair<string, vector<string> >(
"",empty);
917 m_bkgnd = pair<string, vector<string> >(
"",empty);
918 m_genMC = pair<string, vector<string> >(
"",empty);
919 m_accMC = pair<string, vector<string> >(
"",empty);
921 m_normIntFileInput =
false;
927 m_permutations.clear();
928 m_constraints.clear();
929 m_value = complex<double>(0.0,0.0);
933 m_parameters.clear();
942 m_gaussianBounded =
false;
943 m_centralValue = 0.0;
944 m_gaussianError = 0.0;
ReactionInfo * reaction(const string &reactionName) const
void removeAmplitude(const string &reactionName="", const string &sumName="", const string &Name="")
void removeConstraint(AmplitudeInfo *constraint)
void removeReaction(const string &reactionName="")
vector< CoherentSumInfo * > coherentSumList(const string &reactionName="", const string &sumName="") const
double gaussianError() const
const pair< string, vector< string > > & accMC() const
bool gaussianBounded() const
complex< double > value() const
void display(string fileName="", bool append=true)
void addUserKeyword(const string &uesrKeyword, const vector< string > &arguments)
ParameterInfo * parameter(const string &parName) const
const vector< string > & particleList() const
const vector< vector< int > > & permutations() const
map< string, vector< string > > constraintMap() const
vector< vector< string > > userKeywordArguments(const string &userKeyword) const
double upperBound() const
void setValue(double value)
void write(const string &fileName) const
const vector< AmplitudeInfo *> & constraints() const
void display(string fileName="", bool append=true)
vector< string > userKeywords() const
const pair< string, vector< string > > & genMC() const
string reactionName() const
void display(string fileName="", bool append=true)
AmplitudeInfo * amplitude(const string &reactionName, const string &sumName, const string &Name) const
const pair< string, vector< string > > & data() const
void display(string fileName="", bool append=false) const
ReactionInfo * createReaction(const string &reactionName, const vector< string > &particleList)
void addParameter(ParameterInfo *parameter)
const vector< vector< string > > & factors() const
double lowerBound() const
ParameterInfo * createParameter(const string &parName, double value)
void display(string fileName="", bool append=true)
vector< ParameterInfo * > parameterList(const string &reactionName="", const string &sumName="", const string &Name="", const string &parName="") const
void setParticleList(const vector< string > &particleList)
bool normIntFileInput() const
void removeCoherentSum(const string &reactionName="", const string &sumName="")
vector< AmplitudeInfo * > amplitudeList(const string &reactionName="", const string &sumName="", const string &Name="") const
CoherentSumInfo * createCoherentSum(const string &reactionName, const string &sumName)
void removeParameter(const string &parName="")
double centralValue() const
AmplitudeInfo * createAmplitude(const string &reactionName, const string &sumName, const string &Name)
void addConstraint(AmplitudeInfo *constraint)
void removeUserKeyword(const string &userKeyword="")
bool hasConstraint(AmplitudeInfo *constraint) const
void removeParameter(ParameterInfo *parameter)
CoherentSumInfo * coherentSum(const string &reactionName, const string &sumName) const
vector< ReactionInfo * > reactionList(const string &reactionName="") const
string reactionName() const
string normIntFile() const