Fork me on GitHub

source: svn/trunk/Utilities/HepMC/src/Polarization.cc@ 961

Last change on this file since 961 was 571, checked in by cp3-support, 13 years ago

upgrade HepMC to version 2.06.05

File size: 3.7 KB
Line 
1//////////////////////////////////////////////////////////////////////////
2// Matt.Dobbs@Cern.CH, September 1999
3//
4// Polarization object for a particle. All angles are in radians.
5//////////////////////////////////////////////////////////////////////////
6
7#include "Polarization.h"
8
9namespace HepMC {
10
11 Polarization::Polarization( )
12 : m_theta( 0. ),
13 m_phi( 0. ),
14 m_defined( false )
15 { }
16
17 Polarization::Polarization( double theta, double phi )
18 : m_theta( valid_theta(theta) ),
19 m_phi ( valid_phi(phi) ),
20 m_defined( true )
21 { }
22
23 Polarization::Polarization( const Polarization& inpolar )
24 : m_theta( valid_theta( inpolar.theta() ) ),
25 m_phi ( valid_phi( inpolar.phi() ) ),
26 m_defined( inpolar.is_defined() )
27 { }
28
29 Polarization::Polarization( const ThreeVector& vec3in )
30 : m_theta( valid_theta( vec3in.theta() ) ),
31 m_phi ( valid_phi( vec3in.phi() ) ),
32 m_defined( true )
33 { }
34
35 void Polarization::swap( Polarization & other)
36 {
37 std::swap( m_theta, other.m_theta );
38 std::swap( m_phi, other.m_phi );
39 std::swap( m_defined, other.m_defined );
40 }
41
42 Polarization& Polarization::operator=( const Polarization& inpolar ) {
43 /// best practices implementation
44 Polarization tmp( inpolar );
45 swap( tmp );
46 return *this;
47 }
48
49 void Polarization::print( std::ostream& ostr ) const {
50 ostr << "Polarization: " << *this << std::endl;
51 }
52
53 ////////////////////
54 // access methods //
55 ////////////////////
56
57 ThreeVector Polarization::normal3d() const {
58 // unit Hep3Vector for easy manipulation
59 ThreeVector outvec(0,0,1); // makes unit vector along Z
60 outvec.setTheta( theta() ); // sets phi keeping mag and theta constant
61 outvec.setPhi( phi() ); // sets theta keeping mag and phi constant
62 return outvec;
63 }
64
65 double Polarization::set_theta( double theta ) {
66 /// Theta is restricted to be between 0 --> pi
67 /// if an out of range value is given, it is translated to this range.
68 return m_theta = valid_theta( theta );
69 }
70
71 double Polarization::set_phi( double phi ) {
72 /// Phi is restricted to be between 0 --> 2pi
73 /// if an out of range value is given, it is translated to this range.
74 return m_phi = valid_phi( phi );
75 }
76
77 bool Polarization::is_defined( ) const {
78 return m_defined;
79 }
80
81 void Polarization::set_undefined() {
82 m_defined = false;
83 m_theta = 0.;
84 m_phi = 0.;
85 }
86
87 void Polarization::set_theta_phi( double theta, double phi ) {
88 set_theta( theta );
89 set_phi( phi ) ;
90 m_defined = true;
91 }
92
93 ThreeVector Polarization::set_normal3d( const ThreeVector& vec3in ) {
94 set_theta( vec3in.theta() );
95 set_phi( vec3in.phi() );
96 m_defined = true;
97 return vec3in;
98 }
99
100 /////////////////////
101 // private methods //
102 /////////////////////
103
104 double Polarization::valid_theta( double theta ) {
105 // this is just absolute value.
106 theta = ( theta>0 ? theta : -theta );
107 // translate to 0 < theta < 2pi
108 theta = ( theta/(2*HepMC_pi) - int(theta/(2*HepMC_pi)) )
109 * 2*HepMC_pi;
110 // now translate to 0 < theta < pi
111 if ( theta > HepMC_pi ) theta = 2*HepMC_pi - theta;
112 return theta;
113 }
114
115 double Polarization::valid_phi( double phi ) {
116 //
117 // translate to -2pi < phi < 2pi
118 phi = ( phi/(2*HepMC_pi) - int(phi/(2*HepMC_pi)) ) * 2*HepMC_pi;
119 // translates to 0 < phi < 2pi
120 if ( phi < 0 ) phi = 2*HepMC_pi + phi;
121 return phi;
122 }
123
124 /////////////
125 // Friends //
126 /////////////
127
128 /// write theta and phi to the output stream
129 std::ostream& operator<<( std::ostream& ostr, const Polarization& polar ) {
130 return ostr << "(" << polar.theta()
131 << "," << polar.phi() << ")";
132 }
133
134} // HepMC
135
136
Note: See TracBrowser for help on using the repository browser.