float ScoreMove(int j1, int j2, int obs) { if (j1 == j2) { float trans = pStay(j1); float em = stayDist(obs, j1); return log(trans * em); } else if (j1 + 1 == j2) { float ps = pStay(j1); float pm = (1.0f - ps) * pMerge(j1); float trans = 1.0f - ps - pm; float em = moveDist(obs, j1); return log(trans * em); } else if (j1 + 2 == j2) { float ps = pStay(j1); float pm = (1.0f - ps) * pMerge(j1); if (obs == templateBase(j1)) return log(pm); else return NEG_INF; } return NEG_INF; }
float Inc(int i, int j) const { assert(0 <= j && j < TemplateLength() && 0 <= i && i < ReadLength() ); float ps = pStay(j); float pm = (1.0f - ps) * pMerge(j); float trans = 1.0f - ps - pm; float em = moveDist(features_.Channel[i], j); return log(trans * em); }
float Merge(int i, int j) const { assert(0 <= j && j < TemplateLength() - 1 && 0 <= i && i < ReadLength() ); if (!(features_.Channel[i] == channelTpl_[j] && features_.Channel[i] == channelTpl_[j + 1]) ) { return -FLT_MAX; } else { float ps = pStay(j); float pm = (1.0f - ps) * pMerge(j); return log(pm); } }
float Del(int i, int j) const { assert(0 <= j && j < TemplateLength() && 0 <= i && i <= ReadLength() ); if ( (!PinStart() && i == 0) || (!PinEnd() && i == ReadLength()) ) { return 0.0f; } else { float ps = pStay(j); float pm = (1.0f - ps) * pMerge(j); float trans = 1.0f - ps - pm; float em = moveDist(0, j); return log(trans * em); } }
bool WldGenericSetup::parse(IniProcessing *setup, PGEString imgPath, uint32_t defaultGrid, WldGenericSetup *merge_with, PGEString *error) { #define pMerge(param, def) (merge_with ? (merge_with->param) : (def)) #define pMergeMe(param) (merge_with ? (merge_with->param) : (param)) int errCode = PGE_ImageInfo::ERR_OK; PGEString section; /*************Buffers*********************/ uint32_t w = 0, h = 0; /*************Buffers*********************/ if(!setup) { if(error) *error = "setup QSettings is null!"; return false; } section = StdToPGEString(setup->group()); setup->read("group", group, pMergeMe(group)); setup->read("category", category, pMergeMe(category)); setup->read("description", description, pMerge(description, "")); setup->read("image", image_n, pMerge(image_n, "")); if(!merge_with && !PGE_ImageInfo::getImageSize(imgPath + image_n, &w, &h, &errCode)) { if(error) { switch(errCode) { case PGE_ImageInfo::ERR_UNSUPPORTED_FILETYPE: *error = "Unsupported or corrupted file format: " + imgPath + image_n; break; case PGE_ImageInfo::ERR_NOT_EXISTS: *error = "image file is not exist: " + imgPath + image_n; break; case PGE_ImageInfo::ERR_CANT_OPEN: *error = "Can't open image file: " + imgPath + image_n; break; } } return false; } assert(merge_with || ((w > 0) && (h > 0) && "Width or height of image has zero or negative value!")); mask_n = PGE_ImageInfo::getMaskName(image_n); setup->read("icon", icon_n, pMerge(icon_n, "")); setup->read("grid", grid, pMerge(grid, defaultGrid)); setup->read("animated", animated, pMerge(animated, 0)); setup->read("frames", frames, pMerge(frames, 1)); NumberLimiter::apply(frames, uint32_t(1u)); setup->read("frame-speed", framespeed, pMerge(framespeed, 175)); NumberLimiter::apply(framespeed, uint32_t(1u)); frame_h = animated ? Maths::uRound(double(h) / double(frames)) : h; NumberLimiter::apply(frame_h, uint32_t(0u)); setup->read("display-frame", display_frame, pMerge(display_frame, 0)); setup->read("map3d-vertical", map3d_vertical, pMerge(map3d_vertical, false)); setup->read("map3d-stackables", map3d_stackables, pMerge(map3d_stackables, map3d_stackables)); //Rows and cols for table-like element sets setup->read("row", row, pMerge(row, 0)); setup->read("col", col, pMerge(col, 0)); #undef pMerge #undef pMergeMe return true; }