Commit 00e10cb5 authored by laura.gassner's avatar laura.gassner
Browse files

added an option to use individual tracekill and time-windowing files for each workflow stage

parent 907334d7
...@@ -466,9 +466,10 @@ The parameters INV\_RHO\_ITER, INV\_VP\_ITER and INV\_VS\_ITER define from which ...@@ -466,9 +466,10 @@ The parameters INV\_RHO\_ITER, INV\_VP\_ITER and INV\_VS\_ITER define from which
"nf_jac" : "1", "nf_jac" : "1",
\end{verbatim}}} \end{verbatim}}}
The inverted models are saved in INV\_MODELFILE. The first model that is saved is at iteration step nfstart and then every $\mathrm{nf}^{\mathrm{th}}$ iteration step. Analog the gradients are saved every $\mathrm{nf\_jac}^{\mathrm{th}}$ iteration step from iteration step nftart\_jac on in JACOBIAN. The inverted models are saved in INV\_MODELFILE. The first model that is saved is at iteration step nfstart and then every $\mathrm{nf}^{\mathrm{th}}$ iteration step. Analog the gradients are saved every $\mathrm{nf\_jac}^{\mathrm{th}}$ iteration step from iteration step nfstart\_jac on in JACOBIAN.
\section{Workflow} \section{Workflow}
\label{sec:workflow}
{\color{blue}{\begin{verbatim} {\color{blue}{\begin{verbatim}
"Workflow" : "comment", "Workflow" : "comment",
"USE_WORKFLOW" : "1", "USE_WORKFLOW" : "1",
...@@ -631,7 +632,7 @@ To remove the contribution of the unknown source time function (STF) from the wa ...@@ -631,7 +632,7 @@ To remove the contribution of the unknown source time function (STF) from the wa
"N_STF_START" : "1", "N_STF_START" : "1",
"TAPER_STF" : "0", "TAPER_STF" : "0",
"TRKILL_STF" : "0", "TRKILL_STF" : "0",
"TRKILL_FILE_STF" : "./trace_kill/trace_kill.dat", "TRKILL_FILE_STF" : "./trace_kill/trace_kill",
\end{verbatim}}} \end{verbatim}}}
{\color{red}{\begin{verbatim} {\color{red}{\begin{verbatim}
...@@ -659,7 +660,7 @@ Start with l=0.01 as a reasonable initial value for the waterlevel. The best fit ...@@ -659,7 +660,7 @@ Start with l=0.01 as a reasonable initial value for the waterlevel. The best fit
The theory behind the Fourier domain least squares procedure is outlined by Lisa Groos (2013, Appendix F, page 146). She also describes a way to find an approrpiate waterlevel by application of the L-curve criterion (Groos, 2013, Appendix G, page 148). The theory behind the Fourier domain least squares procedure is outlined by Lisa Groos (2013, Appendix F, page 146). She also describes a way to find an approrpiate waterlevel by application of the L-curve criterion (Groos, 2013, Appendix G, page 148).
\newline \newline
N\_STF is the increment between the iteration steps. N\_STF\_START defines at which iterationstep the inversion for STF should start. This parameter has to be set at least to 1 NOT(!) 0. When using TAPER\_STF = 1, the source signal is tapered. See \texttt{src/taper.c} for the taper definition. With TRKILL\_STF = 1 it is possible to apply a trace killing for the estimation of the source wavelet correction filter. N\_STF is the increment between the iteration steps. N\_STF\_START defines at which iterationstep the inversion for STF should start. This parameter has to be set at least to 1 NOT(!) 0. When using TAPER\_STF = 1, the source signal is tapered. See \texttt{src/taper.c} for the taper definition. With TRKILL\_STF = 1 it is possible to apply a trace killing for the estimation of the source wavelet correction filter (see section \ref{sec:trace_killing}).
\newline \newline
Please note: If you additionally switch on frequency filtering during the inversion (TIME\_FILT=1 or TIME\_FILT=2), the parameters N\_STF and N\_STF\_START will be ignored. But the optimal source time function will be inverted for the first iteration and after every change of the frequency range. Please note: If you additionally switch on frequency filtering during the inversion (TIME\_FILT=1 or TIME\_FILT=2), the parameters N\_STF and N\_STF\_START will be ignored. But the optimal source time function will be inverted for the first iteration and after every change of the frequency range.
...@@ -667,7 +668,8 @@ Please note: If you additionally switch on frequency filtering during the invers ...@@ -667,7 +668,8 @@ Please note: If you additionally switch on frequency filtering during the invers
For more information see chapter \ref{cha:STF-Inversion}. For more information see chapter \ref{cha:STF-Inversion}.
\section{Frequency filtering} \section{Data manipulation}
\subsection{Frequency filtering}
\label{sec:filtering} \label{sec:filtering}
{\color{blue}{\begin{verbatim} {\color{blue}{\begin{verbatim}
"Frequency filtering during inversion" : "comment", "Frequency filtering during inversion" : "comment",
...@@ -680,39 +682,32 @@ For more information see chapter \ref{cha:STF-Inversion}. ...@@ -680,39 +682,32 @@ For more information see chapter \ref{cha:STF-Inversion}.
"ZERO_PHASE" : "0", "ZERO_PHASE" : "0",
"FREQ_FILE" : "frequencies.dat", "FREQ_FILE" : "frequencies.dat",
"WRITE_FILTERED_DATA" : "0", "WRITE_FILTERED_DATA" : "0",
"Minimum number of iteration per frequency" : "comment",
"MIN_ITER" : "10",
\end{verbatim}}} \end{verbatim}}}
{\color{red}{\begin{verbatim} {\color{red}{\begin{verbatim}
Default values are: Default values are:
TIME_FILT=0 TIME_FILT=0
ZERO_PHASE=0 ZERO_PHASE=0
MIN_ITER=0
\end{verbatim}}} \end{verbatim}}}
TIME\_FILT = 1 can be set to use frequency filtering. The parameter FC\_START defines the corner frequency of the Butterworth low pass filter at the beginning of the inversion. The parameter FC\_END defines the maximum corner frequency used in the inversion. The parameter FC\_INCR controls in which steps the bandwidth is increased during the inversion. TIME\_FILT = 1 can be set to use frequency filtering. The parameter FC\_START defines the corner frequency of the Butterworth low pass filter at the beginning of the inversion. The parameter FC\_END defines the maximum corner frequency used in the inversion. The parameter FC\_INCR controls in which steps the bandwidth is increased during the inversion.
If TIME\_FILT = 2 individual frequencies for each step can be read from FREQ\_FILE. In this file the first entry must be the number of frequencies used for filtering. Each frequency in Hz has to be specified in a row. The example file frequencies.dat can be found in \texttt{trunk/par}. If TIME\_FILT = 2 individual frequencies for each step can be read from FREQ\_FILE. In this file the first entry must be the number of frequencies used for filtering. Each frequency in Hz has to be specified in a row. The example file frequencies.dat can be found in \texttt{trunk/par}.
The parameter ORDER defines the order of the Butterworth low pass filter. If the variable ZERO\_PHASE is set to one a zero phase filter is applied. It is realized by filtering the the traces in both forward and reverse direction with the defined Butterworth low pass filter. Therefore, the effective order of the low pass filter is doubled. The parameter ORDER defines the order of the Butterworth low pass filter. If the variable ZERO\_PHASE is set to one a zero phase filter is applied. It is realized by filtering the traces in both forward and reverse direction with the defined Butterworth low pass filter. Therefore, the effective order of the low pass filter is doubled.
With F\_HP an additional high pass filter can be applied, where F\_HP is the corner frequency in Hz. With F\_HP an additional high pass filter can be applied, where F\_HP is the corner frequency in Hz.
With the parameter PRO (see~\ref{json:abort_criterion}) one has to adjust the criterion that defines at which points the bandwidth of the signals are increased. With the parameter PRO (see~\ref{json:abort_criterion}) one has to adjust the criterion that defines at which points the bandwidth of the signals are increased.
With the parameter WRITE\_FILTERED\_DATA it is possible to write the time filtered measured data to disk which are filtered with the same filter as the synthetic data. Therefore this output can be used to visualize the residuals between synthetic and measured data. With the parameter WRITE\_FILTERED\_DATA it is possible to write the time filtered measured data to disk which are filtered with the same filter as the synthetic data. Therefore this output can be used to visualize the residuals between synthetic and measured data. The filtered data is located in DATA\_DIR and are labeled with "\_measured".
{\color{blue}{\begin{verbatim}
"Minimum number of iteration per frequency" : "comment",
"MIN_ITER" : "10",
\end{verbatim}}}
{\color{red}{\begin{verbatim}
Default values are:
MIN_ITER=0
\end{verbatim}}}
If you are using frequeny filtering (TIME\_FILT==1) during the inversion, you can set a minimum number of iterations per frequency. Within this minimum number of iteration per frequency the abort criterion PRO will receive no consideration. If you are using frequeny filtering (TIME\_FILT==1) during the inversion, you can set a minimum number of iterations per frequency. Within this minimum number of iteration per frequency the abort criterion PRO will receive no consideration.
\section{Data manipulation}
\subsection{Time windowing} \subsection{Time windowing}
{\color{blue}{\begin{verbatim} {\color{blue}{\begin{verbatim}
"Time windowing" : "comment", "Time windowing" : "comment",
...@@ -729,14 +724,20 @@ Default values are: ...@@ -729,14 +724,20 @@ Default values are:
TIMEWIN=0 TIMEWIN=0
\end{verbatim}}} \end{verbatim}}}
To apply time windowing in a time series the paramter TIMEWIN must set to 1. A automatic picker routine is not integrated at the moment. The point in time (picked time) for each source must be specified in seperate files. The folder and file name can be set with the parameter PICKS\_FILE. The files must be named like this PICKS\_FILE\_<sourcenumber>.dat. So the number of sources in (SRCREC) must be equal to the number of files. Each file must contain the picked times for every receiver.\ To apply time windowing in a time series the paramter TIMEWIN must set to 1. A automatic picker routine is not integrated. The point in time (picked time) for each source must be specified in separate files. The folder and file name can be set with the parameter PICKS\_FILE. The files must be named like this PICKS\_FILE\_<sourcenumber>.dat. So the number of sources must be equal to the number of files. Each file must contain the picked times for every receiver.
The parameters TWLENGTH\_PLUS and TWLENGTH\_MINUS specify the length of the time window after (PLUS) and before (MINUS) the picked time. The unit is seconds. The damping factor GAMMA must be set individually. When usig TW\_IND = 1 three columns are expected in PICK\_FILE for each trace with the picked time, time window length plus and time window length minus. In this case TWLENGTH\_PLUS and TWLENGTH\_MINUS are ignored.
The parameters TWLENGTH\_PLUS and TWLENGTH\_MINUS specify the length of the time window after (PLUS) and before (MINUS) the picked time. The unit is seconds. The damping factor GAMMA must be set individually.
When usig TW\_IND = 1 three columns are expected in PICK\_FILE for each trace with the picked time, time window length plus and time window length minus. In this case TWLENGTH\_PLUS and TWLENGTH\_MINUS are ignored.
If you use the option "Workflow" (section \ref{sec:workflow}) it is possible to define separate files for each workflow stage. They have to be named PICKS\_FILE\_<sourcenumber>\_<workflowstage>.dat. If you don't provide separate files for some or all stages the standard file (PICKS\_FILE\_<sourcenumber>.dat) is used. This means a standard file should exist in any case.
\subsection{Trace killing} \subsection{Trace killing}
\label{sec:trace_killing}
{\color{blue}{\begin{verbatim} {\color{blue}{\begin{verbatim}
"Trace killing" : "comment", "Trace killing" : "comment",
"TRKILL" : "0", "TRKILL" : "0",
"TRKILL_FILE" : "./trace_kill/trace_kill.dat", "TRKILL_FILE" : "./trace_kill/trace_kill",
\end{verbatim}}} \end{verbatim}}}
{\color{red}{\begin{verbatim} {\color{red}{\begin{verbatim}
...@@ -744,7 +745,9 @@ Default values are: ...@@ -744,7 +745,9 @@ Default values are:
TRKILL=0 TRKILL=0
\end{verbatim}}} \end{verbatim}}}
If you don't want to use single traces or a subset of your data, the parameter TRKILL can be used. If it is set to 1, trace killing is in use. The necessary file can be selected with the parameter TRKILL\_FILE. The file should include a kill table, where the number of rows is the number of receivers and the number of columns reflects the number of sources. Now, a 1 (ONE) means, YES, please kill the trace. The trace is NOT used, it should be killed. A 0 (ZERO) means, NO, this trace should NOT be killed. If you don't want to use single traces or a subset of your data, the parameter TRKILL can be used. If it is set to 1, trace killing is in use. The necessary file can be selected needs to be located at TRKILL\_FILE.dat. The file should include a kill table, where the number of rows is the number of receivers and the number of columns reflects the number of sources. Now, a 1 (ONE) means, YES, please kill the trace. The trace is NOT used, it should be killed. A 0 (ZERO) means, NO, this trace should NOT be killed.
If you use the option "Workflow" (section \ref{sec:workflow}) it is possible to define separate files for each workflow stage. They have to be named TRKILL\_FILE\_<workflowstage>.dat. If you don't provide separate files for some or all stages the standard file (TRKILL\_FILE.dat) is used. This means a standard file should exist in any case.
\section{Gradient manipulation} \section{Gradient manipulation}
......
1 1 1 0 1 1
1 1 1 0 1 1
1 1 1 0 1 1
1 1 0 1 1 0
1 1 0 1 1 0
1 1 0 1 0 0
1 1 0 1 0 0
1 1 0 1 0 1
0 0 0 1 0 1
0 0 0 1 1 1
0 0 1 1 1 1
0 0 1 0 1 1
0 0 1 0 1 1
0 0 1 0 1 1
0 0 1 0 1 1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
...@@ -26,7 +26,7 @@ double calc_energy(float **sectiondata, int ntr, int ns, float energy, int ntr_g ...@@ -26,7 +26,7 @@ double calc_energy(float **sectiondata, int ntr, int ns, float energy, int ntr_g
/* declaration of variables */ /* declaration of variables */
extern float DT; extern float DT;
extern int MYID; extern int MYID, USE_WORKFLOW, WORKFLOW_STAGE;
extern int TRKILL, NORMALIZE, FC, TIMEWIN; extern int TRKILL, NORMALIZE, FC, TIMEWIN;
extern char TRKILL_FILE[STRING_SIZE]; extern char TRKILL_FILE[STRING_SIZE];
extern int VELOCITY; extern int VELOCITY;
...@@ -55,10 +55,24 @@ if(TRKILL==1){ ...@@ -55,10 +55,24 @@ if(TRKILL==1){
kill_tmp = imatrix(1,ntr_glob,1,nsrc_glob); kill_tmp = imatrix(1,ntr_glob,1,nsrc_glob);
kill_vector = ivector(1,ntr); kill_vector = ivector(1,ntr);
ftracekill=fopen(TRKILL_FILE,"r"); if(USE_WORKFLOW){
sprintf(trace_kill_file,"%s_%i.dat",TRKILL_FILE,WORKFLOW_STAGE);
if (ftracekill==NULL) err(" Trace kill file could not be opened!"); ftracekill=fopen(trace_kill_file,"r");
if (ftracekill==NULL){
sprintf(trace_kill_file,"%s.dat",TRKILL_FILE);
ftracekill=fopen(trace_kill_file,"r");
if (ftracekill==NULL){
err(" Trace kill file could not be opened!");
}
}
}else{
sprintf(trace_kill_file,"%s.dat",TRKILL_FILE);
ftracekill=fopen(trace_kill_file,"r");
if (ftracekill==NULL){
err(" Trace kill file could not be opened!");
}
}
for(i=1;i<=ntr_glob;i++){ for(i=1;i<=ntr_glob;i++){
for(j=1;j<=nsrc_glob;j++){ for(j=1;j<=nsrc_glob;j++){
fscanf(ftracekill,"%d",&kill_tmp[i][j]); fscanf(ftracekill,"%d",&kill_tmp[i][j]);
......
...@@ -26,7 +26,7 @@ double calc_misfit(float **sectiondata, float **section, int ntr, int ns, int LN ...@@ -26,7 +26,7 @@ double calc_misfit(float **sectiondata, float **section, int ntr, int ns, int LN
/* declaration of variables */ /* declaration of variables */
extern float DT; extern float DT;
extern int MYID; extern int MYID, USE_WORKFLOW, WORKFLOW_STAGE;
extern int TRKILL, NORMALIZE, FC, TIMEWIN; extern int TRKILL, NORMALIZE, FC, TIMEWIN;
extern char TRKILL_FILE[STRING_SIZE]; extern char TRKILL_FILE[STRING_SIZE];
extern int VELOCITY; extern int VELOCITY;
...@@ -54,11 +54,25 @@ FILE *ftracekill; ...@@ -54,11 +54,25 @@ FILE *ftracekill;
if(TRKILL){ if(TRKILL){
kill_tmp = imatrix(1,ntr_glob,1,nsrc_glob); kill_tmp = imatrix(1,ntr_glob,1,nsrc_glob);
kill_vector = ivector(1,ntr); kill_vector = ivector(1,ntr);
ftracekill=fopen(TRKILL_FILE,"r"); if(USE_WORKFLOW){
sprintf(trace_kill_file,"%s_%i.dat",TRKILL_FILE,WORKFLOW_STAGE);
if (ftracekill==NULL) err(" Trace kill file could not be opened!"); ftracekill=fopen(trace_kill_file,"r");
if (ftracekill==NULL){
sprintf(trace_kill_file,"%s.dat",TRKILL_FILE);
ftracekill=fopen(trace_kill_file,"r");
if (ftracekill==NULL){
err(" Trace kill file could not be opened!");
}
}
}else{
sprintf(trace_kill_file,"%s.dat",TRKILL_FILE);
ftracekill=fopen(trace_kill_file,"r");
if (ftracekill==NULL){
err(" Trace kill file could not be opened!");
}
}
for(i=1;i<=ntr_glob;i++){ for(i=1;i<=ntr_glob;i++){
for(j=1;j<=nsrc_glob;j++){ for(j=1;j<=nsrc_glob;j++){
fscanf(ftracekill,"%d",&kill_tmp[i][j]); fscanf(ftracekill,"%d",&kill_tmp[i][j]);
......
...@@ -29,7 +29,7 @@ extern float DT, WATERLEVEL_LNORM8; ...@@ -29,7 +29,7 @@ extern float DT, WATERLEVEL_LNORM8;
extern int REC1, REC2, MYID, ACOUSTIC; extern int REC1, REC2, MYID, ACOUSTIC;
extern int TRKILL, NORMALIZE, FC, TIMEWIN; extern int TRKILL, NORMALIZE, FC, TIMEWIN;
extern char TRKILL_FILE[STRING_SIZE]; extern char TRKILL_FILE[STRING_SIZE];
extern int VELOCITY; extern int VELOCITY, USE_WORKFLOW, WORKFLOW_STAGE;
float RMS, signL1, intseis; float RMS, signL1, intseis;
int Lcount,i,j,invtime,k,h, umax=0; int Lcount,i,j,invtime,k,h, umax=0;
float l2; float l2;
...@@ -67,11 +67,25 @@ if(TRKILL==1){ ...@@ -67,11 +67,25 @@ if(TRKILL==1){
kill_tmp = imatrix(1,ntr_glob,1,nsrc_glob); kill_tmp = imatrix(1,ntr_glob,1,nsrc_glob);
kill_vector = ivector(1,ntr); kill_vector = ivector(1,ntr);
ftracekill=fopen(TRKILL_FILE,"r"); if(USE_WORKFLOW){
sprintf(trace_kill_file,"%s_%i.dat",TRKILL_FILE,WORKFLOW_STAGE);
if (ftracekill==NULL) err(" Trace kill file could not be opened!"); ftracekill=fopen(trace_kill_file,"r");
if (ftracekill==NULL){
sprintf(trace_kill_file,"%s.dat",TRKILL_FILE);
ftracekill=fopen(trace_kill_file,"r");
if (ftracekill==NULL){
err(" Trace kill file could not be opened!");
}
}
}else{
sprintf(trace_kill_file,"%s.dat",TRKILL_FILE);
ftracekill=fopen(trace_kill_file,"r");
if (ftracekill==NULL){
err(" Trace kill file could not be opened!");
}
}
for(i=1;i<=ntr_glob;i++){ for(i=1;i<=ntr_glob;i++){
for(j=1;j<=nsrc_glob;j++){ for(j=1;j<=nsrc_glob;j++){
fscanf(ftracekill,"%d",&kill_tmp[i][j]); fscanf(ftracekill,"%d",&kill_tmp[i][j]);
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
void count_killed_traces(int ntr, int swstestshot, int ntr_glob, int **recpos_loc, int nsrc_glob, int ishot, int* ptr_killed_traces, int* ptr_killed_traces_testshots){ void count_killed_traces(int ntr, int swstestshot, int ntr_glob, int **recpos_loc, int nsrc_glob, int ishot, int* ptr_killed_traces, int* ptr_killed_traces_testshots){
/* declaration of variables */ /* declaration of variables */
extern int USE_WORKFLOW, WORKFLOW_STAGE;
extern char TRKILL_FILE[STRING_SIZE]; extern char TRKILL_FILE[STRING_SIZE];
int i,j,h; int i,j,h;
...@@ -38,9 +39,23 @@ FILE *ftracekill; ...@@ -38,9 +39,23 @@ FILE *ftracekill;
kill_tmp = imatrix(1,ntr_glob,1,nsrc_glob); kill_tmp = imatrix(1,ntr_glob,1,nsrc_glob);
kill_vector = ivector(1,ntr); kill_vector = ivector(1,ntr);
ftracekill=fopen(TRKILL_FILE,"r"); if(USE_WORKFLOW){
sprintf(trace_kill_file,"%s_%i.dat",TRKILL_FILE,WORKFLOW_STAGE);
if (ftracekill==NULL) err(" Trace kill file could not be opened!"); ftracekill=fopen(trace_kill_file,"r");
if (ftracekill==NULL){
sprintf(trace_kill_file,"%s.dat",TRKILL_FILE);
ftracekill=fopen(trace_kill_file,"r");
if (ftracekill==NULL){
err(" Trace kill file could not be opened!");
}
}
}else{
sprintf(trace_kill_file,"%s.dat",TRKILL_FILE);
ftracekill=fopen(trace_kill_file,"r");
if (ftracekill==NULL){
err(" Trace kill file could not be opened!");
}
}
for(i=1;i<=ntr_glob;i++){ for(i=1;i<=ntr_glob;i++){
for(j=1;j<=nsrc_glob;j++){ for(j=1;j<=nsrc_glob;j++){
......
...@@ -987,52 +987,52 @@ void read_par_json(FILE *fp, char *fileinp){ ...@@ -987,52 +987,52 @@ void read_par_json(FILE *fp, char *fileinp){
} }
/* trace kill file */ // /* trace kill file */
if (TRKILL == 1) // if (TRKILL == 1)
{ // {
if (access(TRKILL_FILE,0) != 0) // if (access(TRKILL_FILE,0) != 0)
{ // {
fprintf(fp, "\n==================================================================\n"); // fprintf(fp, "\n==================================================================\n");
fprintf(fp, " ERROR parsing input file <%s>:\n", fileinp); // fprintf(fp, " ERROR parsing input file <%s>:\n", fileinp);
fprintf(fp, " The trace kill file does not exist!\n"); // fprintf(fp, " The trace kill file does not exist!\n");
fprintf(fp, " File name: <%s>", TRKILL_FILE); // fprintf(fp, " File name: <%s>", TRKILL_FILE);
fprintf(fp, "\n==================================================================\n"); // fprintf(fp, "\n==================================================================\n");
fserr = 1; // fserr = 1;
} // }
else if (access(TRKILL_FILE,4) != 0) // else if (access(TRKILL_FILE,4) != 0)
{ // {
fprintf(fp, "\n==================================================================\n"); // fprintf(fp, "\n==================================================================\n");
fprintf(fp, " ERROR parsing input file <%s>:\n", fileinp); // fprintf(fp, " ERROR parsing input file <%s>:\n", fileinp);
fprintf(fp, " The trace kill file does not have read access!\n"); // fprintf(fp, " The trace kill file does not have read access!\n");
fprintf(fp, " File name: <%s>", TRKILL_FILE); // fprintf(fp, " File name: <%s>", TRKILL_FILE);
fprintf(fp, "\n==================================================================\n"); // fprintf(fp, "\n==================================================================\n");
fserr = 1; // fserr = 1;
} // }
} // }
//
//
/* trace kill STF file */ // /* trace kill STF file */
if (TRKILL_STF == 1) // if (TRKILL_STF == 1)
{ // {
if (access(TRKILL_FILE_STF,0) != 0) // if (access(TRKILL_FILE_STF,0) != 0)
{ // {
fprintf(fp, "\n==================================================================\n"); // fprintf(fp, "\n==================================================================\n");
fprintf(fp, " ERROR parsing input file <%s>:\n", fileinp); // fprintf(fp, " ERROR parsing input file <%s>:\n", fileinp);
fprintf(fp, " The trace kill file does not exist!\n"); // fprintf(fp, " The trace kill file does not exist!\n");
fprintf(fp, " File name: <%s>", TRKILL_FILE_STF); // fprintf(fp, " File name: <%s>", TRKILL_FILE_STF);
fprintf(fp, "\n==================================================================\n"); // fprintf(fp, "\n==================================================================\n");
fserr = 1; // fserr = 1;
} // }
else if (access(TRKILL_FILE_STF,4) != 0) // else if (access(TRKILL_FILE_STF,4) != 0)
{ // {
fprintf(fp, "\n==================================================================\n"); // fprintf(fp, "\n==================================================================\n");
fprintf(fp, " ERROR parsing input file <%s>:\n", fileinp); // fprintf(fp, " ERROR parsing input file <%s>:\n", fileinp);
fprintf(fp, " The trace kill file does not have read access!\n"); // fprintf(fp, " The trace kill file does not have read access!\n");
fprintf(fp, " File name: <%s>", TRKILL_FILE_STF); // fprintf(fp, " File name: <%s>", TRKILL_FILE_STF);
fprintf(fp, "\n==================================================================\n"); // fprintf(fp, "\n==================================================================\n");
fserr = 1; // fserr = 1;
} // }
} // }
/* frequency file */ /* frequency file */
......
...@@ -32,7 +32,7 @@ int ntr_glob,int ntr, float ** srcpos, int ishot, int ns, int iter, int nshots, ...@@ -32,7 +32,7 @@ int ntr_glob,int ntr, float ** srcpos, int ishot, int ns, int iter, int nshots,
extern float DT, DH; extern float DT, DH;
extern int SEIS_FORMAT, MYID, NT, QUELLART, TIME_FILT, TIMEWIN, TAPER_STF; extern int SEIS_FORMAT, MYID, NT, QUELLART, TIME_FILT, TIMEWIN, TAPER_STF;
extern char SEIS_FILE_VY[STRING_SIZE], SEIS_FILE_P[STRING_SIZE], PARA[STRING_SIZE], DATA_DIR[STRING_SIZE]; extern char SEIS_FILE_VY[STRING_SIZE], SEIS_FILE_P[STRING_SIZE], PARA[STRING_SIZE], DATA_DIR[STRING_SIZE];
extern int TRKILL_STF, NORMALIZE; extern int TRKILL_STF, NORMALIZE, USE_WORKFLOW, WORKFLOW_STAGE;
extern char TRKILL_FILE_STF[STRING_SIZE]; extern char TRKILL_FILE_STF[STRING_SIZE];
extern char SIGNAL_FILE[STRING_SIZE]; extern char SIGNAL_FILE[STRING_SIZE];
...@@ -64,9 +64,23 @@ int ntr_glob,int ntr, float ** srcpos, int ishot, int ns, int iter, int nshots, ...@@ -64,9 +64,23 @@ int ntr_glob,int ntr, float ** srcpos, int ishot, int ns, int iter, int nshots,
kill_tmp = imatrix(1,ntr_glob,1,nshots); kill_tmp = imatrix(1,ntr_glob,1,nshots);
kill_vector = ivector(1,ntr_glob); kill_vector = ivector(1,ntr_glob);
ftracekill=fopen(TRKILL_FILE_STF,"r"); if(USE_WORKFLOW){
sprintf(trace_kill_file,"%s_%i.dat",TRKILL_FILE_STF,WORKFLOW_STAGE);
if (ftracekill==NULL) err(" Trace kill file could not be opened!"); ftracekill=fopen(trace_kill_file,"r");
if (ftracekill==NULL){
sprintf(trace_kill_file,"%s.dat",TRKILL_FILE_STF);
ftracekill=fopen(trace_kill_file,"r");
if (ftracekill==NULL){
err(" Trace kill file could not be opened!");
}
}
}else{
sprintf(trace_kill_file,"%s.dat",TRKILL_FILE_STF);
ftracekill=fopen(trace_kill_file,"r");
if (ftracekill==NULL){
err(" Trace kill file could not be opened!");
}
}
for(i=1;i<=ntr_glob;i++){ for(i=1;i<=ntr_glob;i++){
for(j=1;j<=nshots;j++){ for(j=1;j<=nshots;j++){
......
...@@ -28,7 +28,7 @@ void time_window(float **sectiondata, int iter, int ntr_glob, int **recpos_loc, ...@@ -28,7 +28,7 @@ void time_window(float **sectiondata, int iter, int ntr_glob, int **recpos_loc,
/* declaration of variables */ /* declaration of variables */
extern float DT; extern float DT;
extern float GAMMA, TWLENGTH_PLUS, TWLENGTH_MINUS; extern float GAMMA, TWLENGTH_PLUS, TWLENGTH_MINUS;
extern int TW_IND; extern int TW_IND, USE_WORKFLOW, WORKFLOW_STAGE;
extern char PICKS_FILE[STRING_SIZE]; extern char PICKS_FILE[STRING_SIZE];
char pickfile_char[STRING_SIZE]; char pickfile_char[STRING_SIZE];
float time, dump, dump1, dump2, dump3, taper, taper1; float time, dump, dump1, dump2, dump3, taper, taper1;
...@@ -47,14 +47,25 @@ void time_window(float **sectiondata, int iter, int ntr_glob, int **recpos_loc, ...@@ -47,14 +47,25 @@ void time_window(float **sectiondata, int iter, int ntr_glob, int **recpos_loc,
pick_tmp = vector(1,ntr_glob); pick_tmp = vector(1,ntr_glob);
} }
sprintf(pickfile_char,"%s_%i.dat",PICKS_FILE,ishot); /* read picked first arrival times */
if(USE_WORKFLOW){
fptime=fopen(pickfile_char,"r"); sprintf(pickfile_char,"%s_%i_%i.dat",PICKS_FILE,ishot,WORKFLOW_STAGE);
if (fptime == NULL) { fptime=fopen(pickfile_char,"r");
err(" picks_?.dat could not be opened !"); if (fptime == NULL) {
sprintf(pickfile_char,"%s_%i.dat",PICKS_FILE,ishot);
fptime=fopen(pickfile_char,"r");
if (fptime == NULL) {
err(" picks_?.dat could not be opened !");
}
}
}else{
sprintf(pickfile_char,"%s_%i.dat",PICKS_FILE,ishot);
fptime=fopen(pickfile_char,"r");
if (fptime == NULL) {
err(" picks_?.dat could not be opened !");
}
} }
if(TW_IND){ if(TW_IND){
for(i=1;i<=ntr_glob;i++){ for(i=1;i<=ntr_glob;i++){
fscanf(fptime,"%f%f%f",&dump,&dump2,&dump3); fscanf(fptime,"%f%f%f",&dump,&dump2,&dump3);
......
...@@ -28,7 +28,7 @@ void time_window_glob(float **sectiondata, int iter, int ntr_glob, int ns, int i ...@@ -28,7 +28,7 @@ void time_window_glob(float **sectiondata, int iter, int ntr_glob, int ns, int i
/* declaration of variables */ /* declaration of variables */
extern float DT; extern float DT;
extern float GAMMA, TWLENGTH_PLUS, TWLENGTH_MINUS; extern float GAMMA, TWLENGTH_PLUS, TWLENGTH_MINUS;
extern int TW_IND; extern int TW_IND, USE_WORKFLOW, WORKFLOW_STAGE;
extern char PICKS_FILE[STRING_SIZE]; extern char PICKS_FILE[STRING_SIZE];
char pickfile_char[STRING_SIZE]; char pickfile_char[STRING_SIZE];
float time, dump, dump1, dump2, dump3, taper, taper1;