Dear Daniele,
I was confused with another problem: if neutrons are produced by the first step, how to calculate the weight used in the final source file?
I thought there are two ways: the first one is, one divided by the total number of primaries in the first run; the second one is, one divided by the total number of particles in the final source file(Sometimes, the number of particles in final source file is different from the first run, since there are maybe two more first run to produce the neutrons).

Fluka always normalizes results per primary particle. In the case of two steps simulations the procedure is the following (a, b, and x are integer numbers representing the number of particles):

In the first simulation, from a primaries you generate b particles

In the second simulation, you load x particles from the particle list generated in the first step. Indeed, in general, x and b can be different

The results of the second step will yield the results per unit secondary ( = 1/x). However, since you produce b number of secondary from an a primary, you should assign a weight of b/a to each particle simulated.

As a side note, I would not change the weight in the source file (i.e. just keep 1). Instead, I would use this number as a normalization factor when performing the plot or the data analysis after the simulation.

A practical example could be this one:
You start the first step with 100 protons, which generate 150 neutrons saved as a text file.
Then, you load 90 of these neutrons in another simulation. The results of the latter are already normalized per unit neutron. However since each proton produces 1.5 neutrons, to have the results per unit proton, you need to use 1.5 as the normalization constant for your simulation outputs.

Wow, your explanation is just perfect. I understand it quite clearly now. (A small question : can x be much larger than b in your explanation? Will it sample automatically as that in MCNP like SSW/SSR with nps card?)

It’s a pleasure. Yes, in principle the number of primaries in the two simulations can be different. Keep in mind that if the particle list provided to the second step is too short, there is the risk to introduce some unwanted biasing in the results (I can sample multiple times a very rare event, for instance).

In that case you also need to chose a random sampling (as you have correctly done via the flag = .FALSE.)

FLUKA will automatically read all lines from the source file during initialization, saving the data in memory. Then, for each requested primary, it will sample randomly one particle.

Dear Daniele,
Yeah, I understand how to deal with it now. As another expert said in another page, it is better to have a very big first simulation data, namely getting a larger b as you gave here. Then every primary in the X are chosen from the data b randomly.
Thank you so much!