YMODEMCLASS::YMODEMCLASS (OBJECTID oiFT, char *fileName, BOOL sORr) :XMODEMCLASS (oiFT, fileName, sORr) { char * p ; FILETRANSFER fltr(oiFT) ; fileCount = 0 ; if (sORr) { filename = new char[2048] ; p = filename ; while(lstrlen(fileName)) { CopyMemory(p, fileName, lstrlen(fileName)+1) ; fileName = fileName+lstrlen(fileName)+1 ; p=p+lstrlen(p)+1 ; fileCount ++ ; } p = '\0' ; } else { filename = new char[256] ; lstrcpy (filename, fileName) ; } lErrorCount =0 ; maxTimeout = fltr.data0->maxTimeout*60 ; maxTrytimes = fltr.data0->maxTrytimes ; bSeq = 0 ; fCRC = TRUE ; dataBlock0 = TRUE ; AObjSetRuntimeInfo (oiFT, (long)this) ; }
void rankSufmatch ( void *space, Suffixarray *a, PairSint *matches, Uint len, Uint maxmatches, Uint S, IntSequence **s, Uint noofseqs, double (*fltr)( void *, Matchtype *, IntSequence *, IntSequence *, Uint *, Uint, Uint, void *), Matchtype* (*sel)( void *, Matchtype *, Uint, IntSequence *, IntSequence **, void *), int (*handler)( void *, Matchtype *, IntSequence **, Uint, Uint, void *), IntSequence *queryseq, void *info, double *scores, unsigned char depictsw ) { Matchtype key, *cur, *occ=NULL; int i=0, j=0, k=0, l=0, r=0, retval=0; int *hashTable; double t; Uint *ptr; hashTable = ALLOCMEMORY(space, NULL, int, (noofseqs+1)); memset(hashTable, -1, sizeof(int)*(noofseqs+1)); for(i=0; i < len; i++) { if(matches[i].b >= ((matches[i].a))) { for(j=matches[i].a; j <= matches[i].b; j++) { key.id = getMultiSeqIndex(a->seq, &a->seq->sequences[a->suftab[j]]); r = hashTable[key.id]; if (r == -1) { occ = ALLOCMEMORY(space, occ, Matchtype, k+1); hashTable[key.id]=(&occ[k])-(occ); initMatchtype(&occ[k], key.id); cur = &occ[k]; k++; } else { cur = ((Matchtype*)(occ+r)); } /*score the matches if no < maxmatches*/ if ((matches[i].b-matches[i].a) < maxmatches) { ptr = &a->seq->sequences[a->suftab[j]]); t=fltr(space, cur, queryseq, s[cur->id], ptr, S, i, info); if (t == -1) break; } } } }
int main(int argc, char* argv[]) { FILE *f; // исходный файл FILE *f1; // файл для печати int *n=0, *c=0; // указатель на начало и после конца массива int *m=0, *d=0; // указатель на начало и после конца отфилтрованного массива setlocale(0, "russian"); if (argc < 4) { printf("Нет достаточного числа аргументов!"); return BADARG; } f = fopen(argv[1], "r"); if (f == NULL) { printf("Невозможно открыть исходный файл!"); return BADINFILE; } if (readarray(f, &n, &c)) { printf("Невозможно выделить память под исходный массив!"); fclose(f); return FAILEDINMEM; } f1 = fopen(argv[2], "w"); if (f1 == NULL) { printf("Невозможно открыть файл результата!");\ fclose(f); free(n); return BADOUTFILE; } if (strcmp(argv[3], "-flt") == 0) { if (fltr(n, c, &m, &d)) { printf("Невозможно выделить память под отфильтрованный массив!"); fclose(f); fclose(f1); free(n); return FAILEDOUTMEM; } myqsort(m, d - m, sizeof(*m), compare_int); printmass(f1, m, d); free(n); free(m); } else { myqsort(n, c - n, sizeof(*n), compare_int); printmass(f1, n, c); free(n); } fclose(f); fclose(f1); printf("Успешно!"); getch(); return 0; }
bool NucleicAcidTools::symm_match( clipper::MiniMol& molwrk, const clipper::MiniMol& molref ) { clipper::Spacegroup spg1 = clipper::Spacegroup(clipper::Spacegroup::P1); clipper::Spacegroup spgr = molwrk.spacegroup(); clipper::Cell cell = molwrk.cell(); // calculate extent of model clipper::Atom_list atomr = molref.atom_list(); clipper::Range<clipper::ftype> urange, vrange, wrange; clipper::Coord_frac cfr( 0.0, 0.0, 0.0 ); for ( int i = 0; i < atomr.size(); i++ ) { clipper::Coord_frac cf = atomr[i].coord_orth().coord_frac( cell ); cfr += cf; urange.include( cf.u() ); vrange.include( cf.v() ); wrange.include( cf.w() ); } clipper::Coord_frac cf0( urange.min(), vrange.min(), wrange.min() ); clipper::Coord_frac cf1( urange.max(), vrange.max(), wrange.max() ); cfr = (1.0/double(atomr.size())) * cfr; // calculate mask using wrk cell and ref atoms clipper::Resolution reso( 5.0 ); clipper::Grid_sampling grid( spg1, cell, reso ); clipper::Grid_range grng( grid, cf0, cf1 ); grng.add_border(4); clipper::NXmap<float> nxmap( cell, grid, grng ), nxflt( cell, grid, grng ); clipper::EDcalc_mask<float> maskcalc( 2.0 ); nxmap = 0.0; maskcalc( nxmap, atomr ); MapFilterFn_g5 fn; clipper::MapFilter_fft<float> fltr( fn, 1.0, clipper::MapFilter_fft<float>::Relative ); fltr( nxflt, nxmap ); // now score each chain, symmetry and offset in turn for ( int c = 0; c < molwrk.size(); c++ ) { double bestscr = 0.0; int bestsym = 0; clipper::Coord_frac bestoff( 0.0, 0.0, 0.0 ); const clipper::Coord_frac cfh( 0.5, 0.5, 0.5 ); for ( int sym = 0; sym < spgr.num_symops(); sym++ ) { clipper::Atom_list atomw = molwrk[c].atom_list(); clipper::RTop_orth rtop = spgr.symop(sym).rtop_orth( cell ); clipper::Coord_orth cow( 0.0, 0.0, 0.0 ); for ( int a = 0; a < atomw.size(); a++ ) { atomw[a].transform( rtop ); cow += atomw[a].coord_orth(); } if ( atomw.size() > 0 ) cow = (1.0/double(atomw.size())) * cow; clipper::Coord_frac cfw = cow.coord_frac( cell ); clipper::Coord_frac cfwt = cfw.lattice_copy_near( cfr - cfh ); clipper::Coord_frac off0 = cfwt - cfw; // try offsets for ( double du = 0.0; du <= 1.01; du += 1.0 ) for ( double dv = 0.0; dv < 1.01; dv += 1.0 ) for ( double dw = 0.0; dw < 1.01; dw += 1.0 ) { clipper::Coord_frac off( rint( off0.u() ) + du, rint( off0.v() ) + dv, rint( off0.w() ) + dw ); clipper::Coord_orth ofo = off.coord_orth( cell ); double scr = 0.0; for ( int a = 0; a < atomw.size(); a++ ) { clipper::Coord_orth coa = atomw[a].coord_orth() + ofo; clipper::Coord_grid cga = nxflt.coord_map( coa ).coord_grid(); if ( nxflt.in_map( cga ) ) scr += nxflt.get_data( cga ); } if ( scr > bestscr ) { bestscr = scr; bestsym = sym; bestoff = off; } } } // now transform using the best operator clipper::Coord_orth cot = bestoff.coord_orth( cell ); clipper::RTop_orth rtop = spgr.symop(bestsym).rtop_orth( cell ); rtop = clipper::RTop_orth( rtop.rot(), rtop.trn()+cot ); molwrk[c].transform( rtop ); } return true; }