In the past, I just found that there is a big difference between the magnitude values inverted by MTUQ and HMC, but for other parameters, they matched well between these two catalogs. Therefore, I just go back to check my data and code to find the reason causes the large difference. Here are my assumptions and findings:
If the MTUQ result is wrong, it can be wrong in the following steps:
- The process of extracting Green's function from the SGT database is not correct. But I checked synthetic generated by mtgf and SGT multiplited by MT, they match well. PASS
There is some problem for the MTUQ code after my modification for iterative inversion. I check it based on synthetic test and found it is correct. And also, I downloaded the newest MTUQ version and do the inversion, it produces the same results as mine auto-MTUQ code. PASS
so the problem must be in the HMC code.- If the HMC result is wrong, it can be caused by:
- Whether the misfit is normalized or not normalized. I run two inversion with same data and parameters but different misfit definition, and find the result are similar. PASS
- The weight of segements is different from MTUQ? Obsolutely not. PASS
- The tradeoff between source type and magnitude? I used the MTUQ code to visualize the tradeoff and found that the maginitude value is almost unchanged and still high inside the max likehood area in the lune. PASS
Until now, for me it can be a little bit hard to find the problem. The I remembered that when I was doing the synthetic test with HMC code, the magnitude is still 0.02 slower thant the true value although there was no noise added in my synthetic data. At that time, I didn't pay much attention on the tiny difference. However, now I realized THAT IS ABSOLUTELY WRONG! Because it is synthetic test, the results should exactly the same as the true solution.
Then I was thinking to do two test. One test is to add different levels of white noise to make my data with SNR=6, SNR=12, and SNR20. I found the inverted magnitude for all these three tests are around 4.24, and there are 0.06 difference campared to the true magnitude, which is 4.3.
The second test is to change the scaling factor which is used for the calculation of gradient. I used to set is as the seismic moment of slu magnitude. But when I change it to be 3, much smalled than the slu magnitude, I found the sampled magnitude is much higher, reaching 4.4. And if I changed it to be 5, the sampled proposed are almost rejected.
Thus, I found the issue.
Next, How I can figure out this problem?