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.

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