AmpTools
AmpToolsInterface.cc
Go to the documentation of this file.
1 //******************************************************************************
2 // This file is part of AmpTools, a package for performing Amplitude Analysis
3 //
4 // Copyright Trustees of Indiana University 2010, all rights reserved
5 //
6 // This software written by Matthew Shepherd, Ryan Mitchell, and
7 // Hrayr Matevosyan at Indiana University, Bloomington
8 //
9 // Redistribution and use in source and binary forms, with or without
10 // modification, are permitted provided that the following conditions
11 // are met:
12 // 1. Redistributions of source code must retain the above copyright
13 // notice and author attribution, this list of conditions and the
14 // following disclaimer.
15 // 2. Redistributions in binary form must reproduce the above copyright
16 // notice and author attribution, this list of conditions and the
17 // following disclaimer in the documentation and/or other materials
18 // provided with the distribution.
19 // 3. Neither the name of the University nor the names of its contributors
20 // may be used to endorse or promote products derived from this software
21 // without specific prior written permission.
22 //
23 // Creation of derivative forms of this software for commercial
24 // utilization may be subject to restriction; written permission may be
25 // obtained from the Trustees of Indiana University.
26 //
27 // INDIANA UNIVERSITY AND THE AUTHORS MAKE NO REPRESENTATIONS OR WARRANTIES,
28 // EXPRESS OR IMPLIED. By way of example, but not limitation, INDIANA
29 // UNIVERSITY MAKES NO REPRESENTATIONS OR WARRANTIES OF MERCANTABILITY OR
30 // FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THIS SOFTWARE OR
31 // DOCUMENTATION WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS, TRADEMARKS,
32 // OR OTHER RIGHTS. Neither Indiana University nor the authors shall be
33 // held liable for any liability with respect to any claim by the user or
34 // any other party arising from use of the program.
35 //******************************************************************************
36 
37 
41 #include "IUAmpTools/AmpVecs.h"
42 #include "IUAmpTools/Kinematics.h"
49 #include "IUAmpTools/FitResults.h"
50 
51 
52 vector<Amplitude*> AmpToolsInterface::m_userAmplitudes;
53 vector<DataReader*> AmpToolsInterface::m_userDataReaders;
54 
56  m_functionality( flag ),
57  m_configurationInfo( NULL ),
58  m_minuitMinimizationManager(NULL),
59  m_parameterManager(NULL),
60  m_fitResults(NULL)
61 {
62 
63 }
64 
65 
67  m_functionality( flag ),
68  m_configurationInfo(configurationInfo),
72 
73  resetConfigurationInfo(configurationInfo);
74 
75 }
76 
77 
78 void
80 
82 
83  clear();
84 
85  if( m_functionality == kFull ){
86 
87  // ************************
88  // create a MinuitMinimizationManager
89  // ************************
90 
93  }
94 
95  // ************************
96  // create an AmplitudeManager for each reaction
97  // ************************
98 
99  for (unsigned int irct = 0; irct < m_configurationInfo->reactionList().size(); irct++){
100 
101  ReactionInfo* reaction = m_configurationInfo->reactionList()[irct];
102  string reactionName(reaction->reactionName());
103 
104  AmplitudeManager* ampMan = new AmplitudeManager(reaction->particleList(),reactionName);
105  for (unsigned int i = 0; i < m_userAmplitudes.size(); i++){
107  }
108  ampMan->setupFromConfigurationInfo( m_configurationInfo );
109  if( m_functionality == kFull ) ampMan->setOptimizeParIteration( true );
110  m_intensityManagers.push_back(ampMan);
111 
112  }
113 
114  if( m_functionality == kFull ){
115 
116  // ************************
117  // create a ParameterManager
118  // ************************
119 
122 
123  }
124 
125  // ************************
126  // loop over reactions
127  // ************************
128 
129  for (unsigned int irct = 0; irct < m_configurationInfo->reactionList().size(); irct++){
130 
131  ReactionInfo* reaction = m_configurationInfo->reactionList()[irct];
132  string reactionName(reaction->reactionName());
133  IntensityManager* intenMan = intensityManager(reactionName);
134 
135  if (!intenMan)
136  cout << "AmpToolsInterface WARNING: not creating an AmplitudeManager for reaction "
137  << reactionName << endl;
138 
139 
141 
142  // ************************
143  // create DataReaders
144  // ************************
145 
146  for (unsigned int i = 0; i < m_userDataReaders.size(); i++){
147  if (reaction->data().first == m_userDataReaders[i]->name())
148  m_dataReaderMap[reactionName]
149  = m_userDataReaders[i]->newDataReader(reaction->data().second);
150  if (reaction->bkgnd().first == m_userDataReaders[i]->name())
151  m_bkgndReaderMap[reactionName]
152  = m_userDataReaders[i]->newDataReader(reaction->bkgnd().second);
153  if (reaction->genMC().first == m_userDataReaders[i]->name())
154  m_genMCReaderMap[reactionName]
155  = m_userDataReaders[i]->newDataReader(reaction->genMC().second);
156  if (reaction->accMC().first == m_userDataReaders[i]->name())
157  m_accMCReaderMap[reactionName]
158  = m_userDataReaders[i]->newDataReader(reaction->accMC().second);
159  }
160  DataReader* dataRdr = dataReader(reactionName);
161  DataReader* bkgndRdr = bkgndReader(reactionName);
162  DataReader* genMCRdr = genMCReader(reactionName);
163  DataReader* accMCRdr = accMCReader(reactionName);
164 
165  if (!dataRdr)
166  cout << "AmpToolsInterface WARNING: not creating a DataReader for data associated with reaction "
167  << reactionName << endl;
168  if (!genMCRdr)
169  cout << "AmpToolsInterface WARNING: not creating a DataReader for generated MC associated with reaction "
170  << reactionName << endl;
171  if (!accMCRdr)
172  cout << "AmpToolsInterface WARNING: not creating a DataReader for accepted MC associated with reaction "
173  << reactionName << endl;
174 
175 
176  // ************************
177  // create a NormIntInterface
178  // ************************
179 
180  NormIntInterface* normInt = NULL;
181  if (genMCRdr && accMCRdr && intenMan && !(reaction->normIntFileInput())){
182  normInt = new NormIntInterface(genMCRdr, accMCRdr, *intenMan);
183  m_normIntMap[reactionName] = normInt;
184  if (reaction->normIntFile() == "")
185  cout << "AmpToolsInterface WARNING: no name given to NormInt file for reaction "
186  << reactionName << endl;
187  }
188  else if (reaction->normIntFileInput()){
189  normInt = new NormIntInterface(reaction->normIntFile());
190  m_normIntMap[reactionName] = normInt;
191  }
192  else{
193  cout << "AmpToolsInterface WARNING: not creating a NormIntInterface for reaction "
194  << reactionName << endl;
195  }
196 
197  if( m_functionality == kFull ){
198 
199  // ************************
200  // create a LikelihoodCalculator
201  // ************************
202 
203  LikelihoodCalculator* likCalc = NULL;
204  if (intenMan && normInt && dataRdr && m_parameterManager){
205  likCalc = new LikelihoodCalculator(*intenMan, *normInt, dataRdr, bkgndRdr, *m_parameterManager);
206  m_likCalcMap[reactionName] = likCalc;
207  }
208  else{
209  cout << "AmpToolsInterface WARNING: not creating a LikelihoodCalculator for reaction "
210  << reactionName << endl;
211  }
212  }
213  }
214  }
215 
216  // ************************
217  // create FitResults
218  // ************************
219 
220 
221  if( m_functionality == kFull ){
222 
225  m_likCalcMap,
226  m_normIntMap,
229  }
230  else if( m_functionality == kPlotGeneration ){
231 
232  string inputResultsFile(m_configurationInfo->fitOutputFileName());
233  m_fitResults = new FitResults( inputResultsFile );
234  }
235 }
236 
237 
238 
239 double
240 AmpToolsInterface::likelihood (const string& reactionName) const {
241  LikelihoodCalculator* likCalc = likelihoodCalculator(reactionName);
242  if (likCalc) return (*likCalc)();
243  return 0.0;
244 }
245 
246 
247 double
249  double L = 0.0;
250  for (unsigned int irct = 0; irct < m_configurationInfo->reactionList().size(); irct++){
251  ReactionInfo* reaction = m_configurationInfo->reactionList()[irct];
252  L += likelihood(reaction->reactionName());
253  }
254  return L;
255 }
256 
257 
258 void
260 
261  // ************************
262  // save fit parameters
263  // ************************
264 
265  string outputFile(m_configurationInfo->fitOutputFileName());
266  ofstream outFile(outputFile.c_str());
268  m_fitResults->writeResults( outputFile );
269 
270 
271  // ************************
272  // save normalization integrals
273  // ************************
274 
275  for (unsigned int irct = 0; irct < m_configurationInfo->reactionList().size(); irct++){
276 
277  ReactionInfo* reaction = m_configurationInfo->reactionList()[irct];
278 
279  if( !reaction->normIntFileInput() ){
280  string reactionName(reaction->reactionName());
281  NormIntInterface* normInt = normIntInterface(reactionName);
282  // the call to FitResults::writeResults will force a cache update
283  // there is no need to do it twice
284  // if (normInt->hasAccessToMC()) normInt->forceCacheUpdate();
285  normInt->exportNormIntCache( reaction->normIntFile() );
286  }
287  }
288 }
289 
290 
292 AmpToolsInterface::intensityManager(const string& reactionName) const {
293  for (unsigned int i = 0; i < m_intensityManagers.size(); i++){
294  if (m_intensityManagers[i]->reactionName() == reactionName)
295  return m_intensityManagers[i];
296  }
297  return (IntensityManager*) NULL;
298 }
299 
300 
301 DataReader*
302 AmpToolsInterface::dataReader (const string& reactionName) const {
303  if (m_dataReaderMap.find(reactionName) != m_dataReaderMap.end())
304  return m_dataReaderMap.find(reactionName)->second;
305  return (DataReader*) NULL;
306 }
307 
308 DataReader*
309 AmpToolsInterface::bkgndReader (const string& reactionName) const {
310  if (m_bkgndReaderMap.find(reactionName) != m_bkgndReaderMap.end())
311  return m_bkgndReaderMap.find(reactionName)->second;
312  return (DataReader*) NULL;
313 }
314 
315 DataReader*
316 AmpToolsInterface::genMCReader (const string& reactionName) const {
317  if (m_genMCReaderMap.find(reactionName) != m_genMCReaderMap.end())
318  return m_genMCReaderMap.find(reactionName)->second;
319  return (DataReader*) NULL;
320 }
321 
322 
323 DataReader*
324 AmpToolsInterface::accMCReader (const string& reactionName) const {
325  if (m_accMCReaderMap.find(reactionName) != m_accMCReaderMap.end())
326  return m_accMCReaderMap.find(reactionName)->second;
327  return (DataReader*) NULL;
328 }
329 
330 
332 AmpToolsInterface::normIntInterface (const string& reactionName) const {
333  if (m_normIntMap.find(reactionName) != m_normIntMap.end())
334  return m_normIntMap.find(reactionName)->second;
335  return (NormIntInterface*) NULL;
336 }
337 
338 
340 AmpToolsInterface::likelihoodCalculator (const string& reactionName) const {
341  if (m_likCalcMap.find(reactionName) != m_likCalcMap.end())
342  return m_likCalcMap.find(reactionName)->second;
343  return (LikelihoodCalculator*) NULL;
344 }
345 
346 
347 
348 void
350 
351  m_userAmplitudes.push_back(amplitude.clone());
352 
353 }
354 
355 
356 
357 void
359 
360  m_userDataReaders.push_back(dataReader.clone());
361 
362 }
363 
364 
365 
366 void
368 
369  if( m_configurationInfo != NULL ){
370 
371  for (unsigned int irct = 0; irct < m_configurationInfo->reactionList().size(); irct++){
372 
373  ReactionInfo* reaction = m_configurationInfo->reactionList()[irct];
374  string reactionName(reaction->reactionName());
375 
376  if (likelihoodCalculator(reactionName)) delete m_likCalcMap[reactionName];
377  if (intensityManager(reactionName)) delete intensityManager(reactionName);
378  if (dataReader(reactionName)) delete dataReader(reactionName);
379  if (accMCReader(reactionName)) delete accMCReader(reactionName);
380  if (genMCReader(reactionName)) delete genMCReader(reactionName);
381  if (normIntInterface(reactionName)) delete normIntInterface(reactionName);
382  }
383  }
384 
385  m_intensityManagers.clear();
386  m_dataReaderMap.clear();
387  m_genMCReaderMap.clear();
388  m_accMCReaderMap.clear();
389  m_normIntMap.clear();
390  m_likCalcMap.clear();
391 
392  for (unsigned int i = 0; i < MAXAMPVECS; i++){
394  m_ampVecsReactionName[i] = "";
395  }
396 
398  if (parameterManager()) delete parameterManager();
399 
400 }
401 
402 
403 
404 void
405 AmpToolsInterface::clearEvents(unsigned int iDataSet){
406 
407  if (iDataSet >= MAXAMPVECS){
408  cout << "AmpToolsInterface: ERROR data set index out of range" << endl;
409  exit(1);
410  }
411 
412  m_ampVecsReactionName[iDataSet] = "";
413  m_ampVecs[iDataSet].deallocAmpVecs();
414 
415 }
416 
417 
418 void
420  unsigned int iDataSet){
421 
422  if (iDataSet >= MAXAMPVECS){
423  cout << "AmpToolsInterface: ERROR data set index out of range" << endl;
424  exit(1);
425  }
426 
427  clearEvents(iDataSet);
428  m_ampVecs[iDataSet].loadData(dataReader);
429 
430 }
431 
432 
433 void
434 AmpToolsInterface::loadEvent(Kinematics* kin, int iEvent, int nEventsTotal,
435  unsigned int iDataSet){
436 
437  if (iDataSet >= MAXAMPVECS){
438  cout << "AmpToolsInterface: ERROR data set index out of range" << endl;
439  exit(1);
440  }
441 
442  m_ampVecs[iDataSet].loadEvent(kin, iEvent, nEventsTotal);
443 
444 }
445 
446 
447 double
449  unsigned int iDataSet) {
450 
451  if (iDataSet >= MAXAMPVECS){
452  cout << "AmpToolsInterface: ERROR data set index out of range" << endl;
453  exit(1);
454  }
455 
456  bool isFirstPass = (m_ampVecs[iDataSet].m_pdAmps == 0);
457 
458  m_ampVecsReactionName[iDataSet] = reactionName;
459 
460  IntensityManager* intenMan = intensityManager(reactionName);
461 
462  if (isFirstPass) m_ampVecs[iDataSet].allocateTerms(*intenMan,true);
463 
464  return intenMan->calcIntensities(m_ampVecs[iDataSet]);
465 
466 }
467 
468 
469 int
470 AmpToolsInterface::numEvents(unsigned int iDataSet) const {
471 
472  if (iDataSet >= MAXAMPVECS){
473  cout << "AmpToolsInterface: ERROR data set index out of range" << endl;
474  exit(1);
475  }
476 
477  return m_ampVecs[iDataSet].m_iNTrueEvents;
478 
479 }
480 
481 
482 Kinematics*
484  unsigned int iDataSet){
485 
486  if (iDataSet >= MAXAMPVECS){
487  cout << "AmpToolsInterface: ERROR data set index out of range" << endl;
488  exit(1);
489  }
490 
491  return m_ampVecs[iDataSet].getEvent(iEvent);
492 
493 }
494 
495 
496 double
498  unsigned int iDataSet) const {
499 
500  if (iDataSet >= MAXAMPVECS){
501  cout << "AmpToolsInterface: ERROR data set index out of range" << endl;
502  exit(1);
503  }
504 
505  if (iEvent >= m_ampVecs[iDataSet].m_iNTrueEvents || iEvent < 0){
506  cout << "AmpToolsInterface ERROR: out of bounds in intensity call" << endl;
507  exit(1);
508  }
509 
510  return m_ampVecs[iDataSet].m_pdIntensity[iEvent];
511 
512 }
513 
514 
515 complex<double>
516 AmpToolsInterface::decayAmplitude (int iEvent, string ampName,
517  unsigned int iDataSet) const {
518 
519  if (iDataSet >= MAXAMPVECS){
520  cout << "AmpToolsInterface: ERROR data set index out of range" << endl;
521  exit(1);
522  }
523 
524  if (iEvent >= m_ampVecs[iDataSet].m_iNTrueEvents || iEvent < 0){
525  cout << "AmpToolsInterface ERROR: out of bounds in decayAmplitude call" << endl;
526  exit(1);
527  }
528 
530 
531  int iAmp = intenMan->termIndex(ampName);
532 
533  // fix!! this experession is not generally correct for all intensity
534  // managers -- put as helper function in AmpVecs?
535 
536  return complex<double>
537  (m_ampVecs[iDataSet].m_pdAmps[2*m_ampVecs[iDataSet].m_iNEvents*iAmp+2*iEvent],
538  m_ampVecs[iDataSet].m_pdAmps[2*m_ampVecs[iDataSet].m_iNEvents*iAmp+2*iEvent+1]);
539 
540 }
541 
542 complex<double>
543 AmpToolsInterface::scaledProductionAmplitude (string ampName, unsigned int iDataSet) const {
544 
545  const IntensityManager* intenMan = intensityManager(m_ampVecsReactionName[iDataSet]);
546 
547  double scale = intenMan->getScale( ampName );
548  complex< double > prodAmp = intenMan->productionFactor( ampName );
549 
550  return scale * prodAmp;
551 }
552 
553 
554 double
556  unsigned int iDataSet) const {
557 
558  if (iDataSet >= MAXAMPVECS){
559  cout << "AmpToolsInterface: ERROR data set index out of range" << endl;
560  exit(1);
561  }
562 
563 
564  double runningIntensity = 0.0;
565 
566  // loop over sums
567 
568  vector<CoherentSumInfo*> sums = m_configurationInfo->coherentSumList(m_ampVecsReactionName[iDataSet]);
569  for (unsigned int iSum = 0; iSum < sums.size(); iSum++){
570 
571  complex<double> runningAmplitude(0.0,0.0);
572 
573  // loop over amps
574 
575  vector<AmplitudeInfo*> amps =
576  m_configurationInfo->amplitudeList(m_ampVecsReactionName[iDataSet],sums[iSum]->sumName());
577  for (unsigned int iAmp = 0; iAmp < amps.size(); iAmp++){
578 
579  complex<double> P = scaledProductionAmplitude(amps[iAmp]->fullName());
580  complex<double> D = decayAmplitude(iEvent,amps[iAmp]->fullName(),iDataSet);
581 
582  runningAmplitude += P*D;
583 
584  }
585 
586  runningIntensity += norm(runningAmplitude);
587 
588  }
589 
590  return runningIntensity;
591 }
592 
593 void
594 AmpToolsInterface::printKinematics(string reactionName, Kinematics* kin) const {
595 
596  ReactionInfo* reaction = m_configurationInfo->reaction(reactionName);
597  vector<TLorentzVector> momenta = kin->particleList();
598 
599  if (reaction->particleList().size() != momenta.size()){
600  cout << "AmpToolsInterface ERROR: kinematics incompatible with this reaction" << endl;
601  exit(1);
602  }
603 
604  cout << " +++++++++++++++++++++++++++++++++" << endl;
605  cout << " EVENT KINEMATICS " << endl;
606  streamsize defaultStreamSize = cout.precision(15);
607  for (unsigned int imom = 0; imom < momenta.size(); imom++){
608  cout << " particle " << reaction->particleList()[imom] << endl;
609  cout << " E = " << momenta[imom].E() << endl;
610  cout << " Px = " << momenta[imom].Px() << endl;
611  cout << " Py = " << momenta[imom].Py() << endl;
612  cout << " Pz = " << momenta[imom].Pz() << endl;
613  }
614  cout.precision(defaultStreamSize);
615  cout << " +++++++++++++++++++++++++++++++++" << endl << endl;
616 
617 }
618 
619 
620 void
621 AmpToolsInterface::printAmplitudes(string reactionName, Kinematics* kin) const {
622 
623  IntensityManager* intenMan = intensityManager(reactionName);
624 
625  if( intenMan->type() != IntensityManager::kAmplitude ){
626 
627  cout << "NOTE: printAmplitudes is being called for a reaction "
628  << " that is not setup for an amplitude fit."
629  << " (Nothing more will be printed.)" << endl;
630  }
631 
632  AmplitudeManager* ampMan = dynamic_cast< AmplitudeManager* >( intenMan );
633 
634  vector<string> ampNames = ampMan->getTermNames();
635 
636  // we need to use the AmplitudeManager for this call in order to
637  // exercise the GPU code for the amplitude calculation
638 
639  AmpVecs aVecs;
640  aVecs.loadEvent(kin);
641  aVecs.allocateTerms(*intenMan,true);
642 
643  ampMan->calcTerms(aVecs);
644 
645 #ifdef GPU_ACCELERATION
646  aVecs.allocateCPUAmpStorage( *intenMan );
647  aVecs.m_gpuMan.copyAmpsFromGPU( aVecs );
648 #endif
649 
650  int nAmps = ampNames.size();
651 
652  // indexing of AmpVecs factors is tricky -- follow directly the code
653  // in AmplitudeManager::calcAmplitudes with the assumption that
654  // the number of events is 1 and we are working with event index 0
655 
656  int iAmpFactOffset = 0;
657 
658  for (unsigned int iamp = 0; iamp < nAmps; iamp++){
659 
660  cout << " ----------------------------------" << endl;
661  cout << " AMPLITUDE = " << ampNames[iamp] << endl;
662  cout << " ----------------------------------" << endl << endl;
663 
664  vector< const Amplitude* > ampFactors = ampMan->getFactors(ampNames[iamp]);
665  vector <vector <int> > permutations = ampMan->getPermutations(ampNames[iamp]);
666 
667  int nPerm = permutations.size();
668  int nFact = ampFactors.size();
669 
670  int iLocalOffset = 0;
671 
672  for (unsigned int iperm = 0; iperm < nPerm; iperm++){
673 
674  cout << " PERMUTATION = ";
675  for (unsigned int ipar = 0; ipar < permutations[iperm].size(); ipar++){
676  cout << permutations[iperm][ipar] << " ";
677  }
678 
679  cout << endl << endl;
680 
681  int iOffsetP = iAmpFactOffset + 2 * iperm;
682 
683  for (unsigned int ifact = 0; ifact < nFact; ifact++){
684 
685  int iOffsetF = iOffsetP + 2 * nPerm * ifact;
686 
687  cout << " AMPLITUDE FACTOR = " << ampFactors[ifact]->name() << endl;
688  cout << " RESULT = ( "
689  << aVecs.m_pdAmpFactors[iOffsetF] << ", "
690  << aVecs.m_pdAmpFactors[iOffsetF+1] << " )"
691  << endl << endl;
692 
693  iLocalOffset += 2;
694  }
695  }
696 
697  // since there is only one event, we should be incrementing iAmpFactOffset
698  // by 2 * nPerm * nFact for each amplitude in the loop
699 
700  iAmpFactOffset += iLocalOffset;
701  }
702 
703  // Deallocate memory and return
704  aVecs.deallocAmpVecs();
705 }
706 
707 
708 void
709 AmpToolsInterface::printIntensity(string reactionName, Kinematics* kin) const {
710 
711  IntensityManager* intenMan = intensityManager(reactionName);
712 
713  cout << " ---------------------------------" << endl;
714  cout << " CALCULATING INTENSITY" << endl;
715  cout << " ---------------------------------" << endl << endl;
716  double intensity = intenMan->calcIntensity(kin);
717  cout << endl << " INTENSITY = " << intensity << endl << endl << endl;
718 
719 }
720 
721 
722 void
723 AmpToolsInterface::printEventDetails(string reactionName, Kinematics* kin) const {
724 
725  printKinematics(reactionName,kin);
726  printAmplitudes(reactionName,kin);
727  printIntensity(reactionName,kin);
728 
729 }
static vector< Amplitude * > m_userAmplitudes
ReactionInfo * reaction(const string &reactionName) const
vector< IntensityManager * > m_intensityManagers
virtual DataReader * clone() const =0
string m_ampVecsReactionName[MAXAMPVECS]
static vector< DataReader * > m_userDataReaders
unsigned long long m_iNEvents
Definition: AmpVecs.h:68
virtual Amplitude * clone() const =0
vector< CoherentSumInfo * > coherentSumList(const string &reactionName="", const string &sumName="") const
void allocateTerms(const IntensityManager &intenMan, bool bAllocIntensity=false)
Definition: AmpVecs.cc:235
const pair< string, vector< string > > & accMC() const
void setupFromConfigurationInfo(ConfigurationInfo *cfgInfo)
FunctionalityFlag m_functionality
ParameterManager * parameterManager() const
GPUManager m_gpuMan
Definition: AmpVecs.h:159
bool calcTerms(AmpVecs &ampVecs) const
void allocateCPUAmpStorage(const IntensityManager &intenMan)
Definition: AmpVecs.cc:280
map< string, NormIntInterface * > m_normIntMap
double calcIntensity(const Kinematics *kinematics) const
static void registerAmplitude(const Amplitude &defaultAmplitude)
void registerAmplitudeFactor(const Amplitude &defaultAmplitude)
int numEvents(unsigned int iDataSet=0) const
const vector< string > & particleList() const
DataReader * dataReader(const string &reactionName) const
AmpToolsInterface(FunctionalityFlag flag=kFull)
static const int MAXAMPVECS
map< string, DataReader * > m_dataReaderMap
map< string, DataReader * > m_accMCReaderMap
void copyAmpsFromGPU(AmpVecs &a)
Definition: GPUManager.cc:242
void writeResults(const string &fileName) const
Definition: FitResults.cc:622
ParameterManager * m_parameterManager
void deallocAmpVecs()
Definition: AmpVecs.cc:73
virtual double calcIntensities(AmpVecs &ampVecs) const =0
int termIndex(const string &termName) const
MinuitMinimizationManager * minuitMinimizationManager() const
map< string, DataReader * > m_genMCReaderMap
double likelihood() const
void loadEvents(DataReader *dataReader, unsigned int iDataSet=0)
ConfigurationInfo * m_configurationInfo
GDouble * m_pdAmps
Definition: AmpVecs.h:117
const vector< string > & getTermNames() const
LikelihoodCalculator * likelihoodCalculator(const string &reactionName) const
const vector< const Amplitude *> & getFactors(const string &name) const
#define NULL
Definition: URtypes.h:72
double intensity(int iEvent, unsigned int iDataSet=0) const
const pair< string, vector< string > > & genMC() const
map< string, DataReader * > m_bkgndReaderMap
void resetConfigurationInfo(ConfigurationInfo *cfgInfo)
unsigned long long m_iNTrueEvents
Definition: AmpVecs.h:75
static void registerDataReader(const DataReader &defaultDataReader)
ConfigurationInfo * configurationInfo() const
virtual void finalizeFit()
map< string, LikelihoodCalculator * > m_likCalcMap
const pair< string, vector< string > > & data() const
virtual Type type() const =0
FitResults * m_fitResults
complex< double > decayAmplitude(int iEvent, string ampName, unsigned int iDataSet=0) const
Kinematics * kinematics(int iEvent, unsigned int iDataSet=0)
const AmpParameter & getScale(const string &name) const
const vector< TLorentzVector > & particleList() const
Definition: Kinematics.cc:47
void printAmplitudes(string reactionName, Kinematics *kin) const
DataReader * bkgndReader(const string &reactionName) const
void loadData(DataReader *pDataReader, bool bForceNegativeWeight=false)
Definition: AmpVecs.cc:193
bool normIntFileInput() const
double alternateIntensity(int iEvent, unsigned int iDataSet=0) const
IntensityManager * intensityManager(const string &reactionName) const
void loadEvent(Kinematics *kin, int iEvent=0, int nEventsTotal=1, unsigned int iDataSet=0)
GDouble * m_pdIntensity
Definition: AmpVecs.h:137
const vector< vector< int > > & getPermutations(const string &name) const
complex< double > productionFactor(const string &termName) const
AmpVecs m_ampVecs[MAXAMPVECS]
void printKinematics(string reactionName, Kinematics *kin) const
vector< AmplitudeInfo * > amplitudeList(const string &reactionName="", const string &sumName="", const string &ampName="") const
Kinematics * getEvent(int i)
Definition: AmpVecs.cc:299
void clearEvents(unsigned int iDataSet=0)
string fitOutputFileName() const
void saveResults()
Definition: FitResults.cc:610
void loadEvent(const Kinematics *pKinematics, unsigned long long iEvent=0, unsigned long long iNTrueEvents=1, bool bForceNegativeWeight=false)
Definition: AmpVecs.cc:128
void printEventDetails(string reactionName, Kinematics *kin) const
vector< ReactionInfo * > reactionList(const string &reactionName="") const
GDouble * m_pdAmpFactors
Definition: AmpVecs.h:124
void printIntensity(string reactionName, Kinematics *kin) const
DataReader * accMCReader(const string &reactionName) const
complex< double > scaledProductionAmplitude(string ampName, unsigned int iDataSet=0) const
double processEvents(string reactionName, unsigned int iDataSet=0)
string reactionName() const
NormIntInterface * normIntInterface(const string &reactionName) const
const pair< string, vector< string > > & bkgnd() const
string normIntFile() const
MinuitMinimizationManager * m_minuitMinimizationManager
DataReader * genMCReader(const string &reactionName) const