StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
vecTest.cc
1 /***************************************************************************
2  *
3  * $Id: vecTest.cc,v 1.4 2003/09/02 17:59:38 perev Exp $
4  *
5  * Author: Thomas Ullrich, April 1998
6  ***************************************************************************
7  *
8  * Description:
9  *
10  ***************************************************************************
11  *
12  * $Log: vecTest.cc,v $
13  * Revision 1.4 2003/09/02 17:59:38 perev
14  * gcc 3.2 updates + WarnOff
15  *
16  * Revision 1.3 1999/12/21 15:15:01 ullrich
17  * Modified to cope with new compiler version on Sun (CC5.0).
18  *
19  * Revision 1.2 1999/06/04 18:04:57 ullrich
20  * Added testing of new features
21  *
22  * Revision 1.1 1999/02/17 12:44:04 ullrich
23  * New Revision
24  *
25  * Revision 1.1 1999/01/23 00:26:54 ullrich
26  * Initial Revision
27  *
28  **************************************************************************/
29 #include "StGlobals.hh"
30 #include "StLorentzVector.hh"
31 
32 int main()
33 {
34  cout << "This program tests the StThreeVector and StLorentzVector classes" << endl;
35  cout << "----------------------------------------------------------------" << endl;
36 
37  cout << "\nTesting StThreeVector:" << endl;
38 
40  StThreeVector<float> vec2(1,2,3);
41  StThreeVector<double> vec3(vec2);
42 #ifdef ST_NO_TEMPLATE_DEF_ARGS
43  StThreeVector<double> vec4 = vec3;
44  StThreeVector<double> vec5(vec4);
45 #else
46  StThreeVector<> vec4 = vec3;
47  StThreeVector<> vec5(vec4);
48 #endif
49  double *a = new double[3];
50  a[0] = a[1] = a[2] = 42;
51  float *b = new float[3];
52  b[0] = b[1] = b[2] = 99;
53  StThreeVector<double> vec6(a);
54  StThreeVector<double> vec7(b);
55 
56  PR(vec1);
57  PR(vec2);
58  PR(vec3);
59  PR(vec4);
60  PR(vec6);
61  vec6[2] = 17;
62  PR(vec6);
63  PR(vec7);
64  vec7[2] = 11;
65  PR(vec7);
66 
67 
68  PR(vec5 = vec4);
69  PR(vec5 = vec1);
70 
71  PR(vec1 += vec2);
72  PR(vec1 -= vec4);
73  PR(vec4 *= 3.14);
74  PR(vec4 /= 1.77);
75 
76  PR(vec4 == vec2);
77  PR(vec1 != vec2);
78 
79  PR(vec1 = vec2+vec4);
80  PR(vec2 = vec1/2.33);
81  vec3.setX(3.32);
82  vec3.setZ(0.087);
83  PR(vec3);
84  PR(vec4 = vec3-0.24*vec4);
85 
86  PR(vec1*vec2);
87  PR(vec1.dot(vec2));
88  PR(vec1.cross(vec2));
89  PR(vec1.angle(vec4));
90 
91  PR(abs(vec2));
92  PR(vec2.mag());
93  PR(vec2.mag2());
94 
95  PR(vec3.unit());
96  PR(abs(vec3.unit()));
97 
98  PR(vec1.theta());
99  PR(vec1.cosTheta());
100  PR(vec1.phi());
101  PR(vec1.perp());
102  PR(vec1.perp2());
103  PR(vec1.pseudoRapidity());
104 
105  PR(vec4[0]);
106  PR(vec4(1));
107 
108  cout << "Testing exception handling." << endl;
109  cout << "Note that depending on your platform" << endl;
110  cout << "the resulting actions might differ." << endl;
111 #ifndef ST_NO_EXCEPTIONS
112  try {
113  PR(vec4[3]);
114  }
115  catch (out_of_range &e) {
116  cout << "Caught exception: " << e.what() << endl;
117  }
118 #else
119  PR(vec4[3]);
120 #endif
121  cout << "Done" << endl;
122 
123  cout << "\nTesting StLorentzVector:" << endl;
124 
126  StLorentzVector<float> lvec2(1,2,3,40);
127  StLorentzVector<double> lvec3(lvec2);
128 #ifdef ST_NO_TEMPLATE_DEF_ARGS
129  StLorentzVector<double> lvec4 = lvec3;
130  StLorentzVector<double> lvec5(vec3, 190.2);
132 #else
133  StLorentzVector<> lvec4 = lvec3;
134  StLorentzVector<> lvec5(vec3, 190.2);
135  StLorentzVector<> lvec6;
136 #endif
137  StLorentzVector<double> lvec7(lvec5);
138  StLorentzVector<double> lvec8(lvec5);
139 
140  PR(lvec1);
141  PR(lvec2);
142  PR(lvec3);
143  PR(lvec4);
144  PR(lvec5);
145  PR(lvec7);
146  lvec7[3] = 17;
147  PR(lvec7);
148  PR(lvec8);
149  lvec8[3] = 11;
150  PR(lvec8);
151 
152  PR(lvec6 = lvec5);
153  PR(lvec6 = lvec2);
154 
155  PR(lvec2.x());
156  PR(lvec2.y());
157  PR(lvec2.z());
158  PR(lvec2.t());
159  PR(lvec2.e());
160 
161  PR(lvec1 += lvec2);
162  PR(lvec1 -= lvec4);
163  PR(lvec4 *= 3.14);
164  PR(lvec3 /= 1.72);
165 
166  PR(lvec2 == lvec4);
167  PR(lvec1 != lvec2);
168 
169  PR(lvec1 = lvec2+lvec4);
170  PR(lvec2 = lvec1/2.33);
171  lvec3.setX(3.32);
172  lvec3.setZ(0.087);
173  PR(lvec3);
174  PR(lvec4 = lvec3-0.24*lvec4);
175 
176  lvec2.setVect(vec2);
177  PR(lvec1);
178  PR(lvec2);
179  PR(lvec1*lvec2);
180 
181  PR(abs(lvec2));
182  PR(lvec2.m());
183  PR(lvec2.m2());
184  PR(lvec2.mt());
185  PR(lvec2.mt2());
186 
187  PR(lvec3.vect().unit());
188 
189  PR(lvec1.theta());
190  PR(lvec1.cosTheta());
191  PR(lvec1.phi());
192  PR(lvec1.perp());
193  PR(lvec1.perp2());
194  PR(lvec1.pseudoRapidity());
195  PR(lvec1.rapidity());
196 
197  PR(lvec4[0]);
198  PR(lvec4(1));
199 
200  PR(lvec1.plus());
201  PR(lvec1.minus());
202 
203  cout << "\nConstruct a 4-vector of a pion:" << endl;
204  StThreeVector<double> pionMomentum(100, 200, 300);
205  cout << "with momentum: " << pionMomentum << endl;
206  cout << "Energy should be: " << pionMomentum.massHypothesis(139) << endl;;
207 
208  StLorentzVector<double> pion(pionMomentum, pionMomentum.massHypothesis(139));
209  cout << "pion is: " << pion << endl;
210  double mass = ::sqrt(sqr(pion.e()) - pion.vect().mag2());
211  cout << "Mass is: (" << pion.e() << ")^2 - (" << pion.vect().mag() << ")^2 = " << mass << endl;
212 
213 
214  cout << "\nTesting exception handling." << endl;
215  cout << "Note that depending on your platform" << endl;
216  cout << "the resulting actions might differ." << endl;
217 #ifndef ST_NO_EXCEPTIONS
218  try {
219  PR(lvec4[4]);
220  }
221  catch (out_of_range &e) {
222  cout << "Caught exception: " << e.what() << endl;
223  }
224 #else
225  PR(lvec4[4]);
226 #endif
227  cout << "Done" << endl;
228  cout << "Test finished" << endl;
229 
230  return 0;
231 }