Commit 0d4b4372 authored by Mohcine Chraibi's avatar Mohcine Chraibi

Merge branch 'develop' into 'master'

Develop in Master

See merge request !9
parents 2ad0b01d a6053882
Pipeline #9599 passed with stages
in 1 minute and 17 seconds
......@@ -85,3 +85,4 @@ scripts/stefan copy/
scripts/stefan/
test.py
/Release/
build*
......@@ -25,6 +25,7 @@ configure-linux:
script:
- mkdir -p build
- cd build
- which git
- cmake -DCMAKE_BUILD_TYPE=Debug -DBoost_NO_SYSTEM_PATHS=true -DBOOST_ROOT=~/boost_1_61_0 ..
- echo "configure | ${CI_PROJECT_DIR}"
stage: configure
......@@ -48,7 +49,8 @@ make-linux:
- cd build
- make -j$nproc
- echo "compile | ${CI_PROJECT_DIR}"
tags:
- linux
after_script:
- echo "End CI" # todo: run report script
This diff is collapsed.
......@@ -119,27 +119,6 @@ void Analysis::InitArgs(ArgumentParser* args)
{
string s = "Parameter:\n";
switch (args->GetLog()) {
case 0:
// no log file
//Log = new OutputHandler();
break;
case 1:
if(Log) delete Log;
Log = new STDIOHandler();
break;
case 2: {
char name[CLENGTH]="";
sprintf(name,"%s.P0.dat",args->GetErrorLogFile().c_str());
if(Log) delete Log;
Log = new FileHandler(name);
}
break;
default:
Log->Write("Wrong option for Log file!");
exit(0);
}
if(args->GetIsMethodA()) {
_DoesUseMethodA = true;
vector<int> Measurement_Area_IDs = args->GetAreaIDforMethodA();
......@@ -188,6 +167,7 @@ void Analysis::InitArgs(ArgumentParser* args)
_getProfile = args->GetIsGetProfile();
_outputGraph = args->GetIsOutputGraph();
_plotGraph = args->GetIsPlotGraph();
_plotIndex = args->GetIsPlotIndex();
_isOneDimensional=args->GetIsOneDimensional();
_vComponent = args->GetVComponent();
_IgnoreBackwardMovement =args->GetIgnoreBackwardMovement();
......@@ -273,7 +253,9 @@ std::map<int, polygon_2d> Analysis::ReadGeometry(const std::string& geometryFile
_highVertexY = geo_maxY;
_lowVertexX = geo_minX;
_lowVertexY = geo_minY;
//cout<<"INFO: \tGeometry polygon is:\t"<<dsv(geoPoly)<<endl;
// using boost::geometry::dsv;
// cout<<"INFO: \tGeometry polygon is:\t" << dsv(geoPoly[1])<<endl;
return geoPoly;
}
......@@ -375,7 +357,7 @@ int Analysis::RunAnalysis(const string& filename, const string& path)
Log->Write("INFO:\tSuccess with Method C using measurement area id %d!\n",_areaForMethod_C[i]->_id);
if(_plotTimeseriesC[i])
{
string parameters_Timeseries="python3 \""+_scriptsLocation+"/_Plot_timeseries_rho_v.py\" -p \""+ _projectRootDir+VORO_LOCATION + "\" -n "+filename+
string parameters_Timeseries="python \""+_scriptsLocation+"/_Plot_timeseries_rho_v.py\" -p \""+ _projectRootDir+VORO_LOCATION + "\" -n "+filename+
" -f "+boost::lexical_cast<std::string>(data.GetFps());
int res=system(parameters_Timeseries.c_str());
Log->Write("INFO:\t time series result: %d ",res);
......@@ -403,6 +385,7 @@ int Analysis::RunAnalysis(const string& filename, const string& path)
method_D.SetGridSize(_grid_size_X, _grid_size_Y);
method_D.SetOutputVoronoiCellData(_outputGraph);
method_D.SetPlotVoronoiGraph(_plotGraph);
method_D.SetPlotVoronoiIndex(_plotIndex);
method_D.SetDimensional(_isOneDimensional);
method_D.SetCalculateProfiles(_getProfile);
method_D.SetTrajectoriesLocation(path);
......@@ -417,7 +400,7 @@ int Analysis::RunAnalysis(const string& filename, const string& path)
Log->Write("INFO:\tSuccess with Method D using measurement area id %d!\n",_areaForMethod_D[i]->_id);
if(_plotTimeseriesD[i])
{
string parameters_Timeseries="python3 \""+_scriptsLocation+"/_Plot_timeseries_rho_v.py\" -p \""+ _projectRootDir+VORO_LOCATION + "\" -n "+filename+
string parameters_Timeseries="python \""+_scriptsLocation+"/_Plot_timeseries_rho_v.py\" -p \""+ _projectRootDir+VORO_LOCATION + "\" -n "+filename+
" -f "+boost::lexical_cast<std::string>(data.GetFps());
int res=system(parameters_Timeseries.c_str());
Log->Write("INFO:\t time series result: %d ",res);
......@@ -493,9 +476,5 @@ int Analysis::mkpath(char* file_path, mode_t mode)
}
return 0;
}
// delete
#endif
......@@ -2,7 +2,7 @@
* \file Analysis.h
* \date Oct 10, 2014
* \version v0.7
* \copyright <2009-2015> Forschungszentrum Jlich GmbH. All rights reserved.
* \copyright <2009-2015> Forschungszentrum Jülich GmbH. All rights reserved.
*
* \section License
* This file is part of JuPedSim.
......@@ -133,7 +133,11 @@ private:
int _circleEdges;
bool _getProfile; // Whether make field analysis or not
bool _outputGraph; // Whether output the data for plot the voronoi diagram each frame
bool _plotGraph; // Whether plot the voronoi diagram each frame
bool _plotGraph; // Whether plot the voronoi diagram each
// frame. if (outputGraph==true)
bool _plotIndex; // Whether plot the voronoi diagram each
// frame with index of pedesrians
// if (outputGraph==true and _polotGraph==true)
std::vector<bool> _plotTimeseriesA;
std::vector<bool> _plotTimeseriesC;
std::vector<bool> _plotTimeseriesD;
......
# Change Log
All notable changes to `jpsreport` will be documented in this file.
## v0.8.2 [unreleased]
## v0.8.3 [unreleased]
### Added
- Option to output log in a file instead of the screen fe66fa49
```
<logfile>log.txt</logfile>
```
- Output useful debug information like date, git and compiler versions. !6 and discussion in #79
- Option to plot Voronoi diagrams with index instead of little blue circles `plot_index`. Use as:
```xml
<output_voronoi_cells enabled="true" plot_graphs="true" plot_index="true"/>
```
- new format of returned polygons `"index | polygon"` 6fa459ad9ffe5a07699c05b655bcf90f114ed635
- Exit if `framerate` is not found. c1308ef8
### Changed
- Pass Matrix by reference bff89e48
- Better fonts in plot scripts. 56d6a8f7
### Fixed
- Ignore empty line in traj file. 3a3ae04e
- Fixes for profile plots. a8a1414c
- Fix parsing of framerate. 2ad0b01d
## v0.8.2 [06.11.2017]
### Added
......@@ -14,8 +39,7 @@ All notable changes to `jpsreport` will be documented in this file.
- Use Python3 in scripts.
### Fixed
- Fixed SegFault due to reading files from different OS. (9a42c9dd)
- Fix SegFault due to reading files from different OS. (9a42c9dd)
## v0.8.1 [11.10.2016]
......
......@@ -20,6 +20,56 @@ if (Boost_NO_SYSTEM_PATHS)
set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ${BOOST_LIBRARY_DIRS})
endif (Boost_NO_SYSTEM_PATHS)
find_package(Git REQUIRED) # no need for this msg. It comes from cmake.findgit()
find_program(GIT_SCM git DOC "Git version control")
mark_as_advanced(GIT_SCM)
find_file(GITDIR NAMES .git PATHS ${CMAKE_SOURCE_DIR} NO_DEFAULT_PATH)
if (GIT_SCM AND GITDIR)
# the commit's SHA1, and whether the building workspace was dirty or not
# describe --match=NeVeRmAtCh --always --tags --abbrev=40 --dirty
execute_process(COMMAND
"${GIT_EXECUTABLE}" --no-pager describe --tags --always --dirty
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
OUTPUT_VARIABLE GIT_SHA1
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
# branch
execute_process(
COMMAND "${GIT_EXECUTABLE}" rev-parse --abbrev-ref HEAD
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
OUTPUT_VARIABLE GIT_BRANCH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
# the date of the commit
execute_process(COMMAND
"${GIT_EXECUTABLE}" log -1 --format=%ad --date=local
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
OUTPUT_VARIABLE GIT_DATE
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
# the subject of the commit
execute_process(COMMAND
"${GIT_EXECUTABLE}" log -1 --format=%s
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
OUTPUT_VARIABLE GIT_COMMIT_SUBJECT
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
add_definitions("-DGIT_COMMIT_HASH=\"${GIT_SHA1}\"")
add_definitions("-DGIT_COMMIT_DATE=\"${GIT_DATE}\"")
add_definitions("-DGIT_COMMIT_SUBJECT=\"${GIT_COMMIT_SUBJECT}\"")
add_definitions("-DGIT_BRANCH=\"${GIT_BRANCH}\"")
else()
message(STATUS "Not in a git repo")
endif()
#set(EXECUTABLE_OUTPUT_PATH "../")
#INCLUDE_DIRECTORIES("./")
# message( STATUS "CMAKE_BINARY_DIR: " ${CMAKE_BINARY_DIR} )
......@@ -29,10 +79,11 @@ set(CMAKE_TEST_DIR ${CMAKE_SOURCE_DIR}/Utest)
set(JPSREPORT_MAJOR_VERSION 0)
set(JPSREPORT_MINOR_VERSION 8)
set(JPSREPORT_PATCH_VERSION 2)
set(JPSREPORT_PATCH_VERSION 3)
set(JPSREPORT_VERSION
${JPSREPORT_MAJOR_VERSION}.${JPSREPORT_MINOR_VERSION}.${JPSREPORT_PATCH_VERSION})
message( STATUS "JPSREPORT_VERSION: " ${JPSREPORT_VERSION} )
add_definitions("-DJPSREPORT_VERSION=\"${JPSREPORT_VERSION}\"")
if(NOT CMAKE_BUILD_TYPE)
set (CMAKE_BUILD_TYPE Release)
endif(NOT CMAKE_BUILD_TYPE)
......@@ -102,7 +153,6 @@ if(BUILD_TESTING)
endif(BUILD_TESTING)
set(source_files
getRSS.c
Analysis.cpp
IO/OutputHandler.cpp
general/ArgumentParser.cpp
......@@ -205,19 +255,25 @@ message( STATUS "Boost_INCLUDE_DIR: " ${Boost_INCLUDE_DIR} )
message( STATUS "Boost_LIBRARY_DIR: " ${Boost_LIBRARY_DIR} )
include_directories(${Boost_INCLUDE_DIR})
link_directories(${Boost_LIBRARY_DIR})
#link_directories(${Boost_LIBRARY_DIR})
if (WIN32)
find_library (PSAPI Psapi PATH_SUFFIXES "x64")
message (STATUS "PSAPI: ${PSAPI}")
endif()
add_library ( geometrycore STATIC ${source_files} )
add_executable(
jpsreport main.cpp
)
target_link_libraries( jpsreport ${Boost_LIBRARIES} )
target_link_libraries( jpsreport geometrycore )
if(WIN32)
target_link_libraries (jpsreport wsock32)
target_link_libraries( jpsreport ${PSAPI} )
endif()
target_link_libraries( jpsreport geometrycore )
# ----------------------------- cTest ------------------------------------------
if(BUILD_TESTING)
......
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Getting started with `JPSreport`\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`JPSreport` needs three different files as input: \n",
"- A trajectory file (txt or xml) (see [documentation](http://www.jupedsim.org/jpsreport/2016-11-03-trajectory))\n",
"- A geometry file (see [documentation](http://www.jupedsim.org/jpsreport/2016-11-02-geometry)) \n",
"- and a project file, called inifile (see [documentation](http://www.jupedsim.org/jpsreport/2016-11-01-inifile))\n",
"\n",
"For example in **demos/bottleneck** we can find the following files:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Calling `JPSreport` without an inifile yields:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"INFO: \tTrying to load the default configuration from the file <ini.xml>\n",
"INFO: \tParsing the ini file <ini.xml>\n",
"Usage: \n",
"\n",
"\t../bin/jpsreport input.xml\n",
"\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"ERROR: \tFailed to open file\n",
"ERROR: \tCould not parse the ini file\n"
]
}
],
"source": [
"%%bash\n",
"../bin/jpsreport"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`JPSreport` rightly complains about a missing inifile. Now, let's have a look in the directory `/demos/bottleneck`: "
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"geo_AO_300.xml geometry.png ini_AO_300.xml traj_AO_300.txt\r\n"
]
}
],
"source": [
" ls ./bottleneck"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here we can find the three necessary files to get us started. \n",
"Let's visualize the geometry with [JPSvis](https://gitlab.version.fz-juelich.de/jupedsim/jpsvis)\n",
"\n",
"![geometry](./bottleneck/geometry.png)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Preparing the inifile\n",
"\n",
"here do whatever you want"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Call JPSreport\n",
"\n",
"To run the analysis run from a terminal the following:\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"INFO: \tParsing the ini file <./bottleneck/ini_AO_300.xml>\n",
"INFO: \tGeometry File is: <./bottleneck/geo_AO_300.xml>\n",
"INFO: \tFormat of the trajectory file is: <.txt>\n",
"INFO: \tInput trajectory file is\t<traj_AO_300.txt>\n",
"./\n",
"INFO: \tInput directory for loading trajectory is:\t<./bottleneck/./>\n",
"INFO: \tInput directory for loading scripts is:\t<./bottleneck/../../scripts/>\n",
"INFO: \tMeasure area id <1> with type <BoundingBox>\n",
"\t\tMeasure area points < 2.400, 0.530>\n",
"\t\tMeasure area points < 2.400, -0.530>\n",
"\t\tMeasure area points < -0.600, -0.530>\n",
"\t\tMeasure area points < -0.600, 0.530>\n",
"\t\tLength in movement direction 1.000\n",
"INFO: \tMeasure area id <2> with type <Line>\n",
"\t\tMeasurement line starts from <-2.250, 0.000> to <4.000, 0.000>\n",
"INFO: \tMeasure area id <4> with type <Line>\n",
"\t\tMeasurement line starts from <-2.250, 0.500> to <4.000, 0.500>\n",
"INFO: \tBoth x and y-component of coordinates will be used to calculate instantaneous velocity over <10 frames>\n",
"INFO: \tMethod A is selected\n",
"INFO: \tMeasurement area id <2> will be used for analysis\n",
"\tFrame interval used for calculating flow is <100> frame\n",
"\tThe Time series N-t measured will be plotted!! \n",
"INFO: \tMeasurement area id <4> will be used for analysis\n",
"\tFrame interval used for calculating flow is <150> frame\n",
"\tThe Time series N-t measured will be plotted!! \n",
"INFO: \tFinish parsing inifile\n",
"\n",
"INFO: \tStart Analysis for the file: traj_AO_300.txt\n",
"**********************************************************************\n",
"INFO: \tLoading building file successful!!!\n",
"\n",
"INFO: \tInit Geometry\n",
"INFO: \tInit Geometry successful!!!\n",
"\n",
"INFO:\tthe name of the trajectory is: <traj_AO_300.txt>\n",
"INFO:\tfull name of the trajectory is: <./bottleneck/.//traj_AO_300.txt>\n",
"INFO:\tFrame rate fps: <16.00>\n",
"INFO: pos_id: 0\n",
"INFO: pos_fr: 1\n",
"INFO: pos_x: 2\n",
"INFO: pos_y: 3\n",
"INFO: pos_z: 4\n",
"INFO: pos_vd: 5\n",
"lineNr 100000\n",
"INFO:\t Finished reading the data\n",
"INFO: Got 128783 lines\n",
"INFO: minID: 1\n",
"INFO: minFrame: 0\n",
"INFO: numFrames: 959\n",
"INFO: Total number of Agents: 348\n",
"INFO: Enter CreateGlobalVariables with numPeds=348 and numFrames=959\n",
"INFO: allocate memory for xCor\n",
"INFO: allocate memory for yCor\n",
"INFO: allocate memory for zCor\n",
"INFO: allocate memory for vComp\n",
" Finished memory allocation\n",
"INFO: Leave CreateGlobalVariables()\n",
"INFO: Create Global Variables done\n",
"convert x and y\n",
"Save the data for each frame\n",
"------------------------Analyzing with Method A-----------------------------\n",
"frame ID = 0\n",
"------------------------Analyzing with Method A-----------------------------\n",
"frame ID = 0\n",
"frame ID = 100\n",
"frame ID = 100\n",
"frame ID = 200\n",
"frame ID = 200\n",
"frame ID = 300\n",
"frame ID = 300\n",
"frame ID = 400\n",
"frame ID = 400\n",
"frame ID = 500\n",
"frame ID = 500\n",
"frame ID = 600\n",
"frame ID = 600\n",
"frame ID = 700\n",
"frame ID = 800\n",
"frame ID = 900\n",
"frame ID = 700\n",
"frame ID = 800\n",
"frame ID = 900\n",
"INFO:\tPlotting N-t diagram! Status: 0\n",
"INFO:\tSuccess with Method A using measurement area id 4!\n",
"\n",
"INFO:\tPlotting N-t diagram! Status: 0\n",
"INFO:\tSuccess with Method A using measurement area id 2!\n",
"\n",
"**********************************************************************\n",
"INFO: \tEnd Analysis for the file: traj_AO_300.txt\n",
"\n"
]
}
],
"source": [
"%%bash\n",
"../bin/jpsreport ./bottleneck/ini_AO_300.xml"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The output of `JPSreport` gives some logging information on its running process. It may inform on any errors during the compilation or misconception of the input files (inifile, geometry or trajectory file).\n",
"\n",
"Uppon a succesful run, the directory **output** is created with the following content (depends on the configuration in inifile):"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"bottleneck/Output\n",
"└── Fundamental_Diagram\n",
" └── FlowVelocity\n",
" ├── FDFlowVelocity_traj_AO_300.txt_id_2.dat\n",
" ├── FDFlowVelocity_traj_AO_300.txt_id_4.dat\n",
" ├── Flow_NT_traj_AO_300.txt_id_2.dat\n",
" ├── Flow_NT_traj_AO_300.txt_id_2.png\n",
" ├── Flow_NT_traj_AO_300.txt_id_4.dat\n",
" └── Flow_NT_traj_AO_300.txt_id_4.png\n",
"\n",
"2 directories, 6 files\n"
]
}
],
"source": [
"%%bash\n",
"tree bottleneck/Output"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"#Flow rate(1/s)\t\t Mean velocity(m/s)\n",
"8.404\t1.148\n",
"7.673\t0.869\n",
"7.347\t0.774\n",
"7.216\t0.723\n",
"7.129\t0.736\n",
"6.880\t0.726\n",
"6.275\t0.740\n",
"3.918\t0.748\n",
"2.500\t0.806\n"
]
}
],
"source": [
"%%bash\n",
"tail bottleneck/Output/Fundamental_Diagram/FlowVelocity/FDFlowVelocity_traj_AO_300.txt_id_2.dat"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"![](bottleneck/Output/Fundamental_Diagram/FlowVelocity/Flow_NT_traj_AO_300.txt_id_2.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"![](Output/Fundamental_Diagram/FlowVelocity/Flow_NT_traj_AO_300.txt_id_2.png)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Result: \n",
"![](bottleneck/Output/Fundamental_Diagram/FlowVelocity/Flow_NT_traj_AO_300.txt_id_2.png)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
......@@ -5,7 +5,7 @@
<!-- trajectories file and format -->
<!-- either a file name or a path location. In the latter case all files in the directory will be used-->
<trajectories format="txt" unit="m">
<file name="traj_KO_240_050_240_x.txt" />
<file name="traj_KO_240_050_240.txt" />
<path location="./" />
</trajectories>
<!-- give relative path based on the location inifile or give the absolute path- -->
......@@ -37,14 +37,14 @@
</area_L>
</measurement_areas>
<!-- <velocity>
<velocity>
<use_x_component>true</use_x_component>
<use_y_component>true</use_y_component>
<!-- The time interval that used to calculate instantaneous velocity
of ped i [fr] here v_i = (X(t+frame_step/2) - X(t+frame_step/2))/frame_step. X is location.
of ped i [fr] here v_i = (X(t+frame_step/2) - X(t+frame_step/2))/frame_step. X is location. -->
<frame_step>10</frame_step>
</velocity>
-->
<velocity frame_step="10" set_movement_direction="None" ignore_backward_movement="false"/>
<!-- frame_step is the time interval that used to calculate instantaneous velocity
of ped i [fr] here v_i = (X(t+frame_step/2) - X(t+frame_step/2))/frame_step. X is location. -->
......@@ -62,19 +62,18 @@
</method_B>
<!-- Method C (Zhang2011a) Classical density and Vel -->
<method_C enabled="true">
<method_C enabled="false">
<measurement_area id="1" plot_time_series="true"/>
<measurement_area id="2" plot_time_series="true"/>
</method_C>
<!-- Method D (Zhang2011a) Voronoi density and Vel -->
<method_D enabled="true">
<measurement_area id="1" start_frame="None" stop_frame="None" get_individual_FD="false" plot_time_series="true"/>
<measurement_area id="2" start_frame="500" stop_frame="800" get_individual_FD="false" plot_time_series="true"/>
<measurement_area id="1" start_frame="500" stop_frame="800" get_individual_FD="false" plot_time_series="true"/>
<one_dimensional enabled="false"/>
<cut_by_circle enabled="false" radius="1.0" edges="10"/>
<output_voronoi_cells enabled="false" plot_graphs="false"/>
<profiles enabled="false" grid_size_x="0.20" grid_size_y="0.20"/>
<profiles enabled="true" grid_size_x="0.20" grid_size_y="0.20"/>
</method_D>
</JPSreport>