The overall design of the simulator consists of several components (rough dependency graph shown below), this does NOT necessarily 100% reflect how everything is implemented, but to give you an intuitive understanding of the relationships between the components and their corresponding purposes:
SimulatorClient - The high-level and easiest way to use the simulator
|__ ConfigurableCorePool - To give CorePool snapshot and roadmap capabilities
This is a convenient way to get you started immediately. We have wrapped the underlying logic of data downloading, data pre-processing, and simulated Uniswap V3 pool together instantiation together, so you don't have to deal with the details.
If you want more flexible ways to run your own simulation scenarios and have more granular control, you can wire things up manually as you like, by directly interacting with the below classes: