Пример #1
0
/**
 * Called by the GUI when a key event is received, triggers an action in the
 * controller.
 *
 */
void Controller::receive_gui_event(const char *event,const char *value) {
  if(m_sleeping) return;

  //TODO: Fix this total mess, refactor into switch, break conditions out into methods.
  if(strcmp(event,"Sleep"          ) == 0) event_sleep(event,value);           else
  if(strcmp(event,"KEYPRESS"       ) == 0) m_powerup=true;                     else
  if(strcmp(event,"TOTALTIMER"     ) == 0) event_totaltimer(event,value);      else
  if(strcmp(event,"Save:PulseWidth") == 0) event_save_pulsewidth(event,value); else
  if(strcmp(event,"Save:Calib"     ) == 0) event_save_calibration();           else
  if(strcmp(event,"Save:Becq"      ) == 0) event_save_becq(event,value);       else
  if(strcmp(event,"Save:UTCOff"    ) == 0) event_save_utcoff(event,value);     else
  if(strcmp(event,"Save:Time"      ) == 0) save_time();                        else
  if(strcmp(event,"Save:Date"      ) == 0) save_date();                        else
  if(strcmp(event,"Save:WarnCPM"   ) == 0) save_warncpm();                     else
  if(strcmp(event,"Japanese"       ) == 0) event_japanese(event,value);        else
  if(strcmp(event,"Never Dim"      ) == 0) event_neverdim(event,value);        else
  if(strcmp(event,"English"        ) == 0) event_english(event,value);         else
  if(strcmp(event,"CPM/CPS Auto"   ) == 0) event_cpm_cps_auto(event,value);    else
  if(strcmp(event,"Geiger Beep"    ) == 0) event_geiger_beep(event,value);     else
  if(strcmp(event,"\x80Sv"         ) == 0) event_usv(event,value);             else
  if(strcmp(event,"\x80R"          ) == 0) event_rem(event,value);             else
  if(strcmp(event,"Clear Log"      ) == 0) event_clear_log(event,value);       else
  if(strcmp(event,"Save:Brightness") == 0) event_save_brightness(event,value); else
  if(strcmp(event,"Save:LogInter"  ) == 0) save_loginterval();                 else
  if(strcmp(event,"CALIBRATE"      ) == 0) initialise_calibration();           else
  if(strcmp(event,"UTCSCREEN"      ) == 0) event_utcscreen(event,value);       else
  if(strcmp(event,"TIMESCREEN"     ) == 0) event_timescreen(event,value);      else
  if(strcmp(event,"BECQSCREEN"     ) == 0) event_becqscreen(event,value);      else
  if(strcmp(event,"LOGINTERVAL"    ) == 0) event_loginterval(event,value);     else
  if(strcmp(event,"WARNSCREEN"     ) == 0) event_warnscreen(event,value);      else
  if(strcmp(event,"DATESCREEN"     ) == 0) event_datescreen(event,value);      else
  if(strcmp(event,"BrightnessSCN"  ) == 0) event_brightnessscn(event,value);   else
  if(strcmp(event,"LeftBrightness" ) == 0) event_leftbrightness(event,value);  else
  if(strcmp(event,"QR Transfer"    ) == 0) qr_logxfer();                       else
  if(strcmp(event,"Audio Xfer"     ) == 0) event_audioxfer(event,value);       else
  if(strcmp(event,"QR Tweet"       ) == 0) event_qrtweet(event,value);         else
  if(strcmp(event,"varnumchange"   ) == 0) {
    if(strcmp ("BRIGHTNESS",value) == 0) event_varnum_brightness(event,value); else
    if(strcmpl("CAL"       ,value,3)   ) update_calibration();                 else
    if(strcmpl("DATE"      ,value,4)   ) event_varnum_date(event,value);       else
    if(strcmpl("TIME"      ,value,4)   ) event_varnum_time(event,value);
  }
}
Пример #2
0
/*------------------------------------------------------------------------------
  Call a user-supplied weight function,
  or read a user-supplied file,
  to determine the weight of the region at angular position az, el in deg.
================================================================================
In c, the user-supplied function should take the form:

double weight(double *az, double *el)

verbose is available as a global variable that can be declared with
extern int verbose;
or you can use the msg() routine for printing messages.
================================================================================
In fortran, the same user-supplied function should take the form
(note the trailing _ added to the function name, as is standard when
calling fortran routines from c):

      real*8 function weight_(az, el)
      real*8 az, el
================================================================================

   Input: az, el = azimuth, elevation in degrees.
	  survey = name of survey, or name of file containing list of weights.
  Output: weight at angular position az, el;
	  if survey is null, then weight is set to 1.
*/
double weight_fn(double az, double el, char *survey)
{
    double weight;

    /* null survey */
    if (!survey) {
	weight = 1.;

    /* 2dF 10k quasar survey */
    } else if (strcmpl(survey, "2QZ10k") == 0) {
	weight = twoqz_(&az, &el, &verbose);

    /* 2dF 100k galaxy survey */
    } else if (strcmpl(survey, "2dF100k") == 0) {
	weight = twodf_(&az, &el);

    /* try reading weights from file */
    } else {
	weight = rdweight(survey);

    }

    return(weight);
}
Пример #3
0
void ReadATrait(quanttrait *traitp)
{
  char *s;

  s = getstr();

  // Checking if it has the sysmiss symbol
  if (!strcmpl(SYSMISS,s))
  {
    traitp->sysmiss = 1;
    traitp->value   = 0;
  }
  else
  {
    traitp->sysmiss = 0;
    traitp->value   = atof(s);
  }

  return;
}
Пример #4
0
int ExportMerlinPedigree (individual *indlist)
{
  individual *ind;
  markerlist *marker;
  namelist *pedlist, *pedigr;
  quanttrait *qt;
  int fndr, i, pednr;


  // Checks that data exists
  if (!listlen(indlist))
  {
    return -1;
  }  

  cfopen ("merlin.ped","w");

  pedigr = MakePedigreeList(indlist);

  // Run through each pedigree
  for (pedlist = pedigr, pednr=1; pedlist; pedlist = pedlist ->next, pednr++) {
    // First select all founders then all offspring
    for (fndr = 1; fndr >= 0; fndr--) {
      for (ind = indlist; ind; ind = ind->next)	{
	// First prints the founders from right pedigree
	if ((founder(ind)==fndr) && (!strcmpl(ind->pedigree, pedlist->name))) {
	  // Converts ID's to simple numbers
	  fprintf(F, "%-5d %-12d", pednr, ind->globalid);
	  if (ind->father)
	    fprintf(F, "%-12d", ind->father->globalid);
	  else
	    fprintf(F, "%-12d", 0);
	  if (ind->mother)
	    fprintf(F, "%-12d", ind->mother->globalid);
	  else
	    fprintf(F, "%-12d", 0);
	  fprintf(F, "%-2d", ind->sex);

	  // Print marker info
	  for (marker = ind->marker, i=1; marker; marker = marker->next, i++) {
#ifdef XGH	 
	    if (options->Index[O_XLINKED] && ind->sex == S_MALE ) {
	      fprintf(F, " %2d %2d ", NumberOfAlleles(i)+1, marker->allele2);
	    }
	    else 
	      fprintf(F, " %2d %2d ", marker->allele1, marker->allele2);
#else
	    fprintf(F, " %2d %2d ", marker->allele1, marker->allele2);
#endif
	  }	  


	  // Print traits
	  for (qt = ind->qttrait; qt; qt = qt->next) {
	    if (qt->sysmiss)
	      fprintf(F, " %-6s ", "x");
	    else
	      fprintf(F, " %-6f ", qt->value);
	  }

	  fprintf(F, "\n");    
	}
      }
    }
  }
  fclose(F);
  printf("Created MERLIN pedigree file\n");

  freelist(pedigrees);
  pedigrees = 0;

  return(0);
}
Пример #5
0
void ExportLinkagePedigree (individual *indlist, int aff)
{
  individual *ind;
  markerlist *marker;
  namelist *pedlist, *pedigr;
  quanttrait *qt;
  int fndr, i;
  

  if (aff==1) 
    cfopen ("gh.ped","w");
  else
    cfopen ("linkage.ped","w");

  pedigr = MakePedigreeList(indlist);

  for (pedlist = pedigr; pedlist; pedlist = pedlist ->next)
  {
    for (fndr = 1; fndr >= 0; fndr--) {
    for (ind = indlist; ind; ind = ind->next)
    {
      // First prints the founders from right pedigree
      if ((founder(ind)==fndr) && (!strcmpl(ind->pedigree, pedlist->name)))
      {
	  // Converts GeneHunter ID number to simple numbers
        if (aff == 1) {
            fprintf(F, "%-7s %-12d", ind->pedigree, ind->globalid);
	    if (ind->father)
	      fprintf(F, "%-12d", ind->father->globalid);
	    else
	      fprintf(F, "%-12d", 0);
	    if (ind->mother)
	      fprintf(F, "%-12d", ind->mother->globalid);
	    else
	      fprintf(F, "%-12d", 0);
	}
	else { 
	  fprintf(F, "%-7s %-12s", ind->pedigree, ind->id);
	  if (ind->father)
	    fprintf(F, "%-12s", ind->father->id);
	  else
	    fprintf(F, "%-12d", 0);
	  if (ind->mother)
	    fprintf(F, "%-12s", ind->mother->id);
	  else
	    fprintf(F, "%-12d", 0);
	}
        fprintf(F, "%-2d", ind->sex);

        if (aff)
          fprintf(F, "1 ");

        for (marker = ind->marker, i=1; marker; marker = marker->next, i++)
        {
#ifdef XGH	 
	  if (options->Index[O_XLINKED] && ind->sex == S_MALE ) {
	    fprintf(F, " %2d %2d ", NumberOfAlleles(i)+1, marker->allele2);
	  }
	  else 
	    fprintf(F, " %2d %2d ", marker->allele1, marker->allele2);
#else
          fprintf(F, " %2d %2d ", marker->allele1, marker->allele2);
#endif
        }
        for (qt = ind->qttrait; qt; qt = qt->next)
        {
          if (qt->sysmiss)
            fprintf(F, " %s ", SYSMISS);
          else
            fprintf(F, " %f ", qt->value);
        }

        fprintf(F, "\n");    
      }
    }
    }
  }

  fclose(F);
  if (aff)
    printf("Created GeneHunter pedigree file\n");
  else
    printf("Created LINKAGE pedigree file\n");

  freelist(pedigrees);
  pedigrees = 0;
}
Пример #6
0
void ExportMendelPedigree (individual *indlist)
{
  int i;
  namelist *pedigree, *pedlist;
  markerlist *marker;

  individual *ind;
  pedlist = MakePedigreeList(indlist);

  cfopen ("mendel.ped", "w");
  fprintf(F, "(I4,A15,A8)\n");
  fprintf(F, "(3A11,3A2");

  // Add marker info
  if (numberofmarkers()>0)
    fprintf(F, ",%d(1X,A7)", numberofmarkers());
  if (numberoftraits()>0)
    fprintf(F, ",%d(1X,A8)", numberoftraits());

  fprintf(F, ")\n");

  for (pedigree = pedlist; pedigree; pedigree = pedigree ->next) {
    fprintf(F, "%-4d%-15s\n",FamilySize(indlist, pedigree->name), pedigree->name);

    for (ind = indlist; ind; ind = ind->next)
    {
      if (!strcmpl(pedigree->name, ind->pedigree)) {
	if (founder(ind)) {
	  fprintf(F, "%-11s%-11s%-11s", ind->id, "","");
	}
	else {
 	  fprintf(F, "%-11s%-11s%-11s", ind->id, ind->father->id, ind->mother->id);
	}
	// Spaces here for non-existing disease status and monozygotic twin status?
	fprintf(F, "%2s    ", ind->sex==S_MALE ? "M" : "F");

        // Now write the marker information
     
	for (i=1; i<=numberofmarkers(); i++) {
	  marker = markernumber(ind, order[i]);
	  if (marker->allele1 == 0 || marker->allele2 == 0) {
	    fprintf(F, " %7s", "");
	  }
	  else {
	    //	    fprintf(F, " %3d/%-3d", marker->allele1, marker->allele2);
	    fprintf(F, " %3c/%-3c", 64+marker->allele1, 64+marker->allele2);
	  }
	}

        // Then write the trait information
	for (i=1; i<=numberoftraits(); i++) {
	  if (!traitmiss(ind, i)) 
	    fprintf(F, " %8f", trait(ind, i));
	  else
	    fprintf(F, " %8s", "");

	}
        fprintf(F, "\n");
      }
    }
  }

  freelist(pedlist);  
  fclose(F);
}
Пример #7
0
int ExportCRIMAPGen(individual *indlist, int xlinked)
{
  individual *ind;
  
  namelist *pedigree, *ped;
  markerlist *mkr;
  char mkrname[NAMESIZE], tempstr[NAMESIZE];
  int nFamilies, nLoci, i, nInternalID, nMembers, al1, al2, pseudoal;

  nLoci = listlen(indlist->marker);
  pedigree = MakePedigreeList(indlist);
  nFamilies = listlen(pedigree);

  cfopen ("crimap.gen", "w");
  fprintf(F, "%d %d", nFamilies, nLoci);  // The first line

  // Prints the markers in the correct order
  for (i = 1; i<= nLoci; i++)
  {
    // Remove white spaces in marker name
    RemoveWhiteSpace(tempstr, GetName(markernames, order[i]));
    strncpy(mkrname, tempstr, 15);
    fprintf(F, " %s", mkrname);
  }
  fprintf(F, "\n");

  // Fixes internal id's for use below
  for (ped = pedigree; ped; ped = ped->next)
  {
    nInternalID = 1;
    for (ind = indlist; ind; ind = ind->next)
    {
      // From the right pedigree
      if (!strcmpl(ind->pedigree, ped->name))
      {
        ind->localid = nInternalID;
        nInternalID++;
      }
    }    
  }  

  // Writes each family 
  for (ped = pedigree; ped; ped = ped->next)
  {
    // Family name
    fprintf(F, "%s\n", ped->name); 

    nMembers = 0;
    // Count the number of family members
    for (ind = indlist; ind; ind = ind->next)
    {
      // From the right pedigree
      if (!strcmpl(ind->pedigree, ped->name))
	nMembers++;
    }
    fprintf(F, "%d\n", nMembers);

    for (ind = indlist; ind; ind = ind->next)
    {
      // From the right pedigree
      if (!strcmpl(ind->pedigree, ped->name))
      {
        if (founder(ind))
          fprintf(F, "%d 0 0 ", ind->localid);
        else
          fprintf(F, "%d %d %d ", ind->localid, ind->father->localid, ind->mother->localid);

        switch (ind->sex)
	{
	  case S_MALE:   fprintf(F, "1"); break;
	  case S_FEMALE: fprintf(F, "0"); break;
 	  default:       fprintf(F, "3"); break;
	}

	// Should now print the alleles for each locus

	// If xlinked, then create a pseudo allele for each marker
	// to make the males heterozygous
        for (i = 1; i<= nLoci; i++)
	{
          mkr = markernumber(ind, order[i]);
	  al1 = mkr->allele1;
	  al2 = mkr->allele2;
	  
	  if (xlinked && ind->sex == S_MALE && al1>0 && al2>0) {
	    pseudoal = NumberOfAlleles(order[i])+1;
	    al2 = pseudoal;
	  }
          fprintf(F, " %d %d", al1, al2);
	}
        fprintf(F, "\n");
      }
    }
  }


  fclose(F);

  printf("Created crimap gen file\n");
  if (xlinked) {
    printf("Pseudo-allele generated for all males\n");
  }

  return 0;  
}
Пример #8
0
int ExportRelpairPedigree(individual *indlist)
{
  int i, famsize;
  namelist *pedlist, *pedigr;
  individual *ind, *ind2;
  markerlist *marker;
  

  cfopen ("relpair.ped", "w");

  fprintf(F, "(I4,1X,A8)\n");
  fprintf(F, "(3A8,2A1");

  if (numberofmarkers())
      fprintf(F, ",A3");

  if (numberofmarkers()>1) {
      fprintf(F, ",%d(1X,A3))\n", numberofmarkers()-1);    
  }

  pedigr = MakePedigreeList(indlist);

  for (pedlist = pedigr; pedlist; pedlist = pedlist ->next) {
    // Start by calculating the family size
    famsize = 0;
    for (ind2 = indlist; ind2; ind2 = ind2->next) {
      if (!strcmpl(pedlist->name, ind2->pedigree)) {
	famsize++;
      }
    }
    fprintf(F, "%4d %s \n",famsize, pedlist->name);

    for (ind = indlist; ind; ind = ind->next) {
      // Pick correct pedigree
      if (!strcmpl(ind->pedigree,pedlist->name)) {

	fprintf(F, "%-8s", ind->id);
	if (ind->father)
	  fprintf(F, "%-8s", ind->father->id);
	else
	  fprintf(F, "%-8s", "0");
	if (ind->mother)
	  fprintf(F, "%-8s", ind->mother->id);
	else
	  fprintf(F, "%-8s", "0");

	if (ind->sex == S_MALE)
	  fprintf(F, "M");
	else
	  fprintf(F, "F");

	fprintf(F, " ");  // MZ status

	// Prints the genotypes
	for (i = 1; i<=numberofmarkers(); i++) {
	  marker = markernumber(ind, order[i]);
	  if (marker->allele1*marker->allele2)
	    fprintf(F, "%c/%c ", marker->allele1 + 64, marker->allele2 + 64);
	  else
	    fprintf(F, "    ");
	}
	fprintf(F, "\n");
      }
    }
  }
    
  fclose(F);


  freelist(pedigr);

  printf("Created relpair pedigree file\n");

  return 1;
}