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