Added a ‘load_data()’ method to the cupSODA class for reading in
concentration data from file. The method takes four optional arguments:
1) ‘indir’, the directory where the files are located; 2) ‘prefix’, the
base name of the output files (e.g., “egfr” for egfr_0, egfr_1, etc.);
3) ‘which_sims’, which specifies which data files to read from; 4)
‘out_species’, which specifies which species are present in the output
files. The method is automatically called in cupSODA.run() if the
‘load_conc_data’ argument is set to True (the default). It can also be
called directly.

I included ‘which_sims’ so that a specific output, or set of outputs,
can be loaded without loading data from every simulation (there may be
thousands or more). The ‘out_species’ argument is necessary because
cupSODA allows for only a subset of species to be printed to file
(specified in the ‘cs_vector’ file). Currently, the default is to print
only the species that are involved in the observables. This can be
overridden in cupSODA.run() by setting the ‘obs_species_only’ argument
to False. If 'out_species' is not specified, an attempt will be made to
read the species indices from the 'cs_vector' file located in
'indir/__CUPSODA_FILES/'.

Also, the ‘y’, ‘yobs’, and ‘yobs_view’ arrays of the
pysb.integrate.Solver base class have been overridden as dictionaries,
where the keys are the simulation numbers (ints) and the values are the
same ndarrays as in the base class. Concentrations from simulation N can
thus be accessed through y[N], yobs[N], and yobs_view[N]. Note that
these objects are initialized as empty dictionaries and only filled for
the simulations specified in ‘which_sims’, and for the species listed in
‘out_species’, when cupSODA.load_data() is called.