Note: Still a work in progress, information will be added as it becomes available.
The digitization step allows the user to segment a sensor area into smaller "pixels" so that a realistic resolution can be estimated. The base class for this process is defined in eicroot/eic/base/EicDigiHitProducer.h. Detector specific implementations of the digitization are encapsulated in classes that inherit from this base EicDigiHitProducer class. There is currently an implementation for both calorimeter and tracker type detectors. Specific details for the digitization (such as pixel size in the case of the tracker routines, or light yield in the case of the calorimeter routines) can set in the digitization.C script (examples can be found in the various tutorial subdirectories). These are discussed in more detail below.
The class definition for calorimeter digitization is in the header file eicroot/eic/calorimetery/EicCalorimeterDigiHitProducer.h. The calorimeter digitizer keeps track of the photon shower as the particle propagates through the material. Each individual photon from the shower is not written to file, but the sum of the energy deposited from the showering process is given as a "hit" for the particular calorimeter cell. This means that the thousands of hits fed in from the GEANT simulation will result in a handful of digitized detector hits more akin to what one would observe in a physical detector. These hits can later be fed into a clustering algorithm to identify the reconstructed cluster and hence the energy deposited from a particle.
Some of the digitization parameters are described below. The use of these are found in the aforementioned digitization.C script.
DeclareDigiSensitiveVolume("DetectorElementName"): You need to inform the digitizer what elements of the detector are considered sensitive.
ConfigureUpstreamSensorGroup(CalorimeterSensorGroup::Type, float reflectivity) and ConfigureDownStreamSensorGroup(CalorimeterSensorGroup::Type, float reflectiviy): The number of "primary" photons is calculated based on expected (say, experimentally measured) light output per GeV of deposited energy. It is assumed that light can be collected on upstream and downstream ends of "long objects" (like typical calorimeter matrix crystals), so that the attenuation length can be accounted. The "Type" variable above can be set to Dead, Reflection, or Sensor and hopefully the names are self-explanatory to the function. Either end can be a 100% efficient sensor (Type = Sensor) or a mirror (Type = Reflection) with reflectivity above in the range [0.0 .. 1.0].
SetSensorType(CalorimeterDigiParData::Type): This option sets the sensor type if one inputs CalorimeterSensorGroup::Sensor in the ConfigureUpStreamSensorGroup() or ConfigureDownStreamSensorGroup() function calls. Type can be exchanged for APD or SiPM. Specific details about each of these options will be added to the wiki later.
SetAttenuationLength(float num): This sets the attenuation length in cm. 0 or a large value basically means "no attenuation" mode.
RequestEnergyDepositAccounting(): Energy deposits in all GEANT-sensitive volumes (say "caloCrystal" and "caloCellAlveole", as defined in calorimeter.C file) will be calculated separately for inspection purposes.
SetCleanUpThreshold(float num): num is in units of GeV. This threshold is used to remove very low energy cells.
SetPrimaryLightYield(float num): The average number of photons which are supposed to be produced per GeV of incoming particle. In the case of a crystal calorimeter with large attenuation length (SetAttenuationLenght()) and 100% registration efficiency, this will be roughly the registered photon count. It should be tuned to match typically measured one.
SetTimingGate(float num1, float num2), SetDecayConstant(float num), SetLightPropagationVelocity(float num): Set some realistic timing numbers. Times are in units of ns, light velocity in units of cm/ns.
The class definition for tracker digitization is in the header file eicroot/eic/tracking/EicTrackingDigiHitProducer.h.