From 2c48834b1eaa6a5a9c3474e0fe2256e7dc9c1d7d Mon Sep 17 00:00:00 2001
From: JanThorbecke <janth@xs4all.nl>
Date: Thu, 19 Nov 2020 09:57:38 +0100
Subject: [PATCH] plane-wave ringing effect in Gmin reduced

---
 marchenko/applyMute_tshift.c | 35 +++++++++++------------------------
 marchenko/marchenko.c        |  6 +++++-
 2 files changed, 16 insertions(+), 25 deletions(-)

diff --git a/marchenko/applyMute_tshift.c b/marchenko/applyMute_tshift.c
index a2f956e..ac69f90 100644
--- a/marchenko/applyMute_tshift.c
+++ b/marchenko/applyMute_tshift.c
@@ -70,10 +70,10 @@ void applyMute_tshift( float *data, int *mute, int smooth, int above, int Nfoc,
                 for (j = MAX(0,tmute-shift),l=0; j < MAX(0,tmute-shift+smooth); j++,l++) {
                     Nig[j] *= costaper[l];
                 }
-                for (j = MAX(0,tmute-shift+smooth+1); j < MIN(nt,nt+1-tmute+2*ts+shift-smooth); j++) {
+                for (j = MAX(0,tmute-shift+smooth); j < MIN(nt,nt-tmute+2*ts+shift-smooth); j++) {
                     Nig[j] = 0.0;
                 }
-                for (j = MIN(nt-1,nt-tmute+2*ts+shift-smooth),l=0; j < MIN(nt,nt-tmute+shift); j++,l++) {
+                for (j = MIN(nt,nt-tmute+2*ts+shift-smooth),l=0; j < MIN(nt,nt-tmute+shift); j++,l++) {
                     Nig[j] *= costaper[smooth-l-1];
                 }
             }
@@ -93,18 +93,18 @@ void applyMute_tshift( float *data, int *mute, int smooth, int above, int Nfoc,
                 imute = ixpos[i];
                 tmute = mute[isyn*nxs+imute];
 				ts = tsynW[isyn*nxs+imute];
+                for (j = 0; j < MAX(0,-2*ts+tmute-shift-smooth); j++) {
+                    Nig[j] = 0.0;
+                }
                 for (j = MAX(0,-2*ts+tmute-shift-smooth),l=0; j < MAX(0,-2*ts+tmute-shift); j++,l++) {
                     Nig[j] *= costaper[smooth-l-1];
                 }
-                for (j = 0; j < MAX(0,-2*ts+tmute-shift-smooth-1); j++) {
-                    Nig[j] = 0.0;
+                for (j = MIN(nt,nt-tmute+shift),l=0; j < MIN(nt,nt-tmute+shift+smooth); j++,l++) {
+                    Nig[j] *= costaper[l];
                 }
-                for (j = nt+1-tmute+shift+smooth; j < nt; j++) {
+                for (j = MIN(nt,nt-tmute+shift+smooth); j < nt; j++) {
                     Nig[j] = 0.0;
                 }
-                for (j = nt-tmute+shift,l=0; j < nt-tmute+shift+smooth; j++,l++) {
-                    Nig[j] *= costaper[l];
-                }
             }
 /* To Do above==2 is not yet adapated for plane-waves */
             else if (above==2){//Separates the direct part of the wavefield from the coda
@@ -147,8 +147,8 @@ void applyMute_tshift( float *data, int *mute, int smooth, int above, int Nfoc,
 
 void timeShift(float *data, int nsam, int nrec, float dt, float shift, float fmin, float fmax)
 {
-	int 	optn, iom, iomin, iomax, nfreq, ix, it;
-	float	omin, omax, deltom, om, tom, df, *trace, scl;
+	int 	optn, iom, nfreq, ix, it;
+	float	deltom, om, tom, df, *trace, scl;
 	complex *ctrace, ctmp;
 
 	optn = optncr(nsam);
@@ -162,10 +162,6 @@ void timeShift(float *data, int nsam, int nrec, float dt, float shift, float fmi
 	if (trace == NULL) verr("memory allocation error for rdata");
 
 	deltom = 2.*M_PI*df;
-	omin   = 2.*M_PI*fmin;
-	omax   = 2.*M_PI*fmax;
-	iomin  = (int)MIN((omin/deltom), (nfreq));
-	iomax  = MIN((int)(omax/deltom), (nfreq));
     scl = 1.0/(float)optn;
 
 	for (ix = 0; ix < nrec; ix++) {
@@ -173,16 +169,7 @@ void timeShift(float *data, int nsam, int nrec, float dt, float shift, float fmi
         for (it=nsam;it<optn;it++) trace[it]=0.0;
 	    /* Forward time-frequency FFT */
 	    rc1fft(&trace[0], &ctrace[0], optn, -1);
-
-		for (iom = 0; iom < iomin; iom++) {
-			ctrace[iom].r = 0.0;
-			ctrace[iom].i = 0.0;
-		}
-		for (iom = iomax; iom < nfreq; iom++) {
-			ctrace[iom].r = 0.0;
-			ctrace[iom].i = 0.0;
-		}
-		for (iom = iomin ; iom < iomax ; iom++) {
+		for (iom = 0 ; iom < nfreq ; iom++) {
 			om = deltom*iom;
 			tom = om*shift;
 			ctmp = ctrace[iom];
diff --git a/marchenko/marchenko.c b/marchenko/marchenko.c
index 0d0f1ae..6189de2 100644
--- a/marchenko/marchenko.c
+++ b/marchenko/marchenko.c
@@ -581,9 +581,13 @@ int main (int argc, char **argv)
         }
         /* Apply mute with window for Gmin */
 		if ( plane_wave==1 ) {
-            applyMute_tshift(Gmin, muteW, smooth, 4, Nfoc, nxs, nts, ixpos, npos, shift, 0, tsynW);
             /* for plane wave with angle tshift downward */
+			if (verbose>1) vmess("Gmin planewave tshift=%f\n", tshift);
             timeShift(Gmin, nts, npos, dt, tshift, fmin, fmax);
+		    itmin = NINT(0.5*tshift/dt);
+            for (i=0; i<nxs; i++) tsynW[i] -= itmin;
+            applyMute_tshift(Gmin, muteW, smooth, 4, Nfoc, nxs, nts, ixpos, npos, shift, 0, tsynW);
+            for (i=0; i<nxs; i++) tsynW[i] += itmin;
 		}
 		else {
             applyMute(Gmin, muteW, smooth, 4, Nfoc, nxs, nts, ixpos, npos, shift, tsynW);
-- 
GitLab