## 3 Method
### Multiple Gaussian Model
```
0: Eddy TA profiles data as input \([p_{1},p_{2},...p_{m}]\in P_{m}\)\(p_{i}=[t_{1}^{\prime},t_{2}^{\prime},...t_{n}^{\prime}]\in X_{n}\), n=199
1:for\(p_{i}\in P_{m}\)do
2: Get \(Filtered\_p_{i}\) via Butterworth low pass filter with \(N\)=3, \(W_{n}\)=0.2
3: Get \(u_{1}\),\(u_{2}\),\(u_{3}\) via calculation the relative extrema points of \(Filtered\_p_{i}\)
4: Build MG model via TripleGauss //model function is defined as (2)
5: Get \(a_{i}\in(a_{1i},a_{2i},a_{3i})\),\(\sigma_{i}\in(\sigma_{1i},\sigma_{2i},\sigma_{3i})\) for \(p_{i}\)
6:endfor
7:\(p_{i}\), \((u_{1i},u_{2i},u_{3i})\)
8: Get \(pMG\_123i\) (the fitted TA profile via MG model), \((a_{1i},a_{2i},a_{3i}),(\sigma_{1i},\sigma_{2i},\sigma_{3i})\)
9: Get \(R^{2}\)=\(123i\) / \(R^{2}\) between \(pMG\_123i\) and \(p_{i}\)
10: Get \((a_{1i},a_{2i}),(\sigma_{1i},\sigma_{2i}),R^{2}\)=\(12i\) via DoubleGauss(\(p_{i}\),\((u_{1i},u_{2i})\))
11: Get \((a_{1i},a_{3i}),(\sigma_{1i},\sigma_{3i}),R^{2}\)=\(13i\) via DoubleGauss(\(p_{i}\),\((u_{1i},u_{3i})\))
12: Get \((a_{2i},a_{3i}),(\sigma_{2i},\sigma_{3i}),R^{2}\)=\(23i\) via DoubleGauss(\(p_{i}\),\((u_{2i},u_{3i})\))
13: Compare \(R^{2}\)=\(123i\),\(R^{2}\)=\(12i\),\(R^{2}\)=\(13i\),\(R^{2}\)=\(23i\), return with optimum combination solution. 14:\(pMG\_12i\),\((a_{1i},a_{2i}),(\sigma_{1i},\sigma_{2i})\)
15: Get \(R^{2}\)=\(12i\) / \(R^{2}\) between \(pMG\_12i\) and \(p_{i}\)
16: Get \((a_{1i}),(\sigma_{1i}),R^{2}\)=\(1i\) via SingleGauss(\(p_{i}\),\((u_{1i})\))
17: Get \((a_{2i}),(\sigma_{2i}),R^{2}\)=\(2i\) via SingleGauss(\(p_{i}\),\((u_{2i})\))
18: Compare \(R^{2}\)=\(12i\),\(R^{2}\)=\(1i\),\(R^{2}\)=\(2i\), return with optimum combination solution. 19:\(p_{1}\) and \((u_{1i})\)
20: Get \(pMG\_1i\),\((a_{1i}),(\sigma_{1i})\)
21: Get \(R^{2}\)=\(1i\) // \(R^{2}\) between \(pMG\_1i\) and \(p_{i}\)
22: Return \(a_{1i},\sigma_{1i},R^{2}\)1
```  
**Algorithm 1** Multiple Gaussian Model Algorithm  
(1) Apply a low-pass filter to the TA profiles. A Butterworth low-pass filter with specific parameters (filter order \(N=3\), cut-off frequency \(W_{n}\) = 0.2) is used to smooth out burrs and jitters in the short distance range while retaining fluctuations in the range of more than 50 m. This step aims to improve the accuracy of automatically extracting extreme points and ensure the correctness. (2) An algorithm for automatically extracting extreme values of the curve was adopted. This involves extracting both the positive and negative extreme values of the filtered curve, sorting them according to their amplitude, and then selecting the three points with the largest amplitude as expected values of the Gaussian function: \(u_{1}\), \(u_{2}\), and \(u_{3}\). These points represent the depths at which the extreme points are located in the profile. (3) The Python function'scipy.optimize.curve_fit' is used to fit a given TA profile with the model defined in (2) and return the remaining model parameters, including \(a_{1}\), \(a_{2}\), \(a_{3}\), \(\sigma_{1}\), \(\sigma_{2}\), and \(\sigma_{3}\). (4) In addition, when fitting with triple Gaussian functions, the fit is also compared to the combination of two Gaussian functions formed using any two of the expected depth values, including \((u_{1},u_{2})\), \((u_{1},u_{3})\), \((u_{2},u_{3})\). The combination with the highest coefficient of determination (\(R^{2}\)) result is selected. Similarly, when fitting with two Gaussian functions, the algorithm will attempt to fit them separately and return the best solution. Note that the procedure automatically extracts extreme points during step 1. If fewer than 3 extreme points are obtained, the fitting will switch to a Gaussian function with a lesser number. In this study, the \(R^{2}\) (see (3)) is adopted to measure the degree of fit between the model fitted values and the observed set of values. It normalises the results during processing to compare different models.