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);