The RSet's have not yet been specified ....
*/
SUBSCHEMA MINOSGeom : 'Detector configuration'
AUTHOR 'Robert Hatcher'
VERSION '1.7'
DATE '1997.10.20'
REVIEWER 'no one (yet)'
/*
Some terminology:
Define some new 'types'.
*/
DEFINE ATTRIBUTE
RotmType = CHA4 'X'|'Y'|'U'|'V'|'N' :'legal rotation types';
/* X: cell axis parallel to X axis */
/* Y: cell axis parallel to Y axis */
/* U, V: like X,Y rotated 45 deg clockwise (as viewed along +z) */
/* N: no rotation - equivalent to X */
GlobalPos = REAL :'global co-ordinate';
ShapeName = CHA4 'BOX '|'TUBE'|'PGON'
:'restricted list of GEANT shapes';
OnlyType = CHA4 'ONLY'|'MANY' :'GSPOS flag';
END ATTRIBUTE
/*
The ESet GeomMisc holds assorted single variables related to the geometry.
*/
DEFINE ESET
GeomMisc =
( NearFar = INTE : '-1=Near 1=Far',
NSupmdl = INTE [1,15] : 'number of supermodules',
VMARS(3) = REAL : 'half-lengths (cm) of "world"',
/* MAster Reference System */
VHall(3) = REAL : 'half-lengths (cm) of hall volume',
LINRThick = REAL : 'thickness (cm) of hall "liner"'
);
/*
The ESet SuperModule contains the information concerning the organization and placement of an entire supermodule. The ESet MdlOrg specifies the ordering of planes within a module. By placing this information in a table separate from the SuperModule ESet, we can allow a completely arbitrary number of planes in a module. There remains built into the structure the requirement that planes be paired passive followed by an active. The index key ISupInMdl serves as an index for picking out the type given the pair of values (ISup,InMdl); since all modules in a super-module are identical in form that value is unnecessary in order to determine the plane type.
*/
SuperModule =
( NActvPln = INTE : '# of active planes in supermodule',
/* NActvPln must be NMdl* NAPlnMdl */
NAPlnMdl = INTE [1,16] : '# active planes per module',
NMdl = INTE [1,300] : '# of modules in supermodule',
CoilSet = INTE : 'arrangement of coils',
CoilI = REAL : 'scale factor for B field (-1=focus mu-)',
/* assumed to scale as coil current */
SupX0 = REAL : 'X offset (cm) s-m from hall centerline',
SupY0 = REAL : 'Y offset (cm) s-m from hall centerline',
UpSpace = REAL : 'space (cm) upstream of first module',
DnSpace = REAL : 'space (cm) downstream of last module',
Xmin = GlobalPos : 'minimum X (cm) of containment box',
Xmax = GlobalPos : 'maximum X (cm) of containment box',
Ymin = GlobalPos : 'minimum Y (cm) of containment box',
Ymax = GlobalPos : 'maximum Y (cm) of containment box',
Zmin = GlobalPos : 'minimum Z (cm) of containment box',
Zmax = GlobalPos : 'maximum Z (cm) of containment box'
);
MdlOrg =
( ISup = INTE [1,15] : 'super-module #',
InMdl = INTE [1,16] : 'index in *Module*',
PasvType = CHA4 : 'type (key,inst) of each passive plane',
ActvType = CHA4 : 'type (key,inst) of each active plane',
ActvRotm = RotmType : 'rotation of active plane'
/* the rotation is one of X,Y,U,V */
) : 'the ordering of planes in a module'
KEY
ISupInMdl = (ISup,InMdl) : 'key for indexing';
END KEY;
/*
The ESet PlanePos collects together the z placement of the planes. For purposes of this table they are grouped as pairs of passive and active planes. The table should be ordered in z and the ID number corresponds to the global numbering scheme: 1, 2, ... number of active planes in the detector. The GEANT hierarchial numbering scheme (of Supermodule,module,in_module) is explicitly given as well. The Rotm variable is included for convience.
*/
PlanePos =
( ISuper = INTE [1,15] : 'supermodule number',
IModule = INTE [1,300] : 'module number',
InMdl = INTE [1,16] : 'pasv/actv plane pair in module',
PairZmin = GlobalPos : 'upstream extent of pair',
PairZmax = GlobalPos : 'downstream extent (including air gap)',
PasvName = CHA4 : 'name of passive plane',
XYPasv(2) = GlobalPos : 'X/Y (cm) center of passive plane',
ZFrntPasv = GlobalPos : 'Z (cm) front face of passive plane',
ActvName = CHA4 : 'name of active plane',
XYActv(2) = GlobalPos : 'X/Y (cm) center of active plane',
ZFrntActv = GlobalPos : 'Z (cm) front face of active plane',
Rotm = CHA4 : 'rotation of active plane'
) : 'position/orientation of the planes'
KEY
IndxSMI = (ISuper,IModule,InMdl) : 'index for regular ordering';
END KEY;
/*
The ESet CellPos records the placement of cells in an active plane relative to the plane center and in the nominal "X" orientation.
*/
CellPos =
( PlnName = CHA4 : 'name of active plane',
IExtr = INTE : 'extrusion number',
ICell = INTE : 'cell number',
XYZReadout(3) = REAL : 'position of readout end',
XYZFarend(3) = REAL : 'position of far end'
) : 'cell positions relative to plane center'
KEY
CellIndex = (PlnName,IExtr,ICell) : 'key for indexing';
END KEY;
/*
The ESet PlaneSpec represents the information concerning the generic plane of a (key,instance) pair. The overall geometry of the plane is recorded, along with sufficient information to retrieve information stored by cell (ie. hits). A minimal specification of the cell geometry is kept.
For composite planes (eg. active planes) AbsLen, RadLen, Density should be averages of the components of the extrusion; this should allow analysis code to depend on these quantities rather than things such as absolute numbers of planes, etc.
*/
PlaneSpec =
( PlnName = CHA4 : 'plane name (ie. key,instance,PL)',
Shape = ShapeName : 'GEANT shape name',
Width = REAL : 'face-to-face width of plane (cm)',
Length = REAL : 'height of plane (cm)',
Thickness = REAL : 'z thickness of plane (cm)',
AirGap(2) = REAL : 'z space necessary up&down stream (cm)',
/* to allow for wavy-ness */
TMedium = CHA4 : 'tracking medium',
/* first 4 characters of a medium */
BMap = INTE [0,*] : 'associated magnetic field map',
DigiType = INTE [0,3] : 'hit/digit 0=none,1=LST,2=FLS,3=RPC',
AbsLen = REAL : '(average) absorption length (cm)',
RadLen = REAL : '(average) radiation length (cm)',
Density = REAL : '(average) density (g/cm**3)',
NExtru = INTE [0,*] : '# of extrusion in the plane',
NCell = INTE [0,*] : '# of cells in each extrusion',
CellWidth = REAL : 'transverse size of cell volume (cm)',
CellThick = REAL : 'z depth of cell volume (cm)',
CoverSide = INTE [-1,1] : 'open side of comb',
NGSVol = INTE [1,10] : 'max len of GSVOLU parameter array',
GSVol(10) = REAL : 'GSVOLU specification array',
NLevel = INTE [0,9] : '# of added levels to specify cell',
NamePth(9) = CHA4 : 'name path to cell',
NumbPth(9) = INTE [0,*] : 'max # of each level in path to cell'
);
/*
The ESet BeamSystem describes the position of the beam used and the flags that co-ordinate the generation of events.
*/
BeamSystem =
( X0 = REAL : 'X origin of beam in world system',
Y0 = REAL : 'Y origin of beam in world system',
Z0 = REAL : 'Z origin of beam in world system',
dXdZ = REAL : 'dx/dz slope of beam',
dYdZ = REAL : 'dy/dz slope of beam',
KineMethod = INTE : 'interaction generator method',
/* 0 = user supplied code */
/* 1 = read StdHep file */
/* 2 = Soudan2 cross sections, etc */
FluxMethod = INTE : 'neutrino flux method',
/* 0 = energy pulled from histograms (far) */
/* 1 = Miller/Mufson flux files */
/* 2 = Hylen gbeam ntuple files */
FluxFile = CH64 : 'identifying file name'
);
/*
The ESet SubVolSpec and SubVolPos represents the information concerning the components inserted into plane volumes. This gives a full accounting of the details concerning active plane components; as might be necessary to distinguish between, say, a LST plane constructed with a plastic comb vs. an aluminum one.
*/
SubVolSpec =
( VolName = CHA4 : 'volume name',
Shape = ShapeName : 'GEANT volume shape',
TMedium = CHA4 : 'tracking medium',
/* first 4 characters of a medium */
NGSVol = INTE [1,10] : 'max len of GSVOLU parameter array',
GSVol(10) = REAL : 'GSVOLU specification array'
);
SubVolPos =
( VolName = CHA4 : 'daughter volume name',
ICopy = INTE [1,*] : 'copy number',
VolMother = CHA4 : 'volume name of mother',
XPos = REAL : 'x pos of daughter 0 in mother frame',
YPos = REAL : 'y pos of daughter 0 in mother frame',
ZPos = REAL : 'z pos of daughter 0 in mother frame',
IRot = INTE : 'rotation matrix number',
Only = OnlyType : 'only/many flag'
);
/*
The ESet CoilTube represents the information concerning coil winding volumes.
*/
CoilTube =
( ISuper = INTE [1,15] : 'super module #',
Name = CHA4 : 'volume name',
ICopy = INTE : 'copy number',
ITreeDepth = INTE : 'high # volumes supercede lower ones',
XYZ1(3) = GlobalPos : 'position of one end',
XYZ2(3) = GlobalPos : 'position of other end',
OuterRadius = REAL : 'outer radius of cylinder (annulus)',
InnerRadius = REAL : 'inner radius of annulus',
TMedium = CHA4 : 'tracking medium',
/* first 4 characters of a medium */
Zmin = GlobalPos : 'absolute minimum Z',
Zmax = GlobalPos : 'absolute maximum Z'
/* these can be generous (for sorting) */
) : 'volume associated with winding coil';
END ESET
DEFINE RSET
/*
The RSet
*/
(PlanePos [1,1] -> [1,*] PlaneSpec BY PasvSpec)
: 'point to the PlaneSpec for the Passive plane of pair';
(PlanePos [1,1] -> [1,*] PlaneSpec BY ActvSpec)
: 'point to the PlaneSpec for the Active plane of pair';
END RSET
/*
*/ END SUBSCHEMA