*/
SUBSCHEMA MINOSRECO : 'RECO Defined Objects'
AUTHOR 'Robert Hatcher'
VERSION '0.0.5'
DATE '1998.02.23'
REVIEWER 'no one (yet)'
/*
The reco.ddl defines the data structures used in event reconstruction. With the principle exception of MuonTrkPoint, most of the structures can store alternative determinations of the same quantity. For example, the RecoVtx structure could have multiple entries, each purporting to be the event vertex, as determined by different routines. This is useful in the case where different algorithms have different resolutions and biases depending on the overall event and thus the need for different approaches. In general the Routine attribute (field) distinguishes amongst the entries. Since this is defined to be a 64 character string, it can also include a limited amount of information about the parameters used in the case where the same routine might be called under different conditions.
| RecoVtx | Vertex information |
| RecoShwEnergy | Shower energy information |
| RecoShwDir | Shower direction information |
| RecoMuon | Muon momentum, direction, origin |
| MuonTrkHeader | Information about MuonTrkPoint table |
| MuonTrkPoint | Space points associated with a muon |
| FSLDigiCell FSLDigiPln FSLDigiView |
These ESets are used in correcting for the light attenuation along the cell's length. They also include some cell geometry information that may be handy during reconstruction but is too easily regenerated and too bulky to carry around in the base data structure FLSDigit. |
Define some new 'types'.
*/ DEFINE ATTRIBUTE END ATTRIBUTE DEFINE ESET /*
The ESet RecoVtx holds information about the found vertex.
*/
RecoVtx =
( X = REAL : 'global x position (cm)',
Y = REAL : 'global y position (cm)',
Z = REAL : 'global z position (cm)',
IPln = INTE : 'detector plane #',
Routine = CH64 : 'software routine that filled entry'
) : 'reconstructed vertex information' ;
/*
The ESet RecoShwEnergy records the shower energy
The ESet RecoShwDir records the shower direction. A standard routine will be available for filling the angle quantities based on the direction cosines (in particular the angle relative to the beam).
*/
RecoShwEnergy =
( Energy = REAL : 'energy in GeV',
SignalSum = REAL : 'arbitrary unit measure',
/* eg. photo-electrons for FLS detector */
Routine = CH64 : 'software routine that filled entry'
) : 'reconstructed shower energy information' ;
RecoShwDir =
( DirCosX = REAL : 'x direction cosine',
DirCosY = REAL : 'y direction cosine',
DirCosZ = REAL : 'z direction cosine',
Theta = REAL : 'polar angle relative to z',
Phi = REAL : 'azimuthal angle relative to x',
ThetaBeam = REAL : 'polar angle relative to beam',
/* see BeamSystem in geom.ddl */
Routine = CH64 : 'software routine that filled entry'
) : 'reconstructed shower direction information' ;
/*
The reconstruction of the muon proceeds via two steps. The first part generates a list of space points, either corresponding directly to digitizations or interpolated fits to segments. The second, potentially independent, step is the actual determination of the muon energy. This can be either from path length or a fit to the curvature due to the magnetic field. Allowing these steps to proceed independently means that the fitting routine should copy over the Routine tag that documents what did the track point selection, as well as entering its own documentation into the RecoMuon table. Different combinations of track point selection and fitting can then be used in a mix-and-match manner.
The ESet MuonTrkHeader general information about how MuonTrkPoint was filled. The ID field distinguishes between different muon tracks (eg. dimuon event from charm production/decay). The NPoints field is redundant information that can be trivially determined from a SELTAB call on the Index attribute of MuonTrkPoint.
Each row in the MuonTrkPoint ESet represents a tracking point associated with a muon. The Weight might be used to indicate a local resolution (especially if individual digitizations are combined to form tracking points).
Updated 13-Oct-97, J.E.Conboy, to add transverse coord and Rotation Mx
*/
MuonTrkHeader =
( NPoints = INTE : 'number of points associated with track',
Routine = CH64 : 'software routine that filled MuonTrkPoint table'
) : 'muon track information' ;
MuonTrkPoint =
( Index = INTE : '1=primary, 2=secondary',
/* should correspond to MuonTrkHeader_ID */
X = REAL : 'global x position (cm)',
Y = REAL : 'global y position (cm)',
Z = REAL : 'global z position (cm)',
Weight = REAL : 'relative weight ',
transv = REAL : 'transverse coordinate (cm)',
Rotm = CHA4 : 'Rotation Matrix of active plane {U:V}'
)
ALIAS
unct = Weight : 'error on trannsv coord '
END ALIAS
: 'muon track points' ;
/*
The ESet RecoMuon holds information about reconstructed Muon. Updated 04-June-97 to store parameters fitted by reco_muon
The magnitude of the fourth component of P(4) is the Energy; the sign represents the charge of the muon. This follows the convention used in NeuKin (and elsewhere in many fitting routines).
*/
RecoMuon =
( Index = INTE : '1=primary, 2=secondary',
Origin(3) = REAL : 'global origin position (cm) from Fit',
dxdz = REAL : 'x slope at origin from fit',
dydz = REAL : 'y slope at origin from fit',
qp0 = REAL : 'Charge / fitted momentum ( at origin )',
DX0 = REAL : 'Error on X0 from Fit ',
DY0 = REAL : 'Error on Y0 from Fit ',
Ddxdz = REAL : 'Error on x slope ',
Ddydz = REAL : 'Error on y slope ',
Dp0 = REAL : 'Error on 1/p from fit ',
P(4) = REAL : '4-vector, sign of P(4)=charge (GeV)from Fit ',
Method = INTE : '1=path length, 2=curvature',
Exit = INTE : '0=contained, 1=exit back, 2=exit sides',
PathLength = REAL : 'used path length (cm) of track',
TrkRoutine = CH64 : 'software routine that selected hits',
/* normally copied from MuonTrkHeader */
FitRoutine = CH64 : 'software routine that performed fit',
error = INTE : 'Error code from fit ( to be defined )',
ChiFit = REAL : 'Chi**2 from fit ( not yet available )'
)
ALIAS
XPos = Origin(1) : 'x position of muon origin' ;
YPos = Origin(2) : 'y position of muon origin' ;
ZPos = Origin(3) : 'z position of muon origin' ;
X0 = Origin(1) : 'x position of muon origin' ;
Y0 = Origin(2) : 'y position of muon origin' ;
Z0 = Origin(3) : 'z position of muon origin' ;
Px = P(1) : 'x momentum in GeV/c' ;
Py = P(2) : 'y momentum in GeV/c' ;
Pz = P(3) : 'z momentum in GeV/c' ;
Energy = P(4) : 'energy in GeV * sign'
END ALIAS
: 'reconstructed muon information' ;
/*
The ESet FLSDigiCell represents the end-points and such of the FLS cells that have digitizations. Basically the info returned by "cell_ends" along with computed values.
There is also some temporary space for keeping intermediate values in the calculation of the attenuation correction.
The FLSDigiPln and FLSDigiView hold summary information about individual planes or views.
The assigned 3-space position of the light in a cell is determined from the position of the readout end (XYZBase), the direction and distance to the far end XYZDir), and an interpolation fraction (DirScale). In practice this means:
x_light = FLSDigiCell_XYZBase(1) +
& FLSDigiCell_DirScale*FLSDigiCell_XYZDir(1)
y_light = FLSDigiCell_XYZBase(2) +
& FLSDigiCell_DirScale*FLSDigiCell_XYZDir(2)
z_light = FLSDigiCell_XYZBase(3) +
& FLSDigiCell_DirScale*FLSDigiCell_XYZDir(3)
The DirScale distance is inferred from up- and down-stream
chambers that have different orientations.
The values in FLSDigiPln and FLSDigiView are
CorrAdc weighted averages.
The convention for IsMuon values is still unspecified. There are three possibilities:
*/
FLSDigiCell =
( IPln = INTE : 'plane # (1..NActive)',
IExtr = INTE : 'extrusion #',
ICell = INTE : 'cell # in extrusion',
IView = INTE : '1=X,2=Y,3=U,4=V',
XYZBase(3) = REAL : 'position of readout end',
XYZDir(3) = REAL : 'direction (and length) to far end',
TPos = REAL : 'transverse position',
CPos = REAL : 'readout end position in orthogonal co-ord',
CellLength = REAL : 'cell length',
DirScale = REAL : 'scale factor for Dir to light origin',
/* this should range from 0 to 1 */
XPhysicalA = REAL : 'local x pos of A end of scintillator',
XPhysicalB = REAL : 'local x pos of B end of scintillator',
XFiberA = REAL : 'local/logical x pos of A end of fiber',
XFiberB = REAL : 'local/logical x pos of B end of fiber',
RawAdcA = REAL : 'uncorrected ADC value',
RawAdcB = REAL : 'uncorrected ADC value',
CorrAdcA = REAL : 'corrected ADC value',
CorrAdcB = REAL : 'corrected ADC value',
CorrAdcSum = REAL : 'corrected ADC value A+B',
IsMuon = INTE : 'part of the muon track?'
) : 'used in attenuation correction calculation' ;
FLSDigiPln =
( IPln = INTE : 'plane # (1..NActive)',
Rotm = CHA4 : 'rotation of this view',
NCells = INTE : 'number of hit cells in this plane',
XYZBase(3) = REAL : 'wgt average position of readout end',
XYZDir(3) = REAL : 'wgt average direction (and length) to far end',
DirScale = REAL : 'scale factor for Dir to light origin',
/* this should range from 0 to 1 */
SumRawAdc = REAL : 'uncorrected ADC value',
SumCorrAdc = REAL : 'corrected ADC value'
) : 'average for a plane' ;
FLSDigiView =
( Rotm = CHA4 : 'rotation of this view',
NPlns = INTE : 'number of hit planes in this view',
NCells = INTE : 'number of hit cells in this view',
XYZBase(3) = REAL : 'wgt average position of readout end',
XYZDir(3) = REAL : 'wgt average direction (and length) to far end',
DirScale = REAL : 'scale factor for Dir to light origin',
/* this should range from 0 to 1 */
SumRawAdc = REAL : 'uncorrected ADC value',
SumOldAdc = REAL : 'corrected ADC value (used for iteration)',
SumCorrAdc = REAL : 'corrected ADC value'
) : 'average for a view' ;
/*
The following ESets are used in performing simulation of the optical summing.
For example if one MUX serves the side A of two planes of the same orientation, then Pln2MUX_MUXMapA will be different for each so they don't map to the same pixels within the same MUX. Together the two maps will connect all the [IExtr,ICell] for the two planes to all the pixels in the MUX.
*/
TubePixelInfo =
(
IPlexus = INTE : 'plexus #',
NSides = INTE : '1=A side only, 2=A+B sides',
NFiberPerPixel = INTE : '# fibers routed to a single pixel',
NPlanesPerMux = INTE : '# of planes (one side) served by 1 MUX',
NPixelsPerPlane = INTE : '# of pixels in a MUX used by a plane',
NTubesPerMUX = INTE : '# tubes in a MUX box',
NRowsPerTube = INTE : '# pixel rows on a tube',
NColsPerTube = INTE : '# pixel columns on a tube',
NPixelsPerTube = INTE : 'NRows * NCols',
MUXPackMult = INTE : 'multiplier for MUX box encoding in TubePixel'
) : 'general table info for decoding TubePixelMap table' ;
Pln2MUX =
(
IPln = INTE : 'plane #',
MUXA = INTE : 'MUX # serving A side',
MUXMapA = INTE : 'sub-table of TubePixelMap to use',
MUXB = INTE : 'MUX # serving B side',
MUXMapB = INTE : 'sub-table of TubePixelMap to use'
) : 'lookup table for converting from Plane to MUX info' ;
TubePixelMap =
( MUXMap = INTE : 'sub-table #',
IExtr = INTE : 'extrusion #',
ICell = INTE : 'cell # in extrusion',
ITubePixel = INTE : 'tube-pixel in MUX'
) : 'lookup table for converting PEC to tube-pixel'
KEY
IndxMEC = (MUXMap,IExtr,ICell) : 'indexing for lookup';
IndxMapTP = (MUXMap,ITubePixel) : 'indexing for lookup';
END KEY;
PlexusAdd =
( IPln = INTE : 'plane #',
IExtr = INTE : 'extrusion #',
ICell = INTE : 'cell #',
IExist = INTE : '0=to-be-added, 1=duplicate, 2=already exists'
) : 'list of [P,E,C] that must be added'
KEY
IndxPEC = (IPln,IExtr,ICell) : 'indexing for sort';
END KEY
END ESET
END SUBSCHEMA