I found the reduced electric field in my programme is smaller than 5Td (the minimum in mobility data)

So can you tell me:

how to calculate the velocity?

how AvalancheMC add Diffusion for negative ions ?
Although I read the source code, I still do not understand. I really need to understand these,look forward to your reply.Thanks in advance.

Ok, that is indeed strange. If you have a uniform field the drift velocity should be the same everywhere. When reading in the mobility file, the mobility values are scaled to the pressure and temperature in the gas. The velocity is then simply given by mobility times electric field.
The diffusion step is calculated the same way as for electrons. After every “drift step” (along the direction of the drift velocity vector), a random diffusion step is added (sampled from a Gaussian distribution). The width of the Gaussian is given by the diffusion coefficient. For ions, the diffusion coefficient is calculated according to the Einstein relation.

I did a test, the result was very strange. I loaded different negative ions mobility data respectively,,turn on debug (avalMC->EnableDebugging() ), found the velocity information is the same( 0.000841 and 0.000001 were found)

I think there is an issue with the truncation of the numbers in the debug printout. The calculation of the velocity seems correct though. I ran a little test (see the attached program) and the drift time is consistent with what you would expect.