#include <EvtAmpPdf.hh>
Inheritance diagram for EvtAmpPdf< T >:
Public Member Functions | |
EvtAmpPdf () | |
EvtAmpPdf (const EvtAmplitude< T > &) | |
EvtAmpPdf (const EvtAmpPdf< T > &other) | |
virtual | ~EvtAmpPdf () |
virtual EvtAmpPdf< T > * | clone () const |
virtual double | pdf (const T &p) const |
double | evaluate (const T &p) const |
EvtPdfMax< T > | findMax (const EvtPdf< T > &pc, int N) |
EvtValError | findGenEff (const EvtPdf< T > &pc, int N, int nFindMax) |
void | setItg (EvtValError itg) |
EvtValError | getItg () const |
EvtValError | getItg (int N) const |
virtual EvtValError | compute_integral () const |
virtual EvtValError | compute_integral (int N) const |
EvtValError | compute_mc_integral (const EvtPdf< T > &pc, int N) |
EvtPredGen< EvtPdfGen< T >, EvtPdfPred< T > > | accRejGen (const EvtPdf< T > &pc, int nMax, double factor=1.) |
virtual T | randomPoint () |
Protected Attributes | |
EvtValError | _itg |
Private Attributes | |
EvtAmplitude< T > * | _amp |
Definition at line 19 of file EvtAmpPdf.hh.
EvtAmpPdf< T >::EvtAmpPdf | ( | const EvtAmplitude< T > & | amp | ) | [inline] |
EvtPredGen< EvtPdfGen< T >, EvtPdfPred< T > > EvtPdf< T >::accRejGen | ( | const EvtPdf< T > & | pc, | |
int | nMax, | |||
double | factor = 1. | |||
) | [inherited] |
Definition at line 301 of file EvtPdf.hh.
References EvtPdfPred< T >::compute_max(), and iter().
Referenced by EvtPdf< T >::findGenEff().
00302 { 00303 EvtPdfGen<T> gen(pc); 00304 EvtPdfDiv<T> pdfdiv(*this,pc); 00305 EvtPdfPred<T> pred(pdfdiv); 00306 pred.compute_max(iter(gen,nMax),iter(gen),factor); 00307 return EvtPredGen<EvtPdfGen<T>,EvtPdfPred<T> >(gen,pred); 00308 }
Implements EvtPdf< T >.
Definition at line 27 of file EvtAmpPdf.hh.
References EvtAmpPdf< T >::EvtAmpPdf().
00027 { return new EvtAmpPdf(*this); }
virtual EvtValError EvtPdf< T >::compute_integral | ( | int | N | ) | const [inline, virtual, inherited] |
Reimplemented in EvtDalitzFlatPdf, EvtDalitzResPdf, EvtPdfSum< T >, and EvtPdfSum< EvtDalitzPoint >.
Definition at line 95 of file EvtPdf.hh.
00095 { return compute_integral(); }
virtual EvtValError EvtPdf< T >::compute_integral | ( | ) | const [inline, virtual, inherited] |
Reimplemented in EvtIntegPdf1D, EvtIntervalFlatPdf, EvtPdfSum< T >, and EvtPdfSum< EvtDalitzPoint >.
Definition at line 92 of file EvtPdf.hh.
Referenced by EvtPdf< EvtPoint1D >::compute_integral(), and EvtPdf< EvtPoint1D >::getItg().
00094 { printf("Analytic integration of PDF is not defined\n"); assert(0); return compute_integral();}
EvtValError EvtPdf< T >::compute_mc_integral | ( | const EvtPdf< T > & | pc, | |
int | N | |||
) | [inherited] |
Definition at line 253 of file EvtPdf.hh.
References EvtPdf< T >::_itg, deljobs::end, ers::error, EvtPdf< T >::evaluate(), EvtPdf< T >::getItg(), iter(), and x.
00254 { 00255 assert(N > 0); 00256 00257 EvtValError otherItg = pc.getItg(); 00258 EvtPdfDiv<T> pdfdiv(*this,pc); 00259 EvtPdfUnary<T> unary(pdfdiv); 00260 00261 EvtPdfGen<T> gen(pc); 00262 EvtStreamInputIterator<T> begin = iter(gen,N); 00263 EvtStreamInputIterator<T> end; 00264 00265 double sum = 0.; 00266 double sum2 = 0.; 00267 while(!(begin == end)) { 00268 00269 double value = pdfdiv.evaluate(*begin++); 00270 sum += value; 00271 sum2 += value*value; 00272 } 00273 00274 EvtValError x; 00275 if(N > 0) { 00276 double av = sum/((double) N); 00277 if(N > 1) { 00278 double dev2 = (sum2 - av*av*N)/((double) (N - 1)); 00279 // Due to numerical precision dev2 may sometimes be negative 00280 if(dev2 < 0.) dev2 = 0.; 00281 double error = sqrt(dev2/((double) N)); 00282 x = EvtValError(av,error); 00283 } 00284 else x = EvtValError(av); 00285 } 00286 _itg = x * pc.getItg(); 00287 return _itg; 00288 }
double EvtPdf< T >::evaluate | ( | const T & | p | ) | const [inline, inherited] |
Definition at line 65 of file EvtPdf.hh.
Referenced by EvtPdf< T >::compute_mc_integral(), EvtIntervalDecayAmp< EvtDalitzPoint >::decay(), EvtBtoKD3P::decay(), EvtRelBreitWignerBarrierFact::getRandMass(), and EvtPdfSum< T >::pdf().
00065 { 00066 if(p.isValid()) return pdf(p); 00067 else return 0.; 00068 }
EvtValError EvtPdf< T >::findGenEff | ( | const EvtPdf< T > & | pc, | |
int | N, | |||
int | nFindMax | |||
) | [inherited] |
Definition at line 241 of file EvtPdf.hh.
References EvtPdf< T >::accRejGen(), showlog::err, EvtPredGen< Generator, Predicate >::getPassed(), EvtPredGen< Generator, Predicate >::getTried(), and genRecEmupikp::i.
00242 { 00243 assert(N > 0 || nFindMax > 0); 00244 EvtPredGen<EvtPdfGen<T>,EvtPdfPred<T> > gen = accRejGen(pc,nFindMax); 00245 int i; 00246 for(i=0;i<N;i++) gen(); 00247 double eff = double(gen.getPassed())/double(gen.getTried()); 00248 double err = sqrt(double(gen.getPassed()))/double(gen.getTried()); 00249 return EvtValError(eff,err); 00250 }
Definition at line 230 of file EvtPdf.hh.
References EvtPdfPred< T >::compute_max(), EvtPdfPred< T >::getMax(), and iter().
Referenced by EvtIntervalDecayAmp< EvtDalitzPoint >::initProbMax().
00231 { 00232 EvtPdfPred<T> pred(*this); 00233 EvtPdfGen<T> gen(pc); 00234 pred.compute_max(iter(gen,N),iter(gen)); 00235 EvtPdfMax<T> p = pred.getMax(); 00236 return p; 00237 }
EvtValError EvtPdf< T >::getItg | ( | int | N | ) | const [inline, inherited] |
Definition at line 87 of file EvtPdf.hh.
00087 { 00088 if(!_itg.valueKnown()) _itg = compute_integral(N); 00089 return _itg; 00090 }
EvtValError EvtPdf< T >::getItg | ( | ) | const [inline, inherited] |
Definition at line 83 of file EvtPdf.hh.
Referenced by EvtPdfSum< T >::compute_integral(), EvtPdf< T >::compute_mc_integral(), and EvtPdfSum< T >::randomPoint().
00083 { 00084 if(!_itg.valueKnown()) _itg = compute_integral(); 00085 return _itg; 00086 }
virtual double EvtAmpPdf< T >::pdf | ( | const T & | p | ) | const [inline, virtual] |
Implements EvtPdf< T >.
Definition at line 29 of file EvtAmpPdf.hh.
References EvtAmpPdf< T >::_amp, and imag().
00030 { 00031 EvtComplex amp = _amp->evaluate(p); 00032 return real(amp)*real(amp) + imag(amp)*imag(amp); 00033 }
T EvtPdf< T >::randomPoint | ( | ) | [virtual, inherited] |
Reimplemented in EvtDalitzFlatPdf, EvtDalitzResPdf, EvtIntegPdf1D, EvtIntervalFlatPdf, EvtPdfSum< T >, and EvtPdfSum< EvtDalitzPoint >.
Definition at line 291 of file EvtPdf.hh.
References T, and subSeperate::temp.
00292 { 00293 printf("Function defined for analytic PDFs only\n"); 00294 assert(0); 00295 T temp; 00296 return temp; 00297 }
void EvtPdf< T >::setItg | ( | EvtValError | itg | ) | [inline, inherited] |
EvtAmplitude<T>* EvtAmpPdf< T >::_amp [private] |
Definition at line 37 of file EvtAmpPdf.hh.
Referenced by EvtAmpPdf< T >::pdf(), and EvtAmpPdf< T >::~EvtAmpPdf().
EvtValError EvtPdf< T >::_itg [mutable, protected, inherited] |
Reimplemented in EvtPdfSum< T >, and EvtPdfSum< EvtDalitzPoint >.
Definition at line 111 of file EvtPdf.hh.
Referenced by EvtPdf< T >::compute_mc_integral(), EvtPdf< EvtPoint1D >::getItg(), and EvtPdf< EvtPoint1D >::setItg().