<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def tag_ca_geometry(self, force=False, reference_axis=None, reference_axis_name='ref_axis'):
 """Tags each `Residue` with rise_per_residue, radius_of_curvature and residues_per_turn. Parameters force : bool, optional If `True` the tag will be run even if `Residues` are already tagged. reference_axis : list(numpy.array or tuple or list), optional Coordinates to feed to geometry functions that depend on having a reference axis. reference_axis_name : str, optional Used to name the keys in tags at `Polypeptide` and `Residue` level. """

        tagged = ['rise_per_residue' in x.tags.keys() for x in self._monomers]
        if (not all(tagged)) or force:
            # Assign tags None if Polymer is too short to have a primitive.
            if len(self) < 7:
                rprs = [None] * len(self)
                rocs = [None] * len(self)
                rpts = [None] * len(self)
            else:
                rprs = self.rise_per_residue()
                rocs = self.radii_of_curvature()
                rpts = residues_per_turn(self)
            for monomer, rpr, roc, rpt in zip(self._monomers, rprs, rocs, rpts):
                monomer.tags['rise_per_residue'] = rpr
                monomer.tags['radius_of_curvature'] = roc
                monomer.tags['residues_per_turn'] = rpt
        # Functions that require a reference_axis.
        if (reference_axis is not None) and (len(reference_axis) == len(self)):
            # Set up arguments to pass to functions.
            ref_axis_args = dict(p=self,
                                 reference_axis=reference_axis,
                                 tag=True,
                                 reference_axis_name=reference_axis_name)
            # Run the functions.
            polymer_to_reference_axis_distances(**ref_axis_args)
            crick_angles(**ref_axis_args)
            alpha_angles(**ref_axis_args)
        return