-- | Given entropy and enthalpy sets, allow modification of the folding -- temperature (from the default 37 Celsius) module Biobase.Vienna.Modification.Temperature ( adjustTemperature ) where import Biobase.Vienna import Biobase.Turner.Tables import Biobase.Constants -- temperature scaling is a generalized zip: let g and h be a scalar, t the -- temperature. Then: g_t = h - (h-g)*((t+k_0)/t_m). Where k_0 = 273.15 (Kelvin -- of 37 Celsius) and t_m = 37+k_0 -- -- TODO abstract over table type? -- -- TODO this does not take into account that dangles are supposed to _always_ -- be beneficial. We should therefor transform the energies and then apply 'min -- 0' onto all dangle types. -- -- TODO use EnergyTables (Int is just for im-/export) adjustTemperature :: ViennaIntTables -> ViennaIntTables -> Temperature -> ViennaIntTables adjustTemperature trnrG trnrH cels = dZipWith f trnrG trnrH where f vG vH = let g = fromIntegral vG h = fromIntegral vH k_0 = kelvinC0 t_m = 37 + k_0 in round $ h - (h-g) * ((cels+k_0)/t_m)