go-hep.org/x/hep@v0.38.1/fmom/utils_test.go (about) 1 // Copyright ©2017 The go-hep Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package fmom 6 7 import ( 8 "math" 9 "testing" 10 ) 11 12 const ( 13 epsilon_test = 1e-6 14 ) 15 16 func TestDeltaR(t *testing.T) { 17 for _, tc := range []struct { 18 p1 P4 19 p2 P4 20 want float64 21 }{ 22 // pxpypze 23 { 24 p1: newPxPyPzE(NewPxPyPzE(10, 10, 10, 20)), 25 p2: newPxPyPzE(NewPxPyPzE(10, 10, 10, 20)), 26 want: 0, 27 }, 28 { 29 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 30 p2: newPxPyPzE(NewPxPyPzE(-10, -10, -10, +20)), 31 want: 3.4064618746379645, 32 }, 33 { 34 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 35 p2: newPxPyPzE(NewPxPyPzE(+10, -10, +10, +20)), 36 want: 1.5707963267948966, 37 }, 38 39 // eetaphim 40 { 41 p1: newPxPyPzE(NewPxPyPzE(10, 10, 10, 20)), 42 p2: newEEtaPhiM(NewPxPyPzE(10, 10, 10, 20)), 43 want: 0, 44 }, 45 { 46 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 47 p2: newEEtaPhiM(NewPxPyPzE(-10, -10, -10, +20)), 48 want: 3.4064618746379645, 49 }, 50 { 51 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 52 p2: newEEtaPhiM(NewPxPyPzE(+10, -10, +10, +20)), 53 want: 1.5707963267948966, 54 }, 55 56 // etetaphim 57 { 58 p1: newPxPyPzE(NewPxPyPzE(10, 10, 10, 20)), 59 p2: newEtEtaPhiM(NewPxPyPzE(10, 10, 10, 20)), 60 want: 0, 61 }, 62 { 63 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 64 p2: newEtEtaPhiM(NewPxPyPzE(-10, -10, -10, +20)), 65 want: 3.4064618746379645, 66 }, 67 { 68 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 69 p2: newEtEtaPhiM(NewPxPyPzE(+10, -10, +10, +20)), 70 want: 1.5707963267948966, 71 }, 72 73 // ptetaphim 74 { 75 p1: newPxPyPzE(NewPxPyPzE(10, 10, 10, 20)), 76 p2: newPtEtaPhiM(NewPxPyPzE(10, 10, 10, 20)), 77 want: 0, 78 }, 79 { 80 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 81 p2: newPtEtaPhiM(NewPxPyPzE(-10, -10, -10, +20)), 82 want: 3.4064618746379645, 83 }, 84 { 85 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 86 p2: newPtEtaPhiM(NewPxPyPzE(+10, -10, +10, +20)), 87 want: 1.5707963267948966, 88 }, 89 90 // iptcotthphim 91 { 92 p1: newPxPyPzE(NewPxPyPzE(10, 10, 10, 20)), 93 p2: newIPtCotThPhiM(NewPxPyPzE(10, 10, 10, 20)), 94 want: 0, 95 }, 96 { 97 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 98 p2: newIPtCotThPhiM(NewPxPyPzE(-10, -10, -10, +20)), 99 want: 3.4064618746379645, 100 }, 101 { 102 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 103 p2: newIPtCotThPhiM(NewPxPyPzE(+10, -10, +10, +20)), 104 want: 1.5707963267948966, 105 }, 106 } { 107 got := DeltaR(tc.p1, tc.p2) 108 if got-tc.want > epsilon_test { 109 t.Fatalf("DeltaR error\np1=%#v\np2=%#v\ngot= %+e\nwantt=%+e\n", 110 tc.p1, 111 tc.p2, 112 got, 113 tc.want, 114 ) 115 } 116 } 117 } 118 119 func TestDeltaPhi(t *testing.T) { 120 for _, tc := range []struct { 121 p1 P4 122 p2 P4 123 want float64 124 }{ 125 // pxpypze 126 { 127 p1: newPxPyPzE(NewPxPyPzE(10, 10, 10, 20)), 128 p2: newPxPyPzE(NewPxPyPzE(10, 10, 10, 20)), 129 want: 0, 130 }, 131 { 132 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 133 p2: newPxPyPzE(NewPxPyPzE(-10, -10, -10, +20)), 134 want: -math.Pi, 135 }, 136 { 137 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 138 p2: newPxPyPzE(NewPxPyPzE(+10, -10, +10, +20)), 139 want: math.Pi / 2.0, 140 }, 141 142 // eetaphim 143 { 144 p1: newPxPyPzE(NewPxPyPzE(10, 10, 10, 20)), 145 p2: newEEtaPhiM(NewPxPyPzE(10, 10, 10, 20)), 146 want: 0, 147 }, 148 { 149 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 150 p2: newEEtaPhiM(NewPxPyPzE(-10, -10, -10, +20)), 151 want: -math.Pi, 152 }, 153 { 154 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 155 p2: newEEtaPhiM(NewPxPyPzE(+10, -10, +10, +20)), 156 want: math.Pi / 2.0, 157 }, 158 159 // etetaphim 160 { 161 p1: newPxPyPzE(NewPxPyPzE(10, 10, 10, 20)), 162 p2: newEtEtaPhiM(NewPxPyPzE(10, 10, 10, 20)), 163 want: 0, 164 }, 165 { 166 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 167 p2: newEtEtaPhiM(NewPxPyPzE(-10, -10, -10, +20)), 168 want: -math.Pi, 169 }, 170 { 171 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 172 p2: newEtEtaPhiM(NewPxPyPzE(+10, -10, +10, +20)), 173 want: math.Pi / 2.0, 174 }, 175 176 // ptetaphim 177 { 178 p1: newPxPyPzE(NewPxPyPzE(10, 10, 10, 20)), 179 p2: newPtEtaPhiM(NewPxPyPzE(10, 10, 10, 20)), 180 want: 0, 181 }, 182 { 183 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 184 p2: newPtEtaPhiM(NewPxPyPzE(-10, -10, -10, +20)), 185 want: -math.Pi, 186 }, 187 { 188 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 189 p2: newPtEtaPhiM(NewPxPyPzE(+10, -10, +10, +20)), 190 want: math.Pi / 2.0, 191 }, 192 193 // iptcotthphim 194 { 195 p1: newPxPyPzE(NewPxPyPzE(10, 10, 10, 20)), 196 p2: newIPtCotThPhiM(NewPxPyPzE(10, 10, 10, 20)), 197 want: 0, 198 }, 199 { 200 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 201 p2: newIPtCotThPhiM(NewPxPyPzE(-10, -10, -10, +20)), 202 want: -math.Pi, 203 }, 204 { 205 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 206 p2: newIPtCotThPhiM(NewPxPyPzE(+10, -10, +10, +20)), 207 want: math.Pi / 2.0, 208 }, 209 } { 210 got := DeltaPhi(tc.p1, tc.p2) 211 if got-tc.want > epsilon_test { 212 t.Fatalf("DeltaPhi error\np1=%#v\np2=%#v\ngot= %+e\nwant=%+e\n", 213 tc.p1, 214 tc.p2, 215 got, 216 tc.want, 217 ) 218 } 219 } 220 } 221 222 func TestDot(t *testing.T) { 223 for _, tc := range []struct { 224 p1 P4 225 p2 P4 226 want float64 227 }{ 228 // pxpypze 229 { 230 p1: newPxPyPzE(NewPxPyPzE(10, 10, 10, 20)), 231 p2: newPxPyPzE(NewPxPyPzE(10, 10, 10, 20)), 232 want: 100, 233 }, 234 { 235 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 236 p2: newPxPyPzE(NewPxPyPzE(-10, -10, -10, +20)), 237 want: 700, 238 }, 239 { 240 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 241 p2: newPxPyPzE(NewPxPyPzE(+10, -10, +10, +20)), 242 want: 300, 243 }, 244 245 // eetaphim 246 { 247 p1: newPxPyPzE(NewPxPyPzE(10, 10, 10, 20)), 248 p2: newEEtaPhiM(NewPxPyPzE(10, 10, 10, 20)), 249 want: 100, 250 }, 251 { 252 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 253 p2: newEEtaPhiM(NewPxPyPzE(-10, -10, -10, +20)), 254 want: 700, 255 }, 256 { 257 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 258 p2: newEEtaPhiM(NewPxPyPzE(+10, -10, +10, +20)), 259 want: 300, 260 }, 261 262 // etetaphim 263 { 264 p1: newPxPyPzE(NewPxPyPzE(10, 10, 10, 20)), 265 p2: newEtEtaPhiM(NewPxPyPzE(10, 10, 10, 20)), 266 want: 100, 267 }, 268 { 269 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 270 p2: newEtEtaPhiM(NewPxPyPzE(-10, -10, -10, +20)), 271 want: 700, 272 }, 273 { 274 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 275 p2: newEtEtaPhiM(NewPxPyPzE(+10, -10, +10, +20)), 276 want: 300, 277 }, 278 279 // ptetaphim 280 { 281 p1: newPxPyPzE(NewPxPyPzE(10, 10, 10, 20)), 282 p2: newPtEtaPhiM(NewPxPyPzE(10, 10, 10, 20)), 283 want: 100, 284 }, 285 { 286 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 287 p2: newPtEtaPhiM(NewPxPyPzE(-10, -10, -10, +20)), 288 want: 700, 289 }, 290 { 291 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 292 p2: newPtEtaPhiM(NewPxPyPzE(+10, -10, +10, +20)), 293 want: 300, 294 }, 295 296 // iptcotthphim 297 { 298 p1: newPxPyPzE(NewPxPyPzE(10, 10, 10, 20)), 299 p2: newIPtCotThPhiM(NewPxPyPzE(10, 10, 10, 20)), 300 want: 100, 301 }, 302 { 303 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 304 p2: newIPtCotThPhiM(NewPxPyPzE(-10, -10, -10, +20)), 305 want: 700, 306 }, 307 { 308 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 309 p2: newIPtCotThPhiM(NewPxPyPzE(+10, -10, +10, +20)), 310 want: 300, 311 }, 312 } { 313 got := Dot(tc.p1, tc.p2) 314 if got-tc.want > epsilon_test { 315 t.Fatalf("Dot error\np1=%#v\np2=%#v\ngot= %+e\nwant=%+e\n", 316 tc.p1, 317 tc.p2, 318 got, 319 tc.want, 320 ) 321 } 322 } 323 } 324 func TestCosTheta(t *testing.T) { 325 for _, tc := range []struct { 326 p1 P4 327 p2 P4 328 want float64 329 }{ 330 // pxpypze 331 { 332 p1: newPxPyPzE(NewPxPyPzE(10, 10, 10, 20)), 333 p2: newPxPyPzE(NewPxPyPzE(10, 10, 10, 20)), 334 want: 1, 335 }, 336 { 337 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 338 p2: newPxPyPzE(NewPxPyPzE(-10, -10, -10, +20)), 339 want: -1, 340 }, 341 { 342 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 343 p2: newPxPyPzE(NewPxPyPzE(+10, -10, +10, +20)), 344 want: 1.0 / 3, 345 }, 346 347 // eetaphim 348 { 349 p1: newPxPyPzE(NewPxPyPzE(10, 10, 10, 20)), 350 p2: newEEtaPhiM(NewPxPyPzE(10, 10, 10, 20)), 351 want: 1, 352 }, 353 { 354 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 355 p2: newEEtaPhiM(NewPxPyPzE(-10, -10, -10, +20)), 356 want: -1, 357 }, 358 { 359 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 360 p2: newEEtaPhiM(NewPxPyPzE(+10, -10, +10, +20)), 361 want: 1.0 / 3, 362 }, 363 364 // etetaphim 365 { 366 p1: newPxPyPzE(NewPxPyPzE(10, 10, 10, 20)), 367 p2: newEtEtaPhiM(NewPxPyPzE(10, 10, 10, 20)), 368 want: 1, 369 }, 370 { 371 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 372 p2: newEtEtaPhiM(NewPxPyPzE(-10, -10, -10, +20)), 373 want: -1, 374 }, 375 { 376 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 377 p2: newEtEtaPhiM(NewPxPyPzE(+10, -10, +10, +20)), 378 want: 1.0 / 3, 379 }, 380 381 // ptetaphim 382 { 383 p1: newPxPyPzE(NewPxPyPzE(10, 10, 10, 20)), 384 p2: newPtEtaPhiM(NewPxPyPzE(10, 10, 10, 20)), 385 want: 1, 386 }, 387 { 388 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 389 p2: newPtEtaPhiM(NewPxPyPzE(-10, -10, -10, +20)), 390 want: -1, 391 }, 392 { 393 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 394 p2: newPtEtaPhiM(NewPxPyPzE(+10, -10, +10, +20)), 395 want: 1.0 / 3, 396 }, 397 398 // iptcotthphim 399 { 400 p1: newPxPyPzE(NewPxPyPzE(10, 10, 10, 20)), 401 p2: newIPtCotThPhiM(NewPxPyPzE(10, 10, 10, 20)), 402 want: 1, 403 }, 404 { 405 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 406 p2: newIPtCotThPhiM(NewPxPyPzE(-10, -10, -10, +20)), 407 want: -1, 408 }, 409 { 410 p1: newPxPyPzE(NewPxPyPzE(+10, +10, +10, +20)), 411 p2: newIPtCotThPhiM(NewPxPyPzE(+10, -10, +10, +20)), 412 want: 1.0 / 3, 413 }, 414 } { 415 got := CosTheta(tc.p1, tc.p2) 416 if got-tc.want > epsilon_test { 417 t.Fatalf("CosTheta error\np1=%#v\np2=%#v\ngot= %+e\nwant=%+e\n", 418 tc.p1, 419 tc.p2, 420 got, 421 tc.want, 422 ) 423 } 424 } 425 }