BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtIntervalDecayAmp< T > Class Template Referenceabstract

#include <EvtIntervalDecayAmp.hh>

Inheritance diagram for EvtIntervalDecayAmp< T >:

Public Member Functions

 EvtIntervalDecayAmp ()
 EvtIntervalDecayAmp (const EvtIntervalDecayAmp< T > &other)
virtual ~EvtIntervalDecayAmp ()
virtual void init ()
virtual void initProbMax ()
virtual void decay (EvtParticle *p)
virtual EvtAmpFactory< T > * createFactory (const EvtMultiChannelParser &parser)=0
virtual std::vector< EvtVector4RinitDaughters (const T &p) const =0
const T & x () const
EvtComplex amplNonCP (const T &x)
EvtPdfSum< T > * getPC ()
Public Member Functions inherited from EvtDecayAmp
void makeDecay (EvtParticle *p)
void setWeight (double weight)
void vertex (const EvtComplex &amp)
void vertex (int i1, const EvtComplex &amp)
void vertex (int i1, int i2, const EvtComplex &amp)
void vertex (int i1, int i2, int i3, const EvtComplex &amp)
void vertex (int *i1, const EvtComplex &amp)
virtual ~EvtDecayAmp ()
Public Member Functions inherited from EvtDecayBase
virtual void getName (std::string &name)=0
virtual EvtDecayBaseclone ()=0
virtual std::string commandName ()
virtual void command (std::string cmd)
double getProbMax (double prob)
double resetProbMax (double prob)
 EvtDecayBase ()
virtual ~EvtDecayBase ()
virtual bool matchingDecay (const EvtDecayBase &other) const
EvtId getParentId ()
double getBranchingFraction ()
void disableCheckQ ()
void checkQ ()
int getNDaug ()
EvtIdgetDaugs ()
EvtId getDaug (int i)
int getNArg ()
int getPHOTOS ()
void setPHOTOS ()
void setVerbose ()
void setSummary ()
double * getArgs ()
std::string * getArgsStr ()
double getArg (int j)
std::string getArgStr (int j)
std::string getModelName ()
int getDSum ()
int summary ()
int verbose ()
void saveDecayInfo (EvtId ipar, int ndaug, EvtId *daug, int narg, std::vector< std::string > &args, std::string name, double brfr)
void printSummary ()
void setProbMax (double prbmx)
void noProbMax ()
void checkNArg (int a1, int a2=-1, int a3=-1, int a4=-1)
void checkNDaug (int d1, int d2=-1)
void checkSpinParent (EvtSpinType::spintype sp)
void checkSpinDaughter (int d1, EvtSpinType::spintype sp)
virtual int nRealDaughters ()

Protected Attributes

double _probMax
int _nScan
_x
EvtAmpFactory< T > * _fact
Protected Attributes inherited from EvtDecayAmp
EvtAmp _amp2
Protected Attributes inherited from EvtDecayBase
bool _daugsDecayedByParentModel

Additional Inherited Members

Static Public Member Functions inherited from EvtDecayBase
static void findMasses (EvtParticle *p, int ndaugs, EvtId daugs[10], double masses[10])
static void findMass (EvtParticle *p)
static double findMaxMass (EvtParticle *p)
Protected Member Functions inherited from EvtDecayBase
bool daugsDecayedByParentModel ()

Detailed Description

template<class T>
class EvtIntervalDecayAmp< T >

Definition at line 38 of file EvtIntervalDecayAmp.hh.

Constructor & Destructor Documentation

◆ EvtIntervalDecayAmp() [1/2]

template<class T>
EvtIntervalDecayAmp< T >::EvtIntervalDecayAmp ( )
inline

Definition at line 41 of file EvtIntervalDecayAmp.hh.

Referenced by EvtIntervalDecayAmp().

◆ EvtIntervalDecayAmp() [2/2]

template<class T>
EvtIntervalDecayAmp< T >::EvtIntervalDecayAmp ( const EvtIntervalDecayAmp< T > & other)
inline

Definition at line 43 of file EvtIntervalDecayAmp.hh.

◆ ~EvtIntervalDecayAmp()

template<class T>
virtual EvtIntervalDecayAmp< T >::~EvtIntervalDecayAmp ( )
inlinevirtual

Definition at line 46 of file EvtIntervalDecayAmp.hh.

46{ delete _fact; }

Member Function Documentation

◆ amplNonCP()

template<class T>
EvtComplex EvtIntervalDecayAmp< T >::amplNonCP ( const T & x)
inline

Definition at line 157 of file EvtIntervalDecayAmp.hh.

157{ return _fact->getAmp()->evaluate( x ); }

Referenced by EvtBtoKD3P::decay(), and decay().

◆ createFactory()

template<class T>
virtual EvtAmpFactory< T > * EvtIntervalDecayAmp< T >::createFactory ( const EvtMultiChannelParser & parser)
pure virtual

Implemented in EvtPto3P.

Referenced by init().

◆ decay()

template<class T>
virtual void EvtIntervalDecayAmp< T >::decay ( EvtParticle * p)
inlinevirtual

Implements EvtDecayBase.

Definition at line 96 of file EvtIntervalDecayAmp.hh.

