コード例 #1
0
ファイル: AGI.cpp プロジェクト: ot7016/VisLAMP
//in  固有値 evalue 高次元配置ベクトル Aij  out 初期射影行列     
void Agi::calprj(){
    const int m = data->dim;
	double  f1[m], f2[m];
	double distf1 = 0, distf2 = 0;

	//二次元平面上への射影の場合
	
	for (int i = 0; i < m; i++) {
		if (i%2 == 0) {
			f1[i] = pow(data->evalue[i],delta) ;// 固有値を代入   現在はとりあえず projection factor 0.5とする
			f2[i] = 0;
			distf1 = distf1 + pow(f1[i], 2);
		} else {
			f2[i] = pow(data->evalue[i],delta);
			f1[i] = 0;
			distf2 = distf2 + pow(f2[i], 2);
		}
	}
	
	distf1 = sqrt(distf1);
	distf2 = sqrt(distf2);
	//射影行列確認 
	//stackのことを考えると vectorがいいが  blas使うなら配列 
	for (int i =0; i< m; i++) {
		ee.push_back(prj(f1[i]/distf1,f2[i]/distf2));
	}
	prjstack.push(ee);
}
コード例 #2
0
void Parser::addProject(const ParserTreeItem::Ptr &item, const QStringList &fileList,
                                 const QString &projectId)
{
    // recalculate cache tree if needed
    ParserTreeItem::Ptr prj(getCachedOrParseProjectTree(fileList, projectId));
    if (item.isNull())
        return;

    // if there is an item - copy project tree to that item
    item->copy(prj);
}
コード例 #3
0
int main(int argc, char** argv) {

    const double C = 3.;
    const int N = 3;
    snowgoose::ProjectToSimplex<double> prj(C);
    auto check = [&N, &prj](double* x, const double* check) {
        prj.project(N, x);
        double d = snowgoose::VecUtils::vecDist(N, x, check);
        std::cout << "x = " << snowgoose::VecUtils::vecPrint(N, x) << ", distance from reference = " << d <<  "\n";
        SG_ASSERT(d < 0.001);
    };


    double x[N] = {4,4,0};
    double r[N] = {1.5, 1.5, 0};
    check(x, r);
    return 0;
}
コード例 #4
0
bool runCyberSL_CodeGen(const CyberComposition::SimulinkWrapper &slmodel, std::string cyber_file, Udm::DataNetwork* sdn_cyber, std::string directory)
{
	//UdmDom::str_xsd_storage::RemoveXsd("CyberComposition.xsd");

	//LINKS::Initialize();
	//CyberComposition::Initialize(cyber_meta_diagram);
	//
	//// Collect Datanetwork to be passed to runCyPhy2SL_codeGen func
	//Udm::DataNetwork * sdn_cyber = slmodel.__impl()->__getdn();
	//// Generate Code

	bool ret = true;

	// Set the output directory
	SFUtils::rootSFModel = slmodel;
	std::string outputDirectory = directory;
	std::string projectName;
	if(!cyber_file.empty())
	{
		std::string inputFilename = cyber_file;
		projectName = inputFilename.substr(  0, inputFilename.rfind( "." )  );
		{
			std::string::size_type lastSlashPos = projectName.rfind( "/" );
			std::string::size_type lastBackslashPos = projectName.rfind( "\\" );

			if ( lastSlashPos == std::string::npos ) lastSlashPos = lastBackslashPos;
			if ( lastBackslashPos == std::string::npos ) lastBackslashPos = lastSlashPos;

			std::string::size_type delimPos = std::min( lastSlashPos, lastBackslashPos );
			if ( delimPos != std::string::npos ) projectName = projectName.substr( delimPos + 1 );
		}
	}
	else
	{
		//Udm::Object sfparent = slmodel.parent();
		//projectName = UdmUtil::ExtractName(sfparent);
		projectName = slmodel.name();
	}
	//try {

		// Open SLSF r
		std::vector< Udm::StaticDataNetworkSpecifier> dnsvec;
		Udm::StaticDataNetworkSpecifier sdns_cyphy("", sdn_cyber);
		dnsvec.push_back( sdns_cyphy);

		std::string slName = slmodel.name();
		std::string slcFilename = outputDirectory + "/" + slName + "_SLC.xml";

		UdmDom::DomDataNetwork &sdn_sfc = SFCUdmEngine::get_singleton().getDomDataNetwork();
		sdn_sfc.CreateNew(slcFilename, "SFC.xsd", SFC::Project::meta );

		Udm::StaticDataNetworkSpecifier sdns_SFC(slcFilename, &sdn_sfc);
		dnsvec.push_back( sdns_SFC);

		Udm::StaticUdmProject prj( dnsvec, Cyber2SLC::diagram);
		Packets_t projects;
		Packets_t rootDataflows;

		SFC::Project rootSFC = SFC::Project::Cast(sdn_sfc.GetRootObject() );
		rootSFC.name() = projectName;

		projects.push_back( rootSFC);
		rootDataflows.push_back(slmodel);

		set<CyberComposition::Simulink::Subsystem> top_level_subs = slmodel.Simulink_Subsystem_kind_children();
		for ( set<CyberComposition::Simulink::Subsystem>::iterator subIter = top_level_subs.begin(); subIter != top_level_subs.end(); subIter++ )
		{
			// Check for cycles in the graph before getting underway with the translation - throw an exception if a cycle is found
			SFUtils::TopLevelTopologicalSort( *subIter );
		}

		printLog("******Start model transformation(SL_CodeGen) for SignalFlow model: "+(std::string)slmodel.name()+"******");
		TL_0 tL_0;
		tL_0(rootDataflows, projects);
		
		if(SFUtils::getErrorReported())
		{
			ret = false;
			printLog("******SL_CodeGen fails******");
		}
		else
		{
			printLog("******End model transformation(SL_CodeGen)******");
			boost::filesystem::current_path( outputDirectory );
			try{
				CPrinter::print( rootSFC );
			}
			catch(udm_exception &e)
			{
				printLog(e.what());
				prj.Close();
				sdn_sfc.CloseWithUpdate();
				return false;
			}
			boost::filesystem::current_path(outputDirectory);
	
			//get the top subsystem name
			set<CyberComposition::Simulink::Subsystem> subs = slmodel.Simulink_Subsystem_kind_children();
			if(!subs.empty())
			{
				CyberComposition::Simulink::Subsystem topSub = *(subs.begin());
				FMUCodeGen fmu(rootSFC, (std::string)topSub.name(), outputDirectory);
				fmu.gen();
			}
		}
		//get the top class name and args, generate fmi.xml and fmu.c files

		prj.Close();
		// Close SFC w
		sdn_sfc.CloseWithUpdate();

		if ( SFUtils::getPortTypeError() ) 
		{
			if(!boost::filesystem::remove( slcFilename ))
			{
				std::string err = "boost::filesystem::remove(\""+slcFilename+"\") fails";
				throw std::exception(err.c_str());
			}
		}

		return ret;
}
コード例 #5
0
ファイル: PolygonReader.cpp プロジェクト: metno/wdb
bool
PolygonReader::gridPointsInPolygon( std::vector<GridPointData> & pointsInPolygon, const GEOSGeom polygon )
{
	/*
	WdbProjectionPtr getWdbProjection(const std::string & def)
	{
		typedef std::map<std::string, WdbProjectionPtr> ProjectionMap;
		static ProjectionMap projections;

		ProjectionMap::iterator ret = projections.find(def);
		if ( ret == projections.end() ) // not found
		{
			// ensure that cache does not grow to ridiculous size
			if ( projections.size() > 512 )
				projections.clear();

			std::pair<ProjectionMap::iterator, bool> result =
					projections.insert(std::make_pair(def, WdbProjectionPtr(new WdbProjection(def))));
			ret = result.first;
		}
		return ret->second;
	}
	*/


	BoundingBox bounds = getBounds( polygon );
	//elog(DEBUG1, GEOSGeomToWKT(polygon) );
	int startI = (bounds.left_ - reader_.placeSpecification().startX_) / reader_.placeSpecification().xIncrement_;
	if (startI < 0) startI = 0;
	int endI = ((bounds.right_ - reader_.placeSpecification().startX_) / reader_.placeSpecification().xIncrement_) + 1;
	if (endI > reader_.placeSpecification().xNumber_) endI = reader_.placeSpecification().xNumber_;
	int startJ = (bounds.bottom_ - reader_.placeSpecification().startY_) / reader_.placeSpecification().yIncrement_;
	if (startJ < 0) startJ = 0;
	int endJ = ((bounds.top_ - reader_.placeSpecification().startY_) / reader_.placeSpecification().yIncrement_) + 1;
	if (endJ > reader_.placeSpecification().yNumber_) endJ = reader_.placeSpecification().yNumber_;
	char res = 0;
	GEOSCoordSequence * seq;
	GEOSGeom point;
	double x;
	double y;
	for (int j = startJ; j < endJ; j++ ) {
		for (int i = startI; i < endI; i++) {
			x = reader_.placeSpecification().startX_ + (i * reader_.placeSpecification().xIncrement_);
			y = reader_.placeSpecification().startY_ + (j * reader_.placeSpecification().yIncrement_);
			WdbProjection prj( reader_.placeSpecification().projDefinition_ );
			if ( ! isMetric( reader_.placeSpecification().projDefinition_ ) ) {
				x *= DEG_TO_RAD;
				y *= DEG_TO_RAD;
			}
			prj.transformToDefault( 1, &x, &y );
			if ( ! isMetric( DEFAULT_PROJECTION ) ) {
				x *= RAD_TO_DEG;
				y *= RAD_TO_DEG;
			}
			// Intersects
			seq = GEOSCoordSeq_create(1, 2);
			GEOSCoordSeq_setX(seq, 0, x);
			GEOSCoordSeq_setY(seq, 0, y);
			point = GEOSGeom_createPoint(seq);
			//elog(DEBUG1, GEOSGeomToWKT(point) );
			res = GEOS_DLL GEOSIntersects(polygon, point);
			if (res == 1) {
				GridPointData posPt;
				posPt.x = i;
				posPt.y = j;
				pointsInPolygon.push_back(posPt);
			}
			GEOSGeom_destroy(point);
		}
	}
	// Return
	return ( pointsInPolygon.size() > 0 );
}
コード例 #6
0
ファイル: AGI.cpp プロジェクト: ot7016/VisLAMP
//射影の更新
//mdsの場合はこのままでも大丈夫 PCAの属性に対応すればOK
int Agi::refine(double* _pre, double* _new, int index) {
		//まずはe3を求める
	const int n = data->aginum;
	const int m = data->dim;
	double pi[m];
	double powpinorm = 0;
	//PCAで属性軸が選択されたとき
	if(data->isPCA && index >= n){
		int atrindex = index -n ;
		for(int i = 0; i< m; i++){
			pi[i] = data->getevector(atrindex,i);
		 powpinorm = pow(pi[i], 2)+powpinorm;
		}
	}
	else{
		for(int i = 0; i<m; i++){
			pi[i] = data->getA(index, i);
			powpinorm = pow(pi[i], 2)+powpinorm;
		}
	}
	double pinorm = sqrt(powpinorm);
	double powprenorm = pow(_pre[0], 2)+pow(_pre[1], 2);
	double prenorm = sqrt(powprenorm);
	double newnorm = sqrt(pow(_new[0], 2)+pow(_new[1], 2));
 	if(pinorm <= prenorm) {
 		std::cerr << "X error pinorm " << std::endl;
 		std::cerr << pinorm << std::endl;
 		std::cerr << "prenorm" << std::endl;
 		std::cerr << prenorm << std::endl;
 		return -1;
 	} 
 	if (pinorm <= newnorm){
 		double gamma = 0.001;
 		if(newnorm > (1- gamma)*pinorm){
 			double _new2[2];
 			_new2[0] = (1-gamma) * pinorm * _new[0] / newnorm ;
 			_new2[1] = (1-gamma) * pinorm * _new[1] / newnorm ;
 			refine(_pre, _new2,index);
 		}
 		else {
 			std::cerr << "X2 error" << std::endl;
 			return -2;
 		}
 	}
	double f3[m];
 	double f3norm = 0;
 	for(int i = 0; i<m; i++) {
 		f3[i] = pi[i] -_pre[0]*ee.at(i).first-_pre[1]*ee.at(i).second;
	}
	f3norm = sqrt(powpinorm- powprenorm );
	for(int i = 0; i<m; i++){
		f3[i] = f3[i]/f3norm;
	}	
	//初期値設定
	const int _N = 6;
	double init[_N];
	for (int i = 0; i < _N; i++) {
      	init[i] = ConstSolve2D::defaultInit[i];
     }
	// 後は制約式を解く
	double* ans = solver2D( _pre, _new, f3norm, init);
	double e1[m],e2[m];
	double a3 = (_new[0] -_pre[0]*ans[0] -_pre[1]*ans[1])/f3norm;
	double b3 = (_new[1] -_pre[0]*ans[2] -_pre[1]*ans[3])/f3norm;
	for(int i = 0; i < m; i++){
		double ei0 = ee.at(i).first;
		double ei1 = ee.at(i).second;
		e1[i] = ans[0] * ei0 + ans[1]* ei1 + a3 *  f3[i];
		e2[i] = ans[2] * ei0 + ans[3]* ei1 + b3 *  f3[i];
	}
	ee.clear();
	for(int i = 0; i < m; i++){
		ee.push_back(prj(e1[i],e2[i]));
	}
	
	cal2Mtr();
	return 0;
}
コード例 #7
0
ファイル: PolygonReader.cpp プロジェクト: metno/wdb
PolygonReader::BoundingBox
PolygonReader::getBounds( const GEOSGeom polygons )
{
	BoundingBox ret;
	int geomNumber = GEOSGetNumGeometries(polygons);
	for (int n=0; n<geomNumber; n++) {
		GEOSGeom outerRing;
		if (geomNumber > 1) {
			GEOSGeom polygon = const_cast<GEOSGeom>(GEOSGetGeometryN( polygons, n ));
			if (polygon == NULL)
				throw std::runtime_error( "Multigeometry returned is NULL" );
			outerRing = const_cast<GEOSGeom>(GEOSGetExteriorRing( polygon ));
		}
		else {
			outerRing = const_cast<GEOSGeom>(GEOSGetExteriorRing( polygons ));
		}
		if ( outerRing == NULL )
			throw std::runtime_error( "Outer ring of polygon/shape is NULL." );
		GEOSCoordSeq coordSeq = const_cast<GEOSCoordSeq>(GEOSGeom_getCoordSeq( outerRing ));
		if ( coordSeq == NULL )
			throw std::runtime_error( "Coordinate sequence of polygon/shape returned NULL" );
		unsigned int size;
		if ( GEOSCoordSeq_getSize( coordSeq, &size ) == 0 )
			throw std::runtime_error( "Error when getting size of outer ring of polygon/shape" );
		// Calculate Bounds
		WdbProjection prj( reader_.placeSpecification().projDefinition_ );
		lonlat coord;
		// Initialize
		GEOSCoordSeq_getX( coordSeq, 0, &coord.lon );
		GEOSCoordSeq_getY( coordSeq, 0, &coord.lat );
		if ( ! isMetric( DEFAULT_PROJECTION ) ) {
			coord.lon *=  DEG_TO_RAD;
			coord.lat *= DEG_TO_RAD;
		}
		prj.transformFromDefault( 1, &coord.lon, &coord.lat );
		if ( ! isMetric( reader_.placeSpecification().projDefinition_ ) ) {
			coord.lon *= RAD_TO_DEG;
			coord.lat *= RAD_TO_DEG;
		}
		if (n == 0) {
			ret.left_ = coord.lon;
			ret.top_ = coord.lat;
			ret.right_ = coord.lon;
			ret.bottom_ = coord.lat;
		}
		for ( unsigned int i = 1; i < size; i++ ) {
			GEOSCoordSeq_getX( coordSeq, i, &coord.lon );
			GEOSCoordSeq_getY( coordSeq, i, &coord.lat );
			if ( ! isMetric( DEFAULT_PROJECTION ) ) {
				coord.lon *=  DEG_TO_RAD;
				coord.lat *= DEG_TO_RAD;
			}
			prj.transformFromDefault( 1, &coord.lon, &coord.lat );
			if ( ! isMetric( reader_.placeSpecification().projDefinition_ ) ) {
				coord.lon *= RAD_TO_DEG;
				coord.lat *= RAD_TO_DEG;
			}
			if (coord.lon < ret.left_)
				ret.left_ = coord.lon;
			else
			if (coord.lon > ret.right_)
				ret.right_ = coord.lon;
			if (coord.lat < ret.bottom_)
				ret.bottom_ = coord.lat;
			else
			if (coord.lat > ret.top_ )
				ret.top_ = coord.lat;
		}
	}
	return ret;
}
コード例 #8
0
StelProjectorP StelCore::getProjection2d() const
{
	StelProjectorP prj(new StelProjector2d());
	prj->init(currentProjectorParams);
	return prj;
}
コード例 #9
0
//---------------------------------------------------------
inline void CVIEW_Map_Control::_Set_StatusBar(CSG_Point ptWorld)
{
	static bool	bBuisy	= false;

	if( bBuisy == false )
	{
		bBuisy	= true;

		CSG_Tool	*pProjector	= NULL;

		if( m_pMap->Get_Parameter("GCS_POSITION")->asBool() && m_pMap->Get_Projection().is_Okay() && (pProjector = SG_Get_Tool_Library_Manager().Get_Tool("pj_proj4", 2)) != NULL )	// Coordinate Transformation (Shapes)
		{
			if( pProjector->is_Executing() )
			{
				pProjector	= NULL;
			}
			else
			{
				SG_UI_Progress_Lock(true);
				SG_UI_Msg_Lock     (true);

				CSG_Shapes	prj(SHAPE_TYPE_Point), gcs(SHAPE_TYPE_Point); prj.Add_Shape()->Add_Point(ptWorld); prj.Get_Projection().Assign(m_pMap->Get_Projection());

				pProjector->Settings_Push(NULL);

				if( pProjector->Set_Parameter("CRS_PROJ4", SG_T("+proj=longlat +ellps=WGS84 +datum=WGS84"))
				&&  pProjector->Set_Parameter("SOURCE"   , &prj)
				&&  pProjector->Set_Parameter("TARGET"   , &gcs)
				&&  pProjector->Execute() )
				{
					CSG_Point ptWorld_gcs	= gcs.Get_Shape(0)->Get_Point(0);

					STATUSBAR_Set_Text(wxString::Format("X %s", SG_Double_To_Degree(ptWorld_gcs.Get_X()).c_str()), STATUSBAR_VIEW_X);
					STATUSBAR_Set_Text(wxString::Format("Y %s", SG_Double_To_Degree(ptWorld_gcs.Get_Y()).c_str()), STATUSBAR_VIEW_Y);

					pProjector->Settings_Pop();
				}
				else
				{
					pProjector->Settings_Pop();		pProjector	= NULL;
				}

				SG_UI_Progress_Lock(false);
				SG_UI_Msg_Lock     (false);
			}
		}

		if( !pProjector )
		{
			STATUSBAR_Set_Text(wxString::Format("X %f", ptWorld.Get_X()), STATUSBAR_VIEW_X);
			STATUSBAR_Set_Text(wxString::Format("Y %f", ptWorld.Get_Y()), STATUSBAR_VIEW_Y);
		}

		if( m_Mode == MAP_MODE_DISTANCE )
		{
			STATUSBAR_Set_Text(wxString::Format("D %f", m_Distance + m_Distance_Move), STATUSBAR_VIEW_Z);
		}
		else if( Get_Active_Layer() )
		{
			STATUSBAR_Set_Text(wxString::Format("Z %s", Get_Active_Layer()->Get_Value(ptWorld, _Get_World(2.0)).c_str()), STATUSBAR_VIEW_Z);
		}
		else
		{
			STATUSBAR_Set_Text("Z", STATUSBAR_VIEW_Z);
		}

		bBuisy	= false;
	}
}
コード例 #10
0
ファイル: main.cpp プロジェクト: jasondegraw/rwPrj
int main()
{
    QFile prj(":prj/barracks-scaled11-elements.prj");
    bool ignoreSystemZones = true;
    bool ignoreAmbientZone = true;
    std::cout << "Opening file... ";
    if(!prj.open(QFile::ReadOnly))
    {
        std::cout << " failed." << std::endl;
        return EXIT_FAILURE;
    }
    std::cout << " succeeded." << std::endl << std::endl;
    QTextStream stream(&prj);

    prj::Reader input(&stream);

    prj::Model airflowModel(input);

    std::cout << "CONTAM version: " + airflowModel.version() << std::endl;
    std::cout << "SketchPad dimensions: " << airflowModel.skwidth() << " cells by "
              << airflowModel.skheight() << " cells" << std::endl;
    std::cout << "SketchPad scale: " << TO_STRING(airflowModel.scale()) << " m" <<std::endl;

    std::cout << "SketchPad scale: " << TO_STRING(airflowModel.scale()) << " m" <<std::endl;

    std::cout << "Active contaminants: " << airflowModel.contaminants().size() << std::endl;
    for(unsigned int i=0;i<airflowModel.contaminants().size();i++)
    {
        int nr = airflowModel.contaminants()[i];
        std::cout << '\t' << nr << ": " << airflowModel.species()[nr-1].name() << std::endl;
    }

    std::cout << std::endl << "Day schedules: " << airflowModel.daySchedules().size()
              << std::endl;

    std::cout << std::endl << "Week schedules: " << airflowModel.weekSchedules().size()
              << std::endl;

    std::cout << std::endl << "Wind pressure profiles: "
              << airflowModel.windPressureProfiles().size()
              << std::endl;
    for(unsigned int i=1;i<=airflowModel.windPressureProfiles().size();i++)
    {
        std::cout << '\t' << i << ": " << airflowModel.windPressureProfiles()[i-1].name()
                  << std::endl;
    }

    VECTOR<prj::Path> paths = airflowModel.paths();
    std::cout << std::endl << "Paths: " << paths.size() << std::endl;

    QFile fp("prj.dot");
    if (fp.open(QFile::WriteOnly))
    {
        QTextStream stream(&fp);
        stream << "graph {\n";
        for(unsigned int i=0;i<paths.size();i++)
        {
            int pzm = paths[i].pzm();
            int pzn = paths[i].pzn();
            if(pzm<0)
            {
                if(ignoreAmbientZone)
                {
                    continue;
                }
                pzm=0;
            }
            if(ignoreSystemZones  && airflowModel.zones()[pzm-1].system())
            {
                continue;
            }
            if(pzn<0)
            {
                if(ignoreAmbientZone)
                {
                    continue;
                }
                pzn=0;
            }
            if(ignoreSystemZones  && airflowModel.zones()[pzn-1].system())
            {
                continue;
            }
            stream << pzn << " -- " << pzm << '\n';
        }
        stream << "}";
    }
    fp.close();

    /*
    VECTOR<prj::CvfDat> cvf = airflowModel.getCvfDat();
    std::cout << std::endl << "CvfDat elements: " << cvf.size() << std::endl;
    for(unsigned int i=0;i<cvf.size();i++)
    {
        std::cout << '\t' << i+1 << ": " << cvf[i].name() << std::endl;
    }

    std::cout << std::endl << "Simple air handling systems: "
              << airflowModel.ahs().size()
              << std::endl;
    for(unsigned int i=1;i<=airflowModel.ahs().size();i++)
    {
        std::cout << '\t' << i << ": " << airflowModel.ahs()[i-1].name()
                  << std::endl;
    }

    VECTOR<prj::Zone> zones = airflowModel.zones();
    std::cout << std::endl << "Zones: " << zones.size() << std::endl;
    for(unsigned int i=0;i<zones.size();i++)
    {
        std::cout << '\t' << i+1 << ": " << zones[i].name() << std::endl;
    }
    */

    std::cout << std::endl << "Done." << std::endl;

    //std::cout << airflowModel.toString();
    //prj::PlrTest1 plr;
    //plr.setName("TEST");
    //airflowModel.addAirflowElement(plr);
/*
    QFile fp("out.prj");
    if (fp.open(QFile::WriteOnly))
    {
        QTextStream stream(&fp);
        stream << QString().fromStdString(airflowModel.toString());
        fp.close();
    }
    else
    {
        std::cout << "Failed to write 'out.prj'" << std::endl;
        return EXIT_FAILURE;
    }
*/
    return EXIT_SUCCESS;
}
コード例 #11
0
int main( int argc, char* argv[] ) {
	// Try to process the command line
	if ( !ConfigKeeper::getSingleton().processCommandLineArguments( argc, argv ) ) {
		std::cout << ConfigKeeper::getSingleton().getDescription();
		return 0;
	}
	// See if help was requested
	if (  ConfigKeeper::getSingleton().getCount( "help" )  ) {
		std::cout << ConfigKeeper::getSingleton().getDescription();
		return 0;
	}
	// Make sure an input was specified
	if (  !ConfigKeeper::getSingleton().getCount( "slsf-file" )  ) {
		std::cerr << "Input file must be specified." << std::endl;
		std::cerr << ConfigKeeper::getSingleton().getDescription();
		return 1;
	}
	// Set the generation language
	bool generateC = true;
	if (  ConfigKeeper::getSingleton().getCount( "java" )  ) generateC = false;
	if (  ConfigKeeper::getSingleton().getCount( "c" )  ) generateC = true;
	bool annotations = ConfigKeeper::getSingleton().getCount( "annotations" );

	// Set the output directory
	std::string outputDirectory;
	if (  ConfigKeeper::getSingleton().getCount( "output-directory" )  ) {
		outputDirectory = ConfigKeeper::getSingleton().getStringValue( "output-directory" );
	}

	DirectoryVector directoryVector;
	if (  ConfigKeeper::getSingleton().getCount( "libdir" )  ) {
		directoryVector = ConfigKeeper::getSingleton().getStringVector( "libdir" );
	}

	addMFileDirectories( directoryVector );

	// Determine the input file name
	std::string inputFilename = ConfigKeeper::getSingleton().getStringValue( "slsf-file" );
	std::string projectName = inputFilename.substr(  0, inputFilename.rfind( "." )  );
	{
		std::string::size_type lastSlashPos = projectName.rfind( "/" );
		std::string::size_type lastBackslashPos = projectName.rfind( "\\" );

		if ( lastSlashPos == std::string::npos ) lastSlashPos = lastBackslashPos;
		if ( lastBackslashPos == std::string::npos ) lastBackslashPos = lastSlashPos;

		std::string::size_type delimPos = std::min( lastSlashPos, lastBackslashPos );
		if ( delimPos != std::string::npos ) projectName = projectName.substr( delimPos + 1 );
	}

	std::string arg1 = SLSF_PARADIGM_NAME " = \"" + inputFilename + "\" ";
//  std::string arg2 = "SFC = \"" + std::string(argv[2]) + string(".xml") + "\" !\"SFC.xsd\" ";

	InputFileRegistry ifr;
	ifr.registerFile( arg1 );
	try {

		// Open SLSF r
		Udm::SmartDataNetwork sdnSLSF_fb0( SLSF::diagram );
		sdnSLSF_fb0.OpenExisting(
		 ifr.getFileName( SLSF_PARADIGM_NAME ),
		 UseXSD()(  ifr.getFileName( SLSF_PARADIGM_NAME )  ) ? ifr.getXsdName( SLSF_PARADIGM_NAME ) : SLSF_PARADIGM_NAME,
		 Udm::CHANGES_LOST_DEFAULT
		);
		Udm::StaticDataNetworkSpecifier sdns_SLSF_fb1(  ifr.getFileName( SLSF_PARADIGM_NAME ), &sdnSLSF_fb0  );

		ModelsFolderMap modelsFolderMap = getModelsFolderMap( sdnSLSF_fb0 );
		for( ModelsFolderMap::iterator mfmItr = modelsFolderMap.begin() ; mfmItr != modelsFolderMap.end() ; ++mfmItr ) {

			int modelsFolderID = mfmItr->first;
			std::string modelsFolderName = mfmItr->second.name();
			if ( outputDirectory.empty() ) outputDirectory = modelsFolderName;

			std::vector< Udm::StaticDataNetworkSpecifier > dnsvec;
			dnsvec.push_back( sdns_SLSF_fb1 );

			if (  !boost::filesystem::create_directories( outputDirectory )  ) {
				if (  !boost::filesystem::is_directory( outputDirectory )  ) {
					std::cerr << "ERROR:  Could not create \"" + outputDirectory + "\" directory." << std::endl;
					continue;
				}
			}

			std::string sfcFilename = outputDirectory + "/" + modelsFolderName + "_SFC.xml";
			std::string arg2= "SFC = \"" + sfcFilename + "\" !\"SFC.xsd\" ";
			ifr.registerFile( arg2 );

			// Open SFC w
			UdmDom::DomDataNetwork &sdnSFC_fb3 = SFCUdmEngine::get_singleton().getDomDataNetwork();
			sdnSFC_fb3.CreateNew(
			 ifr.getFileName( "SFC" ),
			 UseXSD()(  ifr.getFileName( "SFC" )  ) ? ifr.getXsdName( "SFC" ) : "SFC",
			 SFC::Project::meta,
			 Udm::CHANGES_LOST_DEFAULT
			);

			Udm::StaticDataNetworkSpecifier sdns_SFC_fb4(  ifr.getFileName( "SFC" ), &sdnSFC_fb3  );
			dnsvec.push_back( sdns_SFC_fb4 );

			// Create the project
			Udm::StaticUdmProject prj( dnsvec, ESM2SLC::diagram );
			Udm::DataNetwork& SLSF_ref_fb2= prj.GetDataNetwork(  ifr.getFileName( SLSF_PARADIGM_NAME )  );
			Udm::DataNetwork& sFC_ref_fb5= prj.GetDataNetwork(  ifr.getFileName( "SFC" )  );

			Packets_t projects_1;
			Packets_t rootDataflows_3;

			// get objects from DNs
			ModelsFolderMap modelsFolderMap2 = getModelsFolderMap( SLSF_ref_fb2 );
			ModelsFolderMap::iterator mfmItr2 = modelsFolderMap2.find( modelsFolderID );
			if ( mfmItr2 == modelsFolderMap2.end() ) {
				std::cerr << "ERROR:  Could not find ModelsFolder with id \"" << modelsFolderID << "\"" << std::endl;
			} else {
				SLSF::Dataflow dataflow = getDataflow( mfmItr2->second );

				rootDataflows_3.push_back( dataflow );

				// Get access to temporary root object(s).
				// transformation
				SFC::Project rootSFC_257f = SFC::Project::Cast( sFC_ref_fb5.GetRootObject() );
				rootSFC_257f.name() = projectName;

				projects_1.push_back( rootSFC_257f );

				for( Packets_t::const_iterator it = rootDataflows_3.begin() ; it != rootDataflows_3.end() ; ++it ) {
					Packets_t oneRootState;
					oneRootState.push_back( *it );
					TransClass tL_0;
		//			tL_0( projects_1, oneRootState);
					tL_0( oneRootState, projects_1 );

		//			rootSFC_257f.numInstance() = ni>0 ? ni : 1;
					boost::filesystem::path path = boost::filesystem::current_path();
					boost::filesystem::current_path( outputDirectory );
					if ( generateC ) CPrinter::print( rootSFC_257f );
					else             JPrinter::printProject( rootSFC_257f, annotations );
					boost::filesystem::current_path( path );

					// Print the S-Function wrapper
		//			printSFuncWrapper(  SFUtils::convertToCPlusPlusName( stateName ), rootSFC_257f  );
					// Delete program 

				}
			}

			// Close the project
			prj.Close();
			// Close SFC w
			sdnSFC_fb3.CloseWithUpdate();

			if ( SFUtils::getPortTypeError() ) boost::filesystem::remove( sfcFilename );
		}
		modelsFolderMap.clear();

		// Close SLSF r
		sdnSLSF_fb0.CloseNoUpdate();

	} catch( udm_exception &e ) {
		cout << e.what() << endl;
		return 2;
	} catch( std::exception &e ) {
		std::cout << e.what() << std::endl;
		return 3;
	} catch( ... ) {
		std::cout << "Unknown exception (sorry)" << std::endl;
		return 4;
	}

	if ( CodeGenerator::getSingleton().getError() ) return 5;

	return 0;
}