# Programmer's Guide: How To Create Group Connection Procedures

Lens supports a number of sparse projection patterns between groups. It is likely, however, that you will want to create your own connectivity patterns at some point.

Begin by defining a new projection type. This should be added to type.h (in the section on PROJECTION TYPES). For example:

        /* DOUG... */
        #define FUNKY_PROJ  ((mask) 1 << 10)
        /* ...DOUG */

Now write the connection procedure. It should be similar to this:

        static flag funkyConnectGroups(Group preGroup, Group postGroup, mask linkType,
        	  			   real strength, real range, real mean) {
          Unit V;
          FOR_EVERY_UNIT(preGroup, {
            V = U;
            FOR_EVERY_UNIT(postGroup, {
              if (randProb() < strength)
          	    if (connectUnits(V, U, linkType, range, mean)) return TCL_ERROR;
            });
          });
          return TCL_OK;
        }

Be sure to use FOR_EVERY_UNIT rather than FOR_EACH_UNIT unless you want it to skip lesioned units.

Finally, you need to register the projection type by putting a line like this in `userInit()` in extension.c:

        registerProjectionType("FUNKY_PROJ", FUNKY_PROJ, funkyConnectGroups);

Now you should be able to create projections of your type by calling connectGroups with the "-p FUNKY_PROJ" option.

Last modified: Mon Nov 13 23:54:04 EST 2000