Interface for Method I implemented

parent 506d9754
......@@ -442,6 +442,61 @@ int Analysis::RunAnalysis(const fs::path& filename, const fs::path& path)
}
}
}
if(_DoesUseMethodI) //method_I
{
if(_areaForMethod_I.empty())
{
Log->Write("ERROR: Method I selected with no measurement area!");
exit(EXIT_FAILURE);
}
#pragma omp parallel for
for(long unsigned int i=0; i<_areaForMethod_I.size(); i++)
{
Method_I method_I;
method_I.SetStartFrame(_StartFramesMethodI[i]);
method_I.SetStopFrame(_StopFramesMethodI[i]);
method_I.SetCalculateIndividualFD(_IndividualFDFlags[i]);
method_I.SetGeometryPolygon(_geoPoly[_areaForMethod_I[i]->_id]);
method_I.SetGeometryFileName(_geometryFileName);
method_I.SetGeometryBoundaries(_lowVertexX, _lowVertexY, _highVertexX, _highVertexY);
method_I.SetGridSize(_grid_size_X, _grid_size_Y);
method_I.SetOutputVoronoiCellData(_outputGraph);
method_I.SetPlotVoronoiGraph(_plotGraph);
method_I.SetPlotVoronoiIndex(_plotIndex);
method_I.SetDimensional(_isOneDimensional);
method_I.SetCalculateProfiles(_getProfile);
method_I.SetTrajectoriesLocation(path);
if(_cutByCircle)
{
method_I.Setcutbycircle(_cutRadius, _circleEdges);
}
method_I.SetMeasurementArea(_areaForMethod_I[i]);
bool result_I = method_I.Process(data,_scriptsLocation, _areaForMethod_I[i]->_zPos);
if(result_I)
{
Log->Write("INFO:\tSuccess with Method I uing measurement area id %d!\n",_areaForMethod_I[i]->_id);
std::cout << "INFO:\tSuccess with Method I using measurement area id "<< _areaForMethod_I[i]->_id << "\n";
if(_plotTimeseriesI[i])
{
string parameters_Timeseries= " " +_scriptsLocation.string()+"/_Plot_timeseries_rho_v.py -p "+ _projectRootDir.string()+VORO_LOCATION + " -n "+filename.string()+
" -f "+boost::lexical_cast<std::string>(data.GetFps());
parameters_Timeseries = PYTHON + parameters_Timeseries;
std::cout << parameters_Timeseries << "\n;";
int res=system(parameters_Timeseries.c_str());
Log->Write("INFO:\t time series result: %d ",res);
}
}
else
{
Log->Write("INFO:\tFailed with Method I using measurement area id %d!\n",_areaForMethod_I[i]->_id);
}
}
}
return 0;
}
......
......@@ -129,6 +129,7 @@ ArgumentParser::ArgumentParser()
_isMethodB = false;
_isMethodC =false;
_isMethodD = false;
_isMethodI= false;
_isCutByCircle = false;
_isOutputGraph= false;
_isPlotGraph= false;
......@@ -274,8 +275,8 @@ bool ArgumentParser::ParseIniFile(const string& inifile)
//geometry
if(xMainNode->FirstChild("geometry"))
{
fs::path p(xMainNode->FirstChildElement("geometry")->Attribute("file"));
_geometryFileName = GetProjectRootDir() / p;
fs::path pathGeo(xMainNode->FirstChildElement("geometry")->Attribute("file"));
_geometryFileName = GetProjectRootDir() / pathGeo;
if(!fs::exists(_geometryFileName)){
Log->Write("ERROR: \tGeometry File <%s> does not exist", _geometryFileName.string().c_str());
return false;
......@@ -938,8 +939,159 @@ bool ArgumentParser::ParseIniFile(const string& inifile)
}
}
}
// method I
TiXmlElement* xMethod_I=xMainNode->FirstChildElement("method_I");
if(xMethod_I) {
if(string(xMethod_I->Attribute("enabled"))=="true")
{
_isMethodI = true;
Log->Write("INFO: \tMethod I is selected" );
for(TiXmlElement* xMeasurementArea=xMainNode->FirstChildElement("method_I")->FirstChildElement("measurement_area");
xMeasurementArea; xMeasurementArea = xMeasurementArea->NextSiblingElement("measurement_area"))
{
_areaIDforMethodI.push_back(xmltoi(xMeasurementArea->Attribute("id")));
Log->Write("INFO: \tMeasurement area id <%d> will be used for analysis", xmltoi(xMeasurementArea->Attribute("id")));
if(xMeasurementArea->Attribute("start_frame"))
{
if(string(xMeasurementArea->Attribute("start_frame"))!="None")
{
_start_frames_MethodD.push_back(xmltoi(xMeasurementArea->Attribute("start_frame")));
Log->Write("\tthe analysis starts from frame <%d>",xmltoi(xMeasurementArea->Attribute("start_frame")));
}
else
{
_start_frames_MethodI.push_back(-1);
}
}
else
{
_start_frames_MethodI.push_back(-1);
}
if(xMeasurementArea->Attribute("stop_frame"))
{
if(string(xMeasurementArea->Attribute("stop_frame"))!="None")
{
_stop_frames_MethodI.push_back(xmltoi(xMeasurementArea->Attribute("stop_frame")));
Log->Write("\tthe analysis stops from frame <%d>", xmltoi(xMeasurementArea->Attribute("stop_frame")));
}
else
{
_stop_frames_MethodI.push_back(-1);
}
}
else
{
_stop_frames_MethodI.push_back(-1);
}
if(xMeasurementArea->Attribute("get_individual_FD"))
{
if(string(xMeasurementArea->Attribute("get_individual_FD"))=="true")
{
_individual_FD_flags.push_back(true);
Log->Write("INFO: \tIndividual FD will be output");
}
else
{
_individual_FD_flags.push_back(false);
}
}
else
{
_individual_FD_flags.push_back(false);
}
if(xMeasurementArea->Attribute("plot_time_series"))
{
if(string(xMeasurementArea->Attribute("plot_time_series"))=="true")
{
_isPlotTimeSeriesI.push_back(true);
Log->Write("\tThe Time series will be plotted!! ");
}
else
{
_isPlotTimeSeriesI.push_back(false);
}
}
else
{
_isPlotTimeSeriesI.push_back(false);
}
}
if (xMethod_I->FirstChildElement("one_dimensional"))
{
if ( string(xMethod_I->FirstChildElement("one_dimensional")->Attribute("enabled"))=="true")
{
_isOneDimensional=true;
Log->Write("INFO: \tThe data will be analyzed with one dimensional way!!");
}
}
if ( xMethod_I->FirstChildElement("cut_by_circle"))
{
if ( string(xMethod_I->FirstChildElement("cut_by_circle")->Attribute("enabled"))=="true")
{
_isCutByCircle=true;
_cutRadius=xmltof(xMethod_I->FirstChildElement("cut_by_circle")->Attribute("radius"))*M2CM;
_circleEdges=xmltoi(xMethod_I->FirstChildElement("cut_by_circle")->Attribute("edges"));
Log->Write("INFO: \tEach Voronoi cell will be cut by a circle with the radius of < %f > m!!", _cutRadius*CMtoM);
Log->Write("INFO: \tThe circle is discretized to a polygon with < %d> edges!!", _circleEdges);
}
}
if ( xMethod_I->FirstChildElement("output_voronoi_cells"))
{
auto enabled = xMethod_I->FirstChildElement("output_voronoi_cells")->Attribute("enabled");
if(enabled)
if ( string(enabled)=="true")
{
_isOutputGraph=true;
Log->Write("INFO: \tData of voronoi diagram is asked to output" );
auto plot_graphs = xMethod_I->FirstChildElement("output_voronoi_cells")->Attribute("plot_graphs");
if(plot_graphs)
{
if (string(plot_graphs)=="true")
{
_isPlotGraph = true;
Log->Write("INFO: \tGraph of voronoi diagram will be plotted");
}
auto plot_index = xMethod_I->FirstChildElement("output_voronoi_cells")->Attribute(
"plot_index");
if (plot_index)
if (string(plot_index)=="true")
{
_isPlotIndex = true;
Log->Write(
"INFO: \tVoronoi diagram will be plotted with index of pedestrians");
} // plot_index
} // plot_graphs
}// enabled
}
if ( xMethod_I->FirstChildElement("steadyState"))
{
_steadyStart =xmltof(xMethod_I->FirstChildElement("steadyState")->Attribute("start"));
_steadyEnd =xmltof(xMethod_I->FirstChildElement("steadyState")->Attribute("end"));
Log->Write("INFO: \tthe steady state is from <%f> to <%f> frames", _steadyStart, _steadyEnd);
}
if(xMethod_I->FirstChildElement("profiles"))
{
if ( string(xMethod_I->FirstChildElement("profiles")->Attribute("enabled"))=="true")
{
_isGetProfile = true;
_grid_size_X =xmltof(xMethod_I->FirstChildElement("profiles")->Attribute("grid_size_x"))*M2CM;
_grid_size_Y =xmltof(xMethod_I->FirstChildElement("profiles")->Attribute("grid_size_y"))*M2CM;
Log->Write("INFO: \tProfiles will be calculated" );
Log->Write("INFO: \tThe discretized grid size in x, y direction is: < %f >m by < %f >m ",_grid_size_X*CMtoM, _grid_size_Y*CMtoM);
}
}
}
}
Log->Write("INFO: \tFinish parsing inifile");
if(!(_isMethodA || _isMethodB || _isMethodC || _isMethodD))
if(!(_isMethodA || _isMethodB || _isMethodC || _isMethodD || _isMethodI))
{
Log->Write("WARNING: No measurement method enabled. Nothing to do.");
exit(EXIT_SUCCESS);
......
......@@ -69,6 +69,7 @@ private:
bool _isMethodB;
bool _isMethodC;
bool _isMethodD;
bool _isMethodI;
bool _isCutByCircle;
double _cutRadius;
int _circleEdges;
......@@ -88,15 +89,19 @@ private:
std::vector<int> _areaIDforMethodB;
std::vector<int> _areaIDforMethodC;
std::vector<int> _areaIDforMethodD;
std::vector<int> _areaIDforMethodI;
float _grid_size_X;
float _grid_size_Y;
int _log;
std::vector<int> _start_frames_MethodD;
std::vector<int> _stop_frames_MethodD;
std::vector<int> _start_frames_MethodI;
std::vector<int> _stop_frames_MethodI;
std::vector<bool> _individual_FD_flags;
std::vector<bool> _isPlotTimeSeriesA;
std::vector<bool> _isPlotTimeSeriesC;
std::vector<bool> _isPlotTimeSeriesD;
std::vector<bool> _isPlotTimeSeriesI;
std::vector<int> _timeIntervalA;
......@@ -137,6 +142,8 @@ public:
std::vector<int> GetAreaIDforMethodD() const;
std::vector<int> GetStartFramesMethodD() const;
std::vector<int> GetStopFramesMethodD() const;
std::vector<int> GetStartFramesMethodI() const;
std::vector<int> GetStopFramesMethodI() const;
std::vector<bool> GetIndividualFDFlags() const;
bool GetIsCutByCircle() const;
double GetCutRadius() const;
......@@ -147,6 +154,7 @@ public:
std::vector<bool> GetIsPlotTimeSeriesA() const;
std::vector<bool> GetIsPlotTimeSeriesC() const;
std::vector<bool> GetIsPlotTimeSeriesD() const;
std::vector<bool> GetIsPlotTimeSeriesI() const;
bool GetIsOneDimensional() const;
bool GetIsIndividualFD() const;
polygon_2d GetAreaIndividualFD() const;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment