void _IntegrationPointsSwarm_AssignFromXML( void* integrationPoints, Stg_ComponentFactory* cf, void* data ) {
   IntegrationPointsSwarm* self = (IntegrationPointsSwarm*) integrationPoints;
   FeMesh*                 mesh;
   
   /* This will also call _Swarm_Init */
   _Swarm_AssignFromXML( self, cf, data );

   mesh               = Stg_ComponentFactory_ConstructByKey( cf, self->name, (Dictionary_Entry_Key)"FeMesh", FeMesh, True, data );

   _IntegrationPointsSwarm_Init( self, mesh );
}
void _GeneralSwarm_AssignFromXML( void* swarm, Stg_ComponentFactory* cf, void* data )
{
   GeneralSwarm*	        self          = (GeneralSwarm*) swarm;
   EscapedRoutine*                 escapedRoutine;

   _Swarm_AssignFromXML( self, cf, data );

   escapedRoutine   = Stg_ComponentFactory_ConstructByKey( cf, self->name, (Dictionary_Entry_Key)"EscapedRoutine", EscapedRoutine, False, data  );

   _GeneralSwarm_Init(
      self,
      escapedRoutine );

}
void _IntegrationPointsSwarm_AssignFromXML( void* integrationPoints, Stg_ComponentFactory* cf, void* data ) {
   IntegrationPointsSwarm* self = (IntegrationPointsSwarm*) integrationPoints;
   FeMesh*                 mesh;
   TimeIntegrator*         timeIntegrator;
   WeightsCalculator*      weights;
   IntegrationPointMapper* mapper;
   Materials_Register*     materials_Register;
   Bool                    recalculateWeights;
   PICelleratorContext*    context;

   /* This will also call _Swarm_Init */
   _Swarm_AssignFromXML( self, cf, data );

   mesh           = Stg_ComponentFactory_ConstructByKey( cf, self->name, (Dictionary_Entry_Key)"FeMesh", FeMesh, True, data );
   timeIntegrator = Stg_ComponentFactory_ConstructByKey( cf, self->name, (Dictionary_Entry_Key)"TimeIntegrator", TimeIntegrator, False, data );
   weights        = Stg_ComponentFactory_ConstructByKey( cf, self->name, (Dictionary_Entry_Key)"WeightsCalculator", WeightsCalculator, False, data );
   mapper         = Stg_ComponentFactory_ConstructByKey( cf, self->name, (Dictionary_Entry_Key)"IntegrationPointMapper", IntegrationPointMapper, False, data );
   recalculateWeights = Stg_ComponentFactory_GetBool( cf, self->name, (Dictionary_Entry_Key)"recalculateWeights", True );

   if( mapper !=NULL ) {
      Journal_Firewall (
         weights != NULL ||
         (weights == NULL && (Stg_Class_IsInstance( mapper, GaussMapper_Type ) ||
         Stg_Class_IsInstance( mapper, GaussCoincidentMapper_Type) ||
         !strcmp( mapper->type, "PCDVCGaussMapper"))),
         Journal_MyStream( Error_Type, self ),
         "In func %s, %s which is a %s must either have a %s or use %s\n",
         __func__,
         self->name,
         self->type,
         WeightsCalculator_Type,
         GaussMapper_Type );
   }
   
   context = (PICelleratorContext*)self->context;
   assert( Stg_CheckType( context, PICelleratorContext ) );
   materials_Register = context->materials_Register;
   assert( materials_Register );

   _IntegrationPointsSwarm_Init( self, mesh, timeIntegrator, weights, mapper, materials_Register, recalculateWeights );
}