Food conversions calculation

Food conversions are computed using a recursive search algorithm to link foods-as-eaten to foods-as-measured, possibly through intermediate conversion steps. For instance, if (unpeeled) apple and grapes are the foods-as-measured, the food-as-eaten apple pie contains peeled apple and raisins, peeled apple is linked to unpeeled apple, and raisins are dried grapes. Hence, for this apple pie, there are two conversions, one to apple (with processing type ‘peeled’) and one to grapes (with processing type ‘dried’), each with its own conversion path of intermediate conversion steps.

For each food-as-eaten, the food conversion algorithm recursively builds up the conversion paths using the following procedure:

  1. Check food-as-measured: Check whether the current food is a food-as-measured, i.e., when substance concentration measurements are available, the food is considered a food as measured. If successful, a food-as-measured has been found, and the current search stops.

  2. Find processing link (deprecated): Check whether the current food can be considered to be a processed variant (e.g., cooked or peeled) of another food.

  1. Match processing factor: try to find the code in the processing factors table.

If successful, try to find the corresponding food translation proportion in the food recipes data to correct for a weight reduction or increase. Then, restart at step 1 with the new code of the unprocessed food.

Warning: the ‘Find processing link’ step is not recommended and is currently maintained for backwards compatibility reasons only. We do not recommended this step because occasionally, a conversion using processing factor data may lead to different conversion paths compared to a conversion where this step is skipped or data are not available. This is undesirable behaviour. In fact, the processing link is not needed, because processed foods are recognized in the ‘Food translation link’ where the translation proportion to correct for a weight reduction or increase is stored. In the conversion algorithm the processing factor itself is irrelevant and the identification may be postponed.

  1. Food translation link: Check whether the current food translates to one or more foods through composition or read-across. Identify any processing types.

  1. Food recipe link: Try to find food translations for the current food (i.e., the ingredients of a composite food). This may result in one or more food codes for ingredients, and the iterative algorithm will proceed with each of the ingredient food codes in turn. Simultaneously check, whether the current food is a processed food or not. If so, determine the processing type or facets.

  2. TDS food sample composition link: Try to find the code in the TDSFoodSampleCompositions table (column idFood), a default translation proportion of 100% is assumed. The iterative algorithm will proceed with a TDS food (column idTDSFood) sample.

  3. Read-across link: Try to find a food extrapolation rule for the current food, a default translation proportion of 100% for ‘idToFood’ is assumed.

If successful, restart at step 1 with each of the new codes of the ingredient foods, TDS foods or Read Across foods.

  1. Subtype link: try to find subtype codes, e.g. ‘xxx$*’ in the MarketShares table. In general, marketshares should sum to 100%. Foods with marketshares not summing to 100% are ignored in the analysis unless the checkbox ‘Allow marketshares not summing to 100%’ is checked. This step is optional, see advanced settings if you want to use this. If successful, restart at step 1 with each of the new codes of the subtype foods.

  2. Supertype link: try to find supertypes, e.g. ‘xxx$yyy’ is converted to ‘xxx’. This step is optional, see advanced settings if you want to use this. If successful, restart at step 1 with the new code of the supertype food.

  3. Default processing factor: remove processing part (-xxx) of the code. If successful, restart at step 1 with the new code without processing part.

  4. Maximum residue limit: try to find the code in the MaximumResidueLimits table. If successful, the current search stops. If not successful, then stop anyway and the search is marked as failed food conversion.