00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #include "StGlobals.hh"
00030 #include "StLorentzVector.hh"
00031
00032 int main()
00033 {
00034 cout << "This program tests the StThreeVector and StLorentzVector classes" << endl;
00035 cout << "----------------------------------------------------------------" << endl;
00036
00037 cout << "\nTesting StThreeVector:" << endl;
00038
00039 StThreeVector<float> vec1;
00040 StThreeVector<float> vec2(1,2,3);
00041 StThreeVector<double> vec3(vec2);
00042 #ifdef ST_NO_TEMPLATE_DEF_ARGS
00043 StThreeVector<double> vec4 = vec3;
00044 StThreeVector<double> vec5(vec4);
00045 #else
00046 StThreeVector<> vec4 = vec3;
00047 StThreeVector<> vec5(vec4);
00048 #endif
00049 double *a = new double[3];
00050 a[0] = a[1] = a[2] = 42;
00051 float *b = new float[3];
00052 b[0] = b[1] = b[2] = 99;
00053 StThreeVector<double> vec6(a);
00054 StThreeVector<double> vec7(b);
00055
00056 PR(vec1);
00057 PR(vec2);
00058 PR(vec3);
00059 PR(vec4);
00060 PR(vec6);
00061 vec6[2] = 17;
00062 PR(vec6);
00063 PR(vec7);
00064 vec7[2] = 11;
00065 PR(vec7);
00066
00067
00068 PR(vec5 = vec4);
00069 PR(vec5 = vec1);
00070
00071 PR(vec1 += vec2);
00072 PR(vec1 -= vec4);
00073 PR(vec4 *= 3.14);
00074 PR(vec4 /= 1.77);
00075
00076 PR(vec4 == vec2);
00077 PR(vec1 != vec2);
00078
00079 PR(vec1 = vec2+vec4);
00080 PR(vec2 = vec1/2.33);
00081 vec3.setX(3.32);
00082 vec3.setZ(0.087);
00083 PR(vec3);
00084 PR(vec4 = vec3-0.24*vec4);
00085
00086 PR(vec1*vec2);
00087 PR(vec1.dot(vec2));
00088 PR(vec1.cross(vec2));
00089 PR(vec1.angle(vec4));
00090
00091 PR(abs(vec2));
00092 PR(vec2.mag());
00093 PR(vec2.mag2());
00094
00095 PR(vec3.unit());
00096 PR(abs(vec3.unit()));
00097
00098 PR(vec1.theta());
00099 PR(vec1.cosTheta());
00100 PR(vec1.phi());
00101 PR(vec1.perp());
00102 PR(vec1.perp2());
00103 PR(vec1.pseudoRapidity());
00104
00105 PR(vec4[0]);
00106 PR(vec4(1));
00107
00108 cout << "Testing exception handling." << endl;
00109 cout << "Note that depending on your platform" << endl;
00110 cout << "the resulting actions might differ." << endl;
00111 #ifndef ST_NO_EXCEPTIONS
00112 try {
00113 PR(vec4[3]);
00114 }
00115 catch (out_of_range &e) {
00116 cout << "Caught exception: " << e.what() << endl;
00117 }
00118 #else
00119 PR(vec4[3]);
00120 #endif
00121 cout << "Done" << endl;
00122
00123 cout << "\nTesting StLorentzVector:" << endl;
00124
00125 StLorentzVector<double> lvec1;
00126 StLorentzVector<float> lvec2(1,2,3,40);
00127 StLorentzVector<double> lvec3(lvec2);
00128 #ifdef ST_NO_TEMPLATE_DEF_ARGS
00129 StLorentzVector<double> lvec4 = lvec3;
00130 StLorentzVector<double> lvec5(vec3, 190.2);
00131 StLorentzVector<double> lvec6;
00132 #else
00133 StLorentzVector<> lvec4 = lvec3;
00134 StLorentzVector<> lvec5(vec3, 190.2);
00135 StLorentzVector<> lvec6;
00136 #endif
00137 StLorentzVector<double> lvec7(lvec5);
00138 StLorentzVector<double> lvec8(lvec5);
00139
00140 PR(lvec1);
00141 PR(lvec2);
00142 PR(lvec3);
00143 PR(lvec4);
00144 PR(lvec5);
00145 PR(lvec7);
00146 lvec7[3] = 17;
00147 PR(lvec7);
00148 PR(lvec8);
00149 lvec8[3] = 11;
00150 PR(lvec8);
00151
00152 PR(lvec6 = lvec5);
00153 PR(lvec6 = lvec2);
00154
00155 PR(lvec2.x());
00156 PR(lvec2.y());
00157 PR(lvec2.z());
00158 PR(lvec2.t());
00159 PR(lvec2.e());
00160
00161 PR(lvec1 += lvec2);
00162 PR(lvec1 -= lvec4);
00163 PR(lvec4 *= 3.14);
00164 PR(lvec3 /= 1.72);
00165
00166 PR(lvec2 == lvec4);
00167 PR(lvec1 != lvec2);
00168
00169 PR(lvec1 = lvec2+lvec4);
00170 PR(lvec2 = lvec1/2.33);
00171 lvec3.setX(3.32);
00172 lvec3.setZ(0.087);
00173 PR(lvec3);
00174 PR(lvec4 = lvec3-0.24*lvec4);
00175
00176 lvec2.setVect(vec2);
00177 PR(lvec1);
00178 PR(lvec2);
00179 PR(lvec1*lvec2);
00180
00181 PR(abs(lvec2));
00182 PR(lvec2.m());
00183 PR(lvec2.m2());
00184 PR(lvec2.mt());
00185 PR(lvec2.mt2());
00186
00187 PR(lvec3.vect().unit());
00188
00189 PR(lvec1.theta());
00190 PR(lvec1.cosTheta());
00191 PR(lvec1.phi());
00192 PR(lvec1.perp());
00193 PR(lvec1.perp2());
00194 PR(lvec1.pseudoRapidity());
00195 PR(lvec1.rapidity());
00196
00197 PR(lvec4[0]);
00198 PR(lvec4(1));
00199
00200 PR(lvec1.plus());
00201 PR(lvec1.minus());
00202
00203 cout << "\nConstruct a 4-vector of a pion:" << endl;
00204 StThreeVector<double> pionMomentum(100, 200, 300);
00205 cout << "with momentum: " << pionMomentum << endl;
00206 cout << "Energy should be: " << pionMomentum.massHypothesis(139) << endl;;
00207
00208 StLorentzVector<double> pion(pionMomentum, pionMomentum.massHypothesis(139));
00209 cout << "pion is: " << pion << endl;
00210 double mass = ::sqrt(sqr(pion.e()) - pion.vect().mag2());
00211 cout << "Mass is: (" << pion.e() << ")^2 - (" << pion.vect().mag() << ")^2 = " << mass << endl;
00212
00213
00214 cout << "\nTesting exception handling." << endl;
00215 cout << "Note that depending on your platform" << endl;
00216 cout << "the resulting actions might differ." << endl;
00217 #ifndef ST_NO_EXCEPTIONS
00218 try {
00219 PR(lvec4[4]);
00220 }
00221 catch (out_of_range &e) {
00222 cout << "Caught exception: " << e.what() << endl;
00223 }
00224 #else
00225 PR(lvec4[4]);
00226 #endif
00227 cout << "Done" << endl;
00228 cout << "Test finished" << endl;
00229
00230 return 0;
00231 }