evtgen is hosted by Hepforge, IPPP Durham
EvtGen  2.0.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
Evt3Rank3C.hh
Go to the documentation of this file.
1 
2 /***********************************************************************
3 * Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
4 * *
5 * This file is part of EvtGen. *
6 * *
7 * EvtGen is free software: you can redistribute it and/or modify *
8 * it under the terms of the GNU General Public License as published by *
9 * the Free Software Foundation, either version 3 of the License, or *
10 * (at your option) any later version. *
11 * *
12 * EvtGen is distributed in the hope that it will be useful, *
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15 * GNU General Public License for more details. *
16 * *
17 * You should have received a copy of the GNU General Public License *
18 * along with EvtGen. If not, see <https://www.gnu.org/licenses/>. *
19 ***********************************************************************/
20 
21 #ifndef EVT3RANK3C_HH
22 #define EVT3RANK3C_HH
23 
24 #include "EvtGenBase/EvtComplex.hh"
25 
26 #include <iostream>
27 
28 class EvtTensor3C;
29 class EvtVector3C;
30 class EvtVector3R;
31 
32 class Evt3Rank3C;
33 inline Evt3Rank3C operator*( const EvtComplex& c, const Evt3Rank3C& t2 );
34 inline Evt3Rank3C operator*( const double d, const Evt3Rank3C& t2 );
35 inline Evt3Rank3C operator*( const Evt3Rank3C& t2, const EvtComplex& c );
36 inline Evt3Rank3C operator*( const Evt3Rank3C& t2, const double d );
37 inline Evt3Rank3C operator+( const Evt3Rank3C& t1, const Evt3Rank3C& t2 );
38 inline Evt3Rank3C operator-( const Evt3Rank3C& t1, const Evt3Rank3C& t2 );
39 Evt3Rank3C directProd( const EvtVector3C& c1, const EvtVector3C& c2,
40  const EvtVector3C& c3 );
41 Evt3Rank3C conj( const Evt3Rank3C& t2 );
42 
43 class Evt3Rank3C final {
44  friend Evt3Rank3C operator*( const EvtComplex& c, const Evt3Rank3C& t2 );
45  friend Evt3Rank3C operator*( const double d, const Evt3Rank3C& t2 );
46  friend Evt3Rank3C operator*( const Evt3Rank3C& t2, const EvtComplex& c );
47  friend Evt3Rank3C operator*( const Evt3Rank3C& t2, const double d );
48  friend Evt3Rank3C operator+( const Evt3Rank3C& t1, const Evt3Rank3C& t2 );
49  friend Evt3Rank3C operator-( const Evt3Rank3C& t1, const Evt3Rank3C& t2 );
50  friend Evt3Rank3C directProd( const EvtVector3C& c1, const EvtVector3C& c2,
51  const EvtVector3C& c3 );
52  friend Evt3Rank3C conj( const Evt3Rank3C& t2 );
53 
54  friend std::ostream& operator<<( std::ostream& s, const Evt3Rank3C& t2 );
55 
56  public:
57  Evt3Rank3C();
58  Evt3Rank3C( const Evt3Rank3C& t1 );
59  Evt3Rank3C& operator=( const Evt3Rank3C& t1 );
60  inline void set( int i, int j, int k, const EvtComplex& c );
61  inline const EvtComplex& get( int i, int j, int k ) const;
62  void zero();
63 
64  Evt3Rank3C& operator+=( const Evt3Rank3C& t2 );
65  Evt3Rank3C& operator-=( const Evt3Rank3C& t2 );
66  Evt3Rank3C& operator*=( const double d );
67  Evt3Rank3C& operator*=( const EvtComplex& c );
68  Evt3Rank3C conj() const;
69  EvtTensor3C cont1( const EvtVector3C& v ) const;
70  EvtTensor3C cont2( const EvtVector3C& v ) const;
71  EvtTensor3C cont3( const EvtVector3C& v ) const;
72  EvtTensor3C cont1( const EvtVector3R& v ) const;
73  EvtTensor3C cont2( const EvtVector3R& v ) const;
74  EvtTensor3C cont3( const EvtVector3R& v ) const;
75 
76  private:
77  EvtComplex t[3][3][3];
78 };
79 
80 inline Evt3Rank3C operator*( const EvtComplex& c, const Evt3Rank3C& t2 )
81 {
82  return Evt3Rank3C( t2 ) *= c;
83 }
84 
85 inline Evt3Rank3C operator*( const double d, const Evt3Rank3C& t2 )
86 {
87  return Evt3Rank3C( t2 ) *= d;
88 }
89 
90 inline Evt3Rank3C operator*( const Evt3Rank3C& t2, const EvtComplex& c )
91 {
92  return Evt3Rank3C( t2 ) *= c;
93 }
94 
95 inline Evt3Rank3C operator*( const Evt3Rank3C& t2, const double d )
96 {
97  return Evt3Rank3C( t2 ) *= d;
98 }
99 
100 inline Evt3Rank3C operator+( const Evt3Rank3C& t1, const Evt3Rank3C& t2 )
101 {
102  return Evt3Rank3C( t1 ) += t2;
103 }
104 
105 inline Evt3Rank3C operator-( const Evt3Rank3C& t1, const Evt3Rank3C& t2 )
106 {
107  return Evt3Rank3C( t1 ) -= t2;
108 }
109 
110 inline void Evt3Rank3C::set( int i, int j, int k, const EvtComplex& c )
111 {
112  t[i][j][k] = c;
113 }
114 
115 inline const EvtComplex& Evt3Rank3C::get( int i, int j, int k ) const
116 {
117  return t[i][j][k];
118 }
119 
120 #endif
EvtTensor3C cont1(const EvtVector3C &v) const
Definition: Evt3Rank3C.cpp:188
void zero()
Definition: Evt3Rank3C.cpp:75
EvtTensor3C cont2(const EvtVector3C &v) const
Definition: Evt3Rank3C.cpp:204
Evt3Rank3C & operator *=(const double d)
Definition: Evt3Rank3C.cpp:157
Evt3Rank3C operator *(const EvtComplex &c, const Evt3Rank3C &t2)
Definition: Evt3Rank3C.hh:80
void set(int i, int j, int k, const EvtComplex &c)
Definition: Evt3Rank3C.hh:110
friend Evt3Rank3C directProd(const EvtVector3C &c1, const EvtVector3C &c2, const EvtVector3C &c3)
Evt3Rank3C operator+(const Evt3Rank3C &t1, const Evt3Rank3C &t2)
Definition: Evt3Rank3C.hh:100
Evt3Rank3C & operator+=(const Evt3Rank3C &t2)
Definition: Evt3Rank3C.cpp:114
Evt3Rank3C conj(const Evt3Rank3C &t2)
Definition: Evt3Rank3C.cpp:172
Evt3Rank3C operator-(const Evt3Rank3C &t1, const Evt3Rank3C &t2)
Definition: Evt3Rank3C.hh:105
friend Evt3Rank3C operator-(const Evt3Rank3C &t1, const Evt3Rank3C &t2)
Definition: Evt3Rank3C.hh:105
Evt3Rank3C & operator-=(const Evt3Rank3C &t2)
Definition: Evt3Rank3C.cpp:128
Evt3Rank3C directProd(const EvtVector3C &c1, const EvtVector3C &c2, const EvtVector3C &c3)
const EvtComplex & get(int i, int j, int k) const
Definition: Evt3Rank3C.hh:115
EvtTensor3C cont3(const EvtVector3C &v) const
Definition: Evt3Rank3C.cpp:220
friend Evt3Rank3C operator *(const EvtComplex &c, const Evt3Rank3C &t2)
Definition: Evt3Rank3C.hh:80
EvtComplex t[3][3][3]
Definition: Evt3Rank3C.hh:77
friend std::ostream & operator<<(std::ostream &s, const Evt3Rank3C &t2)
Definition: Evt3Rank3C.cpp:100
Evt3Rank3C conj() const
Definition: Evt3Rank3C.cpp:59
Evt3Rank3C & operator=(const Evt3Rank3C &t1)
Definition: Evt3Rank3C.cpp:45
friend Evt3Rank3C operator+(const Evt3Rank3C &t1, const Evt3Rank3C &t2)
Definition: Evt3Rank3C.hh:100