ENIF Plot
# Enif plot configuration generated on Wed Nov 3 21:44:09 2004
# File: /u/emme2/enif/conf/aggdeslinxy.e2p
#
# String Name: name of plot configuration (tr,subst)
Name = Display aggregated matrix expression on central zones of the groups
# Text Description: description of plot configuration (tr,subst)
Description = \
Display of aggregated desire lines on central zones
\
\
\
\
This is a variant of the original aggdeslin.e2p configuration, in which the groups were represented by the first or last zone in a representative ensemble\
\
This plot configuration tries to provide a "proof of concept" implementation of a plot which automatically aggregates a a matrix expression according to a zone group ensemble and displays the group-to-group demand as desire lines.\
\
In this version the groups are represented by the "central zones" of each group. The central\
zone is defined to be the one which is closest to the "center of gravity" of the group, i.e. the average X/Y coordinates of all zones in the group.\
\
Note that if the aggregation ensemble is changed, it is necessary to reload the network in order to get the correct representation on screen.\
\
Note that the highest used zone group number in the ensembles used for aggregation and representation must not exceed the square root of the number of generic elements configured in your preference file. If necessary, adjust the number of generic network element in the network tab of the preferences.\
\
The implementation is essentially based on the following ideas:\
\
1) A local configurable attribute lca_repzone which computes the representative zone of a group to be either the first or last zone in the group, using the "first" or "last" aggregation operators.\
\
2) A local configurable attribute lca_aggvals which is aggregating the matrix expression to an array of generic elements which represent the group-to-group matrix.\
\
3) The matrix value mapper then accesses the aggregated values using the Pgen() intrinsic pointer function and displays them for those zones only which are the representatives of their respective zone groups\
\
4) The central zones are computed with a series of configurable attributes which: compute the average X/Y coordinates, compute the minimum distance from a zone in the group to the center point, and finally to identify the center node.\
\
5) An additional threshold value can be specified to display only aggregated group-to-group values which are larger (in absolute terms) than the specified value.\
\
6) For didactical purposes, a symbold mapper has been added which optionally (by means of the "Show average X/Y" control field) can display the location of the theoretical center (average X/Y) of the zone group.\
\
This configuration is just a proof of concept which shows the mechanisms that can be used to implement matrix aggregation in Enif plots. It has not been tested - so any use is at your own risk!\
\
Heinz Spiess, 2004-11-03\
\
$Source: /home/cvs/enif/heinz/conf/aggdeslinxy.e2p,v $ $Revision: 1.5 $ $Date: 2004/11/03 20:46:02 $\
\
# Flags Flags: plot configuration flags
Flags = 0x2
# String Caption: caption that appears on window bar (tr,subst)
Caption = Display aggregated matrix expression
# Box FullViewAdjust: viewport relative box for mapping full view bounding box
FullViewAdjust = 0;0;0;0
# String Active: name of currently active mapper
Active = Aggregate matrix
[Configurable attribute list]
# String Name: name of attribute configurations (tr)
Name = q
# String IncomingGroups: regular expression to filter incoming group signals
IncomingGroups = .
# String OutgoingGroups: regular expression to filter outgoing group signals
OutgoingGroups = .
[Configurable attribute]
# String Name: configurable attribute name
Name = lca_maxgroup
# String ExpressionType: network element type of expression
ExpressionType = nodes
# Expression Expression: expression for computing attribute values (tr,node,string)
Expression = int(sqrt(number(subst("%%"))-2))
# String AggregationPointer: pointer from expression to result element
AggregationPointer = Pconst
# String AggregationOperator: aggregation operator for computing result value
AggregationOperator = max
[Configurable attribute]
# String Name: configurable attribute name
Name = lca_threshold
# String ExpressionType: network element type of expression
ExpressionType = generic elements
# Expression Expression: expression for computing attribute values (tr,gen.,string)
Expression : //Threshold
Expression = number(subst("%%"))
# Selector Selector: selector used to compute attribute values (tr,gen.,unbuffered)
Selector = index==1
# String AggregationPointer: pointer from expression to result element
AggregationPointer = Pconst
# String AggregationOperator: aggregation operator for computing result value
AggregationOperator = +
[Configurable attribute]
# String Name: configurable attribute name
Name = lca_aggens
# Flags Flags: bit pattern containing object flags
Flags = 0x1
# String ExpressionType: network element type of expression
ExpressionType = zones
# Expression Expression: expression for computing attribute values (tr,zone,string)
Expression : /ZoneGroupEnsemble
Expression = ga
[Configurable attribute]
# String Name: configurable attribute name
Name = lca_xg
# String ExpressionType: network element type of expression
ExpressionType = zones
# Expression Expression: expression for computing attribute values (tr,zone,string,max. 2 values)
Expression = xi,lca_aggens+1
# String AggregationPointer: pointer from expression to result element
AggregationPointer = Pgen
# String AggregationOperator: aggregation operator for computing result value
AggregationOperator = avg
[Configurable attribute]
# String Name: configurable attribute name
Name = lca_yg
# String ExpressionType: network element type of expression
ExpressionType = zones
# Expression Expression: expression for computing attribute values (tr,zone,string,max. 2 values)
Expression = yi,lca_aggens+1
# String AggregationPointer: pointer from expression to result element
AggregationPointer = Pgen
# String AggregationOperator: aggregation operator for computing result value
AggregationOperator = avg
[Configurable attribute]
# String Name: configurable attribute name
Name = lca_repzone
# Text Description: description of configurable attribute (tr)
Description = representative zone of group
# String ExpressionType: network element type of expression
ExpressionType = zones
# Expression Expression: expression for computing attribute values (tr,zone,string,max. 2 values)
Expression : //@Recompute
Expression = i,lca_aggens+1
# Selector Selector: selector used to compute attribute values (tr,zone,unbuffered)
Selector = 1,norm(xi-Pgen(lca_aggens+1)->lca_xg,yi-Pgen(lca_aggens+1)->lca_yg)
# String AggregationPointer: pointer from expression to result element
AggregationPointer = Pgen
# String AggregationOperator: aggregation operator for computing result value
AggregationOperator = first
[Configurable attribute]
# String Name: configurable attribute name
Name = lca_aggvals
# Flags Flags: bit pattern containing object flags
Flags = 0x1
# String ExpressionType: network element type of expression
ExpressionType = O-D pairs
# Expression Expression: expression for computing attribute values (tr,o-d,string,max. 2 values)
Expression : /AggregationExpression/UpdateAggregation
Expression = mf1,Pp->Pi->(ga)*lca_maxgroup+Pq->Pi->(ga)+1
# String AggregationPointer: pointer from expression to result element
AggregationPointer = Pgen
# String AggregationOperator: aggregation operator for computing result value
AggregationOperator = +
[Background]
[Generic symbol]
# Flags Flags: bit pattern containing mapper flags
Flags = 0x9e00000
# String Symbol: Symbol used for drawing values
Symbol = Star
# Float Scale: value scale for shapes (units/pixel)
Scale = 0.06
# Stylus Stylus: stylus for symbol outline, fill and text properties
Stylus : Stylus
Stylus[] = 0x20000000 0x01ff0000 0x00000000 0x20
Stylus[] = 0x20000000 0x0100ff00 0x00000000 0x0b
Stylus[] = 0x20000000 0x010000ff 0x00000000 0x08
Stylus[] = 0x20000000 0x0100ffff 0x00000000 0x3e
Stylus[] = 0x20000000 0x01ff00ff 0x00000000 0x16
Stylus[] = 0x20000000 0x01ffff00 0x00000000 0x15
Stylus[] = 0x20000000 0x01ff7f00 0x00000000 0x11
Stylus[] = 0x20000000 0x017f8000 0x00000000 0x1b
Stylus[] = 0x20000000 0x01008000 0x00000000 0x1e
Stylus[] = 0x20000000 0x01000080 0x00000000 0x16
Stylus[] = 0x20000000 0x018c00d3 0x00000000 0x0a
Stylus[] = 0x20000000 0x01ff008c 0x00000000 0x18
Stylus[] = 0x20000000 0x01545454 0x00000000 0x12
Stylus[] = 0x20000000 0x01ababab 0x00000000 0x16
# Expression SymbolPosition: symbol position x, y [,angle [,shapeval]] (tr,gen.,max. 4 values)
SymbolPosition = lca_xg,lca_yg
# Expression Value: expression for up to 12 values (tr,gen.,string,max. 12 values)
Value : //ShowAverageXY
Value = number(subst("%%"))
# Selector Selector: expression for element selection [, iterator] (tr,gen.)
Selector = lca_repzone>0
# Expression StylusIndex: expression for stylus index (tr,gen.)
StylusIndex = index-1
[Link base]
# Flags Flags: bit pattern containing mapper flags
Flags = 0xbc00000
# Float Offset: link offset (pixels)
Offset = 0
# Selector LinkSelector: expression for link selection [,link iterator] (tr,link)
LinkSelector = [no connectors] not(isConnector)
[Node box]
# Flags Flags: bit pattern containing mapper flags
Flags = 0xbc00000
# Float NodeBoxWidth: width of node box in pixels
NodeBoxWidth = 6
# Float NodeBoxHeight: height of node box in pixels
NodeBoxHeight = 6
# Selector NodeSelector: expression for node selection [,node iterator] (tr,node)
NodeSelector = isZone
# Bool NodeNumbers: display node numbers in node box
NodeNumbers = 0
# Float NodeTextSize: text size for node box text
NodeTextSize = 16
# Stylus Stylus: stylus for node box outline, fill and text properties
Stylus : Stylus
Stylus[] = 0x20000000 0x01ff0000 0x00000000 0x20
Stylus[] = 0x20000000 0x0100ff00 0x00000000 0x0b
Stylus[] = 0x20000000 0x010000ff 0x00000000 0x08
Stylus[] = 0x20000000 0x0100ffff 0x00000000 0x3e
Stylus[] = 0x20000000 0x01ff00ff 0x00000000 0x16
Stylus[] = 0x20000000 0x01ffff00 0x00000000 0x15
Stylus[] = 0x20000000 0x01ff7f00 0x00000000 0x11
Stylus[] = 0x20000000 0x017f8000 0x00000000 0x1b
Stylus[] = 0x20000000 0x01008000 0x00000000 0x1e
Stylus[] = 0x20000000 0x01000080 0x00000000 0x16
Stylus[] = 0x20000000 0x018c00d3 0x00000000 0x0a
Stylus[] = 0x20000000 0x01ff008c 0x00000000 0x18
Stylus[] = 0x20000000 0x01545454 0x00000000 0x12
Stylus[] = 0x20000000 0x01ababab 0x00000000 0x16
# Expression StylusIndex: node expression for stylus index (tr,node)
StylusIndex : /ZoneGroupEnsemble
StylusIndex = ga
# Expression NodeValue: expression for node value (tr,node,string,max. 6 values)
NodeValue =
[Matrix value]
# Bool ShowValueStrings: display matrix values numerically on o-d bars
ShowValueStrings = 1
# Bool Intrazonals: display intrazonal values as circles
Intrazonals = 1
# Float HeadOffset: arrowhead offset (pixels)
HeadOffset = -0.01
# Float TailOffset: arrow tail offset (pixels)
TailOffset = 14
# Float Scale: value scale for proportional bars (units/pixel)
Scale : Scale/Scale/AutoScale
Scale = 120
# Stylus Stylus: stylus for bar outline, fill and text properties
Stylus : Stylus
Stylus[] = 0x20000000 0x01ff0000 0x00000000 0x20
Stylus[] = 0x20000000 0x0100ff00 0x00000000 0x0b
Stylus[] = 0x20000000 0x010000ff 0x00000000 0x08
Stylus[] = 0x20000000 0x0100ffff 0x00000000 0x3e
Stylus[] = 0x20000000 0x01ff00ff 0x00000000 0x16
Stylus[] = 0x20000000 0x01ffff00 0x00000000 0x15
Stylus[] = 0x20000000 0x01ff7f00 0x00000000 0x11
Stylus[] = 0x20000000 0x017f8000 0x00000000 0x1b
Stylus[] = 0x20000000 0x01008000 0x00000000 0x1e
Stylus[] = 0x20000000 0x01000080 0x00000000 0x16
Stylus[] = 0x20000000 0x018c00d3 0x00000000 0x0a
Stylus[] = 0x20000000 0x01ff008c 0x00000000 0x18
Stylus[] = 0x20000000 0x01545454 0x00000000 0x12
Stylus[] = 0x20000000 0x01ababab 0x00000000 0x16
# Float TextSize: text size for matrix values
TextSize = 12
# Expression MatrixValue: expression for matrix value (tr,o-d)
MatrixValue = put(Pgen(Pp->Pi->lca_aggens*lca_maxgroup+Pq->Pi->lca_aggens+1)->lca_aggvals)*(get(1)>lca_threshold)
# Selector OriginSelector: expression for origin selection [,origin iterator] (tr,orig.)
OriginSelector = p==Pgen(Pi->lca_aggens+1)->lca_repzone,-p
# Selector DestinationSelector: expression for destination selection [,destination iterator] (tr,dest.)
DestinationSelector = q==Pgen(Pi->lca_aggens+1)->lca_repzone,-q
# Expression StylusIndex: Expression for stylus index (tr,o-d)
StylusIndex = Pq->Pi->lca_aggens
[Parameter conversion]
# Flags Flags: bit pattern containing mapper flags
Flags = 0xbfb0000
# String SA: string parameter SA (subst)
SA : /MatrixToAggregate
SA = mf1
# String SB: string parameter SB (subst)
SB : /ZoneGroupEnsemble
SB = ga
# Expression Expression: expression for parameter conversion (tr,string,max. 12 values)
Expression = SA+",Pp->Pi->("+SB+")*lca_maxgroup+Pq->Pi->("+SB+")+1"
# String SR: string result
SR : AggregationExpression
SR = mf1,Pp->Pi->(ga)*lca_maxgroup+Pq->Pi->(ga)+1
[Configurable control]
# String Name: mapper name that appears on mapper control tab (tr,subst)
Name = Aggregate matrix
# String Layout: layout parameters (tr)
Layout[] = Expression0;Expression;O-D value:;matrix or OD expression to be aggregated and displayed;0;0;3;4;O-D pairs;1;0
Layout[] = Float0;Scale;Scale:;Scale for aggregated desire lines;0;0;1;1;;;1
Layout[] = Expression1;Expression;Aggr. ensemble:;Zone group ensemble used for aggregation;3;3;3;4;zones;1;0
Layout[] = Bool0;Checkbox;When changing any parameters below you need to reload the network!;;2;2;0;1;;
Layout[] = Stylus0;Stylus;Stylus:;;1;1;3;3;;
Layout[] = Bool1;Checkbox;Show average X/Y;;0;0;0;0;;
Layout[] = Float1;Scale;Threshold:;only displayaggregated values larger than this value;1;1;1;1;;;0
# Bool Bool0
Bool0 = 1
# Bool Bool1
Bool1 : ShowAverageXY
Bool1 = 1
# Float Float0: Scale for aggregated desire lines
Float0 : Scale
Float0 = 120
# Float Float1: only displayaggregated values larger than this value
Float1 : Threshold
Float1 = 0
# String String1: string parameter String1
String1 : ZoneGroupEnsemble
String1 = ga
# Expression Expression0: matrix or OD expression to be aggregated and displayed (tr,o-d)
Expression0 : MatrixToAggregate
Expression0 = mf1
# Expression Expression1: Zone group ensemble used for aggregation (tr,zone)
Expression1 : ZoneGroupEnsemble
Expression1 = ga
# Stylus Stylus0
Stylus0 : Stylus
Stylus0[] = 0x20000000 0x01ff0000 0x00000000 0x20
Stylus0[] = 0x20000000 0x0100ff00 0x00000000 0x0b
Stylus0[] = 0x20000000 0x010000ff 0x00000000 0x08
Stylus0[] = 0x20000000 0x0100ffff 0x00000000 0x3e
Stylus0[] = 0x20000000 0x01ff00ff 0x00000000 0x16
Stylus0[] = 0x20000000 0x01ffff00 0x00000000 0x15
Stylus0[] = 0x20000000 0x01ff7f00 0x00000000 0x11
Stylus0[] = 0x20000000 0x017f8000 0x00000000 0x1b
Stylus0[] = 0x20000000 0x01008000 0x00000000 0x1e
Stylus0[] = 0x20000000 0x01000080 0x00000000 0x16
Stylus0[] = 0x20000000 0x018c00d3 0x00000000 0x0a
Stylus0[] = 0x20000000 0x01ff008c 0x00000000 0x18
Stylus0[] = 0x20000000 0x01545454 0x00000000 0x12
Stylus0[] = 0x20000000 0x01ababab 0x00000000 0x16
# Stylus Stylus1: stylus parameter Stylus1
Stylus1 = 0x00000000 0x00000000 0x00000000 0x00
# Stylus Stylus2: stylus parameter Stylus2
Stylus2 = 0x00000000 0x00000000 0x00000000 0x00
# Stylus Stylus3: stylus parameter Stylus3
Stylus3 = 0x00000000 0x00000000 0x00000000 0x00
# Stylus Stylus4: stylus parameter Stylus4
Stylus4 = 0x00000000 0x00000000 0x00000000 0x00
# Box BBox0: bounding box parameter BBox0
BBox0 = 1;1;0;0
# Box BBox1: bounding box parameter BBox1
BBox1 = 1;1;0;0
# Box BBox2: bounding box parameter BBox2
BBox2 = 1;1;0;0
# Box BBox3: bounding box parameter BBox3
BBox3 = 1;1;0;0
# Box BBox4: bounding box parameter BBox4
BBox4 = 1;1;0;0
# Click UpdatingFloat0: aux. parameter to catch update signal from Float0
UpdatingFloat0 : AutoScale/