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 #include <map>
00027 #include <utility>
00028
00029 #include "HepPID/Version.hh"
00030 #include "HepPID/ParticleIDTranslations.hh"
00031 #include "HepPID/ParticleIDMethods.hh"
00032 #include "HepPID/ParticleName.hh"
00033
00034 namespace HepPID {
00035
00036 typedef std::map< int, int > IsajetPDTMap;
00037 typedef std::map< int, int > PDTIsajetMap;
00038
00039 namespace {
00040
00041 IsajetPDTMap const & getIsajetPDTMap();
00042 PDTIsajetMap const & getPDTIsajetMap();
00043
00044 IsajetPDTMap const & IsajetPDTMapInit()
00045 {
00046
00047 static IsajetPDTMap m;
00048
00049 static const struct {
00050 int id;
00051 int pid;
00052 } SList[] = {
00053 { 1, 2 },
00054 { -1, -2 },
00055 { 2, 1 },
00056 { -2, -1 },
00057 { 3, 3 },
00058 { -3, -3 },
00059 { 4, 4 },
00060 { -4, -4 },
00061 { 5, 5 },
00062 { -5, -5 },
00063 { 6, 6 },
00064 { -6, -6 },
00065 { 7, 7 },
00066 { -7, -7 },
00067 { 8, 8 },
00068 { -8, -8 },
00069 { 9, 21 },
00070 { 10, 22 },
00071 { 11, 12 },
00072 { -11, -12 },
00073 { 12, 11 },
00074 { -12, -11 },
00075 { 13, 14 },
00076 { -13, -14 },
00077 { 14, 13 },
00078 { -14, -13 },
00079 { 15, 16 },
00080 { -15, -16 },
00081 { 16, 15 },
00082 { -16, -15 },
00083 { 20, 310 },
00084 { -20, 130 },
00085 { 21, 1000002 },
00086 { -21, -1000002 },
00087 { 22, 1000001 },
00088 { -22, -1000001 },
00089 { 23, 1000003 },
00090 { -23, -1000003 },
00091 { 24, 1000004 },
00092 { -24, -1000004 },
00093 { 25, 1000005 },
00094 { -25, -1000005 },
00095 { 26, 1000006 },
00096 { -26, -1000006 },
00097 { 29, 1000021 },
00098 { 30, 1000022 },
00099 { 31, 1000012 },
00100 { -31, -1000012 },
00101 { 32, 1000011 },
00102 { -32, -1000011 },
00103 { 33, 1000014 },
00104 { -33, -1000014 },
00105 { 34, 1000013 },
00106 { -34, -1000013 },
00107 { 35, 1000016 },
00108 { -35, -1000016 },
00109 { 36, 1000015 },
00110 { -36, -1000015 },
00111 { 39, 1000024 },
00112 { -39, -1000024 },
00113 { 40, 1000023 },
00114 { 41, 2000002 },
00115 { -41, -2000002 },
00116 { 42, 2000001 },
00117 { -42, -2000001 },
00118 { 43, 2000003 },
00119 { -43, -2000003 },
00120 { 44, 2000004 },
00121 { -44, -2000004 },
00122 { 45, 2000005 },
00123 { -45, -2000005 },
00124 { 46, 2000006 },
00125 { -46, -2000006 },
00126 { 49, 1000037 },
00127 { -49, -1000037 },
00128 { 50, 1000025 },
00129 { 51, 2000012 },
00130 { -51, -2000012 },
00131 { 52, 2000011 },
00132 { -52, -2000011 },
00133 { 53, 2000014 },
00134 { -53, -2000014 },
00135 { 54, 2000013 },
00136 { -54, -2000013 },
00137 { 55, 2000016 },
00138 { -55, -2000016 },
00139 { 56, 2000015 },
00140 { -56, -2000015 },
00141 { 60, 1000035 },
00142 { 80, 24 },
00143 { -80, -24 },
00144 { 81, 25 },
00145 { 82, 51 },
00146 { 83, 35 },
00147 { 84, 36 },
00148 { 85, 55 },
00149 { -85, -55 },
00150 { 86, 37 },
00151 { -86, -37 },
00152 { 87, 53 },
00153 { -87, -53 },
00154 { 88, 52 },
00155 { -88, -52 },
00156 { 89, 54 },
00157 { -89, -54 },
00158 { 90, 23 },
00159 { 91, 1000039 },
00160 { 92, 39 },
00161 { 110, 111 },
00162 { 111, 113 },
00163 { 112, 225 },
00164 { 120, 211 },
00165 { -120, -211 },
00166 { 121, 213 },
00167 { -121, -213 },
00168 { 130, 321 },
00169 { -130, -321 },
00170 { 131, 323 },
00171 { -131, -323 },
00172 { 132, 325 },
00173 { -132, -325 },
00174 { 140, -421 },
00175 { -140, 421 },
00176 { 141, -423 },
00177 { -141, 423 },
00178 { 150, 521 },
00179 { -150, -521 },
00180 { 151, 523 },
00181 { -151, -523 },
00182 { 160, -621 },
00183 { -160, 621 },
00184 { 161, -623 },
00185 { -161, 623 },
00186 { 170, 721 },
00187 { -170, -721 },
00188 { 171, 723 },
00189 { -171, -723 },
00190 { 180, 821 },
00191 { -180, -821 },
00192 { 181, 823 },
00193 { -181, -823 },
00194 { 220, 221 },
00195 { 221, 223 },
00196 { 230, 311 },
00197 { -230, -311 },
00198 { 231, 313 },
00199 { -231, -313 },
00200 { 232, 315 },
00201 { -232, -315 },
00202 { 240, -411 },
00203 { -240, 411 },
00204 { 241, -413 },
00205 { -241, 413 },
00206 { 250, 511 },
00207 { -250, -511 },
00208 { 251, 513 },
00209 { -251, -513 },
00210 { 260, -611 },
00211 { -260, 611 },
00212 { 261, -613 },
00213 { -261, 613 },
00214 { 270, 711 },
00215 { -270, -711 },
00216 { 271, 713 },
00217 { -271, -713 },
00218 { 280, 811 },
00219 { -280, -811 },
00220 { 281, 813 },
00221 { -281, -813 },
00222 { 330, 331 },
00223 { 331, 333 },
00224 { 340, -431 },
00225 { -340, 431 },
00226 { 341, -433 },
00227 { -341, 433 },
00228 { 350, 531 },
00229 { -350, -531 },
00230 { 351, 533 },
00231 { -351, -533 },
00232 { 360, -631 },
00233 { -360, 631 },
00234 { 361, -633 },
00235 { -361, 633 },
00236 { 370, 731 },
00237 { -370, -731 },
00238 { 371, 733 },
00239 { -371, -733 },
00240 { 380, 831 },
00241 { -380, -831 },
00242 { 381, 833 },
00243 { -381, -833 },
00244 { 440, 441 },
00245 { 441, 443 },
00246 { 450, 541 },
00247 { -450, -541 },
00248 { 451, 543 },
00249 { -451, -543 },
00250 { 460, 641 },
00251 { -460, -641 },
00252 { 461, 643 },
00253 { -461, -643 },
00254 { 470, 741 },
00255 { -470, -741 },
00256 { 471, 743 },
00257 { -471, -743 },
00258 { 480, 841 },
00259 { -480, -841 },
00260 { 481, 843 },
00261 { -481, -843 },
00262 { 550, 551 },
00263 { 551, 553 },
00264 { 560, -651 },
00265 { -560, 651 },
00266 { 561, -653 },
00267 { -561, 653 },
00268 { 570, 751 },
00269 { -570, -751 },
00270 { 571, 753 },
00271 { -571, -753 },
00272 { 580, 851 },
00273 { -580, -851 },
00274 { 581, 853 },
00275 { -581, -853 },
00276 { 660, 661 },
00277 { 661, 663 },
00278 { 670, 761 },
00279 { -670, -761 },
00280 { 671, 763 },
00281 { -671, -763 },
00282 { 680, 861 },
00283 { -680, -861 },
00284 { 681, 863 },
00285 { -681, -863 },
00286 { 770, 771 },
00287 { 771, 773 },
00288 { 780, 871 },
00289 { -780, -871 },
00290 { 781, 873 },
00291 { -781, -873 },
00292 { 880, 881 },
00293 { 881, 883 },
00294 { 1100, 2203 },
00295 { -1100, -2203 },
00296 { 1111, 2224 },
00297 { -1111, -2224 },
00298 { 1120, 2212 },
00299 { -1120, -2212 },
00300 { 1121, 2214 },
00301 { -1121, -2214 },
00302 { 1130, 3222 },
00303 { -1130, -3222 },
00304 { 1131, 3224 },
00305 { -1131, -3224 },
00306 { 1140, 4222 },
00307 { -1140, -4222 },
00308 { 1141, 4224 },
00309 { -1141, -4224 },
00310 { 1150, 5222 },
00311 { -1150, -5222 },
00312 { 1151, 5224 },
00313 { -1151, -5224 },
00314 { 1160, 6222 },
00315 { -1160, -6222 },
00316 { 1161, 6224 },
00317 { -1161, -6224 },
00318 { 1170, 7222 },
00319 { -1170, -7222 },
00320 { 1171, 7224 },
00321 { -1171, -7224 },
00322 { 1180, 8222 },
00323 { -1180, -8222 },
00324 { 1181, 8224 },
00325 { -1181, -8224 },
00326 { 1200, 2101 },
00327 { -1200, -2101 },
00328 { 1220, 2112 },
00329 { -1220, -2112 },
00330 { 1221, 2114 },
00331 { -1221, -2114 },
00332 { 1230, 3212 },
00333 { -1230, -3212 },
00334 { 1231, 3214 },
00335 { -1231, -3214 },
00336 { 1240, 4212 },
00337 { -1240, -4212 },
00338 { 1241, 4214 },
00339 { -1241, -4214 },
00340 { 1250, 5212 },
00341 { -1250, -5212 },
00342 { 1251, 5214 },
00343 { -1251, -5214 },
00344 { 1260, 6212 },
00345 { -1260, -6212 },
00346 { 1261, 6214 },
00347 { -1261, -6214 },
00348 { 1270, 7212 },
00349 { -1270, -7212 },
00350 { 1271, 7214 },
00351 { -1271, -7214 },
00352 { 1280, 8212 },
00353 { -1280, -8212 },
00354 { 1281, 8214 },
00355 { -1281, -8214 },
00356 { 1300, 3201 },
00357 { -1300, -3201 },
00358 { 1330, 3322 },
00359 { -1330, -3322 },
00360 { 1331, 3324 },
00361 { -1331, -3324 },
00362 { 1340, 4322 },
00363 { -1340, -4322 },
00364 { 1341, 4324 },
00365 { -1341, -4324 },
00366 { 1350, 5322 },
00367 { -1350, -5322 },
00368 { 1351, 5324 },
00369 { -1351, -5324 },
00370 { 1360, 6322 },
00371 { -1360, -6322 },
00372 { 1361, 6324 },
00373 { -1361, -6324 },
00374 { 1370, 7322 },
00375 { -1370, -7322 },
00376 { 1371, 7324 },
00377 { -1371, -7324 },
00378 { 1380, 8322 },
00379 { -1380, -8322 },
00380 { 1381, 8324 },
00381 { -1381, -8324 },
00382 { 1400, -4201 },
00383 { -1400, 4201 },
00384 { 1440, 4422 },
00385 { -1440, -4422 },
00386 { 1441, 4424 },
00387 { -1441, -4424 },
00388 { 1450, 5422 },
00389 { -1450, -5422 },
00390 { 1451, 5424 },
00391 { -1451, -5424 },
00392 { 1460, 6422 },
00393 { -1460, -6422 },
00394 { 1461, 6424 },
00395 { -1461, -6424 },
00396 { 1500, 5201 },
00397 { -1500, -5201 },
00398 { 1550, 5522 },
00399 { -1550, -5522 },
00400 { 1551, 5524 },
00401 { -1551, -5524 },
00402 { 1560, 6522 },
00403 { -1560, -6522 },
00404 { 1561, 6524 },
00405 { -1561, -6524 },
00406 { 1600, -6201 },
00407 { -1600, 6201 },
00408 { 1660, 6622 },
00409 { -1660, -6622 },
00410 { 1661, 6624 },
00411 { -1661, -6624 },
00412 { 2130, 3122 },
00413 { -2130, -3122 },
00414 { 2140, 4122 },
00415 { -2140, -4122 },
00416 { 2150, 5122 },
00417 { -2150, -5122 },
00418 { 2160, 6122 },
00419 { -2160, -6122 },
00420 { 2170, 7122 },
00421 { -2170, -7122 },
00422 { 2180, 8122 },
00423 { -2180, -8122 },
00424 { 2200, 1103 },
00425 { -2200, -1103 },
00426 { 2221, 1114 },
00427 { -2221, -1114 },
00428 { 2230, 3112 },
00429 { -2230, -3112 },
00430 { 2231, 3114 },
00431 { -2231, -3114 },
00432 { 2240, 4112 },
00433 { -2240, -4112 },
00434 { 2241, 4114 },
00435 { -2241, -4114 },
00436 { 2250, 5112 },
00437 { -2250, -5112 },
00438 { 2251, 5114 },
00439 { -2251, -5114 },
00440 { 2260, 6112 },
00441 { -2260, -6112 },
00442 { 2261, 6114 },
00443 { -2261, -6114 },
00444 { 2270, 7112 },
00445 { -2270, -7112 },
00446 { 2271, 7114 },
00447 { -2271, -7114 },
00448 { 2280, 8112 },
00449 { -2280, -8112 },
00450 { 2281, 8114 },
00451 { -2281, -8114 },
00452 { 2300, 3101 },
00453 { -2300, -3101 },
00454 { 2330, 3312 },
00455 { -2330, -3312 },
00456 { 2331, 3314 },
00457 { -2331, -3314 },
00458 { 2340, 4312 },
00459 { -2340, -4312 },
00460 { 2341, 4314 },
00461 { -2341, -4314 },
00462 { 2350, 5312 },
00463 { -2350, -5312 },
00464 { 2351, 5314 },
00465 { -2351, -5314 },
00466 { 2360, 6312 },
00467 { -2360, -6312 },
00468 { 2361, 6314 },
00469 { -2361, -6314 },
00470 { 2370, 7312 },
00471 { -2370, -7312 },
00472 { 2371, 7314 },
00473 { -2371, -7314 },
00474 { 2380, 8312 },
00475 { -2380, -8312 },
00476 { 2381, 8314 },
00477 { -2381, -8314 },
00478 { 2400, -4101 },
00479 { -2400, 4101 },
00480 { 2440, 4412 },
00481 { -2440, -4412 },
00482 { 2441, 4414 },
00483 { -2441, -4414 },
00484 { 2450, 5412 },
00485 { -2450, -5412 },
00486 { 2451, 5414 },
00487 { -2451, -5414 },
00488 { 2460, 6412 },
00489 { -2460, -6412 },
00490 { 2461, 6414 },
00491 { -2461, -6414 },
00492 { 2500, 5101 },
00493 { -2500, -5101 },
00494 { 2550, 5512 },
00495 { -2550, -5512 },
00496 { 2551, 5514 },
00497 { -2551, -5514 },
00498 { 2560, 6512 },
00499 { -2560, -6512 },
00500 { 2561, 6514 },
00501 { -2561, -6514 },
00502 { 2600, -6101 },
00503 { -2600, 6101 },
00504 { 2660, 6612 },
00505 { -2660, -6612 },
00506 { 2661, 6614 },
00507 { -2661, -6614 },
00508 { 3140, 4232 },
00509 { -3140, -4232 },
00510 { 3150, 5232 },
00511 { -3150, -5232 },
00512 { 3160, 6232 },
00513 { -3160, -6232 },
00514 { 3170, 7232 },
00515 { -3170, -7232 },
00516 { 3180, 8232 },
00517 { -3180, -8232 },
00518 { 3240, 4132 },
00519 { -3240, -4132 },
00520 { 3250, 5132 },
00521 { -3250, -5132 },
00522 { 3260, 6132 },
00523 { -3260, -6132 },
00524 { 3270, 7132 },
00525 { -3270, -7132 },
00526 { 3280, 8132 },
00527 { -3280, -8132 },
00528 { 3300, 3303 },
00529 { -3300, -3303 },
00530 { 3331, 3334 },
00531 { -3331, -3334 },
00532 { 3340, 4332 },
00533 { -3340, -4332 },
00534 { 3341, 4334 },
00535 { -3341, -4334 },
00536 { 3350, 5332 },
00537 { -3350, -5332 },
00538 { 3351, 5334 },
00539 { -3351, -5334 },
00540 { 3360, 6332 },
00541 { -3360, -6332 },
00542 { 3361, 6334 },
00543 { -3361, -6334 },
00544 { 3370, 7332 },
00545 { -3370, -7332 },
00546 { 3371, 7334 },
00547 { -3371, -7334 },
00548 { 3380, 8332 },
00549 { -3380, -8332 },
00550 { 3381, 8334 },
00551 { -3381, -8334 },
00552 { 3400, -4301 },
00553 { -3400, 4301 },
00554 { 3440, 4432 },
00555 { -3440, -4432 },
00556 { 3441, 4434 },
00557 { -3441, -4434 },
00558 { 3450, 5432 },
00559 { -3450, -5432 },
00560 { 3451, 5434 },
00561 { -3451, -5434 },
00562 { 3460, 6432 },
00563 { -3460, -6432 },
00564 { 3461, 6434 },
00565 { -3461, -6434 },
00566 { 3500, 5301 },
00567 { -3500, -5301 },
00568 { 3550, 5532 },
00569 { -3550, -5532 },
00570 { 3551, 5534 },
00571 { -3551, -5534 },
00572 { 3560, 6532 },
00573 { -3560, -6532 },
00574 { 3561, 6534 },
00575 { -3561, -6534 },
00576 { 3600, -6301 },
00577 { -3600, 6301 },
00578 { 3660, 6632 },
00579 { -3660, -6632 },
00580 { 3661, 6634 },
00581 { -3661, -6634 },
00582 { 4150, 5242 },
00583 { -4150, -5242 },
00584 { 4160, 6242 },
00585 { -4160, -6242 },
00586 { 4250, 5142 },
00587 { -4250, -5142 },
00588 { 4260, 6142 },
00589 { -4260, -6142 },
00590 { 4350, 5342 },
00591 { -4350, -5342 },
00592 { 4360, 6342 },
00593 { -4360, -6342 },
00594 { 4400, 4403 },
00595 { -4400, -4403 },
00596 { 4441, 4444 },
00597 { -4441, -4444 },
00598 { 4450, 5442 },
00599 { -4450, -5442 },
00600 { 4451, 5444 },
00601 { -4451, -5444 },
00602 { 4460, 6442 },
00603 { -4460, -6442 },
00604 { 4461, 6444 },
00605 { -4461, -6444 },
00606 { 4500, 5401 },
00607 { -4500, -5401 },
00608 { 4550, 5542 },
00609 { -4550, -5542 },
00610 { 4551, 5544 },
00611 { -4551, -5544 },
00612 { 4560, 6542 },
00613 { -4560, -6542 },
00614 { 4561, 6544 },
00615 { -4561, -6544 },
00616 { 4600, 6401 },
00617 { -4600, -6401 },
00618 { 4660, 6642 },
00619 { -4660, -6642 },
00620 { 4661, 6644 },
00621 { -4661, -6644 },
00622 { 5160, 6252 },
00623 { -5160, -6252 },
00624 { 5260, 6152 },
00625 { -5260, -6152 },
00626 { 5360, 6352 },
00627 { -5360, -6352 },
00628 { 5460, 6452 },
00629 { -5460, -6452 },
00630 { 5500, 5503 },
00631 { -5500, -5503 },
00632 { 5551, 5554 },
00633 { -5551, -5554 },
00634 { 5560, 6552 },
00635 { -5560, -6552 },
00636 { 5561, 6554 },
00637 { -5561, -6554 },
00638 { 5600, -6501 },
00639 { -5600, 6501 },
00640 { 5660, 6652 },
00641 { -5660, -6652 },
00642 { 5661, 6654 },
00643 { -5661, -6654 },
00644 { 6600, 6603 },
00645 { -6600, -6603 },
00646 { 6661, 6664 },
00647 { -6661, -6664 },
00648 { 10016, 93 },
00649 { -10016, -93 },
00650 { 20016, 94 },
00651 { -20016, -94 },
00652 { 10110, 9010221 },
00653 { 10111, 20113 },
00654 { 10121, 20213 },
00655 { -10121, -20213 },
00656 { 10131, 10323 },
00657 { -10131, -10323 },
00658 { 10231, 10313 },
00659 { -10231, -10313 },
00660 { 10441, 100443 },
00661 { 20440, 10441 },
00662 { 20441, 20443 },
00663 { 20442, 445 },
00664 { 30131, 100323 },
00665 { -30131, -100323 },
00666 { 30231, 100313 },
00667 { -30231, -100313 }
00668 };
00669
00670 int listSize = sizeof(SList)/sizeof(SList[0]);
00671 for( int k=0; k!=listSize; ++k) {
00672 m.insert( std::make_pair( SList[k].id, SList[k].pid) );
00673 }
00674 return m;
00675 }
00676
00677 PDTIsajetMap const & PDTIsajetMapInit()
00678 {
00679 static PDTIsajetMap m;
00680 static IsajetPDTMap const & hmap = getIsajetPDTMap();
00681
00682 for(IsajetPDTMap::const_iterator cit=hmap.begin(), mend=hmap.end(); cit!=mend; ++cit ) {
00683 m.insert( std::make_pair( cit->second, cit->first ));
00684 }
00685 return m;
00686 }
00687
00688
00689 int convIsajettoPDT( const int id )
00690 {
00691
00692 if( abspid(id) <= 100 ) { return 0; }
00693 if( abspid(id) > 99999 ) { return 0; }
00694
00695
00696 int istran;
00697 unsigned short js = digit(nj,id);
00698 unsigned short i1 = digit(nq3,id);
00699 unsigned short i2 = digit(nq2,id);
00700 unsigned short i3 = digit(nq1,id);
00701 unsigned short i4 = digit(nl,id);
00702
00703
00704 if(i1 != 0 && i2 != 0 && i3 == 0) {
00705
00706 if(i2 <= 2 && i1 <= 2){
00707
00708 } else {
00709 if(i1 == 2) {
00710 i1 = 1;
00711 } else if(i1 == 1) {
00712 i1 = 2;
00713 }
00714 if(i2 == 2) {
00715 i2 = 1;
00716 } else if(i2 == 1) {
00717 i2 = 2;
00718 }
00719 }
00720 istran=i1*100 + i2*10 + 2*js+1 + i4*10000;
00721 if( id < 0 ) { istran = -istran; }
00722
00723 if(i1 == 4 && i2 != 4) { istran = -istran; }
00724 if(i1 == 6 && i2 != 6 && i2 != 4) { istran = -istran; }
00725
00726 if(i2 == i1 && id < 0) { istran=0; }
00727 return istran;
00728 }
00729
00730 if(i2 != 0 && i3 != 0 && i1 == 0) {
00731
00732 if(i3 == 2) {
00733 i3 = 1;
00734 } else if(i3 == 1) {
00735 i3 = 2;
00736 }
00737 if(i2 == 2) {
00738 i2 = 1;
00739 } else if(i2 == 1) {
00740 i2 = 2;
00741 }
00742 istran = 0;
00743 if(i2 < i3){
00744 istran=i3*1000 + i2*100 + 1;
00745 } else if(i2 == i3){
00746 istran=i2*1000 + i3*100 + 3;
00747 } else {
00748 istran=i2*1000 + i3*100 + 1;
00749 }
00750 if( id < 0 ) { istran = -istran; }
00751
00752 if(i2 == 4 && i3 != 4) { istran=-istran; }
00753 if(i2 == 6 && i3 != 6 && i3 != 4) { istran=-istran; }
00754 return istran;
00755 }
00756
00757 if( i1 != 0 && i3 != 0 && i2 != 0 ) {
00758
00759 if(i3 == 2) {
00760 i3 = 1;
00761 } else if(i3 == 1) {
00762 i3 = 2;
00763 }
00764 if(i2 == 2) {
00765 i2 = 1;
00766 } else if(i2 == 1) {
00767 i2 = 2;
00768 }
00769 if(i1 == 2) {
00770 i1 = 1;
00771 } else if(i1 == 1) {
00772 i1 = 2;
00773 }
00774 istran = 0;
00775 if(i1 <= 2){
00776 istran=i3*1000 + i2*100 + i1*10 + 2*js+2;
00777 } else if(i3 <= 2 && i2 <= 2){
00778 istran=i1*1000 + i3*100 + i2*10 + 2*js+2;
00779 } else {
00780 istran=i1*1000 + i2*100 + i3*10 + 2*js+2;
00781 }
00782 if( id < 0 ) { istran = -istran; }
00783 }
00784
00785 return 0;
00786
00787 }
00788
00789
00790 int convPDTtoIsajet( const int id )
00791 {
00792
00793 if( fundamentalID(id) != 0 ) { return 0; }
00794 if( abspid(id) > 99999 ) { return 0; }
00795
00796
00797 int istran;
00798 unsigned short js = digit(nj,id);
00799 unsigned short i1 = digit(nq3,id);
00800 unsigned short i2 = digit(nq2,id);
00801 unsigned short i3 = digit(nq1,id);
00802 unsigned short i4 = digit(nl,id);
00803
00804
00805 if(i1 != 0 && i2 != 0 && i3 == 0) {
00806
00807 if(i2 <= 2 && i1 <= 2){
00808
00809 } else {
00810 if(i1 == 2) {
00811 i1 = 1;
00812 } else if(i1 == 1) {
00813 i1 = 2;
00814 }
00815 if(i2 == 2) {
00816 i2 = 1;
00817 } else if(i2 == 1) {
00818 i2 = 2;
00819 }
00820 }
00821 istran=i1*100 + i2*10 + (js-1)/2 + i4*10000;
00822 if( id < 0 ) { istran = -istran; }
00823
00824 if(i2 == 4 && i1 != 4) { istran = -istran; }
00825 if(i2 == 6 && i1 != 6 && i1 != 4) { istran = -istran; }
00826
00827 if(i2 == i1 && id < 0) { istran=0; }
00828 return istran;
00829 }
00830
00831 if(i1 == 0){
00832
00833 if(i3 == 2) {
00834 i3 = 1;
00835 } else if(i3 == 1) {
00836 i3 = 2;
00837 }
00838 if(i2 == 2) {
00839 i2 = 1;
00840 } else if(i2 == 1) {
00841 i2 = 2;
00842 }
00843 istran = 0;
00844 if(i3 < i2){
00845 istran=i3*1000 + i2*100 + (js-1)/2;
00846 } else {
00847 istran=i2*1000 + i3*100 + (js-1)/2;
00848 }
00849 if( id < 0 ) { istran = -istran; }
00850
00851 if(i2 == 4 && i3 != 4) { istran=-istran; }
00852 if(i2 == 6 && i3 != 6 && i3 != 4) { istran=-istran; }
00853 return istran;
00854 }
00855
00856 if( i1 != 0 && i3 != 0 && i2 != 0 && ( js == 2 || js == 4) && i4 == 0 ) {
00857
00858 if(i3 == 2) {
00859 i3 = 1;
00860 } else if(i3 == 1) {
00861 i3 = 2;
00862 }
00863 if(i2 == 2) {
00864 i2 = 1;
00865 } else if(i2 == 1) {
00866 i2 = 2;
00867 }
00868 if(i1 == 2) {
00869 i1 = 1;
00870 } else if(i1 == 1) {
00871 i1 = 2;
00872 }
00873 istran = 0;
00874 if(i3 <= 2){
00875 istran=i3*1000 + i2*100 + i1*10 + (js-2)/2;
00876 } else if(i1 <= 2 && i2 <= 2){
00877 istran=i2*1000 + i1*100 + i3*10 + (js-2)/2;
00878 } else {
00879 istran=i1*1000 + i2*100 + i3*10 + (js-2)/2;
00880 }
00881 if( id < 0 ) { istran = -istran; }
00882 return istran;
00883 }
00884
00885 return 0;
00886 }
00887
00888
00889
00890
00891 IsajetPDTMap const & getIsajetPDTMap()
00892 {
00893 static IsajetPDTMap const & hmap = IsajetPDTMapInit();
00894 return hmap;
00895 }
00896
00897
00898
00899
00900 PDTIsajetMap const & getPDTIsajetMap()
00901 {
00902 static PDTIsajetMap const & hmap = PDTIsajetMapInit();
00903 return hmap;
00904 }
00905
00906 }
00907
00908 int translateIsajettoPDT( const int id )
00909 {
00910 static IsajetPDTMap const & hmap = getIsajetPDTMap();
00911
00912 IsajetPDTMap::const_iterator const cit = hmap.find( id );
00913
00914 if ( cit != hmap.end() ) { return cit->second; }
00915
00916 return convIsajettoPDT(id);
00917 }
00918
00919 int translatePDTtoIsajet( const int id )
00920 {
00921 static PDTIsajetMap const & pmap = getPDTIsajetMap();
00922
00923 PDTIsajetMap::const_iterator const cit = pmap.find( id );
00924
00925 if ( cit != pmap.end() ) { return cit->second; }
00926
00927 return convPDTtoIsajet(id);
00928 }
00929
00930 void writeIsajetTranslationLine( int i, std::ostream & os )
00931 {
00932
00933 static IsajetPDTMap const & hmap = getIsajetPDTMap();
00934
00935 IsajetPDTMap::const_iterator const cit = hmap.find( i );
00936
00937 if ( cit != hmap.end() ) {
00938 int id = cit->second;
00939 os << " Isajet number: " ;
00940 os.width(10);
00941 os << i << " HepPID number: " ;
00942 os.width(10);
00943 os << id << " " << particleName(id) << std::endl;
00944
00945 int iback = translatePDTtoIsajet(id);
00946 if(iback != i) {
00947 os << " WARNING: " << id << " translates back to "
00948 << iback << " not to " << i << std::endl;
00949 }
00950 }
00951 return;
00952 }
00953
00954 void writeIsajetTranslation( std::ostream & os )
00955 {
00956 writeVersion( os );
00957 os << " HepPID Particle List" << std::endl;
00958 os << std::endl;
00959
00960 int id, j, q1, q2, q3, m;
00961
00962 for( id=1; id<101; ++id) {
00963 writeIsajetTranslationLine( id, os );
00964 writeIsajetTranslationLine( -id, os );
00965 }
00966
00967 for( q2=1; q2<7; ++q2) {
00968 for( q1=1; q1<7; ++q1) {
00969 for( j=0; j<2; ++j) {
00970 id = 1000*q2+100*q1+j;
00971 writeIsajetTranslationLine( id, os );
00972 writeIsajetTranslationLine( -id, os );
00973 }
00974 }
00975 }
00976
00977 for( q2=1; q2<9; ++q2) {
00978 for( q1=1; q1<9; ++q1) {
00979 for( j=0; j<3; ++j) {
00980 for( m=0; m<4; ++m) {
00981 id = 10000*m+100*q2+10*q1+j;
00982 writeIsajetTranslationLine( id, os );
00983 writeIsajetTranslationLine( -id, os );
00984 }
00985 }
00986 }
00987 }
00988
00989 for( q3=1; q3<7; ++q3) {
00990 for( q2=1; q2<7; ++q2) {
00991 for( q1=1; q1<7; ++q1) {
00992 for( j=1; j<2; ++j) {
00993 id = 1000*q3+100*q2+10*q1+j;
00994 writeIsajetTranslationLine( id, os );
00995 writeIsajetTranslationLine( -id, os );
00996 }
00997 }
00998 }
00999 }
01000 return;
01001 }
01002
01003 }