diff --git a/fourmess.c b/fourmess.c index b6cb77b5..c497e21e 100644 --- a/fourmess.c +++ b/fourmess.c @@ -753,11 +753,11 @@ static int GenInconsumerate(pSICSOBJ self, SConnection * pCon, { double hkl[3], qvec[3]; pFourMess priv = self->pPrivate; - int i, j; + int i, j, iGen = 0, startCount; if (nPar < 3) { SCWrite(pCon, - "ERROR: need q displacement vector with three compononts", + "ERROR: need q displacement vector with three components", eError); return 0; } @@ -765,31 +765,32 @@ static int GenInconsumerate(pSICSOBJ self, SConnection * pCon, qvec[1] = par[1]->value.v.doubleValue; qvec[2] = par[2]->value.v.doubleValue; - for (i = 0; i < priv->masterCount; i++) { + startCount = priv->masterCount; + for (i = 0; i < startCount; i++) { GetRefIndex(priv->messList, i, hkl); - if(ABS(hkl[0])+ABS(hkl[1])+ABS(hkl[2]) < .3){ - /* - * Stop generation for 0,0,0, - */ - continue; - } for (j = 0; j < 3; j++) { hkl[j] += qvec[j]; } AddRefIdx(priv->messList, hkl); + iGen++; GetRefIndex(priv->messList, i, hkl); for (j = 0; j < 3; j++) { hkl[j] -= qvec[j]; } - AddRefIdx(priv->messList, hkl); + if(FindHKL(priv->messList, hkl[0], hkl[1], hkl[2]) == NULL){ + AddRefIdx(priv->messList, hkl); + iGen++; + } if(SCGetInterrupt(pCon) != eContinue){ SCWrite(pCon,"ERROR: generating incommensurate reflections aborted", eError); return 0; } + if( (i % 50) == 0 ){ + SCPrintf(pCon,eLog, "%d of %d input reflections processed", i, startCount); + } } SCPrintf(pCon, eValue, - "%d additional inconsumerate reflections generated", - priv->masterCount*2); + "%d additional inconsumerate reflections generated", iGen); return 1; } diff --git a/reflist.c b/reflist.c index 0f0833e1..968614e3 100644 --- a/reflist.c +++ b/reflist.c @@ -25,6 +25,8 @@ static char undef[] = "Undefined"; #define IDXFMT " %8.4f" #define ANGFMT " %8.2f" +#define ABS(x) (x < 0 ? -(x) : (x)) + int CountTblCmd(pSICSOBJ self, SConnection *pCon, pHdb commandNode, pHdb par[], int nPar); /* from hdbtable.c */ @@ -369,6 +371,32 @@ static int ShowCmd(pSICSOBJ self, SConnection * pCon, pHdb commandNode, return 1; } /*-----------------------------------------------------------------------*/ +const char *FindHKL(pSICSOBJ self, double h, double k, double l) +{ + pHdb node, idx; + + node = GetHipadabaNode(self->objectNode, "data"); + node = node->child; + while(node != NULL){ + idx = node->child; + if(ABS(idx->value.v.doubleValue-h) > .1){ + node = node->next; + continue; + } + idx = idx->next; + if(ABS(idx->value.v.doubleValue-k) > .1){ + node = node->next; + continue; + } + idx = idx->next; + if(ABS(idx->value.v.doubleValue-l) < .1){ + return node->name; + } + node = node->next; + } + return NULL; +} +/*-----------------------------------------------------------------------*/ static int NamesCmd(pSICSOBJ self, SConnection * pCon, pHdb commandNode, pHdb par[], int nPar) { @@ -687,10 +715,10 @@ int GetRefIndexID(pSICSOBJ refl, char *id, double hkl[]) snprintf(path, 132, "data/%s", id); node = GetHipadabaNode(refl->objectNode, path); if (node != NULL) { - child = node->child; - for(i = 0; i < 3; i++, child = child->next){ - hkl[i] = child->value.v.doubleValue; - } + child = node->child; + for(i = 0; i < 3; i++, child = child->next){ + hkl[i] = child->value.v.doubleValue; + } return 1; } else { return 0; diff --git a/reflist.h b/reflist.h index ea591e7c..f96bbadf 100644 --- a/reflist.h +++ b/reflist.h @@ -57,4 +57,6 @@ int GetRefFlag(pSICSOBJ refl, int idx); char *GetRefName(pSICSOBJ refl, int idx); +const char *FindHKL(pSICSOBJ self, double h, double k, double l); + #endif /*REFLIST_H_ */