nmfs-fish-tools/SSMSE

SS3 update to .ss_new naming convention

CassidyPeterson-NOAA opened this issue · 8 comments

SS3 v3.30.19.01 renames new data file as data_echo.ss_new (instead of previously named data.ss_new).
This triggers an error in the function SSMSE:::copy_model_files(). See lines of code below.

if (!all(c("control.ss_new", "data.ss_new", "starter.ss_new", 
            "forecast.ss_new", "ss.par") %in% list.files(OM_in_dir))) {
            stop(".ss_new files not found in the original OM directory ", 
                OM_in_dir, ". Please run the model to make the .ss_new files available.")
        }

Thanks for finding this @CassidyPeterson-NOAA , a quick check of the code finds data.ss_new calls in a bunch of other places too so this is probably a wider issue.

@CassidyPeterson-NOAA , thanks, I think this isn't caught because SSMSE was developed using 3.30.18.

Is a newer version of SS3 necessary for the work you are doing?

For a fix, I think we could generalize the code to expect either data.ss_new or data_echo.ss_new

I'm running through the code quickly and adding switches wherever we call data.ss_new at the moment. For example

if(file.exists(file.path(OM_dir, "data.ss_new"))){
exp_vals <- r4ss::SS_readdat(file.path(OM_dir, "data.ss_new"),
section = 2,
verbose = FALSE
)
}else if(file.exists(file.path(OM_dir, "data_echo.ss_new"))){
exp_vals <- r4ss::SS_readdat(file.path(OM_dir, "data_echo.ss_new"),
section = 2,
verbose = FALSE
)
}else{
stop("Error: No data.ss_new file or data_echo.ss_new file was found.")
}

I'll push it up as a new branch for @CassidyPeterson-NOAA to test once I'm done. In the future we could do a better job by setting the base file names such as data.ss_new vs data_echo.ss_new at the start of the code but this will get us running for now.

@CassidyPeterson-NOAA do you think it is still worth doing this, if the simulations will be run with 3.30.18?

It may not be a priority, since it is easily fixable by manually renaming input files ahead of running the model.

However, I think we could easily fix it by adding 2 lines of code to the copy_model_files() function:

copy_model_files <- function(OM_in_dir = NULL,
                             OM_out_dir = NULL,
                             EM_in_dir = NULL,
                             EM_out_dir = NULL,
                             verbose = FALSE) {
  file.exists(file.path(OM_in_dir))

## Following two lines added to ID if data_echo.ss_new exists, and if so, to rename a copy of the file as data.ss_new
  if("data_echo.ss_new" %in% list.files(OM_in_dir)){file.copy(file.path(OM_in_dir, "data_echo.ss_new"), file.path(OM_in_dir, "data.ss_new"), overwrite=TRUE)} 
  if("data_echo.ss_new" %in% list.files(EM_in_dir)){file.copy(file.path(EM_in_dir, "data_echo.ss_new"), file.path(EM_in_dir, "data.ss_new"), overwrite=TRUE)}
## end addition 

  # checks
  if (!is.null(OM_in_dir)) { ... }
... 
}

I made the change locally and am running diagnostic tests. Let me know if you'd like me to make another PR to incorporate this addition.

@CassidyPeterson-NOAA if you have time for it, a pull request would be fantastic!

There may be some other data.ss_new use in the code (for example, when we sample from the om, we are running the SS3 bootstrap procedure, and pull the samples from the data.ss_new file, I believe). I think the .19 approach is splitting those to a separate file.

However, I'm also happy if you want to put your solution into a PR, and then I can add to it, looking for the other instances of data.ss_new in the code!

I think #190 is caused by the new naming conventions, also.