The RSet's have not yet been specified ....
*/
SUBSCHEMA MINOSHits : 'Hits & Digits'
AUTHOR 'Robert Hatcher'
VERSION '3.3'
DATE '1998.02.18'
REVIEWER 'no one (yet)'
/*
Some terminology:
Be careful of co-ordinate systems. The global co-ordinate system is definitively given by (0,0,0) being the center of the front wall of the hall (for either the near or far detector as appropriate for the current geometry). Looking along the neutrino direction (modulo the small deviation) is +z; +y is up, which leaves +x to the left while looking downstream. Whole super-modules may be shifted in the x-y plane (see MINOSGeom SUBSCHEMA). Active planes within a super-module may be rotated. In the local co-ordinate system of the standardized cell (assuming that Fill_XXX wasn't modified), the x axis is always the "wire"/"fiber" axis (or where it would be in the case of RPCs); z remains the depth in the detector.
The routine xyz_cell2mars converts from local cell oriented coordinates into global MARS coordinates; it accounts for cell offsets, plane positions and rotations.
Define some new 'types'.
*/ DEFINE ATTRIBUTE END ATTRIBUTE /*
The ESets HitPln and DigitPln aren't strictly necessary (they hold redundant information), but might prove useful.
*/
DEFINE ESET
HitPln =
( IPln = INTE : 'plane # (1..NActive)',
NHitPln = INTE : '# hits in plane'
);
DigitPln =
( IPln = INTE : 'plane # (1..NActive)',
NDigitPln = INTE : '# digitizations in plane'
);
/*
The ESet FLSHit carries the information for FLS (Fiber-in-Liquid-Scintillator) hits.
Formerly, the variables IPln, IExtr, ICell fully specified the struck volume. These are now packed into a single variable in order to save space. The XGlobal, YGlobal, ZGlobal values have been removed but can be reconstructed using the xyz_cell2mars routine. The TOFG value might be necessary to generate TDC information.
If something similar to this is chosen for the LST and RPC hits then the position at the beginning and end of the hit should allow one to make the response dependent on location of energy depositions. Provisions in the specification of the tracking media (LSTGas and RPCGas) will allow the user to set an upper limit on the step size. This isn't critical for the FLS system so a "hit" will probably only be generated for the whole cell volume crossing (independent of the number of times that GUSTEP is called) in order to conserve memory and not yield unwieldy structures. Having the begin/end positions in the cell co-ord system allows one to calculate the impact parameter of the track segment to the cell axis and the distance along the axis where this closest approach occurs.
The value ITrack comes "for free" out of the GFHIT call and may some day be used in conjunction with future representation of the JKINE and JVERT structures to weed out hits from particular particles. Delta rays and other soft particles below a threshold are not entered into the JKINE structure and so retain the track number of their parents.
*/
FLSHit =
( IPackedPEC = INTE : 'packed plane,extrusion,cell #',
/* MSB [pln][extr][cell] LSB */
/* see routine PEC_pack for details */
ITrack = INTE : 'track #',
TOFG = REAL : 'Time-of-flight (seconds)',
XBegin = REAL : 'step begin x pos in cell co-ord (cm)',
YBegin = REAL : 'step begin y pos in cell co-ord (cm)',
ZBegin = REAL : 'step begin z pos in cell co-ord (cm)',
XEnd = REAL : 'step end x pos in cell co-ord (cm)',
YEnd = REAL : 'step end y pos in cell co-ord (cm)',
ZEnd = REAL : 'step end z pos in cell co-ord (cm)',
ELoss = REAL : 'energy loss (GeV)',
Ptot = REAL : 'total momentum upon step begin (GeV)',
IPDG = INTE : 'PDG particle type'
) : 'the basic FLS hit' ;
/*
The ESet FLSDigit holds the results of the digitization process. The IPln, IExtr,ICell uniquely identify the scintillator strip. The TPos is the transverse position in the plane (taking out the rotation). RawX and TDCX (X = A ("above") for one- or two-sided readout, and B ("below") for two-sided readout). Important note: Raw is not necesarily linearly related to the ADC values coming from the front-end; the Raw values correspond to ADC counts corrected for (1) scale into p.e.'s (2) non-linear effects due to dual-slope ADCs or time-over-threshold logarithmic effects. CorrX is the attenuation corrected values. TubePixelX identifies pixels shared by common strips that are optically summed onto the same pixel. Reconstruction code assumes that A side readouts are never summed with B side readouts onto the same pixel.
*/
FLSDigit =
( IPln = INTE : 'plane # (1..NActive)',
IExtr = INTE : 'extrusion #',
ICell = INTE : 'cell # in extrusion',
TPos = REAL : 'transverse position of cell',
RawA = REAL : 'raw # pe on side A (above=1sided readout)',
RawB = REAL : 'raw # pe on side B (below, only if 2sided)',
CorrA = REAL : 'attn corrected # pe on side A',
CorrB = REAL : 'attn corrected # pe on side B',
CorrSum = REAL : 'attn corrected # pe (A+B)',
TDCA = REAL : 'timing on side A',
TDCB = REAL : 'timing on side B',
TubePixelA = INTE : 'unique id for common pixel A side',
TubePixelB = INTE : 'unique id for common pixel B side',
/* -------------------------------------------------------------- */
/* */
/* This section of attributes should NOT be used by event */
/* reconstruction software except as a check on algorithms. */
/* Such checks should be separate routines that can be bypassed */
/* Real data will not have this info available */
/* */
/* SignalPEx is used for storage when applying "noise" and photo- */
/* detector response functions as if no optical summing or noise */
SignalPEA = REAL : '# true signal photo-electrons (A side)',
SignalPEB = REAL : '# true signal photo-electrons (B side)',
/* the following items are Truth(TM) */
SumETrue = REAL : 'true energy deposition in cell',
AveDistTrueA = REAL : 'energy weighted average dist to A side',
AveDistTrueB = REAL : 'energy weighted average dist to B side'
/* */
/* -------------------------------------------------------------- */
) : 'the basic FLS digitization'
ALIAS
/* define "Corr" as synonym for "CorrSum" for back compatibility */
Corr = CorrSum : 'attenuation corrected signal';
END ALIAS
KEY
IndxPEC = (IPln,IExtr,ICell) : 'index for regular ordering';
IndxPlnTPos = (IPln,TPos) : 'index for regular ordering';
END KEY;
/*
The ESet LSTHit holds hits for the LST. The current implementation has fewer elements than the equivalent FLSHit ESet. Some of the FLS information is irrelevant for Iarocci tubes, and the current plan is to output this hits bank and do detector response after the GEANT processing. This record consists of information that GEANT supplies at tracking time (or easily derived from it) without requiring any knowledge of the physics or response characteristics of the detector itself.
*/
LSTHit =
( IPln = INTE : 'plane # (1..NActive)',
IExtr = INTE : 'extrusion #',
ICell = INTE : 'cell # in extrusion',
ITrack = INTE : 'track #',
XBegin = REAL : 'step begin x pos in global co-ord (cm)',
YBegin = REAL : 'step begin y pos in global co-ord (cm)',
ZBegin = REAL : 'step begin z pos in global co-ord (cm)',
XEnd = REAL : 'step end x pos in global co-ord (cm)',
YEnd = REAL : 'step end y pos in global co-ord (cm)',
ZEnd = REAL : 'step end z pos in global co-ord (cm)',
ELoss = REAL : 'energy loss (GeV)',
Ptot = REAL : 'total momentum upon step begin (GeV)',
IPDG = INTE : 'PDG particle type'
) : 'the basic LST hit'
KEY
IndxPEC = (IPln,IExtr,ICell) : 'index for regular ordering';
END KEY;
/*
Some of the LST/RPC proponents envision the LST/RPC simulation to have an additional step at tracking time. Rather than storing the LSTHit information for every step and processing it only on completion of the tracking of all particles, they would reduced the above ESet information for a given particle passing through a given volume into to a proto-streamer (ie. a "streamer" that would occur if no other track were to pass through the volume). And then when tracking is complete they would then occlude the proto-streamers against each other.
One should note that because of the way tracking is performed in GEANT, such proto-streamers would not include energy depositions due to explicit delta-rays and such that one might otherwise associate with the track. This is because the secondary particles get put on the stack and may end up being tracked only at some later time. Thus these soft particles enter as additional proto-streamer records. Those more familiar with the physics of LSTs will need to decide if this is a problem.
Something along the lines of ESet LSTProto would be designed to hold these proto-streamers. The specification below is only for example purposes; feel free to offer suggestions on what it really should look like. Remember that the *Global position information is necessary for hit drawing under GXINT. Also remember that it is unlikely to be implemented in the next release -- certainly not until someone writes routines to processing this information into proto-streamers.
In the case of the RPC proto-streamers one would presumably record the local x and y positions of where the streamer hits the, ahhh, is it the anode or cathode or simply the side with the pickup strips on it that matters here...
*/
LSTProto =
( IPln = INTE : 'plane # (1..NActive)',
IExtr = INTE : 'extrusion #',
ICell = INTE : 'cell # in extrusion',
ITrack = INTE : 'track #',
XGlobal = REAL : 'x position (cm) in global space',
YGlobal = REAL : 'y position (cm) in global space',
ZGlobal = REAL : 'z position (cm)in global space',
TOFG = REAL : 'Time-of-flight (seconds)',
Charge = REAL : 'normalized charge response',
XLocal = REAL : 'position along the cell axis (cm)'
);
/*
The ESets LSTWire and LSTStrip
*/
LSTWire =
( IPln = INTE : 'plane number',
IChan = INTE : 'wire channel number',
TPos = REAL : 'transverse position of wire (cm)',
Charge = REAL : 'charge (proportional mode)'
) : 'LST wire digitization'
KEY
IndxPC = (IPln,IChan) : 'index for regular ordering';
IndxPlnTPos = (IPln,TPos) : 'index for regular ordering';
END KEY;
LSTStrip =
( IPln = INTE : 'plane number',
IStrip = INTE : 'strip number',
CPos = REAL : 'position along cell axis (cm)',
Charge = REAL : 'charge '
) : 'LST strip digitization'
KEY
IndxPS = (IPln,IStrip) : 'index for regular ordering';
IndxPlnCPos = (IPln,CPos) : 'index for regular ordering';
END KEY;
/*
The ESet RPCHit holds hits for the RPC. The initial implementation will simply mimic the FLSHit ESet. This record consists of information that GEANT supplies at tracking time (or easily derived from it) without requiring any knowledge of the physics or response characteristics of the detector itself.
*/
RPCHit =
( IPln = INTE : 'plane # (1..NActive)',
IExtr = INTE : 'extrusion #',
ICell = INTE : 'cell # in extrusion',
ITrack = INTE : 'track #',
XGlobal = REAL : 'x position (cm) in global space',
YGlobal = REAL : 'y position (cm) in global space',
ZGlobal = REAL : 'z position (cm) in global space',
TOFG = REAL : 'Time-of-flight (seconds)',
XBegin = REAL : 'step begin x pos in cell co-ord (cm)',
YBegin = REAL : 'step begin y pos in cell co-ord (cm)',
ZBegin = REAL : 'step begin z pos in cell co-ord (cm)',
XEnd = REAL : 'step end x pos in cell co-ord (cm)',
YEnd = REAL : 'step end y pos in cell co-ord (cm)',
ZEnd = REAL : 'step end z pos in cell co-ord (cm)',
ELoss = REAL : 'energy loss (GeV)',
Ptot = REAL : 'total momentum upon step begin (GeV)',
IPDG = INTE : 'PDG particle type'
);
/*
No ESets have yet been designed for the RPC digitizations.
*/ /*
The ESet EmuHit holds hits for the Emulsion. The initial implementation will simply mimic the FLSHit ESet. This record consists of information that GEANT supplies at tracking time (or easily derived from it) without requiring any knowledge of the physics or response characteristics of the detector itself.
*/
EmuHit =
( IPln = INTE : 'plane # (1..NActive)',
ISheet = INTE : 'sheet number',
ILayer = INTE : '1=front,2=back',
ITrack = INTE : 'track #',
XGlobal = REAL : 'x position (cm) in global space',
YGlobal = REAL : 'y position (cm) in global space',
ZGlobal = REAL : 'z position (cm) in global space',
TOFG = REAL : 'Time-of-flight (seconds)',
XBegin = REAL : 'step begin x pos in cell co-ord (cm)',
YBegin = REAL : 'step begin y pos in cell co-ord (cm)',
ZBegin = REAL : 'step begin z pos in cell co-ord (cm)',
XEnd = REAL : 'step end x pos in cell co-ord (cm)',
YEnd = REAL : 'step end y pos in cell co-ord (cm)',
ZEnd = REAL : 'step end z pos in cell co-ord (cm)',
ELoss = REAL : 'energy loss (GeV)',
Ptot = REAL : 'total momentum upon step begin (GeV)',
IPDG = INTE : 'PDG particle type'
);
/*
The ESet TstHit holds hits for the Tst (test) volumes; implementation will simply mimic the FLSHit ESet. This record consists of information that GEANT supplies at tracking time (or easily derived from it) without requiring any knowledge of the physics or response characteristics of the detector itself.
*/
TstHit =
( IPln = INTE : 'plane # (1..NActive)',
IExtr = INTE : 'extrusion #',
ICell = INTE : 'cell # in extrusion',
ITrack = INTE : 'track #',
XGlobal = REAL : 'x position (cm) in global space',
YGlobal = REAL : 'y position (cm) in global space',
ZGlobal = REAL : 'z position (cm) in global space',
TOFG = REAL : 'Time-of-flight (seconds)',
XBegin = REAL : 'step begin x pos in cell co-ord (cm)',
YBegin = REAL : 'step begin y pos in cell co-ord (cm)',
ZBegin = REAL : 'step begin z pos in cell co-ord (cm)',
XEnd = REAL : 'step end x pos in cell co-ord (cm)',
YEnd = REAL : 'step end y pos in cell co-ord (cm)',
ZEnd = REAL : 'step end z pos in cell co-ord (cm)',
ELoss = REAL : 'energy loss (GeV)',
Ptot = REAL : 'total momentum upon step begin (GeV)',
IPDG = INTE : 'PDG particle type'
);
END ESET
/*
*/ END SUBSCHEMA