The FastMCProc provides a quick hit-level detector simulation with well-understood resolution functions. It extracts the QQ information from an .rp file, and uses the HelixIntersection package to propagate each stable charged particle through the detector, stopping at intersections with material boundaries, where energy loss and multiple scattering are applied. If the intersected surface is a sense layer (DR wire, DR cathodes, or SVX), a hit is generated with Gaussian position smearing. All the generated hits are then inserted into the Frame, along with the MC tracks to which they are attached. Thus, using FastMCProc obviates the loading of cg3 Monte Carlo, as well as Producers that calibrate the raw data such as RawDataProd, ClusterSvxFort, and CalibratedDataProd.


Getting Started

To use FastMCProc, load the following modules and sources in your Suez session:

           file in $env(C3_LIB)/data/material.asc basegeometry
           emptysource def Test svalignment dralignment alignedgeometry physics
           emptysource one EndRun 75001 999999 endrun
           prod sel MCInfoDelivery
           source_format sel QQDriverSourceFormat
           file in <sourcefile>.rp
           prod sel IRGeomProd
           prod sel SiGeom
           prod sel ASiStorePro
           prod sel CDOffCal
           prod sel DRGeom
           prod sel ADRGeomProducer
           prod sel MagField
           proc sel FastMCProc

MCInfoDelivery supplies the particle properties (decay.dec) from the physics stream. QQDriverSourceFormat fills an MCDecayTree object for each event with QQ information read from an .rp file. The other modules provide passive and active geometry descriptions.

For more information on the appropriate modules to load see the I wanna page.

The following sections present an overview of the Tcl parameters used to modify the behavior of FastMCProc. For more detailed descriptions of each parameter, type the following in your Suez session (after loading FastMCProc):

           Suez> proc inter FastMCProc
           FastMCProc> help

           ...this prints out the same info on this web page as well as
              as full list of the available parameters...

           FastMCProc> <parameter> help

           ...this prints out info about the given parameter...

           FastMCProc> exit


Controlling Helix Transport

By default, energy loss with straggling and multiple scattering are applied after each step in the transport (calculated with a single Runge-Kutta integration). These can be disabled individually with the parameters ApplyDedx, ApplyStraggling, and ApplyMultScat. The Gaussian energy loss straggling width is given by the parameter StragglingCoeff (default 0.001 GeV^0.5): width = StragglingCoeff * sqrt(|dE|).

For example, setting these parameters to false results in perfect helix transport:

           param FastMCProc ApplyDedx false
           param FastMCProc ApplyStraggling false
           param FastMCProc ApplyMultScat false


Controlling Hit Generation

Hit generation in each subdetector can be disabled independently with the parameters GenerateDRHits, GenerateCathodeHits, and GenerateSiHits. By default, these are all true.

The widths of the Gaussian resolution functions can be adjusted with the parameters DriftDistResInMeters, CathodeZResInMeters, SiRphiResInMeters, and SiZResInMeters. A naive theta-dependence for the resolutions is implemented for the SVX only.

To simulate collisions in bunches other than bunch 1, one can shift the event's t0 using the parameter DrTimeOffsetInNs. For example, one would set this to 14ns for bunch-2 collisions.

Imperfect hit efficiency can be applied with the parameters DRHitEfficiency, CathodeHitEfficiency, and SiHitEfficiency. For the SVX, inefficiencies in the r-phi and z sides of each wafer are uncorrelated. By default, all hit efficiencies are 100%.

By setting SiGangingAmbiguity to true (default false), Si hits will be generated for each wafer in the intersected hybrid. When this happens, the TrackFinders will find at most two tracks (because of the ganging in layer 1) with identical dip angle. So, when InsertSeedTracks is set to true (see below) and the Si hits create an ambiguity in the track's z-position, two seed tracks will be inserted.


Bypassing the TrackFinders

By default, only the generated CalibratedHits and the FMCTrueTracks (QQ track parameters at the IP and at the last hit) are inserted into the Frame. However, one can also apply perfect pattern recognition, thus mimicking the behavior of the TrackFinders, which insert TRSeedTracks and their hit Lattices into the Frame. There is one Lattice for each type of hit: DR, DR cathode, SVR, SVZ.

           param FastMCProc InsertSeedTracks true
           param FastMCProc InsertSeedDRHitLattice true
           param FastMCProc InsertSeedCathodeHitLattice true
           param FastMCProc InsertSeedSVRphiHitLattice true
           param FastMCProc InsertSeedSVZHitLattice true

Setting these parameters copies the QQ tracks into TRSeedTracks and connects all the generated hits via Lattice. If the Si Lattices are not inserted, one can load AttachSVHitsProd to extrapolate tracks with DR hits into the SVX to pick up more hits:

           param FastMCProc InsertSeedTracks true
           param FastMCProc InsertSeedDRHitLattice true
           param FastMCProc InsertSeedCathodeHitLattice true
           prod sel AttachSVHitsProd



Copious and unwieldy diagnostic printout can be obtained by setting PrintDiagnostics to true.

The maximum number of hits allowed on a track is determined by the parameter MaxHitsOnTrack.

If the fractional change in momentum in a single HIHelixIntersector step is greater than MaxFractionalDeltaP, then the transport will be split into an appropriate number of smaller steps.

The default magnetic field is supplied by the MagField Producer. To override MagField with a uniform field of any specified size, set BfieldMagnitudeKGauss to a positive value.

Because energy loss is applied in discrete intervals, forward and backward helix transports result in different energy loss, unless the step size is prohibitively small. Therefore, inward Kalman fits of low-momentum tracks will be biased unless the hits are generated while swimming inward. Setting GenerateHitsInward to true will cause each track to be transported first outward and then inward again, with hits generated only on the inward pass.