/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Generator/BesEvtGen/BesEvtGen-00-03-58/src/EvtGen/EvtGenBase/EvtAmplitudeSum.hh

Go to the documentation of this file.
00001 /*******************************************************************************
00002  * Project: BaBar detector at the SLAC PEP-II B-factory
00003  * Package: EvtGenBase
00004  *    File: $Id: EvtAmplitudeSum.hh,v 1.1.1.2 2007/10/26 05:03:14 pingrg Exp $
00005  *  Author: Alexei Dvoretskii, dvoretsk@slac.stanford.edu, 2001-2002
00006  *
00007  * Copyright (C) 2002 Caltech
00008  *******************************************************************************/
00009 
00010 #ifndef EVT_AMPLITUDE_SUM_HH
00011 #define EVT_AMPLITUDE_SUM_HH
00012 
00013 #include <stdio.h>
00014 #include <assert.h>
00015 #include <vector>
00016 #include "EvtGenBase/EvtAmplitude.hh"
00017 
00018 template <class T>
00019 class EvtAmplitudeSum : public EvtAmplitude<T> {
00020   
00021 public:
00022   
00023   EvtAmplitudeSum() {}
00024   EvtAmplitudeSum(const EvtAmplitudeSum<T>& other)
00025     : EvtAmplitude<T>(other)
00026   {
00027     int i;
00028     for(i=0;i<other.nTerms();i++) {
00029       
00030       EvtComplex c = other.c(i);      
00031       _c.push_back(c);
00032       EvtAmplitude<T>* amp = other.getTerm(i);
00033       assert(amp);
00034       EvtAmplitude<T>* amp1 = amp->clone();
00035       assert(amp1);
00036       _term.push_back(amp1);
00037     }
00038   }
00039   
00040   virtual ~EvtAmplitudeSum()
00041   {
00042     int i;
00043     for(i=0;i<_term.size();i++) {
00044       
00045       delete _term[i];
00046     }
00047   }  
00048   
00049   virtual EvtAmplitude<T>* clone() const
00050   {
00051     return new EvtAmplitudeSum<T>(*this);
00052   }
00053   
00054   
00055   void addTerm(EvtComplex c,const EvtAmplitude<T>& amp)
00056   {
00057     _c.push_back(c);
00058     _term.push_back(amp.clone());
00059   }
00060   
00061   void addOwnedTerm(EvtComplex c, EvtAmplitude<T>* amp)
00062   {
00063     assert(amp);
00064     _c.push_back(c);
00065     _term.push_back(amp);
00066   }
00067   
00068   int nTerms() const { return _term.size(); }  // number of terms
00069 
00070   void print() const {
00071 
00072     int N = nTerms();
00073     printf("Amplitude has %d terms\n",N);
00074     int i;
00075     for(i=0;i<N;i++) {
00076       printf("c%d = (%f,%f)\n",i,real(_c[i]),imag(_c[i]));
00077       assert(_term[i]);
00078     }
00079   }
00080 
00081 
00082   inline EvtComplex   c(int i) const { return _c[i]; }
00083   inline EvtAmplitude<T>*  getTerm(int i) const { return _term[i]; }
00084 
00085 protected:
00086 
00087   virtual EvtComplex amplitude(const T& p) const
00088   {
00089     if(_term.size() == 0) 
00090       printf("Warning: amplitude sum has zero terms\n");
00091     
00092     EvtComplex value = 0.;
00093     int i;
00094     for(i=0;i<_term.size();i++) {
00095     
00096       value+=_c[i]*_term[i]->evaluate(p);    
00097     }    
00098     return value;
00099   }
00100 
00101 private:
00102   
00103   std::vector<EvtComplex> _c;              // coefficients
00104   std::vector<EvtAmplitude<T>*> _term;  // pointers to amplitudes
00105 }; 
00106 
00107 
00108 #endif
00109 
00110 

Generated on Tue Nov 29 23:12:12 2016 for BOSS_7.0.2 by  doxygen 1.4.7