/******************************************************************************* * Project: BaBar detector at the SLAC PEP-II B-factory * Package: EvtGenBase * File: $Id: EvtAmplitudeSum.hh,v 1.10 2009/02/18 03:31:37 ryd Exp $ * Author: Alexei Dvoretskii, dvoretsk@slac.stanford.edu, 2001-2002 * * Copyright (C) 2002 Caltech *******************************************************************************/ #ifndef EVT_AMPLITUDE_SUM_HH #define EVT_AMPLITUDE_SUM_HH #include #include #include #include "EvtGenBase/EvtAmplitude.hh" template class EvtAmplitudeSum : public EvtAmplitude { public: EvtAmplitudeSum() {} EvtAmplitudeSum(const EvtAmplitudeSum& other) : EvtAmplitude(other) { int i; for(i=0;i* amp = other.getTerm(i); assert(amp); EvtAmplitude* amp1 = amp->clone(); assert(amp1); _term.push_back(amp1); } } virtual ~EvtAmplitudeSum() { for(size_t i=0;i<_term.size();i++) { delete _term[i]; } } virtual EvtAmplitude* clone() const { return new EvtAmplitudeSum(*this); } void addTerm(EvtComplex c,const EvtAmplitude& amp) { _c.push_back(c); _term.push_back(amp.clone()); } void addOwnedTerm(EvtComplex c, EvtAmplitude* amp) { assert(amp); _c.push_back(c); _term.push_back(amp); } int nTerms() const { return _term.size(); } // number of terms void print() const { int N = nTerms(); printf("Amplitude has %d terms\n",N); int i; for(i=0;i* getTerm(int i) const { return _term[i]; } protected: virtual EvtComplex amplitude(const T& p) const { if(_term.size() == 0) printf("Warning: amplitude sum has zero terms\n"); EvtComplex value = 0.; for(size_t i=0;i<_term.size();i++) { value+=_c[i]*_term[i]->evaluate(p); } return value; } private: std::vector _c; // coefficients std::vector*> _term; // pointers to amplitudes }; #endif