1 /*******************************************************************************
2 * Project: BaBar detector at the SLAC PEP-II B-factory
4 * File: $Id: EvtAmplitudeSum.hh,v 1.10 2009/02/18 03:31:37 ryd Exp $
5 * Author: Alexei Dvoretskii, dvoretsk@slac.stanford.edu, 2001-2002
7 * Copyright (C) 2002 Caltech
8 *******************************************************************************/
10 #ifndef EVT_AMPLITUDE_SUM_HH
11 #define EVT_AMPLITUDE_SUM_HH
16 #include "EvtGenBase/EvtAmplitude.hh"
19 class EvtAmplitudeSum : public EvtAmplitude<T> {
24 EvtAmplitudeSum(const EvtAmplitudeSum<T>& other)
25 : EvtAmplitude<T>(other)
28 for(i=0;i<other.nTerms();i++) {
30 EvtComplex c = other.c(i);
32 EvtAmplitude<T>* amp = other.getTerm(i);
34 EvtAmplitude<T>* amp1 = amp->clone();
36 _term.push_back(amp1);
40 virtual ~EvtAmplitudeSum()
42 for(size_t i=0;i<_term.size();i++) {
48 virtual EvtAmplitude<T>* clone() const
50 return new EvtAmplitudeSum<T>(*this);
54 void addTerm(EvtComplex c,const EvtAmplitude<T>& amp)
57 _term.push_back(amp.clone());
60 void addOwnedTerm(EvtComplex c, EvtAmplitude<T>* amp)
67 int nTerms() const { return _term.size(); } // number of terms
72 printf("Amplitude has %d terms\n",N);
75 printf("c%d = (%f,%f)\n",i,real(_c[i]),imag(_c[i]));
81 inline EvtComplex c(int i) const { return _c[i]; }
82 inline EvtAmplitude<T>* getTerm(int i) const { return _term[i]; }
86 virtual EvtComplex amplitude(const T& p) const
89 printf("Warning: amplitude sum has zero terms\n");
91 EvtComplex value = 0.;
93 for(size_t i=0;i<_term.size();i++) {
94 value+=_c[i]*_term[i]->evaluate(p);
101 std::vector<EvtComplex> _c; // coefficients
102 std::vector<EvtAmplitude<T>*> _term; // pointers to amplitudes