In ATLAS, we need to generate a unique set of bootstrap weights (random weights with Poisson mean of 1) in a way that will generate the same set of weights for the same events (same run number, same event number and the same MC identifier in case of MC simulated events). One of the requirements is that the procedure has to be machine independent. We plan to use TRandom3 for the random number generation by setting proper seed per event, as the documentation says the random numbers are machine independent. However, what is not clear to us is if the SetSeed function is machine independent? The question is related to the definition of unsigned long types, see: Fundamental types - cppreference.com - it seems the size of this type depends on the data model and is NOT machine independent, is this correct?
To give bit more details, we plan to use the FNV hash (see: Fowler–Noll–Vo hash function - Wikipedia) to merge the three numbers: run number, event number and MC ID number into a single unsigned long hash that can be passed as a seed. However, we are not sure if this will make the procedure machine independent. Can you, please, let us know if this procedure is correct to keep the results machine independent or we need to update it?
The actual ATLAS implementation can be found in this merge request: CPAlgorithms: common bootstrapping algorithm (!66346) · Merge requests · atlas / athena · GitLab