User Tools

Site Tools


howtos:toolcoding:many_to_one_mapping_with_non_summation_aggregation_rule

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
howtos:toolcoding:many_to_one_mapping_with_non_summation_aggregation_rule [2010/04/20 19:33]
deryn.crockett created
howtos:toolcoding:many_to_one_mapping_with_non_summation_aggregation_rule [2011/06/13 16:20] (current)
chris.strashok
Line 1: Line 1:
-The map tool can perform an index mapping in which multiple elements of informant X are mapped to the same element of informant Y.  To aggregate multiple elements into one, the map tool sums the values of the composite elements. ​ However, there may be a need to use a different aggregation function such as minimum, maximum, or average.  ​The following code demonstrates how to implement this logic.+====== Many to One Mapping with Non-Summation Aggregation Rule ====== 
 +The map tool can perform an index mapping in which multiple elements of informant X are mapped to the same element of informant Y.  To aggregate multiple elements into one, the map tool sums the values of the composite elements. ​ However, there may be a need to use a different aggregation function such as minimum, maximum, or average.  ​
  
-<code - myfile.t> +The following example demonstrates how to implement this logic.
-local uce2020[uce2020,​uce2020] = diag (1.0; dim=unitCodeE2020) +
-local uce2020Mask[t,​cidsc->​unsc,​uce2020] = boolne (dimtran (uce2020[uce2020,​uce2020];​ \ +
- map1=E2020UnitCodeIndx[t,​cidsc->​unsc],​ newDims=2, checkData=off),​0) +
-local comYrsSCx[t,​cidsc->​unsc,​uce2020] = reorder (comYrsSC[cidsc->​unsc,​t];​ time, cidscCOunsc) * \ +
- uce2020Mask[t,​cidsc->​unsc,​uce2020] +
-local comYrsSCOffset[t,​cidsc->​unsc,​uce2020] = booleq (comYrsSCx[t,​cidsc->​unsc,​uce2020],​0) * 9999 +
-local comYrsSCy[t,​cidsc->​unsc,​uce2020] = comYrsSCx[t,​cidsc->​unsc,​uce2020] + comYrsSCOffset[t,​cidsc->​unsc,​uce2020]+
  
-local e2020OnlineDatex[uce2020,​t] ​coordmin (reorder (comYrsSCy[t,cidsc->unsc,​uce2020]; unitCodeE2020,time,​cidscCOunsc);​ numDims=1+===== Background ===== 
-e2020OnlineDate[uce2020,t] = boolne ​(e2020OnlineDatex[uce2020,​t],9999* e2020OnlineDatex[uce2020,​t]+In this examplethe variable indexed by the informant unitID will be mapped to a variable indexed by the informant plantID. ​ The contents of these informants are: 
 +<code> 
 +plantID[]: set 
 + ​version:​ 3 
 + ​desc: ​   localinformant plantID[] = create (object=setdata="​Plant1 Plant2"​
 + data:    2 elements 
 +----------------------------------- 
 +1     ​Plant1 ​          
 +2     ​Plant2 ​          
 + 
 +unitID[]: set 
 + ​version:​ 3 
 + ​desc: ​   localinformant unitID[] = create ​(; object=setdata="​Unit1 Unit2 Unit3 Unit4 Unit5") 
 + ​data: ​   5 elements 
 +----------------------------------- 
 +1     ​Unit1 ​           
 +2     ​Unit2 ​           
 +3     ​Unit3 ​           
 +4     ​Unit4 ​           
 +5     ​Unit5 ​          
 </​code>​ </​code>​
 +
 +The variable unitComYr contains commissioning years by unitID
 +
 +{{:​howtos:​toolcoding:​unitcomyr.png|}}
 +
 +===== Implementation =====
 +1. Create the following desired mapping from unitID to plantID is:\\
 +
 +Unit1 -> Plant1\\
 +Unit2 -> Plant2\\
 +Unit3 -> Plant1\\
 +Unit4 -> Plant1\\
 +Unit5 -> Plant2
 +
 +<​code>​
 +local unitToPlantMap[uid] = create (; dataType=integer,​ dim=unitID, data="​1 2 1 1 2")
 +</​code>​
 +
 +
 +2. Create a mask that will expand unitComYr to include plantID
 +
 +<​code>​
 +local pid[pid,​pid] = diag (1.0; dim=plantID)
 +local plantIDMask[uid,​pid] = boolne (dimtran (pid[pid,​pid];​ map1=unitToPlantMap[uid],​ newDims=1, checkData=off),​0)
 +</​code>​
 +{{:​howtos:​toolcoding:​plantidmask.png|}}
 +
 +<​code>​
 +local unitComYrx[uid,​pid] = unitComYr[uid] * plantIDMask[uid,​pid]
 +</​code>​
 +{{:​howtos:​toolcoding:​unitcomyrx.png|}}
 +
 +
 +3. Add offset to remove 0's before taking minimum
 +<​code>​
 +local unitComYry[uid,​pid] = booleq (unitComYrx[uid,​pid],​0) * 9999 + unitComYrx[uid,​pid]
 +</​code>​
 +
 +
 +4. Use coordmin to create a variable that contains online date, which is the earliest commissioning year of the units that comprise the plant, by plantId
 +<​code>​
 +local plantOnlineDate[pid] = coordmin (reorder (unitComYry[uid,​pid];​ plantID, unitID); numDims=1)
 +</​code>​
 +{{:​howtos:​toolcoding:​plantonlinedate.png|}}
 +
 +Click {{:​howtos:​toolcoding:​mapmin.t|here}} to download the tool file that encapsulates the above example.
howtos/toolcoding/many_to_one_mapping_with_non_summation_aggregation_rule.1271792036.txt.gz · Last modified: 2010/04/20 19:33 by deryn.crockett