bool Preprocess::Callback::Cleanup(bool success) { if (currentPageId!=0) { StoreCurrentPage(); } nodeWriter.SetPos(0); nodeWriter.Write(nodeCount); wayWriter.SetPos(0); wayWriter.Write(wayCount+areaCount); coastlineWriter.SetPos(0); coastlineWriter.Write(coastlineCount); turnRestrictionWriter.SetPos(0); turnRestrictionWriter.Write(turnRestrictionCount); multipolygonWriter.SetPos(0); multipolygonWriter.Write(multipolygonCount); coordWriter.SetPos(0); coordWriter.Write(coordPageSize); FileOffset coordIndexOffset=coordPageCount*coordPageSize*2*sizeof(uint32_t); coordWriter.Write(coordIndexOffset); coordWriter.SetPos(coordIndexOffset); coordWriter.Write((uint32_t)coordIndex.size()); for (CoordPageOffsetMap::const_iterator entry=coordIndex.begin(); entry!=coordIndex.end(); ++entry) { coordWriter.Write(entry->first); coordWriter.Write(entry->second); } nodeWriter.Close(); wayWriter.Close(); coastlineWriter.Close(); coordWriter.Close(); turnRestrictionWriter.Close(); multipolygonWriter.Close(); if (success) { progress.Info(std::string("Coords: ")+NumberToString(coordCount)); progress.Info(std::string("Coord pages: ")+NumberToString(coordIndex.size())); progress.Info(std::string("Nodes: ")+NumberToString(nodeCount)); progress.Info(std::string("Ways/Areas/Sum: ")+NumberToString(wayCount)+" "+ NumberToString(areaCount)+" "+ NumberToString(wayCount+areaCount)); progress.Info(std::string("Relations: ")+NumberToString(relationCount)); progress.Info(std::string("Coastlines: ")+NumberToString(coastlineCount)); progress.Info(std::string("Turnrestrictions: ")+NumberToString(turnRestrictionCount)); progress.Info(std::string("Multipolygons: ")+NumberToString(multipolygonCount)); for (const auto &type : typeConfig->GetTypes()) { size_t i=type->GetIndex(); bool isEmpty=(type->CanBeNode() && nodeStat[i]==0) || (type->CanBeArea() && areaStat[i]==0) || (type->CanBeWay() && wayStat[i]==0); bool isImportant=!type->GetIgnore() && !type->GetName().empty() && type->GetName()[0]!='_'; if (isEmpty && isImportant) { progress.Warning("Type "+type->GetName()+ ": "+NumberToString(nodeStat[i])+" node(s), "+NumberToString(areaStat[i])+" area(s), "+NumberToString(wayStat[i])+" ways(s)"); } else { progress.Info("Type "+type->GetName()+ ": "+NumberToString(nodeStat[i])+" node(s), "+NumberToString(areaStat[i])+" area(s), "+NumberToString(wayStat[i])+" ways(s)"); } } } //std::cout << "Bounding box: " << "[" << minCoord.GetLat() << "," << minCoord.GetLon() << " x " << maxCoord.GetLat() << "," << maxCoord.GetLon() << "]" << std::endl; if (nodeSortingError) { progress.Error("Nodes are not sorted by increasing id"); } if (waySortingError) { progress.Error("Ways are not sorted by increasing id"); } if (relationSortingError) { progress.Error("Relations are not sorted by increasing id"); } if (nodeSortingError || waySortingError || relationSortingError) { return false; } if (success) { if (!DumpDistribution()) { return false; } if (!DumpBoundingBox()) { return false; } } return true; }
int Process(etPMode PMode, // processing mode int BkgDyadOfs, // offset background loci by this many bases to derive dyad loci int SmplDyadOfs, // offset sample loci by this many bases to derive dyad loci int WindDyad, // accept sample dyad as matching background loci if within +/- this many bases int NumIncludeChroms, // number of chromosome regular expressions to include char **ppszIncludeChroms, // array of include chromosome regular expressions int NumExcludeChroms, // number of chromosome expressions to exclude char **ppszExcludeChroms, // array of exclude chromosome regular expressions char *pszDyadFile, // CSV file containing background dyad loci char *pszSampleFile, // CSV file containing sample dyad loci char *pszRsltsFile) // output results to this file { int Rslt; Init(); #ifdef _WIN32 if((m_hOutFile = open(pszRsltsFile, _O_RDWR | _O_BINARY | _O_SEQUENTIAL | _O_CREAT | _O_TRUNC, _S_IREAD | _S_IWRITE ))==-1) #else if((m_hOutFile = open(pszRsltsFile, O_RDWR | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE ))==-1) #endif { gDiagnostics.DiagOut(eDLFatal,gszProcName,"Unable to create results output file: %s - %s",pszRsltsFile,strerror(errno)); Reset(); return(eBSFerrCreateFile); } if((Rslt=m_IncExclChroms.InitChromExclusion(NumIncludeChroms,ppszIncludeChroms,NumExcludeChroms,ppszExcludeChroms))!=eBSFSuccess) { Reset(); return(Rslt); } if((Rslt = LoadDyads(BkgDyadOfs,&m_RefDyads,pszDyadFile)) <= 0) { Reset(); return(Rslt); } gDiagnostics.DiagOut(eDLInfo,gszProcName,"Generating basic stats on background/reference dyads from '%s'",pszDyadFile); DyadicDistances(&m_RefDyads); gDiagnostics.DiagOut(eDLInfo,gszProcName,"Generating basic stats on background/reference dyads completed"); if(PMode == ePMNDyadOverlap) { if((Rslt = LoadDyads(SmplDyadOfs,&m_SampleDyads,pszSampleFile)) <= 0) { Reset(); return(Rslt); } gDiagnostics.DiagOut(eDLInfo,gszProcName,"Generating basic stats on sample dyads from '%s'",pszSampleFile); DyadicDistances(&m_SampleDyads); gDiagnostics.DiagOut(eDLInfo,gszProcName,"Generating basic stats on sample dyads completed"); gDiagnostics.DiagOut(eDLInfo,gszProcName,"Generating basic stats on dyads overlapping from '%s' onto '%s'",pszSampleFile,pszDyadFile); DyadicOverlaps(&m_RefDyads,&m_SampleDyads,WindDyad); gDiagnostics.DiagOut(eDLInfo,gszProcName,"Generating basic stats on dyads overlapping completed, %d from sample (%d) overlap reference (%d) within +/-%dnt", m_RefDyads.NumOverlaps,m_SampleDyads.NumDyads,m_RefDyads.NumDyads,WindDyad); } DumpDistribution(&m_RefDyads,pszDyadFile); if(PMode == ePMNDyadOverlap) DumpDistribution(&m_SampleDyads,pszSampleFile); Reset(); return(Rslt); }