52 m_fitResults( results ),
60 m_cfgInfo( results.configInfo() ),
61 m_fullAmplitudes( 0 ),
62 m_uniqueAmplitudes( 0 ),
67 vector< string > amps = m_fitResults.
ampList();
69 for(
unsigned int i = 0; i < amps.size(); ++i ){
71 m_ampIndex[amps[i]] = i;
77 m_zeroProdAmps.push_back( complex< double >( 0, 0 ) );
82 m_prodAmps.push_back( m_fitProdAmps[i] );
86 m_ampParameters = m_fitResults.
ampParMap();
88 vector<ReactionInfo*> rctInfoVector = m_cfgInfo->
reactionList();
90 for(
unsigned int i = 0; i < rctInfoVector.size(); i++ ){
95 m_reactIndex[reactName] = i;
106 vector< string > ampNames;
107 vector<AmplitudeInfo*> ampInfoVector = m_cfgInfo->
amplitudeList( reactName );
108 for (
unsigned int j = 0; j < ampInfoVector.size(); j++){
109 ampNames.push_back(ampInfoVector[j]->fullName());
114 for( vector< string >::iterator ampName = ampNames.begin();
115 ampName != ampNames.end();
118 m_fullAmplitudes.push_back( *ampName );
120 if( m_ampIndex.find( *ampName ) == m_ampIndex.end() ){
122 cout <<
"ERROR: cannot find production parameter for: " 123 << *ampName <<
"\n\tAre fit results and config file consistent?" 129 complex< double >* prodPtr = &(m_prodAmps[m_ampIndex[*ampName]]);
130 m_intenManagerMap[reactName]->setExternalProductionFactor( *ampName, prodPtr );
132 for( map< string, double >::const_iterator mapItr = m_ampParameters.begin();
133 mapItr != m_ampParameters.end();
136 cout <<
"setting parameter " << mapItr->first <<
" to " << mapItr->second << endl;
138 m_intenManagerMap[reactName]->setParValue( *ampName, mapItr->first, mapItr->second );
154 buildUniqueAmplitudes();
155 recordConfiguration();
160 map < string, map< string, vector< Histogram* > > >::iterator hit1;
161 map< string, vector< Histogram* > >::iterator hit2;
162 vector< Histogram* >::iterator hit3;
164 for( map <
string, map<
string, vector< Histogram* > > >::iterator hit1 = m_accMCHistCache.begin();hit1 != m_accMCHistCache.end();++hit1 ){
165 for( map<
string, vector< Histogram* > >::iterator hit2 = (hit1->second).begin();hit2 != (hit1->second).end();++hit2 ){
166 for (vector< Histogram* >::iterator hit3 = (hit2->second).begin();hit3 != (hit2->second).end();++hit3){
167 if (*hit3)
delete (*hit3);
171 for( map <
string, map<
string, vector< Histogram* > > >::iterator hit1 = m_genMCHistCache.begin();hit1 != m_genMCHistCache.end();++hit1 ){
172 for( map<
string, vector< Histogram* > >::iterator hit2 = (hit1->second).begin();hit2 != (hit1->second).end();++hit2 ){
173 for (vector< Histogram* >::iterator hit3 = (hit2->second).begin();hit3 != (hit2->second).end();++hit3){
174 if (*hit3)
delete (*hit3);
178 for( map <
string, map<
string, vector< Histogram* > > >::iterator hit1 = m_dataHistCache.begin();hit1 != m_dataHistCache.end();++hit1 ){
179 for( map<
string, vector< Histogram* > >::iterator hit2 = (hit1->second).begin();hit2 != (hit1->second).end();++hit2 ){
180 for (vector< Histogram* >::iterator hit3 = (hit2->second).begin();hit3 != (hit2->second).end();++hit3){
181 if (*hit3)
delete (*hit3);
186 for(
int i=0; i < m_histVect.size(); i++) {
188 if( m_histVect[i] )
delete m_histVect[i];
192 pair< double, double >
195 vector< string > enabledAmps;
198 for( vector< string >::const_iterator amp = m_fullAmplitudes.begin();
199 amp != m_fullAmplitudes.end();
202 vector< string > parts = stringSplit( *amp,
"::" );
205 if( !m_reactEnabled.find( parts[0] )->second )
continue;
206 if( !m_sumEnabled.find( parts[1] )->second )
continue;
207 if( !m_ampEnabled.find( parts[2] )->second )
continue;
209 enabledAmps.push_back( *amp );
212 return m_fitResults.
intensity( enabledAmps, accCorrected );
217 unsigned int type ) {
220 if( !m_reactEnabled[reactName] )
return NULL;
224 string config = ( type ==
kData ?
"" : m_currentConfiguration );
226 map< string, map< string, vector< Histogram* > > > *cachePtr;
232 cachePtr = &m_dataHistCache;
237 cachePtr = &m_accMCHistCache;
242 cachePtr = &m_genMCHistCache;
249 map< string, map< string, vector< Histogram* > > >::iterator ampCfg = cachePtr->find( config );
252 if( ( ampCfg == cachePtr->end() ) ||
253 ( ampCfg->second.find( reactName ) == ampCfg->second.end() ) ) {
260 fillProjections( reactName, type );
265 m_histVect_clone.clear();
266 for( vector< Histogram* >::iterator hist = m_histVect.begin();hist != m_histVect.end();++hist ){
267 m_histVect_clone.push_back((*hist)->Clone());
269 (*cachePtr)[config][reactName] = m_histVect_clone;
274 vector< Histogram* >* histVect = &((*cachePtr)[config][reactName]);
275 for( vector< Histogram* >::iterator hist = histVect->begin();
276 hist != histVect->end();
295 return (*cachePtr)[config][reactName][projectionIndex];
301 map<string, unsigned int>::const_iterator mapItr = m_ampIndex.find(ampName);
302 if (mapItr == m_ampIndex.end()){
303 cout <<
"PlotGenerator ERROR: Could not find amplitude " << ampName << endl;
307 return mapItr->second;
313 if( index >= m_histVect.size() ){
315 m_histVect.resize( index + 1 );
316 m_histTitles.resize( index + 1 );
319 m_histVect[index] = hist;
320 m_histTitles[index] = title;
330 PlotGenerator::clearHistograms(){
332 for( vector< Histogram*>::iterator hist = m_histVect.begin();
333 hist != m_histVect.end();
341 PlotGenerator::fillProjections(
const string& reactName,
unsigned int type ){
343 bool isData = ( type ==
kData ? true : false );
344 int dataIndex = m_reactIndex[reactName] *
kNumTypes + type;
350 for(
unsigned int i = 0; i < m_ati.
numEvents( dataIndex ); ++i ){
356 m_currentEventWeight = ( isData ? 1.0 : m_ati.
intensity( i, dataIndex ) );
371 vector < double > tmp;
372 tmp.push_back(valueX);
373 m_histVect[histIndex]->fill( tmp, m_currentEventWeight );
378 vector < double > tmp;
379 tmp.push_back(valueX);
380 tmp.push_back(valueY);
381 m_histVect[histIndex]->fill(tmp, m_currentEventWeight );
386 m_histVect[histIndex]->fill(data, m_currentEventWeight*weight );
393 return ( m_ampIndex.find( amp ) != m_ampIndex.end() );
399 string amp = m_uniqueAmplitudes[uniqueAmpIndex];
401 for( map< string, unsigned int >::iterator mapItr = m_ampIndex.begin();
402 mapItr != m_ampIndex.end();
405 vector< string > ampParts = stringSplit( mapItr->first,
"::" );
406 if( ampParts[2] != amp )
continue;
408 unsigned int i = mapItr->second;
413 m_prodAmps[i] = m_zeroProdAmps[i];
414 m_ampEnabled[amp] =
false;
417 recordConfiguration();
423 string amp = m_uniqueAmplitudes[uniqueAmpIndex];
425 for( map< string, unsigned int >::iterator mapItr = m_ampIndex.begin();
426 mapItr != m_ampIndex.end();
429 vector< string > ampParts = stringSplit( mapItr->first,
"::" );
430 if( ampParts[2] != amp )
continue;
432 unsigned int i = mapItr->second;
434 m_ampEnabled[amp] =
true;
439 if( m_sumEnabled[ampParts[1]] ){
444 m_prodAmps[i] = m_fitProdAmps[i];
448 recordConfiguration();
454 string sum = m_uniqueSums[uniqueSumIndex];
456 for( map< string, unsigned int >::iterator mapItr = m_ampIndex.begin();
457 mapItr != m_ampIndex.end();
460 vector< string > ampParts = stringSplit( mapItr->first,
"::" );
461 if( ampParts[1] != sum )
continue;
463 unsigned int i = mapItr->second;
465 m_sumEnabled[sum] =
false;
470 m_prodAmps[i] = m_zeroProdAmps[i];
473 recordConfiguration();
479 string sum = m_uniqueSums[uniqueSumIndex];
481 for( map< string, unsigned int >::iterator mapItr = m_ampIndex.begin();
482 mapItr != m_ampIndex.end();
485 vector< string > ampParts = stringSplit( mapItr->first,
"::" );
486 if( ampParts[1] != sum )
continue;
488 unsigned int i = mapItr->second;
490 m_sumEnabled[sum] =
true;
495 if( m_ampEnabled[ampParts[2]] ){
500 m_prodAmps[i] = m_fitProdAmps[i];
504 recordConfiguration();
511 map< string, bool >::const_iterator itr =
512 m_ampEnabled.find( m_uniqueAmplitudes[uniqueIndex] );
514 assert( itr != m_ampEnabled.end() );
522 map< string, bool >::const_iterator itr =
523 m_sumEnabled.find( m_uniqueSums[uniqueIndex] );
525 assert( itr != m_sumEnabled.end() );
533 m_reactEnabled[reactName] =
false;
539 m_reactEnabled[reactName] =
true;
545 map< string, bool >::const_iterator mapItr = m_reactEnabled.find( reactName );
546 assert( mapItr != m_reactEnabled.end() );
547 return mapItr->second;
551 PlotGenerator::recordConfiguration() {
557 m_currentConfiguration =
"";
559 for( vector< string >:: iterator ampItr = m_fullAmplitudes.begin();
560 ampItr != m_fullAmplitudes.end();
563 vector< string > ampParts = stringSplit( *ampItr,
"::" );
565 if( m_ampEnabled[ampParts[2]] && m_sumEnabled[ampParts[1]] ){
567 m_currentConfiguration += *ampItr;
573 PlotGenerator::buildUniqueAmplitudes(){
575 m_uniqueAmplitudes.clear();
576 m_uniqueSums.clear();
578 for( vector< string >::iterator amp = m_fullAmplitudes.begin();
579 amp != m_fullAmplitudes.end();
582 vector< string > tok = stringSplit( *amp,
"::" );
584 if( find( m_uniqueAmplitudes.begin(), m_uniqueAmplitudes.end(), tok[2] ) ==
585 m_uniqueAmplitudes.end() ){
587 m_uniqueAmplitudes.push_back( tok[2] );
591 if( m_ampEnabled.find( tok[2] ) == m_ampEnabled.end() ) {
593 m_ampEnabled[tok[2]] =
true;
597 if( find( m_uniqueSums.begin(), m_uniqueSums.end(), tok[1] ) ==
598 m_uniqueSums.end() ){
600 m_uniqueSums.push_back( tok[1] );
604 if( m_sumEnabled.find( tok[1] ) == m_sumEnabled.end() ){
606 m_sumEnabled[tok[1]] =
true;
616 vector<ReactionInfo*> rctInfoVector = m_cfgInfo->
reactionList();
617 for (
unsigned int i = 0; i < rctInfoVector.size(); i++){
618 rcts.push_back(rctInfoVector[i]->reactionName());
624 PlotGenerator::stringSplit(
const string& str,
const string& delimiters )
const 627 vector< string > tokens;
629 string::size_type lastPos = str.find_first_not_of(delimiters, 0);
630 string::size_type pos = str.find_first_of(delimiters, lastPos);
632 while (string::npos != pos || string::npos != lastPos)
634 tokens.push_back(str.substr(lastPos, pos - lastPos));
635 lastPos = str.find_first_not_of(delimiters, pos);
636 pos = str.find_first_of(delimiters, lastPos);
complex< double > productionParameter(const string &Name) const
bool haveAmp(const string &) const
void fillHistogram(int index, double value)
void disableSum(unsigned int uniqueSumIndex)
bool isSumEnabled(unsigned int uniqueSumIndex) const
bool isReactionEnabled(const string &reactName) const
vector< string > reactions() const
void enableSum(unsigned int uniqueSumIndex)
void bookHistogram(int index, const string &title, Histogram *hist)
void disableAmp(unsigned int uniqueAmpIndex)
void disableReaction(const string &fsName)
unsigned int getAmpIndex(const string &Name) const
void enableReaction(const string &fsName)
pair< double, double > intensity(bool accCorrected=true) const
Histogram * projection(unsigned int projectionIndex, string fsName, unsigned int type)
pair< double, double > intensity(bool accCorrected=true) const
bool isAmpEnabled(unsigned int uniqueAmpIndex) const
vector< AmplitudeInfo * > amplitudeList(const string &reactionName="", const string &sumName="", const string &Name="") const
map< string, double > ampParMap() const
vector< string > ampList() const
PlotGenerator(const FitResults &fitResults)
vector< ReactionInfo * > reactionList(const string &reactionName="") const
void enableAmp(unsigned int uniqueAmpIndex)
string reactionName() const