user: Explain ParticleSystem(bpy_struct) in complete detail according to the official Blender documentation.

assistant: # ParticleSystem(bpy_struct)

base class — [`bpy_struct`](bpy.types.bpy_struct.html#bpy.types.bpy_struct "bpy.types.bpy_struct")

*class* bpy.types.ParticleSystem(*bpy_struct*)
:   Particle system in an object

    active_particle_target
    :   Type:
        :   [`ParticleTarget`](bpy.types.ParticleTarget.html#bpy.types.ParticleTarget "bpy.types.ParticleTarget"), (readonly)

    active_particle_target_index
    :   Type:
        :   int in [0, inf], default 0

    child_particles
    :   Child particles generated by the particle system

        Type:
        :   [`bpy_prop_collection`](bpy.types.bpy_prop_collection.html#bpy.types.bpy_prop_collection "bpy.types.bpy_prop_collection") of [`ChildParticle`](bpy.types.ChildParticle.html#bpy.types.ChildParticle "bpy.types.ChildParticle"), (readonly)

    child_seed
    :   Offset in the random number table for child particles, to get a different randomized result

        Type:
        :   int in [0, inf], default 0

    cloth
    :   Cloth dynamics for hair

        Type:
        :   [`ClothModifier`](bpy.types.ClothModifier.html#bpy.types.ClothModifier "bpy.types.ClothModifier"), (readonly, never None)

    dt_frac
    :   The current simulation time step size, as a fraction of a frame

        Type:
        :   float in [0.00990099, 1], default 0.0, (readonly)

    has_multiple_caches
    :   Particle system has multiple point caches

        Type:
        :   boolean, default False, (readonly)

    invert_vertex_group_clump
    :   Negate the effect of the clump vertex group

        Type:
        :   boolean, default False

    invert_vertex_group_density
    :   Negate the effect of the density vertex group

        Type:
        :   boolean, default False

    invert_vertex_group_field
    :   Negate the effect of the field vertex group

        Type:
        :   boolean, default False

    invert_vertex_group_kink
    :   Negate the effect of the kink vertex group

        Type:
        :   boolean, default False

    invert_vertex_group_length
    :   Negate the effect of the length vertex group

        Type:
        :   boolean, default False

    invert_vertex_group_rotation
    :   Negate the effect of the rotation vertex group

        Type:
        :   boolean, default False

    invert_vertex_group_roughness_1
    :   Negate the effect of the roughness 1 vertex group

        Type:
        :   boolean, default False

    invert_vertex_group_roughness_2
    :   Negate the effect of the roughness 2 vertex group

        Type:
        :   boolean, default False

    invert_vertex_group_roughness_end
    :   Negate the effect of the roughness end vertex group

        Type:
        :   boolean, default False

    invert_vertex_group_size
    :   Negate the effect of the size vertex group

        Type:
        :   boolean, default False

    invert_vertex_group_tangent
    :   Negate the effect of the tangent vertex group

        Type:
        :   boolean, default False

    invert_vertex_group_twist
    :   Negate the effect of the twist vertex group

        Type:
        :   boolean, default False

    invert_vertex_group_velocity
    :   Negate the effect of the velocity vertex group

        Type:
        :   boolean, default False

    is_editable
    :   Particle system can be edited in particle mode

        Type:
        :   boolean, default False, (readonly)

    is_edited
    :   Particle system has been edited in particle mode

        Type:
        :   boolean, default False, (readonly)

    is_global_hair
    :   Hair keys are in global coordinate space

        Type:
        :   boolean, default False, (readonly)

    name
    :   Particle system name

        Type:
        :   string, default “”, (never None)

    parent
    :   Use this object’s coordinate system instead of global coordinate system

        Type:
        :   [`Object`](bpy.types.Object.html#bpy.types.Object "bpy.types.Object")

    particles
    :   Particles generated by the particle system

        Type:
        :   [`bpy_prop_collection`](bpy.types.bpy_prop_collection.html#bpy.types.bpy_prop_collection "bpy.types.bpy_prop_collection") of [`Particle`](bpy.types.Particle.html#bpy.types.Particle "bpy.types.Particle"), (readonly)

    point_cache
    :   Type:
        :   [`PointCache`](bpy.types.PointCache.html#bpy.types.PointCache "bpy.types.PointCache"), (readonly, never None)

    reactor_target_object
    :   For reactor systems, the object that has the target particle system (empty if same object)

        Type:
        :   [`Object`](bpy.types.Object.html#bpy.types.Object "bpy.types.Object")

    reactor_target_particle_system
    :   For reactor systems, index of particle system on the target object

        Type:
        :   int in [1, 32767], default 0

    seed
    :   Offset in the random number table, to get a different randomized result

        Type:
        :   int in [0, inf], default 0

    settings
    :   Particle system settings

        Type:
        :   [`ParticleSettings`](bpy.types.ParticleSettings.html#bpy.types.ParticleSettings "bpy.types.ParticleSettings"), (never None)

    targets
    :   Target particle systems

        Type:
        :   [`bpy_prop_collection`](bpy.types.bpy_prop_collection.html#bpy.types.bpy_prop_collection "bpy.types.bpy_prop_collection") of [`ParticleTarget`](bpy.types.ParticleTarget.html#bpy.types.ParticleTarget "bpy.types.ParticleTarget"), (readonly)

    use_hair_dynamics
    :   Enable hair dynamics using cloth simulation

        Type:
        :   boolean, default False

    use_keyed_timing
    :   Use key times

        Type:
        :   boolean, default False

    vertex_group_clump
    :   Vertex group to control clump

        Type:
        :   string, default “”, (never None)

    vertex_group_density
    :   Vertex group to control density

        Type:
        :   string, default “”, (never None)

    vertex_group_field
    :   Vertex group to control field

        Type:
        :   string, default “”, (never None)

    vertex_group_kink
    :   Vertex group to control kink

        Type:
        :   string, default “”, (never None)

    vertex_group_length
    :   Vertex group to control length

        Type:
        :   string, default “”, (never None)

    vertex_group_rotation
    :   Vertex group to control rotation

        Type:
        :   string, default “”, (never None)

    vertex_group_roughness_1
    :   Vertex group to control roughness 1

        Type:
        :   string, default “”, (never None)

    vertex_group_roughness_2
    :   Vertex group to control roughness 2

        Type:
        :   string, default “”, (never None)

    vertex_group_roughness_end
    :   Vertex group to control roughness end

        Type:
        :   string, default “”, (never None)

    vertex_group_size
    :   Vertex group to control size

        Type:
        :   string, default “”, (never None)

    vertex_group_tangent
    :   Vertex group to control tangent

        Type:
        :   string, default “”, (never None)

    vertex_group_twist
    :   Vertex group to control twist

        Type:
        :   string, default “”, (never None)

    vertex_group_velocity
    :   Vertex group to control velocity

        Type:
        :   string, default “”, (never None)

    co_hair(*object*, *\**, *particle_no=0*, *step=0*)
    :   Obtain cache hair data

        Parameters:
        :   - **object** ([`Object`](bpy.types.Object.html#bpy.types.Object "bpy.types.Object"), (never None)) – Object
            - **particle_no** (*int in* *[**-inf**,* *inf**]**,* *(**optional**)*) – Particle no
            - **step** (*int in* *[**-inf**,* *inf**]**,* *(**optional**)*) – step no

        Returns:
        :   Co, Exported hairkey location

        Return type:
        :   [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector") of 3 items in [-inf, inf]

    uv_on_emitter(*modifier*, *particle*, *\**, *particle_no=0*, *uv_no=0*)
    :   Obtain uv for all particles

        Parameters:
        :   - **modifier** ([`ParticleSystemModifier`](bpy.types.ParticleSystemModifier.html#bpy.types.ParticleSystemModifier "bpy.types.ParticleSystemModifier"), (never None)) – Particle modifier
            - **particle** ([`Particle`](bpy.types.Particle.html#bpy.types.Particle "bpy.types.Particle"), (never None)) – Particle
            - **particle_no** (*int in* *[**-inf**,* *inf**]**,* *(**optional**)*) – Particle no
            - **uv_no** (*int in* *[**-inf**,* *inf**]**,* *(**optional**)*) – UV no

        Returns:
        :   uv

        Return type:
        :   [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector") of 2 items in [-inf, inf]

    mcol_on_emitter(*modifier*, *particle*, *\**, *particle_no=0*, *vcol_no=0*)
    :   Obtain mcol for all particles

        Parameters:
        :   - **modifier** ([`ParticleSystemModifier`](bpy.types.ParticleSystemModifier.html#bpy.types.ParticleSystemModifier "bpy.types.ParticleSystemModifier"), (never None)) – Particle modifier
            - **particle** ([`Particle`](bpy.types.Particle.html#bpy.types.Particle "bpy.types.Particle"), (never None)) – Particle
            - **particle_no** (*int in* *[**-inf**,* *inf**]**,* *(**optional**)*) – Particle no
            - **vcol_no** (*int in* *[**-inf**,* *inf**]**,* *(**optional**)*) – vcol no

        Returns:
        :   mcol

        Return type:
        :   [`mathutils.Color`](mathutils.html#mathutils.Color "mathutils.Color") of 3 items in [0, inf]

    *classmethod* bl_rna_get_subclass(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The RNA type or default when not found.

        Return type:
        :   [`bpy.types.Struct`](bpy.types.Struct.html#bpy.types.Struct "bpy.types.Struct") subclass

    *classmethod* bl_rna_get_subclass_py(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The class or default when not found.

        Return type:
        :   type