BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtSpinDensity Class Reference

#include <EvtSpinDensity.hh>

Public Member Functions

 EvtSpinDensity (const EvtSpinDensity &density)
EvtSpinDensityoperator= (const EvtSpinDensity &density)
virtual ~EvtSpinDensity ()
 EvtSpinDensity ()
void SetDim (int n)
int GetDim () const
void Set (int i, int j, const EvtComplex &rhoij)
const EvtComplexGet (int i, int j) const
double NormalizedProb (const EvtSpinDensity &d)
void SetDiag (int n)
int Check ()

Friends

std::ostream & operator<< (std::ostream &s, const EvtSpinDensity &d)

Detailed Description

Definition at line 26 of file EvtSpinDensity.hh.

Constructor & Destructor Documentation

◆ EvtSpinDensity() [1/2]

EvtSpinDensity::EvtSpinDensity ( const EvtSpinDensity & density)

Definition at line 32 of file EvtSpinDensity.cc.

32 {
33 dim = 0;
34 rho = 0;
35
36 int i, j;
37 SetDim( density.dim );
38
39 for ( i = 0; i < dim; i++ )
40 {
41 for ( j = 0; j < dim; j++ ) { rho[i][j] = density.rho[i][j]; }
42 }
43}
void SetDim(int n)

Referenced by EvtSpinDensity(), NormalizedProb(), operator<<, and operator=().

◆ ~EvtSpinDensity()

EvtSpinDensity::~EvtSpinDensity ( )
virtual

Definition at line 57 of file EvtSpinDensity.cc.

57 {
58 if ( dim != 0 )
59 {
60 int i;
61 for ( i = 0; i < dim; i++ ) delete[] rho[i];
62 }
63
64 delete[] rho;
65}

◆ EvtSpinDensity() [2/2]

EvtSpinDensity::EvtSpinDensity ( )

Definition at line 67 of file EvtSpinDensity.cc.

67 {
68 dim = 0;
69 rho = 0;
70}

Member Function Documentation

◆ Check()

int EvtSpinDensity::Check ( )

Definition at line 138 of file EvtSpinDensity.cc.

138 {
139
140 if ( dim < 1 )
141 { report( ERROR, "EvtGen" ) << "dim=" << dim << "in SpinDensity::Check" << endl; }
142
143 int i, j;
144
145 for ( i = 0; i < dim; i++ )
146 {
147
148 if ( real( rho[i][i] ) < 0.0 ) return 0;
149 if ( imag( rho[i][i] ) * 1000000.0 > abs( rho[i][i] ) )
150 {
151 report( INFO, "EvtGen" ) << "Failing 1" << endl;
152 return 0;
153 }
154 }
155
156 for ( i = 0; i < dim; i++ )
157 {
158 for ( j = i + 1; j < dim; j++ )
159 {
160 if ( fabs( real( rho[i][j] - rho[j][i] ) ) >
161 0.00000001 * ( abs( rho[i][i] ) + abs( rho[j][j] ) ) )
162 {
163 report( INFO, "EvtGen" ) << "Failing 2" << endl;
164 return 0;
165 }
166 if ( fabs( imag( rho[i][j] + rho[j][i] ) ) >
167 0.00000001 * ( abs( rho[i][i] ) + abs( rho[j][j] ) ) )
168 {
169 report( INFO, "EvtGen" ) << "Failing 3" << endl;
170 return 0;
171 }
172 }
173 }
174
175 return 1;
176}
double imag(const EvtComplex &c)
ostream & report(Severity severity, const char *facility)
Definition EvtReport.cc:34
@ ERROR
Definition EvtReport.hh:49
@ INFO
Definition EvtReport.hh:52

Referenced by EvtDecayAmp::makeDecay().

◆ Get()

const EvtComplex & EvtSpinDensity::Get ( int i,
int j ) const

Definition at line 96 of file EvtSpinDensity.cc.

96 {
97 assert( i < dim && j < dim );
98 return rho[i][j];
99}

