IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Feb 20, 2012, 6:55:53 AM (14 years ago)
Author:
eugene
Message:

dvo_client with mextract connected to vector IO table now builds

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20111122/Ohana/src/opihi/dvo/mextract.c

    r33308 r33309  
    55# define PARALLEL_SERIAL 0
    66# define MAX_PATH_LENGTH 1024
     7
     8int HostTableLaunchJobs (HostTable *table, char *basecmd);
     9Vector **MergeVectors (Vector **vec, int *Nvec, Vector **invec, int Ninvec);
    710
    811int mextract (int argc, char **argv) {
     
    9396
    9497    // load fields from file
    95     // ReadVectorTables
     98    int    Nvec = 0;
     99    Vector **vec = NULL;
     100    for (i = 0; i < table->Nhosts; i++) {
     101      char resultFile[MAX_PATH_LENGTH];
     102      snprintf (resultFile, MAX_PATH_LENGTH, "%s/dvo.results.fits", table->hosts[i].pathname);
     103       
     104      int    Ninvec = 0;
     105      Vector **invec = ReadVectorTableFITS (resultFile, "MEXTRACT", &Ninvec);
     106
     107      vec = MergeVectors (vec, &Nvec, invec, Ninvec);
     108      if (vec != invec) {
     109        FreeVectorArray (invec, Ninvec);
     110      }
     111    }
     112
     113    for (i = 0; i < Nvec; i++) {
     114      AssignVector (vec[i], vec[i]->name, ANYVECTOR, TRUE);
     115    }
     116    free (vec);
     117
    96118    return TRUE;
    97119  }
     
    449471}
    450472
     473// take two arrays of vectors and merge equal named vectors.
     474// for ease, require that the order of the names match & number of vectors match
     475Vector **MergeVectors (Vector **vec, int *Nvec, Vector **invec, int Ninvec) {
     476
     477  int i, j;
     478
     479  if (vec == NULL) {
     480    *Nvec = Ninvec;
     481    return invec;
     482  }
     483
     484  myAssert (*Nvec == Ninvec, "programming error (1)");
     485
     486  for (i = 0; i < Ninvec; i++) {
     487    myAssert (!strcmp(vec[i]->name, invec[i]->name), "programming error (2)");
     488    myAssert (vec[i]->type == invec[i]->type, "programming error (2)");
     489
     490    if (vec[i]->type == OPIHI_FLT) {
     491      REALLOCATE (vec[i]->elements.Flt, opihi_flt, vec[i]->Nelements + invec[i]->Nelements);
     492      for (j = 0; j < invec[i]->Nelements; j++) {
     493        vec[i]->elements.Flt[i+j] = vec[i]->elements.Flt[j];
     494      }
     495    } else {
     496      REALLOCATE (vec[i]->elements.Int, opihi_int, vec[i]->Nelements + invec[i]->Nelements);
     497      for (j = 0; j < invec[i]->Nelements; j++) {
     498        vec[i]->elements.Int[i+j] = vec[i]->elements.Int[j];
     499      }
     500    }
     501    vec[i]->Nelements += invec[i]->Nelements;
     502  }
     503  return vec;
     504}
Note: See TracChangeset for help on using the changeset viewer.