@@ -551,7 +551,12 @@ class ParticleState(Entity):
551551 This can be extended to include any common quantities in the future.
552552 """
553553
554- pass
554+ label = Quantity (
555+ type = str ,
556+ description = """
557+ User- or program-package-defined identifier for this particle.
558+ """ ,
559+ )
555560
556561
557562class AtomsState (ParticleState ):
@@ -660,5 +665,83 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger') -> None:
660665 self .atomic_number = self .resolve_atomic_number (logger = logger )
661666
662667
663- class CoarseGrainedState (ParticleState ):
664- pass
668+ class CGBeadState (ParticleState ):
669+ """
670+ A section to define coarse-grained bead state information.
671+ """
672+
673+ # ? What do we want to qualify as type identifier? What safety checks do we need?
674+ bead_symbol = Quantity (
675+ type = str ,
676+ description = """
677+ Symbol(s) describing the (base) CG particle type. Equivalent to chemical_symbol
678+ for atomic elements.
679+ """ ,
680+ )
681+
682+ label = Quantity (
683+ type = str ,
684+ description = """
685+ User- or program-package-defined identifier for this bead site.
686+ This could be used to store primary FF labels in cases where only a
687+ secondary specification is required. Otherwise, `alt_labels` are
688+ used to document more complex bead identifiers, e.g., bead interactions based
689+ on connectivity.
690+ """ ,
691+ )
692+
693+ alt_labels = Quantity (
694+ type = str ,
695+ shape = ['*' ],
696+ description = """
697+ A list of bead labels for multifaceted bead characterization.
698+ """ ,
699+ )
700+
701+ mass = Quantity (
702+ type = np .float64 ,
703+ unit = 'kg' ,
704+ description = """
705+ Total mass of the particle.
706+ """ ,
707+ )
708+
709+ charge = Quantity (
710+ type = np .float64 ,
711+ unit = 'coulomb' ,
712+ description = """
713+ Total charge of the particle.
714+ """ ,
715+ )
716+
717+ # Other possible quantities
718+ # diameter: float
719+ # The diameter of each particle.
720+ # Default: 1.0
721+ # body: int
722+ # The composite body associated with each particle. The value -1
723+ # indicates no body.
724+ # Default: -1
725+ # moment_inertia: float
726+ # The moment_inertia of each particle (I_xx, I_yy, I_zz).
727+ # This inertia tensor is diagonal in the body frame of the particle.
728+ # The default value is for point particles.
729+ # Default: 0, 0, 0
730+ # scaled_positions: list of scaled-positions #! for cell if relevant
731+ # Like positions, but given in units of the unit cell.
732+ # Can not be set at the same time as positions.
733+ # Default: 0, 0, 0
734+ # orientation: float
735+ # The orientation of each particle. In scalar + vector notation,
736+ # this is (r, a_x, a_y, a_z), where the quaternion is q = r + a_xi + a_yj + a_zk.
737+ # A unit quaternion has the property: sqrt(r^2 + a_x^2 + a_y^2 + a_z^2) = 1.
738+ # Default: 0, 0, 0, 0
739+ # angmom: float #? for cell or here?
740+ # The angular momentum of each particle as a quaternion.
741+ # Default: 0, 0, 0, 0
742+ # image: int #! advance PBC stuff would go in cell I guess
743+ # The number of times each particle has wrapped around the box (i_x, i_y, i_z).
744+ # Default: 0, 0, 0
745+
746+ def normalize (self , archive : 'EntryArchive' , logger : 'BoundLogger' ) -> None :
747+ super ().normalize (archive , logger )
0 commit comments