split signal per hour

This forum is dedicated to discuss all problems and suggestions related to the use of geopsy database and its plugins (array processing, H/V,...).
Post Reply
Leandro
Posts: 7
Joined: Fri Jun 28, 2024 4:20 pm

split signal per hour

Post by Leandro »

Hi Marc,

Would you perhaps have a code that cuts and exports SAC signal per hour?

Thank you!
admin
Site Admin
Posts: 809
Joined: Mon Aug 13, 2007 11:48 am
Location: ISTerre
Contact:

Re: split signal per hour

Post by admin »

Hi Leandro,

From the command line you can run a "waveform" script in which an export command will do the job.
For instance,

Code: Select all

geopsy -waveform cut1h.js HIS0000_Z.sac
'HIS0000_Z.sac' is a 6-hour long signal. The file 'cut1h.js' is a javascript:

Code: Select all

for(i=0;i<6;i++) {
  if(i<10) {
    istr="0"+i;
  } else {
    istr=i;
  }
  cut("[abs 20000101"+istr+"0000.000000; delta 1h]");
  exportFile("cut_"+istr+".sac", false, "SacBigEndian");
  restoreStep("original");
}
All available functions are listed here. Writing this small example, I noticed that justifying numbers is not a straight forward task with Javascript. Here I added a condition to insert the 0 if the number is lower than 10. I'm not a expert in Javascript but I found no simple solution from all I searched. I will probably add a function like 'justify' to provide this basic functionality.

The starting and ending time of the considered signal can be queried with header. A string representing the absolute time is returned. There is currently no function to manipulate this time easily. For example to add a given amount of seconds or hours. I will fix this in future releases.

Time operations can be also achieved outside the javascript in Bash or Python. Several calls to geopsy are then necessary which is slightly less efficient than running all inside a single instance. If scripting with Bash, you might be interested by 'gptime' (included in geopsypack, 'gptime -h all' for detials) to manipulate absolute times.

Best regards,
Marc
admin
Site Admin
Posts: 809
Joined: Mon Aug 13, 2007 11:48 am
Location: ISTerre
Contact:

Re: split signal per hour

Post by admin »

The documentation was not up-to-date. In fact, there are some functions available for justifying numbers.

Code: Select all

print(rightJustified(2. 4, "0"))
results with '0002'

I modified the documentation to list all function provided by geopsy on top of usual Javascript functions.

In particular, several functions to manipulate absolute time are available. A script to split a signal into blocks of one hour could be written this way:

Code: Select all

for(t=startTime(0);elapsedSeconds(t, endTime(0))>=3600;t=addSeconds(t, 3600)) {
  print(t);
  cut("[abs "+t+"; delta 1h]");
  exportFile("cut_"+t+".sac", false, "SacBigEndian");
  restoreStep("original");
}
The functions startTime() and endTime() will be available in the next release 3.6.0. They are currently only available if the code is compiled from the git repository. Meanwhile a workaround can be built with header(0, "StartTime") which returns the same information as startTime() with a distinct format not suitable for addSeconds() and elapsedSeconds().

Code: Select all

function convertTime(t)
{
  t=t.replace("-", "");
  t=t.replace("-", "");
  t=t.replace(":", "");
  t=t.replace(":", "");
  t=t.replace(" ", "");
  return t;
}

for(t=convertTime(header(0, "StartTime"));
    elapsedSeconds(t, convertTime(header(0, "EndTime")))>=3600;
    t=addSeconds(t, 3600)) {
  print(t);
  cut("[abs "+t+"; delta 1h]");
  exportFile("cut_"+t+".sac", false, "SacBigEndian");
  restoreStep("original");
}
Post Reply