From c62e21e1ef4860e80d2244ce0b5746211a869216 Mon Sep 17 00:00:00 2001 From: karolina <amvdw95@gmail.com> Date: Thu, 6 Jun 2013 17:02:33 +0000 Subject: [PATCH] renamed package ct to carbondioxide and ctgridded to co2gridded renamed class names Ct- to CO2- changed class name Observation to Observations small cleanup changes to template.py --- gridded/da/analysis/expand_fluxes.py | 16 ++-- gridded/da/analysis/expand_mixingratios.py | 5 +- gridded/da/analysis/siteseries.py | 6 +- gridded/da/analysis/summarize_obs.py | 4 +- gridded/da/baseclasses/obs.py | 29 +++---- gridded/da/baseclasses/optimizer.py | 2 +- gridded/da/{ct => carbondioxide}/__init__.py | 0 gridded/da/{ct => carbondioxide}/dasystem.py | 6 +- gridded/da/{ct => carbondioxide}/obs.py | 12 +-- gridded/da/{ct => carbondioxide}/obspack.py | 10 +-- .../obspack_geocarbon.py | 12 +-- gridded/da/{ct => carbondioxide}/optimizer.py | 8 +- .../standardvariables.py | 0 .../da/{ct => carbondioxide}/statevector.py | 8 +- .../da/{ctgridded => co2gridded}/__init__.py | 0 .../da/{ctgridded => co2gridded}/dasystem.py | 2 +- .../{ctgridded => co2gridded}/statevector.py | 2 +- gridded/da/examples/das.py | 18 ++--- gridded/da/examples/dasgridded.py | 16 ++-- gridded/da/examples/dasjet.py | 16 ++-- gridded/da/tm5/observationoperator.py | 11 +-- gridded/da/tools/initexit.py | 13 ++-- gridded/da/tools/pipeline.py | 29 ++++--- gridded/template.py | 78 +++++++++---------- 24 files changed, 141 insertions(+), 162 deletions(-) rename gridded/da/{ct => carbondioxide}/__init__.py (100%) rename gridded/da/{ct => carbondioxide}/dasystem.py (88%) rename gridded/da/{ct => carbondioxide}/obs.py (98%) rename gridded/da/{ct => carbondioxide}/obspack.py (98%) rename gridded/da/{ct => carbondioxide}/obspack_geocarbon.py (97%) rename gridded/da/{ct => carbondioxide}/optimizer.py (91%) rename gridded/da/{ct => carbondioxide}/standardvariables.py (100%) rename gridded/da/{ct => carbondioxide}/statevector.py (93%) rename gridded/da/{ctgridded => co2gridded}/__init__.py (100%) rename gridded/da/{ctgridded => co2gridded}/dasystem.py (97%) rename gridded/da/{ctgridded => co2gridded}/statevector.py (99%) diff --git a/gridded/da/analysis/expand_fluxes.py b/gridded/da/analysis/expand_fluxes.py index 8f11df6..eba9126 100755 --- a/gridded/da/analysis/expand_fluxes.py +++ b/gridded/da/analysis/expand_fluxes.py @@ -117,7 +117,7 @@ def save_weekly_avg_1x1_data(DaCycle, StateVector): for n in range(nlag, 0, -1): priordate = enddate - timedelta(dt.days * n) savedir = DaCycle['dir.output'].replace(startdate.strftime('%Y%m%d'), priordate.strftime('%Y%m%d')) - filename = os.path.join(savedir, 'savestate.nc')#LU i suppose that it would be priordate (savestate gets same stamp as dir.output= + filename = os.path.join(savedir, 'savestate_%s.nc' % priordate.strftime('%Y%m%d')) if os.path.exists(filename): StateVector.read_from_file(filename, qual=qual_short) gridmean, gridensemble = StateVector.state_to_grid(lag=n) @@ -131,7 +131,7 @@ def save_weekly_avg_1x1_data(DaCycle, StateVector): else: qual_short = 'opt' savedir = DaCycle['dir.output'] - filename = os.path.join(savedir, 'savestate.nc') + filename = os.path.join(savedir, 'savestate_%s.nc' % startdate.strftime('%Y%m%d')) StateVector.read_from_file(filename, qual=qual_short) gridmean, gridensemble = StateVector.state_to_grid(lag=1) @@ -301,7 +301,7 @@ def save_weekly_avg_state_data(DaCycle, StateVector): for n in range(nlag, 0, -1): priordate = enddate - timedelta(dt.days * n) savedir = DaCycle['dir.output'].replace(startdate.strftime('%Y%m%d'), priordate.strftime('%Y%m%d')) - filename = os.path.join(savedir, 'savestate.nc') + filename = os.path.join(savedir,'savestate_%s.nc' % priordate.strftime('%Y%m%d')) if os.path.exists(filename): StateVector.read_from_file(filename, qual=qual_short) @@ -316,7 +316,7 @@ def save_weekly_avg_state_data(DaCycle, StateVector): else: qual_short = 'opt' savedir = DaCycle['dir.output'] - filename = os.path.join(savedir, 'savestate.nc') + filename = os.path.join(savedir, 'savestate_%s.nc' % startdate.strftime('%Y%m%d')) StateVector.read_from_file(filename) choicelag = 1 statemean = StateVector.EnsembleMembers[choicelag - 1][0].ParameterValues @@ -1027,8 +1027,8 @@ if __name__ == "__main__": import logging from da.tools.initexit import CycleControl - from da.ct.dasystem import CtDaSystem - from da.ct.statevector import CtStateVector + from da.carbondioxide.dasystem import CO2DaSystem + from da.carbondioxide.statevector import CO2StateVector sys.path.append('../../') @@ -1038,11 +1038,11 @@ if __name__ == "__main__": DaCycle.initialize() DaCycle.parse_times() - DaSystem = CtDaSystem('../rc/carbontracker_ct09_opfnew.rc') + DaSystem = CO2DaSystem('../rc/carbontracker_ct09_opfnew.rc') DaCycle.DaSystem = DaSystem - StateVector = CtStateVector() + StateVector = CO2StateVector() StateVector.initialize(DaCycle) while DaCycle['time.end'] < DaCycle['time.finish']: diff --git a/gridded/da/analysis/expand_mixingratios.py b/gridded/da/analysis/expand_mixingratios.py index 7e0154c..d436ba3 100755 --- a/gridded/da/analysis/expand_mixingratios.py +++ b/gridded/da/analysis/expand_mixingratios.py @@ -315,10 +315,9 @@ def write_mixing_ratios(DaCycle): if __name__ == "__main__": - import logging from da.tools.initexit import CycleControl - from da.ct.dasystem import CtDaSystem + from da.carbondioxide.dasystem import CO2DaSystem sys.path.append('../../') @@ -328,7 +327,7 @@ if __name__ == "__main__": DaCycle.initialize() DaCycle.parse_times() - DaSystem = CtDaSystem('../rc/carbontracker_ct09_opf.rc') + DaSystem = CO2DaSystem('../rc/carbontracker_ct09_opf.rc') DaSystem.initialize() DaCycle.DaSystem = DaSystem diff --git a/gridded/da/analysis/siteseries.py b/gridded/da/analysis/siteseries.py index 804e7e9..494c9a4 100755 --- a/gridded/da/analysis/siteseries.py +++ b/gridded/da/analysis/siteseries.py @@ -745,8 +745,8 @@ def residuals_new(fig, infile): if __name__ == '__main__': # started as script from da.tools.initexit import CycleControl - from da.ct.dasystem import CtDaSystem - from da.ct.statevector import CtStateVector + from da.carbondioxide.dasystem import CO2DaSystem + from da.carbondioxide.statevector import CO2StateVector sys.path.append('../../') @@ -756,7 +756,7 @@ if __name__ == '__main__': # started as script DaCycle.initialize() DaCycle.parse_times() - DaSystem = CtDaSystem('../rc/carbontracker_ct09_opf.rc') + DaSystem = CO2DaSystem('../rc/carbontracker_ct09_opf.rc') DaSystem.initialize() DaCycle.DaSystem = DaSystem diff --git a/gridded/da/analysis/summarize_obs.py b/gridded/da/analysis/summarize_obs.py index d442de6..dcdd617 100755 --- a/gridded/da/analysis/summarize_obs.py +++ b/gridded/da/analysis/summarize_obs.py @@ -332,7 +332,7 @@ def grep(pattern, fil): if __name__ == '__main__': # started as script from da.tools.initexit import CycleControl - from da.ct.dasystem import CtDaSystem + from da.carbondioxide.dasystem import CO2DaSystem sys.path.append('../../') @@ -342,7 +342,7 @@ if __name__ == '__main__': # started as script DaCycle.initialize() DaCycle.parse_times() - DaSystem = CtDaSystem('../rc/carbontracker_ct09_opf.rc') + DaSystem = CO2DaSystem('../rc/carbontracker_ct09_opf.rc') DaSystem.initialize() DaCycle.DaSystem = DaSystem diff --git a/gridded/da/baseclasses/obs.py b/gridded/da/baseclasses/obs.py index 4187ada..293424f 100755 --- a/gridded/da/baseclasses/obs.py +++ b/gridded/da/baseclasses/obs.py @@ -8,7 +8,7 @@ Revision History: File created on 28 Jul 2010. -.. autoclass:: da.baseclasses.obs.Observation +.. autoclass:: da.baseclasses.obs.Observations :members: initialize, Validate, add_observations, add_simulations, add_model_data_mismatch, write_sample_info .. autoclass:: da.baseclasses.obs.ObservationList @@ -19,14 +19,14 @@ File created on 28 Jul 2010. import logging from numpy import array, ndarray -identifier = 'Observation baseclass' +identifier = 'Observations baseclass' version = '0.0' -################### Begin Class Observation ################### +################### Begin Class Observations ################### -class Observation(object): +class Observations(object): """ - The baseclass Observation is a generic object that provides a number of methods required for any type of observations used in + The baseclass Observations is a generic object that provides a number of methods required for any type of observations used in a data assimilation system. These methods are called from the CarbonTracker pipeline. .. note:: Most of the actual functionality will need to be provided through a derived Observations class with the methods @@ -35,17 +35,17 @@ class Observation(object): Upon initialization of the class, an object is created that holds no actual data, but has a placeholder attribute `self.Data` which is an empty list of type :class:`~da.baseclasses.obs.ObservationList`. An ObservationList object is created when the - method :meth:`~da.baseclasses.obs.Observation.add_observations` is invoked in the pipeline. + method :meth:`~da.baseclasses.obs.Observations.add_observations` is invoked in the pipeline. From the list of observations, a file is written by method - :meth:`~da.baseclasses.obs.Observation.write_sample_info` + :meth:`~da.baseclasses.obs.Observations.write_sample_info` with the sample info needed by the :class:`~da.baseclasses.observationoperator.ObservationOperator` object. The values returned after sampling - are finally added by :meth:`~da.baseclasses.obs.Observation.add_simulations` + are finally added by :meth:`~da.baseclasses.obs.Observations.add_simulations` """ - def __init__(self, DaCycle=None):#LU to sie nigdy nie wywola, prawda? + def __init__(self): """ create an object with an identifier, version, and an empty ObservationList """ @@ -56,12 +56,7 @@ class Observation(object): # The following code allows the object to be initialized with a DaCycle object already present. Otherwise, it can # be added at a later moment. - if DaCycle != None: - self.DaCycle = DaCycle - else: - self.DaCycle = {} - - logging.info('Observation object initialized: %s' % self.Identifier) + logging.info('Observations object initialized: %s' % self.Identifier) def getlength(self): return len(self.datalist) @@ -73,7 +68,7 @@ class Observation(object): def add_observations(self): """ - Add actual observation data to the Observation object. This is in a form of an + Add actual observation data to the Observations object. This is in a form of an :class:`~da.baseclasses.obs.ObservationList` that is contained in self.Data. The list has as only requirement that it can return the observed+simulated values through the method :meth:`~da.baseclasses.obs.ObservationList.getvalues` @@ -81,7 +76,7 @@ class Observation(object): """ def add_simulations(self): - """ Add the simulation data to the Observation object. + """ Add the simulation data to the Observations object. """ def add_model_data_mismatch(self): diff --git a/gridded/da/baseclasses/optimizer.py b/gridded/da/baseclasses/optimizer.py index 481090c..7a69636 100755 --- a/gridded/da/baseclasses/optimizer.py +++ b/gridded/da/baseclasses/optimizer.py @@ -116,7 +116,7 @@ class Optimizer(object): simulatedensemble = Samples.getvalues('simulated') - if allsimulated == None : #LU if allsimulated: np.concatenate; else: np.array + if allsimulated == None : allsimulated = np.array(simulatedensemble) else: allsimulated = np.concatenate((allsimulated, np.array(simulatedensemble)), axis=0) diff --git a/gridded/da/ct/__init__.py b/gridded/da/carbondioxide/__init__.py similarity index 100% rename from gridded/da/ct/__init__.py rename to gridded/da/carbondioxide/__init__.py diff --git a/gridded/da/ct/dasystem.py b/gridded/da/carbondioxide/dasystem.py similarity index 88% rename from gridded/da/ct/dasystem.py rename to gridded/da/carbondioxide/dasystem.py index aece2e9..daf9444 100755 --- a/gridded/da/ct/dasystem.py +++ b/gridded/da/carbondioxide/dasystem.py @@ -11,11 +11,11 @@ File created on 26 Aug 2010. import logging -################### Begin Class CtDaSystem ################### +################### Begin Class CO2DaSystem ################### from da.baseclasses.dasystem import DaSystem -class CtDaSystem(DaSystem): +class CO2DaSystem(DaSystem): """ Information on the data assimilation system used. This is normally an rc-file with settings. """ def validate(self): @@ -43,7 +43,7 @@ class CtDaSystem(DaSystem): logging.warning('Missing a required value in rc-file : %s' % key) logging.debug('DA System Info settings have been validated succesfully') -################### End Class CtDaSystem ################### +################### End Class CO2DaSystem ################### if __name__ == "__main__": diff --git a/gridded/da/ct/obs.py b/gridded/da/carbondioxide/obs.py similarity index 98% rename from gridded/da/ct/obs.py rename to gridded/da/carbondioxide/obs.py index c7ae377..5c3ff27 100755 --- a/gridded/da/ct/obs.py +++ b/gridded/da/carbondioxide/obs.py @@ -22,13 +22,13 @@ sys.path.append('../../') identifier = 'CarbonTracker CO2 mixing ratios' version = '0.0' -from da.baseclasses.obs import Observation +from da.baseclasses.obs import Observations import da.tools.io4 as io import da.tools.rc as rc -################### Begin Class CtObservations ################### +################### Begin Class CO2Observations ################### -class CtObservations(Observation): +class CO2Observations(Observations): """ an object that holds data + methods and attributes needed to manipulate mixing ratio values """ def initialize(self, DaCycle): @@ -305,13 +305,13 @@ class CtObservations(Observation): logging.warning("Observation NOT found (%s, %s), please check sites.rc file (%s) !!!" % (obs.code, identifier, self.SitesFile)) obs.flag = 99 - # Add SiteInfo dictionary to the Observation object for future use + # Add SiteInfo dictionary to the Observations object for future use self.SiteInfo = SiteInfo def write_obs_to_file(self, outfile): """ - Write selected information contained in the Observation object to a file. + Write selected information contained in the Observations object to a file. """ @@ -415,7 +415,7 @@ class CtObservations(Observation): #return outfile -################### End Class CtObservations ################### +################### End Class CO2Observations ################### diff --git a/gridded/da/ct/obspack.py b/gridded/da/carbondioxide/obspack.py similarity index 98% rename from gridded/da/ct/obspack.py rename to gridded/da/carbondioxide/obspack.py index ef10aa8..a0920dd 100755 --- a/gridded/da/ct/obspack.py +++ b/gridded/da/carbondioxide/obspack.py @@ -20,7 +20,7 @@ sys.path.append('../../') import da.tools.io4 as io import da.tools.rc as rc -from da.baseclasses.obs import Observation +from da.baseclasses.obs import Observations from da.tools.general import name_convert identifier = 'CarbonTracker CO2 mixing ratios' @@ -30,7 +30,7 @@ version = '0.0' ################### Begin Class ObsPackObservations ################### -class ObsPackObservations(Observation): +class ObsPackObservations(Observations): """ an object that holds data + methods and attributes needed to manipulate mixing ratio values """ def initialize(self, DaCycle): @@ -111,7 +111,7 @@ class ObsPackObservations(Observation): logging.debug("Added %d observations from file (%s) to the Data list" % (len(dates), ncfile)) - logging.info("Observation list now holds %d values" % len(self.datalist)) + logging.info("Observations list now holds %d values" % len(self.datalist)) def add_simulations(self, filename, silent=False): """ Adds model simulated values to the mixing ratio objects """ @@ -330,13 +330,13 @@ class ObsPackObservations(Observation): logging.warning("Observation found (%s, %s), but not used in assimilation !!!" % (obs.code, identifier)) obs.flag = 99 - # Add SiteInfo dictionary to the Observation object for future use + # Add SiteInfo dictionary to the Observations object for future use self.SiteInfo = SiteInfo def write_obs_to_file(self, outfile): """ - Write selected information contained in the Observation object to a file. + Write selected information contained in the Observations object to a file. """ diff --git a/gridded/da/ct/obspack_geocarbon.py b/gridded/da/carbondioxide/obspack_geocarbon.py similarity index 97% rename from gridded/da/ct/obspack_geocarbon.py rename to gridded/da/carbondioxide/obspack_geocarbon.py index be3eb0f..3a7bfa2 100755 --- a/gridded/da/ct/obspack_geocarbon.py +++ b/gridded/da/carbondioxide/obspack_geocarbon.py @@ -21,12 +21,12 @@ sys.path.append('../../') identifier = 'CarbonTracker CO2 mixing ratios' version = '0.0' -from da.baseclasses.obs import Observation +from da.baseclasses.obs import Observations import da.tools.io4 as io import da.tools.rc as rc ################### Begin Class ObsPackObservations ################### -class ObsPackObservations(Observation): +class ObsPackObservations(Observations): """ an object that holds data + methods and attributes needed to manipulate mixing ratio values """ def initialize(self, DaCycle): @@ -104,7 +104,7 @@ class ObsPackObservations(Observation): logging.debug("Added %d observations from file (%s) to the Data list" % (len(dates), ncfile)) - logging.info("Observation list now holds %d values" % len(self.datalist)) + logging.info("Observations list now holds %d values" % len(self.datalist)) def add_simulations(self, filename, silent=False): """ Adds model simulated values to the mixing ratio objects """ @@ -318,7 +318,7 @@ class ObsPackObservations(Observation): if SiteHourly.has_key(identifier): hourf, hourt = SiteHourly[identifier] if int(obs.xdate.hour) >= hourf and int(obs.xdate.hour) <= hourt: - logging.warning("Observation in hourly dataset INCLUDED, while sampling time %s was between %s:00-%s:00"%(obs.xdate.time(),hourf,hourt)) + logging.warning("Observations in hourly dataset INCLUDED, while sampling time %s was between %s:00-%s:00"%(obs.xdate.time(),hourf,hourt)) else: logging.warning("Observation in hourly dataset EXCLUDED, while sampling time %s was outside %s:00-%s:00"%(obs.xdate.time(),hourf,hourt)) exclude_hourly = True @@ -346,7 +346,7 @@ class ObsPackObservations(Observation): logging.warning("Observation location for (%s, %d), is moved by %3.2f degrees latitude and %3.2f degrees longitude" % (identifier, obs.id, movelat, movelon)) - # Add SiteInfo dictionary to the Observation object for future use + # Add SiteInfo dictionary to the Observations object for future use self.SiteInfo = SiteInfo self.SiteMove = SiteMove @@ -356,7 +356,7 @@ class ObsPackObservations(Observation): def write_obs_to_file(self, outfile): """ - Write selected information contained in the Observation object to a file. + Write selected information contained in the Observations object to a file. """ diff --git a/gridded/da/ct/optimizer.py b/gridded/da/carbondioxide/optimizer.py similarity index 91% rename from gridded/da/ct/optimizer.py rename to gridded/da/carbondioxide/optimizer.py index 20a18d8..8afb193 100755 --- a/gridded/da/ct/optimizer.py +++ b/gridded/da/carbondioxide/optimizer.py @@ -19,12 +19,12 @@ from da.baseclasses.optimizer import Optimizer identifier = 'Ensemble Square Root Filter' version = '0.0' -################### Begin Class CtOptimizer ################### +################### Begin Class CO2Optimizer ################### -class CtOptimizer(Optimizer): +class CO2Optimizer(Optimizer): """ This creates an instance of a CarbonTracker optimization object. The base class it derives from is the optimizer object. - Additionally, this CtOptimizer implements a special localization option following the CT2007 method. + Additionally, this CO2Optimizer implements a special localization option following the CT2007 method. All other methods are inherited from the base class Optimizer. """ @@ -83,7 +83,7 @@ class CtOptimizer(Optimizer): logging.info("Current minimum least squares algorithm is set to %s" % self.algorithm) -################### End Class CtOptimizer ################### +################### End Class CO2Optimizer ################### if __name__ == "__main__": pass diff --git a/gridded/da/ct/standardvariables.py b/gridded/da/carbondioxide/standardvariables.py similarity index 100% rename from gridded/da/ct/standardvariables.py rename to gridded/da/carbondioxide/standardvariables.py diff --git a/gridded/da/ct/statevector.py b/gridded/da/carbondioxide/statevector.py similarity index 93% rename from gridded/da/ct/statevector.py rename to gridded/da/carbondioxide/statevector.py index 16a2132..e7416eb 100755 --- a/gridded/da/ct/statevector.py +++ b/gridded/da/carbondioxide/statevector.py @@ -22,9 +22,9 @@ import da.tools.io4 as io identifier = 'CarbonTracker Statevector ' version = '0.0' -################### Begin Class CtStateVector ################### +################### Begin Class CO2StateVector ################### -class CtStateVector(StateVector): +class CO2StateVector(StateVector): """ This is a StateVector object for CarbonTracker. It has a private method to make new ensemble members """ def get_covariance(self, date, DaCycle): @@ -40,7 +40,7 @@ class CtStateVector(StateVector): # Get the needed matrices from the specified covariance files file_ocn_cov = DaCycle.DaSystem['ocn.covariance'] - file_bio_cov = DaCycle.DaSystem['bio.covariance'] #LU logika tego to powrot do dacycle zeby potem z systemu(CT) pobrac parametr + file_bio_cov = DaCycle.DaSystem['bio.covariance'] # replace YYYY.MM in the ocean covariance file string @@ -136,7 +136,7 @@ class CtStateVector(StateVector): logging.info('Successfully read the State Vector from file (%s) ' % filename) -################### End Class CtStateVector ################### +################### End Class CO2StateVector ################### if __name__ == "__main__": diff --git a/gridded/da/ctgridded/__init__.py b/gridded/da/co2gridded/__init__.py similarity index 100% rename from gridded/da/ctgridded/__init__.py rename to gridded/da/co2gridded/__init__.py diff --git a/gridded/da/ctgridded/dasystem.py b/gridded/da/co2gridded/dasystem.py similarity index 97% rename from gridded/da/ctgridded/dasystem.py rename to gridded/da/co2gridded/dasystem.py index c5ff96d..a21328e 100755 --- a/gridded/da/ctgridded/dasystem.py +++ b/gridded/da/co2gridded/dasystem.py @@ -16,7 +16,7 @@ import logging from da.baseclasses.dasystem import DaSystem -class CtGriddedDaSystem(DaSystem): +class CO2GriddedDaSystem(DaSystem): """ Information on the data assimilation system used. This is normally an rc-file with settings. """ diff --git a/gridded/da/ctgridded/statevector.py b/gridded/da/co2gridded/statevector.py similarity index 99% rename from gridded/da/ctgridded/statevector.py rename to gridded/da/co2gridded/statevector.py index 6f49238..196e474 100755 --- a/gridded/da/ctgridded/statevector.py +++ b/gridded/da/co2gridded/statevector.py @@ -24,7 +24,7 @@ version = '0.0' ################### Begin Class CtStateVector ################### -class CtGriddedStateVector(StateVector): +class CO2GriddedStateVector(StateVector): """ This is a StateVector object for CarbonTracker. It has a private method to make new ensemble members """ def get_covariance(self, date, DaCycle): diff --git a/gridded/da/examples/das.py b/gridded/da/examples/das.py index d855542..2b58d7b 100755 --- a/gridded/da/examples/das.py +++ b/gridded/da/examples/das.py @@ -16,12 +16,12 @@ sys.path.append(os.getcwd()) from da.tools.initexit import start_logger, validate_opts_args, parse_options, CycleControl from da.tools.pipeline import ensemble_smoother_pipeline from da.platform.maunaloa import MaunaloaPlatForm -from da.ct.dasystem import CtDaSystem -from da.ct.statevector import CtStateVector -#from da.ct.obspack import ObsPackObservations -from da.ct.obs import CtObservations +from da.carbondioxide.dasystem import CO2DaSystem +from da.carbondioxide.statevector import CO2StateVector +#from da.carbondioxide.obspack import ObsPackObservations +from da.carbondioxide.obs import CO2Observations from da.tm5.observationoperator import TM5ObservationOperator -from da.ct.optimizer import CtOptimizer +from da.carbondioxide.optimizer import CO2Optimizer from da.analysis.expand_fluxes import save_weekly_avg_1x1_data, save_weekly_avg_state_data, save_weekly_avg_tc_data, save_weekly_avg_ext_tc_data from da.analysis.expand_mixingratios import write_mixing_ratios @@ -43,12 +43,12 @@ DaCycle = CycleControl(opts, args) PlatForm = MaunaloaPlatForm() -DaSystem = CtDaSystem(DaCycle['da.system.rc']) +DaSystem = CO2DaSystem(DaCycle['da.system.rc']) ObsOperator = TM5ObservationOperator(DaCycle['da.obsoperator.rc']) #Samples = ObsPackObservations() -Samples = CtObservations() -StateVector = CtStateVector() -Optimizer = CtOptimizer() +Samples = CO2Observations() +StateVector = CO2StateVector() +Optimizer = CO2Optimizer() ########################################################################################## ################### ENTER THE PIPELINE WITH THE OBJECTS PASSED BY THE USER ############### diff --git a/gridded/da/examples/dasgridded.py b/gridded/da/examples/dasgridded.py index b333343..c22a95c 100755 --- a/gridded/da/examples/dasgridded.py +++ b/gridded/da/examples/dasgridded.py @@ -18,12 +18,12 @@ from da.tools.initexit import start_logger, parse_options, validate_opts_args, C from da.tools.pipeline import ensemble_smoother_pipeline from da.platform.maunaloa import MaunaloaPlatForm -from da.ctgridded.dasystem import CtGriddedDaSystem -from da.ctgridded.statevector import CtGriddedStateVector -from da.ct.obs import CtObservations +from da.co2gridded.dasystem import CO2GriddedDaSystem +from da.co2gridded.statevector import CO2GriddedStateVector +from da.carbondioxide.obs import CO2Observations from da.tm5.observationoperator import TM5ObservationOperator -from da.ct.optimizer import CtOptimizer +from da.carbondioxide.optimizer import CO2Optimizer from da.tools.pipeline import header, footer from da.analysis.expand_fluxes import save_weekly_avg_1x1_data, save_weekly_avg_state_data, save_weekly_avg_tc_data, save_weekly_avg_ext_tc_data @@ -44,11 +44,11 @@ opts, args = validate_opts_args(parse_options()) DaCycle = CycleControl(opts, args) PlatForm = MaunaloaPlatForm() -DaSystem = CtGriddedDaSystem(DaCycle['da.system.rc']) +DaSystem = CO2GriddedDaSystem(DaCycle['da.system.rc']) ObsOperator = TM5ObservationOperator(DaCycle['da.obsoperator.rc']) -Samples = CtObservations() -StateVector = CtGriddedStateVector() -Optimizer = CtOptimizer() +Samples = CO2Observations() +StateVector = CO2GriddedStateVector() +Optimizer = CO2Optimizer() ########################################################################################## ################### ENTER THE PIPELINE WITH THE OBJECTS PASSED BY THE USER ############### diff --git a/gridded/da/examples/dasjet.py b/gridded/da/examples/dasjet.py index bcfc25b..6f0d28a 100755 --- a/gridded/da/examples/dasjet.py +++ b/gridded/da/examples/dasjet.py @@ -16,11 +16,11 @@ sys.path.append(os.getcwd()) from da.tools.initexit import start_logger, validate_opts_args, parse_options, CycleControl from da.tools.pipeline import ensemble_smoother_pipeline from da.platform.jet import JetPlatForm -from da.ct.dasystem import CtDaSystem -from da.ct.statevector import CtStateVector -from da.ct.obs import CtObservations +from da.carbondioxide.dasystem import CO2DaSystem +from da.carbondioxide.statevector import CO2StateVector +from da.carbondioxide.obs import CO2Observations from da.tm5.observationoperator import TM5ObservationOperator -from da.ct.optimizer import CtOptimizer +from da.carbondioxide.optimizer import CO2Optimizer from da.tools.pipeline import header, footer @@ -38,11 +38,11 @@ opts, args = validate_opts_args(parse_options()) DaCycle = CycleControl(opts, args) PlatForm = JetPlatForm() -DaSystem = CtDaSystem(DaCycle['da.system.rc']) +DaSystem = CO2DaSystem(DaCycle['da.system.rc']) ObsOperator = TM5ObservationOperator(DaCycle['da.obsoperator.rc']) -Samples = CtObservations() -StateVector = CtStateVector() -Optimizer = CtOptimizer() +Samples = CO2Observations() +StateVector = CO2StateVector() +Optimizer = CO2Optimizer() ########################################################################################## ################### ENTER THE PIPELINE WITH THE OBJECTS PASSED BY THE USER ############### diff --git a/gridded/da/tm5/observationoperator.py b/gridded/da/tm5/observationoperator.py index 5d62cdb..15a640f 100755 --- a/gridded/da/tm5/observationoperator.py +++ b/gridded/da/tm5/observationoperator.py @@ -187,10 +187,6 @@ class TM5ObservationOperator(ObservationOperator): else: NewItems['istart'] = self.coldstartvalue # if not, start TM5 'cold' logging.debug('Resetting TM5 to perform cold start') -#LU to ponizej: po prostu jesli to jest inny lag niz pierwszy -#LU czyli: restart wtedy kiedy albo time.restart = true czyli w kazdym nastepnym cyklu, albo kiedy jest to nie pierwszy step w sample step. tylko wtedy to skad robimy restart sie rozni...czy nie , bo robimy po advance? -#LU z drugiej strony to time.sample.window to nic innego jak lag. -#LU ale: nowy RC zapisywany jst przy koncu cyklu. czyli time. sample.window bedzie zawsze 0. if self.DaCycle['time.sample.window'] != 0: # If this is a restart from a previous time step within the filter lag, the TM5 model should do a restart NewItems['istart'] = self.restartvalue @@ -201,7 +197,7 @@ class TM5ObservationOperator(ObservationOperator): self.modify_rc(NewItems) self.write_rc(self.RcFileName) - def load_rc(self, name):#LU tutaj bylo wczesniej rcfIletype. to znaczy ze pewnie zawsze bylo pycasso. bo wpp byloby blad. + def load_rc(self, name): """ This method loads a TM5 rc-file with settings for this simulation """ @@ -270,7 +266,7 @@ class TM5ObservationOperator(ObservationOperator): self.tm_settings[k] = v #replace all instances of old with new, but only if it concerns a name of a path!!! if os.path.exists(str(v)): - for k_old, v_old in self.tm_settings.iteritems(): #LU nie wydaje mi sie zeby to powyzej mialo sens, bo wowczas v jest tym samym co v_old + for k_old, v_old in self.tm_settings.iteritems(): if not isinstance(v_old, str): continue if str(v_orig) in str(v_old): @@ -381,7 +377,6 @@ class TM5ObservationOperator(ObservationOperator): only if successfull on all processors will execution of the shell continue. """ -#LU mam wrazneie ze ten status sie i tak d oniczego nie przydaje. cwd = os.getcwd() # From here on, several options should be implemented. @@ -471,7 +466,7 @@ class TM5ObservationOperator(ObservationOperator): return code -#LU nie iwem czy to dobrze zadziala z tym kodem bo moze jednak sa lepsze sposoby sprawdzenia statusu... + def TM5_With_N_tracers(self): """ Method handles the case where one TM5 model instance with N tracers does the sampling of all ensemble members""" diff --git a/gridded/da/tools/initexit.py b/gridded/da/tools/initexit.py index 6eb89e9..1406633 100755 --- a/gridded/da/tools/initexit.py +++ b/gridded/da/tools/initexit.py @@ -143,7 +143,7 @@ class CycleControl(dict): if 'date' in k : self[k] = to_datetime(v) if k in ['time.start', 'time.end', 'time.finish', 'da.restart.tstamp']: - self[k] = to_datetime(v)#LU a gdzie time.sample.start? ona chyba zawsze jest wczytywana na nowo... w takim razie po co ona w pliku_ + self[k] = to_datetime(v) # if 'time.start' in k : # self[k] = to_datetime(v) # if 'time.end' in k : @@ -318,7 +318,7 @@ class CycleControl(dict): self['jobrcfilename'] = os.path.join(self['dir.exec'], strippedname) self.parse_times() - self.write_rc(self['jobrcfilename'])#LU rc z dodatkowymi nazwami folderow itd. normalnie zapisany da.rc z false, ap otem przemieniony da_runtime. ile w tym sensu..... file_structure niby taka sama.(a na pewno byla w poprzendim...)ale czy to sie do czegos przydaje_ + self.write_rc(self['jobrcfilename']) def setup_file_structure(self): """ @@ -382,8 +382,8 @@ class CycleControl(dict): * Submit the next cycle """ - self.write_random_seed() #LU with timestamp -> to bedzie biezaca data, bo tez nie mamy za bardzo skad wziac nastepnej. - self.write_new_rc_file() #LU with timestamp -> to bedzie nastepna data. bo da_runtime + self.write_random_seed() + self.write_new_rc_file() self.collect_restart_data() # Collect restart data for next cycle into a clean restart/current folder self.collect_output() # Collect restart data for next cycle into a clean restart/current folder @@ -490,7 +490,7 @@ class CycleControl(dict): # The rest is info needed for a system restart, so it modifies the current DaCycle object (self) self['da.restart.fname'] = fname # needed for next job template - #self.RestartFileList.append(fname) # current restart list holds next rc file name #LU not that needed since it is already written to the restart dir... + #self.RestartFileList.append(fname) # not that needed since it is already written to the restart dir... #logging.debug('Added da_runtime.rc to the RestartFileList for later collection') @@ -520,7 +520,6 @@ class CycleControl(dict): targetdir = os.path.join(self['dir.exec']) jobfile = os.path.join(targetdir, 'jb.%s.jb' % jobid) logfile = os.path.join(targetdir, 'jb.%s.log' % jobid) -#LU tutaj sa parametry ktore ida na gore do pliku job. nie zawsze koniecznie potrzebne. # Template and commands for job jobparams = {'jobname':"j.%s" % jobid, 'jobtime':'06:00:00', 'logfile': logfile, 'errfile': logfile} template = self.DaPlatForm.get_job_template(jobparams) @@ -577,7 +576,7 @@ def parse_options(): logging.root.setLevel(logging.DEBUG) if opts: - optslist = [item[0] for item in opts] #LU ze co same minusy zwroci? + optslist = [item[0] for item in opts] else: optslist = [] diff --git a/gridded/da/tools/pipeline.py b/gridded/da/tools/pipeline.py index 7bc305b..c386a49 100755 --- a/gridded/da/tools/pipeline.py +++ b/gridded/da/tools/pipeline.py @@ -47,7 +47,7 @@ def forward_pipeline(DaCycle, PlatForm, DaSystem, Samples, StateVector, ObsOpera # Read from other simulation and write priors, then read posteriors and propagate if DaCycle['dir.forward.savestate'] != 'None': - filename = os.path.join(DaCycle['dir.forward.savestate'], DaCycle['time.start'].strftime('%Y%m%d'), 'savestate.nc') #LU teraz czytamy savestate.nc + filename = os.path.join(DaCycle['dir.forward.savestate'], DaCycle['time.start'].strftime('%Y%m%d'), 'savestate.nc') StateVector.read_from_legacy_file(filename, 'prior') else: prepare_state(DaCycle, StateVector)#LU tutaj zamiast tego raczej to stworzenie nowej kowariancji i ensembli bo pozostale rzeczy sa na gorze i na doel. @@ -56,7 +56,6 @@ def forward_pipeline(DaCycle, PlatForm, DaSystem, Samples, StateVector, ObsOpera # Write as prior fluxes to output dir - #savefilename = os.path.join(DaCycle['dir.output'], 'savestate.nc') savefilename = os.path.join(DaCycle['dir.restart'], 'savestate_%s.nc' % DaCycle['time.start'].strftime('%Y%m%d')) StateVector.write_to_file(savefilename, 'prior') @@ -81,14 +80,14 @@ def forward_pipeline(DaCycle, PlatForm, DaSystem, Samples, StateVector, ObsOpera def start_job(DaCycle, DaSystem, DaPlatForm, StateVector, Samples, ObsOperator): """ Set up the job specific directory structure and create an expanded rc-file """ - DaSystem.validate() #LU tylko sprawdza needed rc items in the file, typu obserwacje, kowariancja - DaCycle.DaSystem = DaSystem #LU laczy te listy parametrow ale na zasadzie hierarchii - DaCycle.DaPlatForm = DaPlatForm #LU przypisuje cyklowi platforme - DaCycle.initialize() #LU setup file structure etc - #StateVector.DaCycle = DaCycle # also embed object in StateVector so it can access cycle information for I/O etc #LU cykl zostaje przypisany state vectorowi - #Samples.DaCycle = DaCycle # also embed object in Samples object so it can access cycle information for I/O etc #LU cykl zostaje przypisany probkom - #ObsOperator.DaCycle = DaCycle # also embed object in ObsOperator object so it can access cycle information for I/O etc #LU cykl zostaje przypisany obsoperatorowi - ObsOperator.initialize(DaCycle) # Setup Observation Operator #LU a pote mobsoperator jest inicjalizowany + DaSystem.validate() + DaCycle.DaSystem = DaSystem + DaCycle.DaPlatForm = DaPlatForm + DaCycle.initialize() + #StateVector.DaCycle = DaCycle # also embed object in StateVector so it can access cycle information for I/O etc + #Samples.DaCycle = DaCycle # also embed object in Samples object so it can access cycle information for I/O etc + #ObsOperator.DaCycle = DaCycle # also embed object in ObsOperator object so it can access cycle information for I/O etc + ObsOperator.initialize(DaCycle) # Setup Observation Operator StateVector.initialize(DaCycle) def prepare_state(DaCycle, StateVector): @@ -118,7 +117,7 @@ def prepare_state(DaCycle, StateVector): saved_sv = os.path.join(DaCycle['dir.restart'], 'savestate_%s.nc' % DaCycle['da.restart.tstamp'].strftime('%Y%m%d')) - StateVector.read_from_file(saved_sv) # by default will read "opt"(imized) variables, and then propagate #LU najlatwiej - jesli jest to da.restart.tstamp + StateVector.read_from_file(saved_sv) # by default will read "opt"(imized) variables, and then propagate # Now propagate the ensemble by one cycle to prepare for the current cycle StateVector.propagate(DaCycle) @@ -141,7 +140,7 @@ def sample_state(DaCycle, Samples, StateVector, ObservationOperator): #msg = "All restart data have been copied to the save/tmp directory for future use" ; logging.debug(msg) logging.info(header + "starting sample_state" + footer) nlag = int(DaCycle['time.nlag']) - logging.info("Sampling model will be run over %d cycles" % nlag) #LU w ramach modelu jest 3 cykle, czyli 3 przejscia. jednoczesnie w ramach kazdego cyklu idzie sie 3 tygodnie do przodu + logging.info("Sampling model will be run over %d cycles" % nlag) ObservationOperator.get_initial_data() @@ -176,7 +175,7 @@ def sample_step(DaCycle, Samples, StateVector, ObservationOperator, lag, advance # Implement something that writes the ensemble member parameter info to file, or manipulates them further into the # type of info needed in your transport model - StateVector.write_members_to_file(lag, DaCycle['dir.input']) #LU parameters.nc to be an input for tm5 + StateVector.write_members_to_file(lag, DaCycle['dir.input']) Samples.initialize(DaCycle) Samples.add_observations() @@ -186,7 +185,7 @@ def sample_step(DaCycle, Samples, StateVector, ObservationOperator, lag, advance Samples.add_model_data_mismatch(DaCycle.DaSystem['obs.sites.rc']) sampling_coords_file = os.path.join(DaCycle['dir.input'], 'observations_%s.nc' % DaCycle['time.sample.stamp']) - Samples.write_sample_info(sampling_coords_file) #LU observations.nc - for the tm5 to have sampling dates and times + Samples.write_sample_info(sampling_coords_file) # Write filename to DaCycle, and to output collection list DaCycle['ObsOperator.inputfile'] = sampling_coords_file @@ -214,7 +213,7 @@ def sample_step(DaCycle, Samples, StateVector, ObservationOperator, lag, advance # steps only optimize against the data at the front (lag==nlag) of the filter. This way, each observation is used only # (and at least) once # in the assimilation -#LU jaki to ma sens: taki ze zawsze mamy flask_output.nc. tylko ze on jest chyba nadpisywany za kazdym cyklem? no coz.. chyba byla na ten temat dyskusja, i wyszlo ze for debugging. niech i tak zostanie. + if not advance: if DaCycle['time.restart'] == False or lag == int(DaCycle['time.nlag']) - 1: StateVector.ObsToAssimmilate += (copy.deepcopy(Samples),) diff --git a/gridded/template.py b/gridded/template.py index 8500aac..2ee2ef8 100755 --- a/gridded/template.py +++ b/gridded/template.py @@ -7,86 +7,78 @@ import sys import os import logging -dummy = sys.path.append(os.getcwd()) +sys.path.append(os.getcwd()) ################################################################################################# # Next, import the tools needed to initialize a data assimilation cycle ################################################################################################# -from da.tools.initexit import start_logger -from da.tools.initexit import validate_opts_args -from da.tools.initexit import parse_options +from da.tools.initexit import start_logger, validate_opts_args, parse_options, CycleControl +from da.tools.pipeline import ensemble_smoother_pipeline, header, footer +from da.platform.huygens import HuygensPlatForm +from da.carbondioxide.dasystem import CO2DaSystem +from da.carbondioxide.optimizer import CO2Optimizer +from da.carbondioxide.obspack_geocarbon import ObsPackObservations +#from da.carbondioxide.statevector import CO2StateVector +from da.co2gridded.statevector import CO2GriddedStateVector +#from da.carbondioxide.obspack import ObsPackObservations +#from da.carbondioxide.obs import CO2Observations +from da.tm5.observationoperator import TM5ObservationOperator + +from da.analysis.expand_fluxes import save_weekly_avg_1x1_data, save_weekly_avg_state_data, save_weekly_avg_tc_data, save_weekly_avg_ext_tc_data +from da.analysis.expand_mixingratios import write_mixing_ratios +from da.analysis.summarize_obs import summarize_obs ################################################################################################# # Parse and validate the command line options, start logging ################################################################################################# -dummy = start_logger() -opts, args = parse_options() -opts,args = validate_opts_args(opts,args) +start_logger() +opts, args = parse_options() +opts, args = validate_opts_args(opts, args) ################################################################################################# # Create the Cycle Control object for this job ################################################################################################# -from da.tools.initexit import CycleControl - -DaCycle = CycleControl(opts,args) +DaCycle = CycleControl(opts, args) ########################################################################################### ### IMPORT THE APPLICATION SPECIFIC MODULES HERE, TO BE PASSED INTO THE MAIN PIPELINE!!! ## ########################################################################################### -from da.tools.pipeline import ensemble_smoother_pipeline -from da.platform.huygens import HuygensPlatForm -from da.ct.dasystem import CtDaSystem -#from da.ct.statevector import CtStateVector -from da.ctgridded.statevector import CtGriddedStateVector -#from da.ct.obspack import ObsPackObservations -from da.ct.obspack_geocarbon import ObsPackObservations -#from da.ct.obs import CtObservations -from da.tm5.observationoperator import TM5ObservationOperator -from da.ct.optimizer import CtOptimizer -PlatForm = HuygensPlatForm() -DaSystem = CtDaSystem(DaCycle['da.system.rc']) +PlatForm = HuygensPlatForm() +DaSystem = CO2DaSystem(DaCycle['da.system.rc']) ObsOperator = TM5ObservationOperator(DaCycle['da.obsoperator.rc']) -Samples = ObsPackObservations() +Samples = ObsPackObservations() #Samples = CtObservations() -StateVector = CtGriddedStateVector() -Optimizer = CtOptimizer() +StateVector = CO2GriddedStateVector() +Optimizer = CO2Optimizer() ########################################################################################## ################### ENTER THE PIPELINE WITH THE OBJECTS PASSED BY THE USER ############### ########################################################################################## -from da.tools.pipeline import header,footer -msg = header+"Entering Pipeline "+footer ; logging.info(msg) -ensemble_smoother_pipeline(DaCycle,PlatForm, DaSystem, Samples,StateVector,ObsOperator,Optimizer) +logging.info(header + "Entering Pipeline " + footer) + +ensemble_smoother_pipeline(DaCycle, PlatForm, DaSystem, Samples, StateVector, ObsOperator, Optimizer) ########################################################################################## ################### All done, extra stuff can be added next, such as analysis ########################################################################################## -msg = header+"Starting analysis"+footer ; logging.info(msg) - - -from da.analysis.expand_fluxes import save_weekly_avg_1x1_data -from da.analysis.expand_fluxes import save_weekly_avg_state_data -from da.analysis.expand_fluxes import save_weekly_avg_tc_data -from da.analysis.expand_fluxes import save_weekly_avg_ext_tc_data -from da.analysis.expand_mixingratios import write_mixing_ratios -from da.analysis.summarize_obs import summarize_obs +logging.info(header + "Starting analysis" + footer) -savedas = save_weekly_avg_1x1_data(DaCycle, StateVector) -savedas = save_weekly_avg_state_data(DaCycle, StateVector) -savedas = save_weekly_avg_tc_data(DaCycle, StateVector) -savedas = save_weekly_avg_ext_tc_data(DaCycle) -savedas = write_mixing_ratios(DaCycle) -savedas = summarize_obs(DaCycle) +save_weekly_avg_1x1_data(DaCycle, StateVector) +save_weekly_avg_state_data(DaCycle, StateVector) +save_weekly_avg_tc_data(DaCycle, StateVector) +save_weekly_avg_ext_tc_data(DaCycle) +write_mixing_ratios(DaCycle) +summarize_obs(DaCycle) sys.exit(0) -- GitLab