I have a question about the implementation of the array_analysis.array_transff_freqslowness code used to calculate the Array Response Function of an array.
Specifically the code uses get_geometry to return the relative distance vectors of each station from a reference point (the array center) and then works out time shifts from the reference point to each station based on this.
Would it not make more sense to instead calculate the relative distance vectors between each station-station pair as this gives more unique relative distance vectors (n)(n-1)/2 vs just (n), where n is no. of stations? I have tried implementing this by altering the code to accept all the relative interstation distance vectors (rather than just those from the array center to each station). The first figure shows the calculated array response using the unedited code for the array I am using (DANA Array, comprising 72 stations with ~7km interstation spacing and aperture ~100km). The second figure shows the array response with the edited code with reduced side lobes and background noise - i.e. the array appears to do a better job at resolving a vertical ray when you calculate all interstation distance vectors?
Am I missing something here? The equation for the ARF in: Beamforming and Polarization Analysis. (2019). Seismic Ambient Noise, 30–68. doi:10.1017/9781108264808.004 (Martin Gal & Anyam Reading) indicates that you should use the station-station distance vectors (Rm - Rn) as opposed to Rm - Ro (where Ro is reference vector) - see final figure.
Note: I have changed the array response to dB i.e. 10*log(all_transff/all_transff.max()) to better visualise the side lobes (not visible on non-log scale).