Пример #1
0
  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;
  }
Пример #2
0
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);
}