96 {
97 // Set things up in most general way
98
99 static EvtId B0 = EvtPDL::getId( "B0" );
100 static EvtId B0B = EvtPDL::getId( "anti-B0" );
101 double t;
103 EvtComplex ampl( 0., 0. );
104
105 // Sample using pole-compensator pdf
106
107 EvtPdfSum<T>* pc = getPC();
108 _x = pc->randomPoint();
109
110 if ( _fact->isCPModel() )
111 {
112
114 EvtComplex A = _fact->getAmp()->evaluate( _x );
115 EvtComplex Abar = _fact->getAmpConj()->evaluate( _x );
116 double dm = _fact->dm();
117
118 if ( other_b == B0B )
119 ampl = A * cos( dm * t / ( 2 * EvtConst::c ) ) +
120 Abar * sin( dm * t / ( 2 * EvtConst::c ) );
121 if ( other_b == B0 )
122 ampl = A * cos( dm * t / ( 2 * EvtConst::c ) ) -
123 Abar * sin( dm * t / ( 2 * EvtConst::c ) );
124 }
125 else { ampl = amplNonCP( _x ); }
126
127 // Pole-compensate
128
129 double comp = sqrt( pc->evaluate( _x ) );
130 assert( comp > 0 );
131 vertex( ampl / comp );
132
133 // Now generate random angles, rotate and setup
134 // the daughters
135
137
138 int N = p->getNDaug();
139 if ( v.size() != N )
140 {
141
142 report( INFO, "EvtGen" ) << "Number of daughters " << N << std::endl;
143 report( INFO, "EvtGen" ) << "Momentum vector size " << v.size() << std::endl;
144 assert( 0 );
145 }
146
147 int i;
148 for ( i = 0; i < N; i++ ) { p->getDaug( i )->init( getDaugs()[i], v[i] ); }
149 }
ostream & report(Severity severity, const char *facility)
Definition EvtReport.cc:34
static void OtherB(EvtParticle *p, double &t, EvtId &otherb)
Definition EvtCPUtil.cc:225
void vertex(const EvtComplex &amp)
EvtId * getDaugs()
EvtId getDaug(int i)
EvtPdfSum< T > * getPC()
EvtComplex amplNonCP(const T &x)
virtual std::vector< EvtVector4R > initDaughters(const T &p) const =0
static EvtId getId(const std::string &name)
Definition EvtPDL.cc:272

◆ getPC()

template<class T>
EvtPdfSum< T > * EvtIntervalDecayAmp< T >::getPC ( )
inline

Definition at line 158 of file EvtIntervalDecayAmp.hh.

158{ return _fact->getPC(); }

Referenced by EvtBtoKD3P::decay(), and decay().

◆ init()

template<class T>
virtual void EvtIntervalDecayAmp< T >::init ( )
inlinevirtual

Reimplemented from EvtDecayBase.

Definition at line 50 of file EvtIntervalDecayAmp.hh.

50 {
51 // Collect model parameters and parse them
52
54 int i;
55 for ( i = 0; i < getNArg(); i++ ) args.push_back( getArgStr( i ) );
57 parser.parse( args );
58
59 // Create factory and interval
60
61 if ( VERBOSE ) report( INFO, "EvtGen" ) << "Create factory and interval" << std::endl;
63
64 // Maximum PDF value over the Dalitz plot can be specified, or a scan
65 // can be performed.
66
67 _probMax = parser.pdfMax();
68 _nScan = parser.nScan();
69 if ( VERBOSE ) report( INFO, "EvtGen" ) << "Pdf maximum " << _probMax << std::endl;
70 if ( VERBOSE ) report( INFO, "EvtGen" ) << "Scan number " << _nScan << std::endl;
71 }
std::string getArgStr(int j)
virtual EvtAmpFactory< T > * createFactory(const EvtMultiChannelParser &parser)=0

◆ initDaughters()

template<class T>
virtual std::vector< EvtVector4R > EvtIntervalDecayAmp< T >::initDaughters ( const T & p) const
pure virtual

Implemented in EvtPto3P.

Referenced by decay().

◆ initProbMax()

template<class T>
virtual void EvtIntervalDecayAmp< T >::initProbMax ( )
inlinevirtual

Reimplemented from EvtDecayBase.

Definition at line 73 of file EvtIntervalDecayAmp.hh.

73 {
74 if ( 0 == _nScan )
75 {
76
77 if ( _probMax > 0 ) setProbMax( _probMax );
78 else assert( 0 );
79 }
80 else
81 {
82
83 double factor = 1.2; // increase maximum probability by 20%
84 EvtAmpPdf<T> pdf( *_fact->getAmp() );
85 EvtPdfSum<T>* pc = _fact->getPC();
87 printf( "Sampling %d points to find maximum\n", _nScan );
88 EvtPdfMax<T> x = pdfdiv.findMax( *pc, _nScan );
89 _probMax = factor * x.value();
90 printf( "Found maximum %f\n", x.value() );
91 printf( "Increase to %f\n", _probMax );
93 }
94 }
void setProbMax(double prbmx)

◆ x()

template<class T>
const T & EvtIntervalDecayAmp< T >::x ( ) const
inline

Definition at line 156 of file EvtIntervalDecayAmp.hh.

156{ return _x; }

Referenced by amplNonCP(), and initProbMax().

Member Data Documentation

◆ _fact

template<class T>
EvtAmpFactory<T>* EvtIntervalDecayAmp< T >::_fact
protected

◆ _nScan

template<class T>
int EvtIntervalDecayAmp< T >::_nScan
protected

◆ _probMax

template<class T>
double EvtIntervalDecayAmp< T >::_probMax
protected

◆ _x

template<class T>
T EvtIntervalDecayAmp< T >::_x
protected

Definition at line 163 of file EvtIntervalDecayAmp.hh.

Referenced by decay(), and x().


The documentation for this class was generated from the following file: