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/