IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Oct 16, 2017, 4:31:22 PM (9 years ago)
Author:
eugene
Message:

fix uniqpair, add test for uniqpair

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ohana.20170822/src/opihi/cmd.data/uniqpair.c

    r40173 r40174  
    55
    66  int N;
    7   Vector *ID1vec = NULL, *ID2vec = NULL, *SEQvec = NULL, *OUTvec = NULL;
     7  Vector *ID1vec = NULL, *ID2vec = NULL, *OUTvec = NULL;
    88
    99  int VERBOSE = FALSE;
     
    1414
    1515  Vector *SEQdup = NULL;
    16   if ((N = get_argument (argc, argv, "-save-dups"))) {
     16  if ((N = get_argument (argc, argv, "-d"))) {
    1717    remove_argument (N, &argc, argv);
    1818    if ((SEQdup = SelectVector (argv[N], ANYVECTOR, TRUE)) == NULL) {
     
    3333  }
    3434
    35   if (argc != 5) {
    36     gprint (GP_ERR, "USAGE: uniqpair (ID1) (ID2) (IDout) -c count\n");
     35  if (argc != 4) {
     36    gprint (GP_ERR, "USAGE: uniqpair (ID1) (ID2) (IDout) [-c count] [-d dupindex]\n");
     37    gprint (GP_ERR, "  merge ID1 and ID2 (32 bit int values) into a single index and find unique entries\n");
     38    gprint (GP_ERR, "  -c count: save the number of each unique entry in the count vector\n");
     39    gprint (GP_ERR, "  -d dupindex: save the sequence number of duplicate entries in the dupindex vector\n");
    3740    return (FALSE);
    3841  }
     
    7477  opihi_int *SEQdata = NULL;
    7578  ALLOCATE (IDfull, opihi_int, ID1vec->Nelements);
    76   ALLOCATE (SEQdata, opihi_int, SEQvec[0].Nelements);
     79  ALLOCATE (SEQdata, opihi_int, ID1vec->Nelements);
    7780  for (int i = 0; i < ID1vec->Nelements; i++) {
    7881    IDfull[i] = ID1[i] + (ID2[i] << 32);
     
    8083  }
    8184
    82   llsorttwo (IDfull, SEQdata, ID1vec->Nelements);
     85  // XXX watch out: this all needs to get rationalized...
     86  llsortpair ((off_t *)IDfull, (off_t *)SEQdata, ID1vec->Nelements);
    8387
    8488  opihi_int *vtgt = OUTvec->elements.Int;
     
    111115      // we want to save SEQdata values for the duplicates
    112116      // SEQdata[i-Ndup] .. SEQdata[i-N
    113       for (j = i - Ndup; j < i; j++) {
     117      for (int j = i - Ndup; j < i; j++) {
    114118        SEQdup->elements.Int[NseqDup] = SEQdata[j];
    115119        NseqDup ++;
     
    129133  if (SEQdup) {
    130134    SEQdup->Nelements = NseqDup;
    131     REALLOCATE (SEQdup->elements.Int, opihi_int, Nseqdup);
     135    REALLOCATE (SEQdup->elements.Int, opihi_int, NseqDup);
    132136  }
    133137
     
    135139  OUTvec->elements.Int = vtgt;
    136140  ResetVector (OUTvec, OPIHI_INT, Nout);
    137   if (cvec) ResetVector (cvec, OPIHI_INT, Nout);
     141  if (CNTvec) ResetVector (CNTvec, OPIHI_INT, Nout);
    138142
    139143  return (TRUE);
    140144}
    141 
    142 
    143 
    144 }
Note: See TracChangeset for help on using the changeset viewer.