Referenced by EvtAmp::contract(), EvtParticle::setSpinDensityForwardHelicityBasis(), and EvtParticle::setSpinDensityForwardHelicityBasis().

◆ GetDim()

int EvtSpinDensity::GetDim ( ) const

◆ NormalizedProb()

double EvtSpinDensity::NormalizedProb ( const EvtSpinDensity & d)

Definition at line 112 of file EvtSpinDensity.cc.

112 {
113
114 int i, j;
115 EvtComplex prob( 0.0, 0.0 );
116 double norm = 0.0;
117
118 if ( dim != d.dim )
119 {
120 report( ERROR, "EvtGen" ) << "Not matching dimensions in NormalizedProb" << endl;
121 ::abort();
122 }
123
124 for ( i = 0; i < dim; i++ )
125 {
126 norm += real( rho[i][i] );
127 for ( j = 0; j < dim; j++ ) { prob += rho[i][j] * d.rho[i][j]; }
128 }
129
130 if ( imag( prob ) > 0.00000001 * real( prob ) )
131 { report( ERROR, "EvtGen" ) << "Imaginary probability:" << prob << " " << norm << endl; }
132 if ( real( prob ) < 0.0 )
133 { report( ERROR, "EvtGen" ) << "Negative probability:" << prob << " " << norm << endl; }
134
135 return real( prob ) / norm;
136}

Referenced by EvtbTosllAmp::CalcMaxProb(), EvtSemiLeptonicAmp::CalcMaxProb(), and EvtDecayAmp::makeDecay().

◆ operator=()

EvtSpinDensity & EvtSpinDensity::operator= ( const EvtSpinDensity & density)

Definition at line 45 of file EvtSpinDensity.cc.

45 {
46 int i, j;
47 SetDim( density.dim );
48
49 for ( i = 0; i < dim; i++ )
50 {
51 for ( j = 0; j < dim; j++ ) { rho[i][j] = density.rho[i][j]; }
52 }
53
54 return *this;
55}

◆ Set()

void EvtSpinDensity::Set ( int i,
int j,
const EvtComplex & rhoij )

◆ SetDiag()

void EvtSpinDensity::SetDiag ( int n)

Definition at line 101 of file EvtSpinDensity.cc.

101 {
102 SetDim( n );
103 int i, j;
104
105 for ( i = 0; i < n; i++ )
106 {
107 for ( j = 0; j < n; j++ ) { rho[i][j] = EvtComplex( 0.0 ); }
108 rho[i][i] = EvtComplex( 1.0 );
109 }
110}
const Int_t n

Referenced by EvtbTosllAmp::CalcMaxProb(), EvtSemiLeptonicAmp::CalcMaxProb(), EvtParticle::decay(), EvtDecayIncoherent::makeDecay(), EvtDecayProb::makeDecay(), EvtParticleFactory::particleFactory(), EvtParticle::setPolarizedSpinDensity(), and EvtParticle::setVectorSpinDensity().

◆ SetDim()

void EvtSpinDensity::SetDim ( int n)

Definition at line 72 of file EvtSpinDensity.cc.

72 {
73 if ( dim == n ) return;
74 if ( dim != 0 )
75 {
76 int i;
77 for ( i = 0; i < dim; i++ ) delete[] rho[i];
78 delete[] rho;
79 rho = 0;
80 dim = 0;
81 }
82 if ( n == 0 ) return;
83 dim = n;
84 rho = new EvtComplexPtr[n];
85 int i;
86 for ( i = 0; i < n; i++ ) { rho[i] = new EvtComplex[n]; }
87}
EvtComplex * EvtComplexPtr
Definition EvtComplex.hh:68

Referenced by EvtAmp::contract(), EvtVectorIsr::decay(), EvtSpinDensity(), EvtAmp::getBackwardSpinDensity(), EvtAmp::getForwardSpinDensity(), EvtAmp::getSpinDensity(), EvtDecayAmp::makeDecay(), operator=(), and SetDiag().

◆ operator<<

std::ostream & operator<< ( std::ostream & s,
const EvtSpinDensity & d )
friend

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