Description of mMvdSetUcal

The calling sequence (with links to the source code) is:
mMvdSetUcal verghit dMvdPar dMvbPar dMvcPar dMvdTrigPar dMvdGeo dMvbGeo dMvcGeo dMvbDbase dMvcDbase dMvbCal dMvcCal dMvbRaw dMvcRaw dMvdFic

This module takes geant hits (input verghit) combined with various calibration and geometry parameters (dMvdPar, dMvbPar, dMvcPar, dMvdTrigPar, dMvdGeo, dMvbGeo, dMvcGeo) and produces a list of digitized hits in the output raw data tables for the barrel (dMvbRaw) and pads (dMvcRaw).

The first step of this process is to fill local internal arrays containing the energy loss (in keV) in each strip and pad of the MVD. In the barrel, most particles hit more than one strip, the energy deposition in a geant hit is divided among the different strips by assuming the fraction is proportional to the pathlength through each strip. That is, fluctuations along the path through the Si are ignored. For the pads, the position of the particle half-way through the Si pad is taken (they are 300 microns thick) and all energy loss is assigned to the pad corresponding to that position. The charge is never shared between adjacent pads.

There is one piece of "illegal code" which makes use of geant information. The table dMvdFic contains the true number of particles which hit the MVD (one variable each for inner barrel, outer barrel, north and south pads).

After adding up the signals, "noise" is added to the signals -- still working in keV per strip or pad. Noise is assumed to have a gaussian distribution (cernlib routine rg32) with sigma = dMvdPar->skev_noise. The noise (can be a positive or negative number) is then added to the "true" signal. Typical, dMvdPar->skev_noise is 0.1*(signal from a 1 mip particle).

Then the signals+noise, still in keV units, are digitized. They are converted to ADC values assuming the full scale ADC value (in ADC counts) is dMvdPar->full_scale (currently this is 255) which is assumed to correspond to an energy loss of dMvdPar->smax_kev (which is currently set to 8 mips = 8*119 keV).

Next, cross talk is added (for the barrel only) using "database" parameters contained in dMvbDbase[channel].cross_talk. Cross talk is expressed as a fraction from 0 to 1. The observed signal in channel N is assumed to be crosstalk*(true signal in channel N-1) + (1 - 2*crosstalk)*(true signal in channel N) + crosstalk*(true signal in channel N+1). Typically, crosstalk is 0.01.

Some channels (listed in the dead channel database) are assumed to be dead. The dead channel "database" is controoled by an ascii file at the moment. The information is passed to this routine via dMvbDbase[i].flag_dead_channel and dMvcDbase[i].flag_dead_channel.


John Sullivan
comments to: sullivan@lanl.gov
updated 23-Dec-1999