Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4INCLHashing.hh
Go to the documentation of this file.
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 // INCL++ intra-nuclear cascade model
27 // Pekka Kaitaniemi, CEA and Helsinki Institute of Physics
28 // Davide Mancusi, CEA
29 // Alain Boudard, CEA
30 // Sylvie Leray, CEA
31 // Joseph Cugnon, University of Liege
32 //
33 #define INCLXX_IN_GEANT4_MODE 1
34 
35 #include "globals.hh"
36 
37 /** \file G4INCLHashing.hh
38  * \brief Functions for hashing a collection of NucleonItems.
39  *
40  * \date 12th October 2012
41  * \author Davide Mancusi
42  */
43 
44 #ifndef G4INCLHASHING_HH_
45 #define G4INCLHASHING_HH_
46 
47 #ifdef INCLXX_IN_GEANT4_MODE
48 #define INCL_CACHING_CLUSTERING_MODEL_INTERCOMPARISON_Set 1
49 #endif // INCLXX_IN_GEANT4_MODE
50 
51 #ifdef INCL_CACHING_CLUSTERING_MODEL_INTERCOMPARISON_HashMask
52 
53 #include <algorithm>
54 #include <numeric>
55 #include <climits>
56 // #include <cassert>
57 
58 namespace G4INCL {
59 
60  namespace Hashing {
61 
62  typedef G4int NucleonItem;
63 
64  // the C++ standard guarantees that unsigned long is at least 32-bit long
65  typedef unsigned long HashType;
66 
67  /* Depending on the size of the HashType type, we use 32-bit or 64-bit
68  * binary masks. 64-bit masks guarantee lower collision rates (about a
69  * factor of 3). Checks are done using compile-time constants defined in
70  * the standard <climits> header.
71  */
72 
73  namespace {
74  const G4int maskTableSize = 500;
75  HashType mask[maskTableSize] = {
76 #if ULONG_MAX >= 18446744073709551615UL // 2^64-1
77  // unsigned longs have at least 64 bits here
78  4702504706864814267UL,
79  15867743096752998125UL,
80  1925133831785711339UL,
81  3063678697824149615UL,
82  3234475698548538313UL,
83  7917662962824220875UL,
84  9924018995951912525UL,
85  4682901166658838314UL,
86  981361508296534881UL,
87  18376824469534567556UL,
88  5343971687892173674UL,
89  10169451505660710328UL,
90  7865786236744900341UL,
91  10279352445822536091UL,
92  7089630702066408548UL,
93  4808534960882600398UL,
94  12538238618753707399UL,
95  16091508301730012097UL,
96  14073498192850855514UL,
97  9966250765115558375UL,
98  5718582854016674314UL,
99  5837057680281951483UL,
100  1596870119086046964UL,
101  15866877264435719977UL,
102  12743659579234384899UL,
103  13589152059793213451UL,
104  3364441792317801205UL,
105  17190534087980602002UL,
106  2252844317879582875UL,
107  16883577324406774376UL,
108  15985239218161130895UL,
109  3661288085782215193UL,
110  17294313791381397188UL,
111  9405115097872546015UL,
112  2834208340246893214UL,
113  15589349083551097162UL,
114  7475687940900359446UL,
115  2706367355862311522UL,
116  17987211229193808759UL,
117  6863833750504706813UL,
118  3685392250678121047UL,
119  11759380240055300923UL,
120  13403449794574083242UL,
121  1985973959990096358UL,
122  15223952677867744295UL,
123  6118509595165778043UL,
124  815155895778500187UL,
125  18185573450595916074UL,
126  5501350898920817482UL,
127  382043392356382894UL,
128  7212372096396984419UL,
129  17216082813533838272UL,
130  11664929762302443627UL,
131  12742534429666211769UL,
132  10885936672907243422UL,
133  7408809357861601856UL,
134  7235809803254354851UL,
135  10923449527984005964UL,
136  11846584293234382222UL,
137  10656509822128626836UL,
138  2129734486054336774UL,
139  4595091378435214061UL,
140  9874818728883580365UL,
141  5946304945334907747UL,
142  10039693308935676801UL,
143  13281974385330546238UL,
144  18100260506304059768UL,
145  2874169620796400411UL,
146  7108218580097801290UL,
147  1609767302727070556UL,
148  11296708194993589343UL,
149  13937355006285948174UL,
150  4714440178991372538UL,
151  16551309706022489963UL,
152  10000176812340548792UL,
153  11878058786115320873UL,
154  17227685596830233118UL,
155  6913194524255335692UL,
156  8581157771211862326UL,
157  7692516248830269819UL,
158  4834805303668841320UL,
159  17683695285788382628UL,
160  3163270552620053128UL,
161  7501354178009882428UL,
162  18032292064795682158UL,
163  14903091228667847945UL,
164  12658813769564311973UL,
165  11071671991853641692UL,
166  1898680911275368123UL,
167  11850012838739454071UL,
168  11605340059702017433UL,
169  1993475538032240150UL,
170  14225643076178260981UL,
171  6073746146812460969UL,
172  10427646200541715974UL,
173  8534830515125041658UL,
174  12137748989343460832UL,
175  401619354176178507UL,
176  10566842722928406433UL,
177  2726007197202736953UL,
178  12070986965363522186UL,
179  14306741808513945796UL,
180  9411600548893210409UL,
181  10677814577847517837UL,
182  2524629524427176799UL,
183  13769537677295179355UL,
184  2202164469715649820UL,
185  18048299992904550974UL,
186  11620367199819191275UL,
187  12863789957300408274UL,
188  9470331939464407385UL,
189  1530202837192022943UL,
190  8835064955139736011UL,
191  8145200231008682998UL,
192  7839809942742909916UL,
193  9138434136821323472UL,
194  14559393378324131957UL,
195  17365140272468484867UL,
196  12986052322695094991UL,
197  15032117076709947810UL,
198  3710476151324188272UL,
199  1301282554894996635UL,
200  10667152340954078766UL,
201  6983777770664759713UL,
202  16611664140947488647UL,
203  12136122930610106551UL,
204  15900825787656229127UL,
205  10248132639811024681UL,
206  11698219706208598358UL,
207  12307261434875431124UL,
208  14365082098869236341UL,
209  7765033571440697089UL,
210  14810290195054154855UL,
211  9618298383970391972UL,
212  5541541247731255102UL,
213  16567733959804019203UL,
214  17600930129818672877UL,
215  5232016726685772558UL,
216  226023602797856284UL,
217  3268675878373668427UL,
218  15412168229420758040UL,
219  9483353024934253554UL,
220  12957711733854877641UL,
221  13202855362863795860UL,
222  14659098127488639325UL,
223  5642266569510167780UL,
224  8405185641276686415UL,
225  12567678120796482638UL,
226  5572663458795121052UL,
227  11292924459778654315UL,
228  12907130784326268258UL,
229  2781503111506861655UL,
230  14052031913630628463UL,
231  7662091316495917798UL,
232  12388345726433231307UL,
233  2855096782092770172UL,
234  143760647337486211UL,
235  5268378935483038729UL,
236  14347085534022186031UL,
237  8226804542313416051UL,
238  503042565036387930UL,
239  13277939264481364629UL,
240  4807934385534294767UL,
241  6554792055682376182UL,
242  3505789456125861647UL,
243  17485983928210687457UL,
244  6551825177685364660UL,
245  6530399878351375719UL,
246  11618616536378075323UL,
247  8710939588645435621UL,
248  15913776342681996234UL,
249  12975832615100357766UL,
250  11385194348110364656UL,
251  7334273726237402463UL,
252  18215307287507846020UL,
253  108052987233117093UL,
254  14819872198639686030UL,
255  7651108032227837181UL,
256  7326148382022660565UL,
257  15520843621422491193UL,
258  14890169031248899249UL,
259  3302880341533628710UL,
260  17509231796729795392UL,
261  6938974810266312299UL,
262  9904104728819873047UL,
263  10277854813228565819UL,
264  8062859346560164933UL,
265  11953220042241400520UL,
266  8905905195342696566UL,
267  8620925171331846539UL,
268  15354008279539346333UL,
269  16255477929425666651UL,
270  15625465014312179739UL,
271  6560194503171884780UL,
272  458508474659358201UL,
273  11178141379033004711UL,
274  7025589002713530514UL,
275  6196040542056180472UL,
276  1771599404396005753UL,
277  490848885681539136UL,
278  15438702070227423706UL,
279  8790555204480314499UL,
280  6572556090639551862UL,
281  3282457245646221158UL,
282  4239195535437592000UL,
283  16001734625059485025UL,
284  14396081511655033925UL,
285  10261432601192522025UL,
286  9247260218125952769UL,
287  16080570631414044686UL,
288  15656989589485934942UL,
289  10761254633620277391UL,
290  1363122333823743651UL,
291  14847079675279608117UL,
292  6077849015756077442UL,
293  15290828636077500470UL,
294  220281240092237795UL,
295  15760968530563963031UL,
296  1364939791854189821UL,
297  5997510653682588941UL,
298  2006088633984038082UL,
299  1383498232486134285UL,
300  17859041093815211104UL,
301  15894184107946313879UL,
302  18173079296415961736UL,
303  3443997055549483358UL,
304  5294019672823936930UL,
305  1341830676613088487UL,
306  581727297735446503UL,
307  18219577357392561487UL,
308  17639313299012264080UL,
309  14222133713791167321UL,
310  5879505043799386532UL,
311  7557129766625449226UL,
312  13360075610958017985UL,
313  12724115904336527780UL,
314  16753075547920915484UL,
315  4116411708112171871UL,
316  16025692682808517910UL,
317  4003328942103420939UL,
318  9811320057930109787UL,
319  3576072849789367484UL,
320  17075748046009610792UL,
321  12833406223291392866UL,
322  9648248336540660688UL,
323  17476583957989300837UL,
324  16827359136787046510UL,
325  4345039153564047180UL,
326  1224716260729000059UL,
327  13959598322342824445UL,
328  10743140873520517726UL,
329  13340880620026565045UL,
330  9192556363923792986UL,
331  3841907957831078749UL,
332  246438482871824834UL,
333  4260787342534664069UL,
334  17100720253388227686UL,
335  11544966922599678750UL,
336  9293075407897592921UL,
337  1610905992411273162UL,
338  2239787421847352995UL,
339  15182496755963432304UL,
340  1823665993529743824UL,
341  7263153004799849282UL,
342  11497980475724160945UL,
343  1274355111868335897UL,
344  15057972526005432563UL,
345  11823052640709049475UL,
346  15927429045819933119UL,
347  14618154733049321749UL,
348  16861991482751749049UL,
349  5936874228331837512UL,
350  15290754097890487720UL,
351  9191375772889979508UL,
352  6816129633576113785UL,
353  12923817606396645484UL,
354  8875993281327238816UL,
355  123714282527043508UL,
356  7179882084825590703UL,
357  3925024599322075567UL,
358  2426048646574757412UL,
359  10665962527629258587UL,
360  12646312850531314143UL,
361  528129165734836933UL,
362  3701120955488573646UL,
363  15861534485058814280UL,
364  14022467189115595098UL,
365  9502851142036471883UL,
366  12432213096681522867UL,
367  751500370320404802UL,
368  1606345595406828785UL,
369  10313713517508959984UL,
370  6565609239876268324UL,
371  8654149379457545096UL,
372  6548830896464452248UL,
373  1464368532414012445UL,
374  4302937696445584032UL,
375  17063664947863781419UL,
376  8038577586991861682UL,
377  10951259595021013980UL,
378  7709630466255725074UL,
379  609806407111517279UL,
380  13860208046684354033UL,
381  15140303568956907423UL,
382  4803057729274452412UL,
383  4367455766719288283UL,
384  320027280359511727UL,
385  16020877306388137190UL,
386  3764882323315346488UL,
387  11972546313392727283UL,
388  7977601566213555124UL,
389  15148378244947865280UL,
390  4483722253329626321UL,
391  16560836625841776840UL,
392  14666077208671482135UL,
393  9298193298119711211UL,
394  12015014023744623893UL,
395  10191703760489555596UL,
396  1316913070589847725UL,
397  15881746492947991011UL,
398  13665807677473998048UL,
399  14390309917106480591UL,
400  17231567872468478469UL,
401  4562957401728953232UL,
402  11501454621029854493UL,
403  10252134323451005656UL,
404  12021948387925309670UL,
405  3525149157835967069UL,
406  10292558937206299109UL,
407  13725724605985217856UL,
408  175033751151696127UL,
409  14720951489402332470UL,
410  11927624343611332814UL,
411  567437266624809204UL,
412  14161392585443694227UL,
413  8725463779420655722UL,
414  12063468735510140344UL,
415  12026523736635889408UL,
416  16565599419781878456UL,
417  7086470817660744490UL,
418  14809513609573064984UL,
419  10898762682820885052UL,
420  13982083571459739493UL,
421  15656618354974864372UL,
422  4239583100143107224UL,
423  4322769551545487304UL,
424  13825585217369415084UL,
425  5136324433139686016UL,
426  8179080547263771206UL,
427  8279259187088296150UL,
428  6381371846375303738UL,
429  3142014871877744388UL,
430  3417815453103862427UL,
431  5556557018553548625UL,
432  7788492627093668219UL,
433  2446537327809742760UL,
434  7165731799178534002UL,
435  10969060298437286606UL,
436  16392640790529049402UL,
437  4905600830298563047UL,
438  12442106640046578583UL,
439  7139041375816724964UL,
440  18098103947732186633UL,
441  2078238351823174321UL,
442  9929562085097862277UL,
443  14231090695955652612UL,
444  16914810114016502414UL,
445  9172887937989634160UL,
446  10057184693043820912UL,
447  8739867056556181319UL,
448  1879322488574672564UL,
449  6706469496298082633UL,
450  17962793280504692541UL,
451  2796622365685518391UL,
452  14206454203780509608UL,
453  11911505185092294091UL,
454  13188421404411005493UL,
455  1002631262698104372UL,
456  16116424222649594941UL,
457  731059841323644991UL,
458  16630196285890835221UL,
459  6275370517569960592UL,
460  2762335813606797964UL,
461  1550415195017045798UL,
462  8084777285994689863UL,
463  4858045103923411134UL,
464  13517076072140006105UL,
465  16656029182431041189UL,
466  6076064496187725305UL,
467  15281271591975529160UL,
468  2275428871306187428UL,
469  15396744606475751109UL,
470  15460778948302864604UL,
471  6107847787338713474UL,
472  9357621545767658217UL,
473  4805014239018879550UL,
474  17869119773972988965UL,
475  17868495682315323441UL,
476  10660808254721474616UL,
477  7308276872489783138UL,
478  4234856545479982050UL,
479  1223334879029033304UL,
480  10995800624761949288UL,
481  16283797325974965665UL,
482  12410167362078398820UL,
483  12918484557456873081UL,
484  14423314551522087679UL,
485  4967867692111402622UL,
486  16197846038770304940UL,
487  11809884480603742831UL,
488  16802686488973843640UL,
489  2354077987008574056UL,
490  9978003576519895777UL,
491  5506048811554826358UL,
492  18433781523380564149UL,
493  4302137793340917657UL,
494  978195094879846769UL,
495  2377823329880292548UL,
496  3464291122006072777UL,
497  18046845603455616162UL,
498  13944776942598500463UL,
499  4000590694056817931UL,
500  496833875371241644UL,
501  16247695245933522501UL,
502  1505779951058046438UL,
503  11430822963532124358UL,
504  4729903064888922231UL,
505  8864507718425611027UL,
506  14643598183997536338UL,
507  4480511581250357378UL,
508  11133239898726463704UL,
509  17471052555928421508UL,
510  15541989708583753235UL,
511  7461560065837635158UL,
512  13956421526574063689UL,
513  3743280538841219763UL,
514  12020611143801404565UL,
515  6618703997501212010UL,
516  3729371474666129836UL,
517  17869245751809494685UL,
518  1833331385744685838UL,
519  1506104207003999508UL,
520  8158509169843256229UL,
521  10212507222875597491UL,
522  7211593336579637715UL,
523  14341253648497092530UL,
524  4511202703905924031UL,
525  8043833010361144102UL,
526  2512875450160943286UL,
527  18235665817864664213UL,
528  8317446467730476132UL,
529  11182884000969346056UL,
530  548357546399462395UL,
531  1960628024952592835UL,
532  4650095513901192085UL,
533  12679676177772217157UL,
534  3487733703240934135UL,
535  6446640077094538365UL,
536  1114715573562175630UL,
537  16622874083185883281UL,
538  17081932748524927392UL,
539  17192402071367355968UL,
540  15013800339030843048UL,
541  3718961432784285989UL,
542  14953817216655866296UL,
543  11410118254031919487UL,
544  17718071771819733200UL,
545  6970769915355275987UL,
546  14244261541942962860UL,
547  295778071941084510UL,
548  553041658124347434UL,
549  571128341496031343UL,
550  6867891970504820807UL,
551  16515587447694198371UL,
552  3932569386063656416UL,
553  15542525920467376967UL,
554  4513384432419818675UL,
555  7336705434792969335UL,
556  1342984449178439078UL,
557  10672151960711459277UL,
558  11668091039787926587UL,
559  15308742994910314323UL,
560  8337161158579684228UL,
561  5390473811288298369UL,
562  444117188512458090UL,
563  8602531868090961223UL,
564  1632809043568697774UL,
565  11829254858211213981UL,
566  4634227867572760505UL,
567  16086237486731074061UL,
568  4844172753138751369UL,
569  4992022238300904271UL,
570  11132360655811360102UL,
571  11660714643785469458UL,
572  2468480999090126185UL,
573  10912054708474512716UL,
574  12659667168896228555UL,
575  11988368921832936489UL,
576  5116996783249524791UL,
577  253818271896405507UL
578 #else // ULONG_MAX >= 18446744073709551615
579  // unsigned longs have less than 64 bits here
580  4218046471UL,
581  1917139952UL,
582  2103556369UL,
583  1588695878UL,
584  4215491346UL,
585  216507845UL,
586  2296134958UL,
587  1868314761UL,
588  3228779327UL,
589  1785085484UL,
590  4228225705UL,
591  1165369009UL,
592  3142089765UL,
593  431503981UL,
594  3369606777UL,
595  745480828UL,
596  2744780773UL,
597  689045082UL,
598  1900506313UL,
599  2497498204UL,
600  368683604UL,
601  2225005389UL,
602  781333974UL,
603  4132002528UL,
604  2847677322UL,
605  343783736UL,
606  2901322050UL,
607  3337243677UL,
608  1665993590UL,
609  233599841UL,
610  1022462535UL,
611  1680112766UL,
612  500144658UL,
613  3013714463UL,
614  1102944137UL,
615  424404167UL,
616  1616048503UL,
617  3058072676UL,
618  2626558419UL,
619  2270217197UL,
620  1042360030UL,
621  1406615072UL,
622  2817651072UL,
623  3066388841UL,
624  3595996753UL,
625  2530300747UL,
626  1068533293UL,
627  3850615434UL,
628  2000952241UL,
629  500251219UL,
630  2785863467UL,
631  116749905UL,
632  2534901578UL,
633  2762569636UL,
634  441176494UL,
635  3611264136UL,
636  708254627UL,
637  3107133154UL,
638  3498823450UL,
639  3710248321UL,
640  3408201403UL,
641  2483680087UL,
642  1593406496UL,
643  2358632005UL,
644  1113775647UL,
645  1296788200UL,
646  866750108UL,
647  1511795181UL,
648  2007682240UL,
649  1383572622UL,
650  2747177348UL,
651  751086457UL,
652  3862498228UL,
653  1330825518UL,
654  1893848486UL,
655  3716728436UL,
656  257714096UL,
657  1129572537UL,
658  3411765329UL,
659  1445308638UL,
660  1675128925UL,
661  1177771214UL,
662  610662193UL,
663  308703855UL,
664  3766028156UL,
665  2406778266UL,
666  1614133721UL,
667  3094138658UL,
668  644181699UL,
669  3585820756UL,
670  228354647UL,
671  3895845225UL,
672  837654579UL,
673  2423338235UL,
674  3626844735UL,
675  4004795529UL,
676  1966777404UL,
677  4099992662UL,
678  561993057UL,
679  478026097UL,
680  2726060916UL,
681  160900471UL,
682  4067242522UL,
683  2107667107UL,
684  2291883857UL,
685  3366222014UL,
686  804030225UL,
687  815232690UL,
688  4173469665UL,
689  3680594736UL,
690  1812916838UL,
691  953829049UL,
692  645064420UL,
693  893103776UL,
694  1484445384UL,
695  1704310224UL,
696  3169988691UL,
697  994674462UL,
698  3348302238UL,
699  420911742UL,
700  3997852732UL,
701  3006569532UL,
702  244288857UL,
703  3012303255UL,
704  3091414730UL,
705  3919806716UL,
706  815658776UL,
707  396540369UL,
708  2296675021UL,
709  3199014033UL,
710  2569108436UL,
711  3862344457UL,
712  4058338881UL,
713  1161706542UL,
714  2972997031UL,
715  2099532487UL,
716  160888949UL,
717  427549488UL,
718  3061518659UL,
719  66373532UL,
720  3444886884UL,
721  2530414305UL,
722  3380064368UL,
723  937051782UL,
724  1302891919UL,
725  2463653477UL,
726  3547879633UL,
727  2260320717UL,
728  832678359UL,
729  2453616965UL,
730  2193052461UL,
731  799622604UL,
732  3629014225UL,
733  1522933084UL,
734  2498150583UL,
735  1976833008UL,
736  1725662928UL,
737  1733324678UL,
738  3374380020UL,
739  818903650UL,
740  718472891UL,
741  411252729UL,
742  3187730653UL,
743  798673927UL,
744  1222802842UL,
745  1985038219UL,
746  1623995355UL,
747  2603784033UL,
748  4261727525UL,
749  3939193905UL,
750  2256923068UL,
751  507372076UL,
752  229897092UL,
753  3447212333UL,
754  1015331998UL,
755  1624914646UL,
756  3270616777UL,
757  1922996004UL,
758  2303929294UL,
759  3083527264UL,
760  3511924852UL,
761  651582997UL,
762  2830297570UL,
763  2541981492UL,
764  3229134142UL,
765  535111766UL,
766  2531439891UL,
767  1176474835UL,
768  1746643607UL,
769  196953906UL,
770  190859135UL,
771  1471944757UL,
772  3764050027UL,
773  2300961517UL,
774  1200836119UL,
775  1934885757UL,
776  1017153529UL,
777  864626426UL,
778  65215191UL,
779  3649915955UL,
780  2649000649UL,
781  3056185941UL,
782  2895789221UL,
783  2705123786UL,
784  3486894128UL,
785  1764275188UL,
786  800856520UL,
787  1121637219UL,
788  3470689154UL,
789  2031015368UL,
790  1799564405UL,
791  412027838UL,
792  3505785501UL,
793  819633830UL,
794  2841515279UL,
795  397789381UL,
796  3850545068UL,
797  4038096561UL,
798  702453020UL,
799  298184560UL,
800  1331143206UL,
801  3832472400UL,
802  483752162UL,
803  3365506546UL,
804  2403178818UL,
805  2588604760UL,
806  3630868707UL,
807  2672754775UL,
808  3834743541UL,
809  625254315UL,
810  3404805826UL,
811  2758773926UL,
812  3539158313UL,
813  1304746437UL,
814  4228336097UL,
815  1790470857UL,
816  2017211747UL,
817  2823780770UL,
818  1361022238UL,
819  2442638132UL,
820  3465700788UL,
821  2602256049UL,
822  61072285UL,
823  1290754848UL,
824  1365538365UL,
825  2885926246UL,
826  3366937675UL,
827  1976271220UL,
828  4274857987UL,
829  2846551234UL,
830  3730952612UL,
831  785655762UL,
832  2640747064UL,
833  2479569674UL,
834  2988213501UL,
835  238402214UL,
836  2736968438UL,
837  1273211556UL,
838  2993298676UL,
839  2076907296UL,
840  169664466UL,
841  3590743418UL,
842  2853715414UL,
843  1494116982UL,
844  3408636076UL,
845  1354085945UL,
846  2121174096UL,
847  557203192UL,
848  2005947221UL,
849  2790204730UL,
850  3673048078UL,
851  2710286579UL,
852  2759941695UL,
853  2554805430UL,
854  1565053908UL,
855  1516728908UL,
856  457211737UL,
857  4053842378UL,
858  1926452932UL,
859  121166907UL,
860  1884552326UL,
861  2050083102UL,
862  783329973UL,
863  1002934724UL,
864  2916755028UL,
865  1574390275UL,
866  4246041184UL,
867  112940213UL,
868  4213344814UL,
869  3831377539UL,
870  3593710048UL,
871  184196123UL,
872  62388243UL,
873  1824724968UL,
874  1553056630UL,
875  2471314862UL,
876  1580248726UL,
877  1641907471UL,
878  4182117804UL,
879  244827601UL,
880  2673787044UL,
881  1245428424UL,
882  1254024234UL,
883  1944146503UL,
884  2068525708UL,
885  1452126855UL,
886  1368763640UL,
887  2063660828UL,
888  306042674UL,
889  668216774UL,
890  2002594576UL,
891  3192370193UL,
892  4189750176UL,
893  1815590529UL,
894  2838559664UL,
895  3322933511UL,
896  708460425UL,
897  3093499804UL,
898  219970021UL,
899  2136064297UL,
900  1281979964UL,
901  3437613761UL,
902  544003806UL,
903  2998811936UL,
904  1481470929UL,
905  2880899873UL,
906  3617899122UL,
907  2269535287UL,
908  2964733041UL,
909  1437018425UL,
910  4136436935UL,
911  2892386937UL,
912  2312588208UL,
913  3470825412UL,
914  3048839250UL,
915  3124535567UL,
916  74106735UL,
917  740534715UL,
918  780483498UL,
919  1703009387UL,
920  3908417545UL,
921  2925498568UL,
922  570244170UL,
923  768611579UL,
924  2561901277UL,
925  3369289022UL,
926  298430172UL,
927  3399976658UL,
928  2781253163UL,
929  2203229433UL,
930  4083764265UL,
931  1813739940UL,
932  2495956219UL,
933  1733876904UL,
934  2961522297UL,
935  2806638528UL,
936  210215678UL,
937  3179651913UL,
938  3488143624UL,
939  2162063032UL,
940  2230441611UL,
941  3104777333UL,
942  1901009578UL,
943  2357529595UL,
944  1661659881UL,
945  2275001257UL,
946  1089779619UL,
947  1019581619UL,
948  3676689000UL,
949  2363224232UL,
950  3087179246UL,
951  2521585396UL,
952  1172580989UL,
953  3363959227UL,
954  1379171244UL,
955  2568664929UL,
956  2716951910UL,
957  634711458UL,
958  1881366407UL,
959  2339310622UL,
960  1437137856UL,
961  775517573UL,
962  2403816337UL,
963  3643691625UL,
964  2796142813UL,
965  2636271743UL,
966  3548645335UL,
967  2401818065UL,
968  1430955355UL,
969  1529261488UL,
970  2672050975UL,
971  1824816344UL,
972  437321422UL,
973  1010469737UL,
974  975873927UL,
975  3808619211UL,
976  1306922849UL,
977  2306306586UL,
978  3492263153UL,
979  915764428UL,
980  4049080639UL,
981  2584666827UL,
982  2248503228UL,
983  1156685342UL,
984  3545089377UL,
985  2927987815UL,
986  1188340469UL,
987  1983809416UL,
988  2359080396UL,
989  3026745995UL,
990  1020085481UL,
991  2455748822UL,
992  2973731428UL,
993  1685598150UL,
994  2459914554UL,
995  222412187UL,
996  1550326895UL,
997  3808681066UL,
998  910364646UL,
999  4011483211UL,
1000  3449464402UL,
1001  3094973082UL,
1002  3370230650UL,
1003  1693151952UL,
1004  3574854040UL,
1005  3557103099UL,
1006  4108399894UL,
1007  3762036621UL,
1008  2337346271UL,
1009  1005455572UL,
1010  3860207735UL,
1011  1771002576UL,
1012  199004943UL,
1013  1578846676UL,
1014  2676995104UL,
1015  4076948954UL,
1016  830057378UL,
1017  459065499UL,
1018  3804368733UL,
1019  3499868406UL,
1020  852696530UL,
1021  514613423UL,
1022  1584281952UL,
1023  985799155UL,
1024  1895009366UL,
1025  3825253357UL,
1026  1782693174UL,
1027  2196979238UL,
1028  1308429445UL,
1029  2960767408UL,
1030  2285337396UL,
1031  2065293874UL,
1032  1306724979UL,
1033  4056398081UL,
1034  4047112430UL,
1035  3606840914UL,
1036  3117829644UL,
1037  3877872838UL,
1038  3297977849UL,
1039  336255855UL,
1040  3794593369UL,
1041  2534532716UL,
1042  3726226824UL,
1043  2067902083UL,
1044  1289138711UL,
1045  615241845UL,
1046  3711156810UL,
1047  4069284324UL,
1048  3829237942UL,
1049  3615667378UL,
1050  750506440UL,
1051  3851304132UL,
1052  1159089146UL,
1053  2459260597UL,
1054  2955574874UL,
1055  1775846339UL,
1056  1872505027UL,
1057  3021810567UL,
1058  2498812392UL,
1059  2388439890UL,
1060  3509540924UL,
1061  4132084900UL,
1062  1762358900UL,
1063  3005639020UL,
1064  961559514UL,
1065  5499771UL,
1066  2114442568UL,
1067  2725996306UL,
1068  2213448586UL,
1069  3041192141UL,
1070  2318358424UL,
1071  4199956637UL,
1072  508024672UL,
1073  2898231491UL,
1074  985807031UL,
1075  3712119117UL,
1076  487464412UL,
1077  1443950379UL,
1078  2897942828UL,
1079  2942321529UL
1080 #endif
1081  };
1082 
1083  /// \brief Helper function for hashing
1084  inline HashType xorrer(HashType const &l, NucleonItem const &r) {
1085  return l^mask[r];
1086  }
1087 
1088  }
1089 
1090  /** \brief Compute the hash of a nucleon configuration
1091  *
1092  * The hash is computed as
1093  *
1094  * \f[ \mathrm{mask}_{i_1} \oplus \mathrm{mask}_{i_2} \oplus \ldots \oplus \mathrm{mask}_{i_n} \f]
1095  *
1096  * where \f$\oplus\f$ represents logical exclusive OR (XOR), \f$i_1,\ldots,
1097  * i_n\f$ represent the indices of the nucleons in the
1098  * ClusteringModelIntercomparison::consideredPartners
1099  * array, and \f$\mathrm{mask}_i\f$ is a static look-up table of 500
1100  * \f$n\f$-bit integers such that their binary representations have exactly
1101  * \f$n/2\f$ true bits and \f$n/2\f$ false bits, at random positions. The
1102  * value of \f$n\f$ is 32 if unsigned longs are less than 64-bit wide, and
1103  * 64 otherwise.
1104  *
1105  * Folding the mask values using XOR has two advantages: first, XOR is a
1106  * commutative operation, so the result is independent of the order in
1107  * which the nucleons appear in the configuration (which is what we want).
1108  * Second, it's very fast. Profiling shows that the time spent hashing
1109  * configurations is negligible compared to the time spent evaluating
1110  * phase-space proximity.
1111  */
1112  inline HashType hashConfig(NucleonItem *config, G4int n) {
1113 // assert(n<maskTableSize);
1114  return std::accumulate(config, config+n, ((HashType)0), xorrer);
1115  }
1116 
1117  }
1118 }
1119 
1120 #endif // INCL_CACHING_CLUSTERING_MODEL_INTERCOMPARISON_HashMask
1121 
1122 #endif // G4INCLHASHING_HH_
int G4int
Definition: G4Types.hh:78
const G4int n