コード例 #1
0
    def test_delayed_choice(self):
        inpil = """
        length a = 5
        length b = 15
        length c = 15
        length d = 15
        length e = 15
        length z = 15
        
        RC1 = d( e( z ) ) b*( a* + ) c( + ) d @i 1e-8 M
        RC1b = d e( z ) d*( b*( a* + ) c( + ) ) @i 1e-8 M
        R0 = a b c @i 1e-7 M
        
        R21 = b c( + ) d @i 0 M
        R22 = d( e( z ) ) b*( a*( + ) ) c @i 0 M
        
        R31 = b c @i 0 M
        RC32b = d e( z ) d*( b*( a*( + ) ) c( + ) ) @i 0 M
        RC32 = d( e( z ) ) b*( a*( + ) ) c( + ) d @i 0 M
        
        TC1 = a( b c + b( c( + ) d + d( e( z ) ) ) ) @i 0 M
        TC2 = a( b c + b( c( + ) d( + d e( z ) ) ) ) @i 0 M
        TC3 = a( b( c + b c( + ) d( + d e( z ) ) ) ) @i 0 M
        """

        enum, out = enumerate_pil(inpil, is_file=False, condensed=True)
        xml = write_sbml(enum, condensed=True)

        rr = RoadRunner()
        rr.load(xml)
        ExecutableModel = rr.model

        RC32 = 'RC32' if 'RC32' in rr.model.getFloatingSpeciesIds(
        ) else 'RC32b'
        RC1 = 'RC1' if 'RC1' in rr.model.getFloatingSpeciesIds() else 'RC1b'

        # Compartment
        assert ExecutableModel.getCompartmentVolumes() == 1.
        assert ExecutableModel.getNumCompartments() == 1
        assert ExecutableModel.getCompartmentIds() == ['TestTube']

        # Species
        speciesIDs = ['R0', RC32, 'R22', 'R31', 'R21', RC1]
        ini_spIDs = sorted('init({})'.format(x) for x in speciesIDs)
        concIDs = [
            '[R0]', '[' + RC32 + ']', '[R22]', '[R31]', '[R21]',
            '[' + RC1 + ']'
        ]
        ini_coIDs = sorted('init({})'.format(x) for x in concIDs)
        assert ExecutableModel.getNumFloatingSpecies() == len(speciesIDs)
        assert sorted(
            ExecutableModel.getFloatingSpeciesIds()) == sorted(speciesIDs)
        assert sorted(
            ExecutableModel.getFloatingSpeciesInitAmountIds()) == sorted(
                ini_spIDs)
        assert sorted(ExecutableModel.getFloatingSpeciesInitConcentrationIds()
                      ) == sorted(ini_coIDs)
        #print(sorted(ini_coIDs))
        #print(ExecutableModel.getFloatingSpeciesInitAmounts())
        #print(ExecutableModel.getFloatingSpeciesInitConcentrations())

        # Reactions
        rxnIDs = [
            'R0_' + RC1 + '__' + RC32 + '_R31', 'R0_' + RC1 + '__R22_R21'
        ]
        assert ExecutableModel.getNumReactions() == len(rxnIDs)
        assert sorted(ExecutableModel.getReactionIds()) == sorted(rxnIDs)
        assert rr.model[RC32] == 0
        assert rr.model[RC1] == 2e-8

        # simulate deterministic
        rr.model['init([R0])'] = 1e-8
        assert rr.model['init(R0)'] == 1e-8

        Vol = 1.66e-15
        rr.model.setCompartmentVolumes([Vol])
        rr.model['init([R0])'] = 1e-8 * Vol
        rr.model[f'init({RC1})'] = 2e-8 * Vol
        rr.integrator.absolute_tolerance = 1e-12 * Vol
        rr.integrator.relative_tolerance = 1e-12 * Vol
        rr.integrator.initial_time_step = 0.00001
        result = rr.simulate(0, 500, steps=100)
        #print(result)
        #rr.plot() # look at it if you like!

        # NOTE: something is off with the units with stochastic simulations, weird...
        #print(rr.model.getCompartmentVolumes())
        #print(rr.model.getFloatingSpeciesInitConcentrations())
        #print(rr.model.getFloatingSpeciesInitAmounts())
        #print(rr.model.getFloatingSpeciesConcentrations())
        #print(rr.model.getFloatingSpeciesAmounts())
        rr.reset()