This shows you the differences between two versions of the page.
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 example, the 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=set, data="Plant1 Plant2") | ||
+ | data: 2 elements | ||
+ | ----------------------------------- | ||
+ | 1 Plant1 | ||
+ | 2 Plant2 | ||
+ | |||
+ | unitID[]: set | ||
+ | version: 3 | ||
+ | desc: localinformant unitID[] = create (; object=set, data="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. |