I am trying to define new units to use in my simulation similar to what is in example B1. I instantiate a new G4UnitDefinition at the begging of RunAction, but when I try to reference the new unit later, I get an error saying “undeclared identifier”. If I use the /units/list command, the new units show up in the list with the proper value. I have UnitsTable and G4SystemOfUnits included in the script. Here is some sample code that throws the error:
const G4double Jupiter_radius = 71492.*km;
new G4UnitDefinition(“R_j”, “Rj”, “Length”, Jupiter_radius);
G4double x = 71492.*km;
G4cout << x/Rj << G4endl;
Which gives the error: “error C2065: ‘Rj’: undeclared identifier”. Any idea what I’m missing here?
G4UnitDefinition defines strings (here, the string literals “R_j” and “Rj”) which can be used by
G4BestUnit for printing out length-based quantities, or can be found if you use one of the string literals as units for data input.
In your local code there, you’ve defined the numerical constant named
Jupiter_radius, so in your calculation, you should be writing
G4cout << x/Jupiter_radius << G4endl;
If you want to define new units including nice constants, you should do that in a “MySystemOfUnits.hh” file. In our experiment, we do that, where that file itself has
#include "G4SystemOfUnits.hh", and then it has a whole bunch of its own global
static const G4double inch = 25.4*mm; (yes, really ), and similar statements. Then, we have our own “MySystemOfUnits.cc” file where all of the
G4UnitDefinition calls get made.