34#define INCLXX_IN_GEANT4_MODE 1
45#ifndef G4INCLHASHING_HH_
46#define G4INCLHASHING_HH_
48#ifdef INCLXX_IN_GEANT4_MODE
49#define INCL_CACHING_CLUSTERING_MODEL_INTERCOMPARISON_Set 1
52#ifdef INCL_CACHING_CLUSTERING_MODEL_INTERCOMPARISON_HashMask
63 typedef G4int NucleonItem;
66 typedef unsigned long HashType;
75 const G4int maskTableSize = 500;
76 HashType mask[maskTableSize] = {
77#if ULONG_MAX >= 18446744073709551615UL
79 4702504706864814267UL,
80 15867743096752998125UL,
81 1925133831785711339UL,
82 3063678697824149615UL,
83 3234475698548538313UL,
84 7917662962824220875UL,
85 9924018995951912525UL,
86 4682901166658838314UL,
88 18376824469534567556UL,
89 5343971687892173674UL,
90 10169451505660710328UL,
91 7865786236744900341UL,
92 10279352445822536091UL,
93 7089630702066408548UL,
94 4808534960882600398UL,
95 12538238618753707399UL,
96 16091508301730012097UL,
97 14073498192850855514UL,
98 9966250765115558375UL,
99 5718582854016674314UL,
100 5837057680281951483UL,
101 1596870119086046964UL,
102 15866877264435719977UL,
103 12743659579234384899UL,
104 13589152059793213451UL,
105 3364441792317801205UL,
106 17190534087980602002UL,
107 2252844317879582875UL,
108 16883577324406774376UL,
109 15985239218161130895UL,
110 3661288085782215193UL,
111 17294313791381397188UL,
112 9405115097872546015UL,
113 2834208340246893214UL,
114 15589349083551097162UL,
115 7475687940900359446UL,
116 2706367355862311522UL,
117 17987211229193808759UL,
118 6863833750504706813UL,
119 3685392250678121047UL,
120 11759380240055300923UL,
121 13403449794574083242UL,
122 1985973959990096358UL,
123 15223952677867744295UL,
124 6118509595165778043UL,
125 815155895778500187UL,
126 18185573450595916074UL,
127 5501350898920817482UL,
128 382043392356382894UL,
129 7212372096396984419UL,
130 17216082813533838272UL,
131 11664929762302443627UL,
132 12742534429666211769UL,
133 10885936672907243422UL,
134 7408809357861601856UL,
135 7235809803254354851UL,
136 10923449527984005964UL,
137 11846584293234382222UL,
138 10656509822128626836UL,
139 2129734486054336774UL,
140 4595091378435214061UL,
141 9874818728883580365UL,
142 5946304945334907747UL,
143 10039693308935676801UL,
144 13281974385330546238UL,
145 18100260506304059768UL,
146 2874169620796400411UL,
147 7108218580097801290UL,
148 1609767302727070556UL,
149 11296708194993589343UL,
150 13937355006285948174UL,
151 4714440178991372538UL,
152 16551309706022489963UL,
153 10000176812340548792UL,
154 11878058786115320873UL,
155 17227685596830233118UL,
156 6913194524255335692UL,
157 8581157771211862326UL,
158 7692516248830269819UL,
159 4834805303668841320UL,
160 17683695285788382628UL,
161 3163270552620053128UL,
162 7501354178009882428UL,
163 18032292064795682158UL,
164 14903091228667847945UL,
165 12658813769564311973UL,
166 11071671991853641692UL,
167 1898680911275368123UL,
168 11850012838739454071UL,
169 11605340059702017433UL,
170 1993475538032240150UL,
171 14225643076178260981UL,
172 6073746146812460969UL,
173 10427646200541715974UL,
174 8534830515125041658UL,
175 12137748989343460832UL,
176 401619354176178507UL,
177 10566842722928406433UL,
178 2726007197202736953UL,
179 12070986965363522186UL,
180 14306741808513945796UL,
181 9411600548893210409UL,
182 10677814577847517837UL,
183 2524629524427176799UL,
184 13769537677295179355UL,
185 2202164469715649820UL,
186 18048299992904550974UL,
187 11620367199819191275UL,
188 12863789957300408274UL,
189 9470331939464407385UL,
190 1530202837192022943UL,
191 8835064955139736011UL,
192 8145200231008682998UL,
193 7839809942742909916UL,
194 9138434136821323472UL,
195 14559393378324131957UL,
196 17365140272468484867UL,
197 12986052322695094991UL,
198 15032117076709947810UL,
199 3710476151324188272UL,
200 1301282554894996635UL,
201 10667152340954078766UL,
202 6983777770664759713UL,
203 16611664140947488647UL,
204 12136122930610106551UL,
205 15900825787656229127UL,
206 10248132639811024681UL,
207 11698219706208598358UL,
208 12307261434875431124UL,
209 14365082098869236341UL,
210 7765033571440697089UL,
211 14810290195054154855UL,
212 9618298383970391972UL,
213 5541541247731255102UL,
214 16567733959804019203UL,
215 17600930129818672877UL,
216 5232016726685772558UL,
217 226023602797856284UL,
218 3268675878373668427UL,
219 15412168229420758040UL,
220 9483353024934253554UL,
221 12957711733854877641UL,
222 13202855362863795860UL,
223 14659098127488639325UL,
224 5642266569510167780UL,
225 8405185641276686415UL,
226 12567678120796482638UL,
227 5572663458795121052UL,
228 11292924459778654315UL,
229 12907130784326268258UL,
230 2781503111506861655UL,
231 14052031913630628463UL,
232 7662091316495917798UL,
233 12388345726433231307UL,
234 2855096782092770172UL,
235 143760647337486211UL,
236 5268378935483038729UL,
237 14347085534022186031UL,
238 8226804542313416051UL,
239 503042565036387930UL,
240 13277939264481364629UL,
241 4807934385534294767UL,
242 6554792055682376182UL,
243 3505789456125861647UL,
244 17485983928210687457UL,
245 6551825177685364660UL,
246 6530399878351375719UL,
247 11618616536378075323UL,
248 8710939588645435621UL,
249 15913776342681996234UL,
250 12975832615100357766UL,
251 11385194348110364656UL,
252 7334273726237402463UL,
253 18215307287507846020UL,
254 108052987233117093UL,
255 14819872198639686030UL,
256 7651108032227837181UL,
257 7326148382022660565UL,
258 15520843621422491193UL,
259 14890169031248899249UL,
260 3302880341533628710UL,
261 17509231796729795392UL,
262 6938974810266312299UL,
263 9904104728819873047UL,
264 10277854813228565819UL,
265 8062859346560164933UL,
266 11953220042241400520UL,
267 8905905195342696566UL,
268 8620925171331846539UL,
269 15354008279539346333UL,
270 16255477929425666651UL,
271 15625465014312179739UL,
272 6560194503171884780UL,
273 458508474659358201UL,
274 11178141379033004711UL,
275 7025589002713530514UL,
276 6196040542056180472UL,
277 1771599404396005753UL,
278 490848885681539136UL,
279 15438702070227423706UL,
280 8790555204480314499UL,
281 6572556090639551862UL,
282 3282457245646221158UL,
283 4239195535437592000UL,
284 16001734625059485025UL,
285 14396081511655033925UL,
286 10261432601192522025UL,
287 9247260218125952769UL,
288 16080570631414044686UL,
289 15656989589485934942UL,
290 10761254633620277391UL,
291 1363122333823743651UL,
292 14847079675279608117UL,
293 6077849015756077442UL,
294 15290828636077500470UL,
295 220281240092237795UL,
296 15760968530563963031UL,
297 1364939791854189821UL,
298 5997510653682588941UL,
299 2006088633984038082UL,
300 1383498232486134285UL,
301 17859041093815211104UL,
302 15894184107946313879UL,
303 18173079296415961736UL,
304 3443997055549483358UL,
305 5294019672823936930UL,
306 1341830676613088487UL,
307 581727297735446503UL,
308 18219577357392561487UL,
309 17639313299012264080UL,
310 14222133713791167321UL,
311 5879505043799386532UL,
312 7557129766625449226UL,
313 13360075610958017985UL,
314 12724115904336527780UL,
315 16753075547920915484UL,
316 4116411708112171871UL,
317 16025692682808517910UL,
318 4003328942103420939UL,
319 9811320057930109787UL,
320 3576072849789367484UL,
321 17075748046009610792UL,
322 12833406223291392866UL,
323 9648248336540660688UL,
324 17476583957989300837UL,
325 16827359136787046510UL,
326 4345039153564047180UL,
327 1224716260729000059UL,
328 13959598322342824445UL,
329 10743140873520517726UL,
330 13340880620026565045UL,
331 9192556363923792986UL,
332 3841907957831078749UL,
333 246438482871824834UL,
334 4260787342534664069UL,
335 17100720253388227686UL,
336 11544966922599678750UL,
337 9293075407897592921UL,
338 1610905992411273162UL,
339 2239787421847352995UL,
340 15182496755963432304UL,
341 1823665993529743824UL,
342 7263153004799849282UL,
343 11497980475724160945UL,
344 1274355111868335897UL,
345 15057972526005432563UL,
346 11823052640709049475UL,
347 15927429045819933119UL,
348 14618154733049321749UL,
349 16861991482751749049UL,
350 5936874228331837512UL,
351 15290754097890487720UL,
352 9191375772889979508UL,
353 6816129633576113785UL,
354 12923817606396645484UL,
355 8875993281327238816UL,
356 123714282527043508UL,
357 7179882084825590703UL,
358 3925024599322075567UL,
359 2426048646574757412UL,
360 10665962527629258587UL,
361 12646312850531314143UL,
362 528129165734836933UL,
363 3701120955488573646UL,
364 15861534485058814280UL,
365 14022467189115595098UL,
366 9502851142036471883UL,
367 12432213096681522867UL,
368 751500370320404802UL,
369 1606345595406828785UL,
370 10313713517508959984UL,
371 6565609239876268324UL,
372 8654149379457545096UL,
373 6548830896464452248UL,
374 1464368532414012445UL,
375 4302937696445584032UL,
376 17063664947863781419UL,
377 8038577586991861682UL,
378 10951259595021013980UL,
379 7709630466255725074UL,
380 609806407111517279UL,
381 13860208046684354033UL,
382 15140303568956907423UL,
383 4803057729274452412UL,
384 4367455766719288283UL,
385 320027280359511727UL,
386 16020877306388137190UL,
387 3764882323315346488UL,
388 11972546313392727283UL,
389 7977601566213555124UL,
390 15148378244947865280UL,
391 4483722253329626321UL,
392 16560836625841776840UL,
393 14666077208671482135UL,
394 9298193298119711211UL,
395 12015014023744623893UL,
396 10191703760489555596UL,
397 1316913070589847725UL,
398 15881746492947991011UL,
399 13665807677473998048UL,
400 14390309917106480591UL,
401 17231567872468478469UL,
402 4562957401728953232UL,
403 11501454621029854493UL,
404 10252134323451005656UL,
405 12021948387925309670UL,
406 3525149157835967069UL,
407 10292558937206299109UL,
408 13725724605985217856UL,
409 175033751151696127UL,
410 14720951489402332470UL,
411 11927624343611332814UL,
412 567437266624809204UL,
413 14161392585443694227UL,
414 8725463779420655722UL,
415 12063468735510140344UL,
416 12026523736635889408UL,
417 16565599419781878456UL,
418 7086470817660744490UL,
419 14809513609573064984UL,
420 10898762682820885052UL,
421 13982083571459739493UL,
422 15656618354974864372UL,
423 4239583100143107224UL,
424 4322769551545487304UL,
425 13825585217369415084UL,
426 5136324433139686016UL,
427 8179080547263771206UL,
428 8279259187088296150UL,
429 6381371846375303738UL,
430 3142014871877744388UL,
431 3417815453103862427UL,
432 5556557018553548625UL,
433 7788492627093668219UL,
434 2446537327809742760UL,
435 7165731799178534002UL,
436 10969060298437286606UL,
437 16392640790529049402UL,
438 4905600830298563047UL,
439 12442106640046578583UL,
440 7139041375816724964UL,
441 18098103947732186633UL,
442 2078238351823174321UL,
443 9929562085097862277UL,
444 14231090695955652612UL,
445 16914810114016502414UL,
446 9172887937989634160UL,
447 10057184693043820912UL,
448 8739867056556181319UL,
449 1879322488574672564UL,
450 6706469496298082633UL,
451 17962793280504692541UL,
452 2796622365685518391UL,
453 14206454203780509608UL,
454 11911505185092294091UL,
455 13188421404411005493UL,
456 1002631262698104372UL,
457 16116424222649594941UL,
458 731059841323644991UL,
459 16630196285890835221UL,
460 6275370517569960592UL,
461 2762335813606797964UL,
462 1550415195017045798UL,
463 8084777285994689863UL,
464 4858045103923411134UL,
465 13517076072140006105UL,
466 16656029182431041189UL,
467 6076064496187725305UL,
468 15281271591975529160UL,
469 2275428871306187428UL,
470 15396744606475751109UL,
471 15460778948302864604UL,
472 6107847787338713474UL,
473 9357621545767658217UL,
474 4805014239018879550UL,
475 17869119773972988965UL,
476 17868495682315323441UL,
477 10660808254721474616UL,
478 7308276872489783138UL,
479 4234856545479982050UL,
480 1223334879029033304UL,
481 10995800624761949288UL,
482 16283797325974965665UL,
483 12410167362078398820UL,
484 12918484557456873081UL,
485 14423314551522087679UL,
486 4967867692111402622UL,
487 16197846038770304940UL,
488 11809884480603742831UL,
489 16802686488973843640UL,
490 2354077987008574056UL,
491 9978003576519895777UL,
492 5506048811554826358UL,
493 18433781523380564149UL,
494 4302137793340917657UL,
495 978195094879846769UL,
496 2377823329880292548UL,
497 3464291122006072777UL,
498 18046845603455616162UL,
499 13944776942598500463UL,
500 4000590694056817931UL,
501 496833875371241644UL,
502 16247695245933522501UL,
503 1505779951058046438UL,
504 11430822963532124358UL,
505 4729903064888922231UL,
506 8864507718425611027UL,
507 14643598183997536338UL,
508 4480511581250357378UL,
509 11133239898726463704UL,
510 17471052555928421508UL,
511 15541989708583753235UL,
512 7461560065837635158UL,
513 13956421526574063689UL,
514 3743280538841219763UL,
515 12020611143801404565UL,
516 6618703997501212010UL,
517 3729371474666129836UL,
518 17869245751809494685UL,
519 1833331385744685838UL,
520 1506104207003999508UL,
521 8158509169843256229UL,
522 10212507222875597491UL,
523 7211593336579637715UL,
524 14341253648497092530UL,
525 4511202703905924031UL,
526 8043833010361144102UL,
527 2512875450160943286UL,
528 18235665817864664213UL,
529 8317446467730476132UL,
530 11182884000969346056UL,
531 548357546399462395UL,
532 1960628024952592835UL,
533 4650095513901192085UL,
534 12679676177772217157UL,
535 3487733703240934135UL,
536 6446640077094538365UL,
537 1114715573562175630UL,
538 16622874083185883281UL,
539 17081932748524927392UL,
540 17192402071367355968UL,
541 15013800339030843048UL,
542 3718961432784285989UL,
543 14953817216655866296UL,
544 11410118254031919487UL,
545 17718071771819733200UL,
546 6970769915355275987UL,
547 14244261541942962860UL,
548 295778071941084510UL,
549 553041658124347434UL,
550 571128341496031343UL,
551 6867891970504820807UL,
552 16515587447694198371UL,
553 3932569386063656416UL,
554 15542525920467376967UL,
555 4513384432419818675UL,
556 7336705434792969335UL,
557 1342984449178439078UL,
558 10672151960711459277UL,
559 11668091039787926587UL,
560 15308742994910314323UL,
561 8337161158579684228UL,
562 5390473811288298369UL,
563 444117188512458090UL,
564 8602531868090961223UL,
565 1632809043568697774UL,
566 11829254858211213981UL,
567 4634227867572760505UL,
568 16086237486731074061UL,
569 4844172753138751369UL,
570 4992022238300904271UL,
571 11132360655811360102UL,
572 11660714643785469458UL,
573 2468480999090126185UL,
574 10912054708474512716UL,
575 12659667168896228555UL,
576 11988368921832936489UL,
577 5116996783249524791UL,
1085 inline HashType xorrer(HashType
const &l, NucleonItem
const &r) {
1113 inline HashType hashConfig(NucleonItem *
config,
G4int n) {
1115 return std::accumulate(
config,
config+n, ((HashType)0), xorrer);