5555#include < rawtoaces/rta.h>
5656#include < rawtoaces/mathOps.h>
5757
58- #include < boost/property_tree/ptree.hpp>
59- #include < boost/property_tree/json_parser.hpp>
60- #include < boost/foreach.hpp>
58+ #include < fstream>
59+ #include < nlohmann/json.hpp>
6160
62- using namespace boost ::property_tree;
6361using namespace ceres ;
6462
6563namespace rta
6664{
65+
6766Illum::Illum ()
6867{
6968 _inc = 5 ;
@@ -146,23 +145,22 @@ int Illum::readSPD( const string &path, const string &type )
146145
147146 try
148147 {
149- // using libraries from boost::property_tree
150- ptree pt;
151- read_json ( path, pt );
152-
153- const string stype = pt.get <string>( " header.illuminant" );
154- if ( type.compare ( stype ) != 0 && type.compare ( " na" ) != 0 )
148+ std::ifstream i ( path );
149+ nlohmann::json data = nlohmann::json::parse ( i );
150+ const string stype = data[" header" ][" illuminant" ];
151+ if ( type != stype && type != " na" )
155152 return 0 ;
156153
157154 _type = stype;
158155
159156 vector<int > wavs;
160157 int dis;
161158
162- BOOST_FOREACH (
163- ptree::value_type &row, pt. get_child ( " spectral_data.data.main " ) )
159+ nlohmann::json main_data = data[ " spectral_data " ][ " data " ][ " main " ];
160+ for ( auto &[index, values]: main_data. items ( ) )
164161 {
165- wavs.push_back ( atoi ( ( row.first ).c_str () ) );
162+ std::string row = index;
163+ wavs.push_back ( stoi ( row ) );
166164
167165 if ( wavs.size () == 2 )
168166 dis = wavs[1 ] - wavs[0 ];
@@ -183,11 +181,11 @@ int Illum::readSPD( const string &path, const string &type )
183181 else if ( wavs[wavs.size () - 1 ] > 780 )
184182 break ;
185183
186- BOOST_FOREACH ( ptree::value_type &cell, row. second )
184+ for ( auto j: values )
187185 {
188- _data.push_back ( cell. second . get_value < double >() );
186+ _data.push_back ( ( double )j );
189187 if ( wavs[wavs.size () - 1 ] == 550 )
190- _index = cell. second . get_value < double >() ;
188+ _index = ( double )j ;
191189 }
192190
193191 // printf ( "\"%i\": [ %18.13f ], \n",
@@ -599,26 +597,29 @@ int Spst::loadSpst( const string &path, const char *maker, const char *model )
599597
600598 try
601599 {
602- ptree pt ;
603- read_json ( path, pt );
600+ std::ifstream i ( path ) ;
601+ nlohmann::json data = nlohmann::json::parse ( i );
604602
605- string cmaker = pt. get <string>( " header. manufacturer" ) ;
606- if ( maker != nullptr && cmp_str ( maker, cmaker .c_str () ) )
603+ const string camera_make = data[ " header" ][ " manufacturer" ] ;
604+ if ( camera_make. empty () || strcasecmp ( camera_make .c_str (), maker ) != 0 )
607605 return 0 ;
608- setBrand ( cmaker.c_str () );
609606
610- string cmodel = pt.get <string>( " header.model" );
611- if ( model != nullptr && cmp_str ( model, cmodel.c_str () ) )
607+ setBrand ( camera_make.c_str () );
608+
609+ const string camera_model = data[" header" ][" model" ];
610+ if ( camera_model.empty () || strcasecmp ( camera_model.c_str (), model ) != 0 )
612611 return 0 ;
613- setModel ( cmodel.c_str () );
612+
613+ setModel ( camera_model.c_str () );
614614
615615 vector<int > wavs;
616616 int inc;
617617
618- BOOST_FOREACH (
619- ptree::value_type &row, pt. get_child ( " spectral_data.data.main " ) )
618+ nlohmann::json main_data = data[ " spectral_data " ][ " data " ][ " main " ];
619+ for ( auto &[index, values]: main_data. items ( ) )
620620 {
621- wavs.push_back ( atoi ( ( row.first ).c_str () ) );
621+ std::string row = index;
622+ wavs.push_back ( stoi ( row ) );
622623
623624 if ( wavs.size () == 2 )
624625 inc = wavs[1 ] - wavs[0 ];
@@ -640,8 +641,8 @@ int Spst::loadSpst( const string &path, const char *maker, const char *model )
640641 break ;
641642
642643 vector<double > data;
643- BOOST_FOREACH ( ptree::value_type &cell, row. second )
644- data.push_back ( cell. second . get_value < double >() );
644+ for ( auto j: values )
645+ data.push_back ( ( double )j );
645646
646647 // ensure there are three components
647648 assert ( data.size () == 3 );
@@ -980,19 +981,22 @@ void Idt::loadTrainingData( const string &path )
980981
981982 try
982983 {
983- ptree pt ;
984- read_json ( path, pt );
984+ std::ifstream stream ( path ) ;
985+ nlohmann::json data = nlohmann::json::parse ( stream );
985986
986987 int i = 0 ;
987988
988- BOOST_FOREACH (
989- ptree::value_type &row, pt. get_child ( " spectral_data.data.main " ) )
989+ nlohmann::json main_data = data[ " spectral_data " ][ " data " ][ " main " ];
990+ for ( auto &[index, values]: main_data. items ( ) )
990991 {
991- _trainingSpec[i]._wl = atoi ( ( row.first ).c_str () );
992+ std::string row = index;
993+ _trainingSpec[i]._wl = stoi ( row );
992994
993- BOOST_FOREACH ( ptree::value_type &cell, row.second )
994- _trainingSpec[i]._data .push_back (
995- cell.second .get_value <double >() );
995+ for ( auto j: values )
996+ {
997+ double d = j;
998+ _trainingSpec[i]._data .push_back ( d );
999+ }
9961000
9971001 assert ( _trainingSpec[i]._data .size () == 190 );
9981002
@@ -1021,14 +1025,16 @@ void Idt::loadCMF( const string &path )
10211025
10221026 try
10231027 {
1024- ptree pt ;
1025- read_json ( path, pt );
1028+ std::ifstream stream ( path ) ;
1029+ nlohmann::json data = nlohmann::json::parse ( stream );
10261030
10271031 int i = 0 ;
1028- BOOST_FOREACH (
1029- ptree::value_type &row, pt.get_child ( " spectral_data.data.main" ) )
1032+
1033+ nlohmann::json main_data = data[" spectral_data" ][" data" ][" main" ];
1034+ for ( auto &[index, values]: main_data.items () )
10301035 {
1031- int wl = atoi ( ( row.first ).c_str () );
1036+ std::string row = index;
1037+ int wl = stoi ( row );
10321038
10331039 if ( wl < 380 || wl % 5 )
10341040 continue ;
@@ -1038,8 +1044,8 @@ void Idt::loadCMF( const string &path )
10381044 _cmf[i]._wl = wl;
10391045
10401046 vector<double > data;
1041- BOOST_FOREACH ( ptree::value_type &cell, row. second )
1042- data.push_back ( cell. second . get_value < double >() );
1047+ for ( auto j: values )
1048+ data.push_back ( ( double )j );
10431049
10441050 assert ( data.size () == 3 );
10451051 _cmf[i]._xbar = data[0 ];
0 commit comments