BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
BOSS_Gen/BesEvtGen/src/EvtGen/EvtGenModels/EvtDIY.cc
Go to the documentation of this file.
1//--------------------------------------------------------------------------
2//
3// Environment:
4// This software is part of models developed at BES collaboration
5// based on the EvtGen framework. If you use all or part
6// of it, please give an appropriate acknowledgement.
7//
8// Copyright Information: See EvtGen/BesCopyright
9// Copyright (A) 2006 Ping Rong-Gang @IHEP
10//
11// Module: EvtDIY.cc
12//
13// Description: Model provided by user, see the mannual
14//
15// Modification history:
16//
17// Ping R.-G. December, 2006 Module created
18//
19//------------------------------------------------------------------------
20
21#include "EvtDIY.hh"
40#include <stdlib.h>
41#include <string>
42using namespace std; //::endl;
43
45
46void EvtDIY::getName( std::string& model_name ) { model_name = "DIY"; }
47
49
51
52 // check that there are 1 arguments:angular distribution parameter
53 // checkNArg(0);
54 // checkNDaug(2);
56 // if ( parenttype == EvtSpinType::SCALAR ){
57 // report(ERROR,"EvtGen")<<"Scalar decays with flat distribution"<<endl;
58 // ::abort();
59 // }
60}
62
63static int nrun = 1;
64static double max_amps = 0.0;
65
67
68 double amps, SamAmps, rd1;
69 // calculated the max amplitude square in 20000 events, is it enough larger?
70 if ( nrun == 1 )
71 {
72 int ir, nd;
73 for ( ir = 0; ir <= 200000; ir++ )
74 {
75 loop0:
77 int nd = p->getNDaug(), i;
78 _nd = nd;
79 for ( i = 0; i <= nd - 1; i++ )
80 {
81 _p4Lab[i] = p->getDaug( i )->getP4Lab();
82 _p4CM[i] = p->getDaug( i )->getP4();
83 }
84 amps = AmplitudeSquare();
85 if ( amps < 0 ) goto loop0;
86 if ( amps > max_amps ) max_amps = amps * 1.01;
87 nrun++;
88 }
89 }
90 if ( max_amps == 0.0 )
91 {
92 report( ERROR, "EvtGen" ) << "The decay amplitude square should be positive number"
93 << endl;
94 abort();
95 }
96 // cout<<"max_amp="<<max_amps<<endl;
97
98loop:
100 int i;
101 for ( i = 0; i <= p->getNDaug() - 1; i++ )
102 {
103 _p4Lab[i] = p->getDaug( i )->getP4Lab();
104 _p4CM[i] = p->getDaug( i )->getP4();
105 }
106 // Put phase space results into the daughters.
107 amps = AmplitudeSquare();
108 if ( amps < 0 ) goto loop;
109 SamAmps = amps / max_amps;
110 rd1 = EvtRandom::Flat( 0.0, 1.0 );
111 if ( rd1 >= SamAmps ) goto loop;
112 return;
113}
ostream & report(Severity severity, const char *facility)
Definition EvtReport.cc:34
@ ERROR
Definition EvtReport.hh:49
double AmplitudeSquare()
Definition UserDIY.cc:182
EvtDIY()
Definition EvtDIY.hh:32
EvtId getParentId()
EvtId * getDaugs()
static EvtSpinType::spintype getSpinType(EvtId i)
Definition EvtPDL.hh:66
EvtVector4R getP4Lab()
const EvtVector4R & getP4() const
int getNDaug() const
EvtParticle * getDaug(int i)
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
static double Flat()
Definition EvtRandom.cc:69