How to use configuration files¶
Introduction: when configuration files should be used?¶
Configure files are used to make irfpy library portable. For example, consider cases you want to access a local file, for example, a data file. The location of the data file may differ user by user, or even computer by computer. Thus, the location is prohibited to be hard-coded into any library code.
Instead, configuration files are to be used.
Use cases¶
To set a path of the spacecraft data in a library code.
To set a parameter used for programming.
Example¶
For example in irfpy.aspera
, the data files are specified as a
top-level folder. If the user setup the data files into
/Data/venus/imadata-full/
directory, the configuration file
looks as
[vima]
imamatbase = /Data/venus/imadata-full/
Another example in SWIM data (irfpy.swim
), the configuration
file to access to the database is as follows.
[swim]
bmuobse = /Data/SWIM/bmu_orbit.v3.2/bmu_orbit/
The configuration file can be a single file, or multiple files.
The following file names will be evaluated in a priority order.
./.irfpyrc
${HOME}/.irfpyrc
./irfpy.rc
${HOME}/irfpy.rc
./.pyanarc
${HOME}/.pyanarc
Note
Using .pyanarc is not recommented any more. It is left for compatibility only.
More on the format¶
The format is like Windows’ ini files.
[section]
entry1 = value1
entry2 = value2
Specific section and entries depends on the each irfpy library.
How to use from your library code (for developer)¶
Assume you have such a code:
import numpy as np
def load_data():
data = np.loadtxt('/irf/vex/vexdds/archive/XXYYZZ.dat')
return data
This program tries to read the data from the file
/irf/vex/vexdds/archive/XXYYZZ.dat
,
and return its contents as a numpy array.
However, if you change your computer, the file location may change.
1. Prepare the configureation file. ~/.irfpyrc
.
You should prepare the file in all the computer.
[vexdds]
data_location = /irf/vex/vexdds/archive/XXYYZZ.dat
You can define the section and entry arbitrarily. (But of course it is recommended to define them coherently.)
Change your program. Use
irfpy.util.irfpyrc.Rc
class.
import numpy as np
from irfpy.util.irfpyrc import Rc
def load_data():
rc = Rc()
datafile = rc.get('vexdds', 'data_location')
data = np.loadtxt(datafile)
return data
The only class you need to use is irfpy.util.irfpyrc.Rc
.