/** * Function that adds a prameter to the test GR parameters linked list. If the * parameter already exists, it throws an error. */ int XLALSimInspiralAddTestGRParam( LALSimInspiralTestGRParam **parameter, /**< Pointer to the head node of the linked list of parameters */ const char *name, /**< Parameter name */ double value /**< Parameter value */ ) { LALSimInspiralTestGRParam *temp; temp = *parameter; if (*parameter==NULL) { temp = XLALSimInspiralCreateTestGRParam(name,value); //temp->next=NULL; *parameter=temp; } else { if (!XLALSimInspiralTestGRParamExists(*parameter, name)) { temp = *parameter; while(temp->next!=NULL) {temp=temp->next;} LALSimInspiralTestGRParam *newParam = XLALSimInspiralCreateTestGRParam(name,value); temp->next = newParam; } else { XLALPrintError("XLAL Error - %s: parameter '%s' exists already! Not added to the structure\n", __func__, name); XLAL_ERROR(XLAL_EINVAL); } } return XLAL_SUCCESS; }
/* Parse command line, sanity check arguments, and return a newly * allocated GSParams object */ static GSParams *parse_args(ssize_t argc, char **argv) { ssize_t i; GSParams *params; params = (GSParams *) XLALMalloc(sizeof(GSParams)); memset(params, 0, sizeof(GSParams)); /* Set default values to the arguments */ params->waveFlags = XLALSimInspiralCreateWaveformFlags(); params->nonGRparams = NULL; params->approximant = TaylorT1; params->domain = LAL_SIM_DOMAIN_TIME; params->phaseO = 7; params->ampO = 0; params->phiRef = 0.; params->deltaT = 1./4096.; params->deltaF = 0.125; params->m1 = 10. * LAL_MSUN_SI; params->m2 = 1.4 * LAL_MSUN_SI; params->f_min = 40.; params->fRef = 0.; params->f_max = 0.; /* Generate as much as possible */ params->distance = 100. * 1e6 * LAL_PC_SI; params->inclination = 0.; params->s1x = 0.; params->s1y = 0.; params->s1z = 0.; params->s2x = 0.; params->s2y = 0.; params->s2z = 0.; params->lambda1 = 0.; params->lambda2 = 0.; strncpy(params->outname, "simulation.dat", 256); /* output to this file */ params->ampPhase = 0; /* output h+ and hx */ params->verbose = 0; /* No verbosity */ /* consume command line */ for (i = 1; i < argc; ++i) { if ((strcmp(argv[i], "-h") == 0) || (strcmp(argv[i], "--help") == 0)) { printf("%s", usage); XLALFree(params); exit(0); } else if (strcmp(argv[i], "--verbose") == 0) { params->verbose = 1; } else if (strcmp(argv[i], "--amp-phase") == 0) { params->ampPhase = 1; } else if ( ( i == argc ) || ( !argv[i+1] ) ) { XLALPrintError("Error: value required for option %s\n", argv[i]); } else if (strcmp(argv[i], "--approximant") == 0) { params->approximant = XLALSimInspiralGetApproximantFromString(argv[++i]); if ( (int) params->approximant == XLAL_FAILURE) { XLALPrintError("Error: invalid value %s for --interaction-flag\n", argv[i]); goto fail; } } else if (strcmp(argv[i], "--domain") == 0) { i++; if (strcmp(argv[i], "TD") == 0) params->domain = LAL_SIM_DOMAIN_TIME; else if (strcmp(argv[i], "FD") == 0) params->domain = LAL_SIM_DOMAIN_FREQUENCY; else { XLALPrintError("Error: Unknown domain\n"); goto fail; } } else if (strcmp(argv[i], "--phase-order") == 0) { params->phaseO = atoi(argv[++i]); } else if (strcmp(argv[i], "--amp-order") == 0) { params->ampO = atoi(argv[++i]); } else if (strcmp(argv[i], "--phiRef") == 0) { params->phiRef = atof(argv[++i]); } else if (strcmp(argv[i], "--fRef") == 0) { params->fRef = atof(argv[++i]); } else if (strcmp(argv[i], "--sample-rate") == 0) { params->deltaT = 1./atof(argv[++i]); } else if (strcmp(argv[i], "--deltaF") == 0) { params->deltaF = atof(argv[++i]); } else if (strcmp(argv[i], "--m1") == 0) { params->m1 = atof(argv[++i]) * LAL_MSUN_SI; } else if (strcmp(argv[i], "--m2") == 0) { params->m2 = atof(argv[++i]) * LAL_MSUN_SI; } else if (strcmp(argv[i], "--spin1x") == 0) { params->s1x = atof(argv[++i]); } else if (strcmp(argv[i], "--spin1y") == 0) { params->s1y = atof(argv[++i]); } else if (strcmp(argv[i], "--spin1z") == 0) { params->s1z = atof(argv[++i]); } else if (strcmp(argv[i], "--spin2x") == 0) { params->s2x = atof(argv[++i]); } else if (strcmp(argv[i], "--spin2y") == 0) { params->s2y = atof(argv[++i]); } else if (strcmp(argv[i], "--spin2z") == 0) { params->s2z = atof(argv[++i]); } else if (strcmp(argv[i], "--tidal-lambda1") == 0) { params->lambda1 = atof(argv[++i]); } else if (strcmp(argv[i], "--tidal-lambda2") == 0) { params->lambda2 = atof(argv[++i]); } else if (strcmp(argv[i], "--spin-order") == 0) { XLALSimInspiralSetSpinOrder( params->waveFlags, atoi(argv[++i]) ); } else if (strcmp(argv[i], "--tidal-order") == 0) { XLALSimInspiralSetTidalOrder( params->waveFlags, atoi(argv[++i]) ); } else if (strcmp(argv[i], "--f-min") == 0) { params->f_min = atof(argv[++i]); } else if (strcmp(argv[i], "--f-max") == 0) { params->f_max = atof(argv[++i]); } else if (strcmp(argv[i], "--distance") == 0) { params->distance = atof(argv[++i]) * 1e6 * LAL_PC_SI; } else if (strcmp(argv[i], "--inclination") == 0) { params->inclination = atof(argv[++i]); } else if (strcmp(argv[i], "--axis") == 0) { XLALSimInspiralSetFrameAxis( params->waveFlags, XLALGetFrameAxisFromString(argv[++i]) ); if ( (int) XLALSimInspiralGetFrameAxis(params->waveFlags) == (int) XLAL_FAILURE) { XLALPrintError("Error: invalid value %s for --axis\n", argv[i]); goto fail; } } else if (strcmp(argv[i], "--modes") == 0) { XLALSimInspiralSetModesChoice( params->waveFlags, XLALGetHigherModesFromString(argv[++i]) ); if ( (int) XLALSimInspiralGetModesChoice(params->waveFlags) == (int) XLAL_FAILURE) { XLALPrintError("Error: invalid value %s for --modes\n", argv[i]); goto fail; } } else if (strcmp(argv[i], "--nonGRpar") == 0) { char name[100]; strcpy(name,argv[++i]); if ( ( i == argc ) || ( !argv[i+1] ) ) { XLALPrintError("Error: 'name value' pair required for option %s\n", argv[i-1]); } else if (params->nonGRparams==NULL) { params->nonGRparams=XLALSimInspiralCreateTestGRParam(name,atof(argv[++i])); } else { XLALSimInspiralAddTestGRParam(¶ms->nonGRparams,name,atof(argv[++i])); } } else if (strcmp(argv[i], "--outname") == 0) { strncpy(params->outname, argv[++i], 256); } else { XLALPrintError("Error: invalid option: %s\n", argv[i]); goto fail; } } return params; fail: printf("%s", usage); XLALFree(params); exit(1); }