Celsius Thermomether::read() const
{
    auto&& device = ifstream( mDevice );

    string line;
    vector< string > lines;
    while( getline( device, line ) )
           lines.emplace_back( line );

    if( lines.size() == 2 )
    {
        if( lines[0].find( string{"YES"} ) != string::npos )
        {
            static const string m{"t="};
            auto pos = lines[1].find( m );

            if( pos != string::npos )
            {
                auto temp_str = lines[ 1 ].substr( pos + m.size() );
                auto temp = stold( temp_str );
                return { temp / 1000.0L };
            }
        }
    }

    throw runtime_error{"Unable to read time"};
}
Beispiel #2
0
void MainWindow::onInterpolButtonClick() {
    try {
        dataManager->setInterpolPoint(stold(interpolPoint->get_text()));
        dataManager->interpolation();
        resultLabel->set_text(dataManager->getResult());
        interpolLabel->set_markup(dataManager->getFactors());
    } catch (EmptyData const& e) {
        statusBar->set_label(e.what());
    } catch (DuplicateNode const& e) {
        statusBar->set_label(e.what());
    }
}
Beispiel #3
0
void PositionData::pushline()
{
    string inBuffer;
    string inData;

    std::getline(*this, inBuffer, '\t');
    inData = stripQuotes(inBuffer);
    //int pos = atoi(inData.data());
    intPosition.push_back(atoi(inData.data()));
    position.push_back(inData.data());

    std::getline(*this, inBuffer, '\t');
    inData = stripQuotes(inBuffer);
    if (inData[0] > 'Z') inData[0] = inData[0] - ('a' -'A');
    refBase.push_back(inData.data());

    std::getline(*this, inBuffer, '\t');
    inData = stripQuotes(inBuffer);
    intCoverage.push_back(atoi(inData.data()));
    coverage.push_back(inData.data());

    std::getline(*this, inBuffer, '\t');
    inData = stripQuotes(inBuffer);
    quality.push_back(inData.data());

    std::getline(*this, inBuffer, '\t');
    inData = stripQuotes(inBuffer);
    if (inData[0] > 'Z') inData[0] = inData[0] - ('a' -'A');
    psnp.push_back(inData.data());

    std::getline(*this, inBuffer, '\t');
    inData = stripQuotes(inBuffer);
    intPsnpCount.push_back(atoi(inData.data()));
    psnpCount.push_back(inData.data());

    std::getline(*this, inBuffer, '\t');
    inData = stripQuotes(inBuffer);
    psnpFrequ.push_back(inData.data());

    std::getline(*this, inBuffer, '\n');
    inData = stripQuotes(inBuffer);
    pValue.push_back(inData.data());
    //long double ld = stold(inData.c_str());
    ldPValue.push_back(stold(inData.c_str()));

    linesRead++;
}
int main(int argc, char* argv[]) {

	int BoxX { }, BoxY { }, BoxZ { }, TypeA { }, TypeB { }, Arms { };
	long int Steps_Start { }, Steps_Total { }, Steps_Output { };
	double Temperature { }, Lambda { }, Shear { }, StepSize { };
	bool MPC_on {false};
	string s_para { };
	stringstream ss_para { }, ss_para_new { };
	Thermostat *thermostat{};
	Hydrodynamics *hydrodynamics{};

	s_para = std::string(argv[1]);
	if (!file_exists(s_para)) {
		std::cout << "input file does not exist";
		return 1;
	}


	std::string find_this = "end_config";
	std::string::size_type i = s_para.find(find_this);
	std::cout << i << std::endl;
	if (i != std::string::npos){
		s_para.erase(i, find_this.length());
		s_para.erase(0, i);
	}
	find_this = "./results/";
	i = s_para.find(find_this);
	if (i != std::string::npos){
		s_para.erase(i, find_this.length());
	}

	find_this = ".pdb";
	i = s_para.find(find_this);
	if (i != std::string::npos) s_para.erase(i, find_this.length());
	ss_para << s_para;

	std::cout << s_para << std::endl;
	std::cout << find_parameter(s_para, "Shear") << std::endl;
	BoxX = stoi(find_parameter(s_para,"Lx"));
	BoxY = stoi(find_parameter(s_para,"Ly"));
	BoxZ = stoi(find_parameter(s_para,"Lz"));
	TypeA = stoi(find_parameter(s_para,"A"));
	TypeB = stoi(find_parameter(s_para,"B"));
	Arms = stoi(find_parameter(s_para,"Arms"));
	Steps_Start = stol(find_parameter(s_para,"run"));
	Temperature = stod(find_parameter(s_para,"T"));
	Shear = stod(find_parameter(s_para, "Shear"));
	Lambda = stod(find_parameter(s_para,"Lambda"));

	StepSize = stod(argv[2]);
	Steps_Total = Steps_Start + stold(argv[3]);
	Steps_Output = stold(argv[4]);
	if (find_parameter(s_para, "MPC").compare("ON") == 0) {
		MPC_on = true;
	}

	std::cout << "blubb" << std::endl;
	int arg { };
	while (arg < argc) {
		if (strcmp(argv[arg], "MPC") == 0) {
			MPC_on = true;
			std::cout << arg << std::endl;
			if (arg +1 < argc) Shear = stod(argv[arg+1]);
			arg++;
			break;
		}
		arg++;
	}


	if (argc >= 8) {
		BoxX = stod(argv[5]);
		BoxY = stod(argv[6]);
		BoxZ = stod(argv[7]);
	}



	std::cout << "Type A: " << TypeA << " Type B: " << TypeB << " Arms: " << Arms << " Lambda: " << Lambda << std::endl;
	std::cout << "Temperature: " << Temperature <<  std::endl;
	std::cout << "Box Size: " << BoxX << " " << BoxY << " " << BoxZ << std::endl;
	std::cout << "Step Size: " << StepSize << std::endl;
	std::cout << "Start at: " << Steps_Start << " Stop at: " << Steps_Total << " Output every: " << Steps_Output << std::endl;
	if (MPC_on) {
		std::cout << "MPC is turned ON with shear rate: " << Shear << std::endl;
	}
	else std::cout << "MPC is turned OFF" << std::endl;



	ss_para_new.str(std::string());
	ss_para_new.precision(0);
	ss_para_new << "_Star";
	ss_para_new << "_A" << TypeA;
	ss_para_new << "_B" << TypeB;
	ss_para_new << "_Arms" << Arms;
	ss_para_new << "_Lx" << BoxX;
	ss_para_new << "_Ly" << BoxY;
	ss_para_new << "_Lz" << BoxZ;
	ss_para_new.precision(3);
	ss_para_new << "_Lambda" << Lambda;
	ss_para_new << "_T" << Temperature;
	ss_para_new << "_run" << scientific << Steps_Total;
	if (MPC_on) ss_para_new << "_MPCON_Shear" << Shear;
	else ss_para_new << "_MPCOFF";

	ofstream statistic_file { };
	FILE* config_file { };
	string oldname = "./results/statistics"+ss_para.str()+".dat";
	string newname = "./results/statistics"+ss_para_new.str()+".dat";
	std::cout << oldname << std::endl;
	std::cout << newname << std::endl;
	rename(oldname.c_str(), newname.c_str());
	string statistic_file_name = newname;
	oldname = "./results/config"+ss_para.str()+".pdb";
	newname = "./results/config"+ss_para_new.str()+".pdb";
	rename(oldname.c_str(), newname.c_str());
	string config_file_name = newname;
	statistic_file.open(statistic_file_name, ios::out | ios::app);
	config_file = fopen(config_file_name.c_str(), "a");

	Box box(BoxX, BoxY, BoxZ, Temperature, Lambda);


	if (argc > 1 && strcmp(argv[1], "Chain") == 0) {
		box.add_chain(TypeA, TypeB, 10.);
		std::cout << "building a chain" << std::endl;
	}
	else	 {
		box.add_star(std::string(argv[1]), TypeA, TypeB, Arms, 10.);
		std::cout << "building a star" << std::endl;
	}



	if (MPC_on) {
		thermostat = new Thermostat_None{ box, StepSize };
		hydrodynamics = new MPC{box, Temperature, Shear};

	}
	else {
		thermostat = new Andersen{box, StepSize, Temperature, 1999};
		hydrodynamics = new Hydrodynamics_None{box};
	}



	if (MPC_on) hydrodynamics -> initialize();
	clock_t begin = clock();

	std::cout << thermostat -> info() << std::endl;
	box.print_molecules(std::cout);

	for (long int n = Steps_Start + 1; n <= Steps_Total; ++n) {


		if (!(n%Steps_Output)) {
			thermostat -> propagate(true);
			std::cout << n << " ";
			box.print_Epot(std::cout);
			box.print_Ekin(std::cout);
			if (MPC_on) std::cout << hydrodynamics -> calculateCurrentTemperature() << " ";
			else box.print_Temperature(std::cout);
			std::list<unsigned> patches = box.calculate_patches();
			int number_of_patches {0};
			double av_patch_size {0.0};
			for (auto& element : patches) {
				if (element > 1) {
					number_of_patches++;
					av_patch_size += element;
				}
				//std::cout << element << ' ';
			}
			if (number_of_patches > 0) av_patch_size /= number_of_patches;
			Matrix3d gyr_tensor = box.calculate_gyration_tensor();
			std::cout << '\n';
			box.print_PDB(config_file, n);
			statistic_file << n << " ";
			box.print_Epot(statistic_file);
			box.print_Ekin(statistic_file);
			box.print_Temperature(statistic_file);
			box.print_radius_of_gyration(statistic_file);
			statistic_file << number_of_patches << " " << av_patch_size << " ";
			for (int i = 0; i < gyr_tensor.size(); i++) {
				statistic_file << *(gyr_tensor.data()+i) << " ";
			}
			statistic_file << "\n";
			//std::cout << '\n';
		}
		else thermostat -> propagate(false);
		if (MPC_on && !(n%100)) {
			hydrodynamics -> step(0.1);
		}
	}

	FILE* end_config_file { };
	string end_config_file_name = "./results/end_config"+ss_para_new.str()+".pdb";
	end_config_file = fopen(end_config_file_name.c_str(), "w");
	box.print_PDB(end_config_file, Steps_Total);


	clock_t end = clock();
	//box.print_molecules(std::cout);
	std::cout << "time: " << double(end-begin)/CLOCKS_PER_SEC << std::endl;

}
Beispiel #5
0
void Network::convertObjectEvents(CPacket packet, std::vector<ObjectEvents*>* eventList){

	//cout << "packet type : " << packet.packet_type << endl;
	switch (packet.packet_type) {
	case INIT_CONNECTION: {
							  ObjectEvents * e = new ObjectEvents(INIT_CONNECTION);
							  string packetInfoStr = "";
							  int i;
							  for (i = 0;; i++)
							  {
								  if (packet.data[i] != '\n')
									  packetInfoStr += packet.data[i];
								  else
								  {
									  break;
								  }
							  }
							  string name = packetInfoStr;
							  //cout << name << endl;
							  e->setName(packetInfoStr);
							  //cout << e->getName() << endl;
							  eventList->push_back(e);
							  break;
	}
	case MOVE_LEFT: {
						ObjectEvents * e = new ObjectEvents(MOVE_LEFT);
						string packetInfoStr = "";
						int i;
						for (i = 0;; i++)
						{
							if (packet.data[i] != '\n')
								packetInfoStr += packet.data[i];
							else
							{
								break;
							}
						}
						//cout << packet.data << endl;
						//cout << "recieved string "<< packetInfoStr << endl;
						int cid = stoi(packetInfoStr);

						//cout << "recived cid = " << cid << endl;
						e->setCid(cid);
						eventList->push_back(e);
						break;
	}
	case MOVE_RIGHT: {
						 //cout << "Move Right" << endl;
						 ObjectEvents * e = new ObjectEvents(MOVE_RIGHT);
						 string packetInfoStr = "";
						 int i;
						 for (i = 0;; i++)
						 {
							 if (packet.data[i] != '\n')
								 packetInfoStr += packet.data[i];
							 else
							 {
								 break;
							 }
						 }
						 unsigned int cid = stoul(packetInfoStr);
						 e->setCid(cid);
						 eventList->push_back(e);
						 break;

	}
	case MOVE_BACKWARD: {
							//cout << "Move Backward" << endl;
							ObjectEvents * e = new ObjectEvents(MOVE_BACKWARD);
							string packetInfoStr = "";
							int i;
							for (i = 0;; i++)
							{
								if (packet.data[i] != '\n')
									packetInfoStr += packet.data[i];
								else
								{
									break;
								}
							}
							unsigned int cid = stoul(packetInfoStr);
							e->setCid(cid);
							eventList->push_back(e);
							break;

	}
	case MOVE_FORWARD: {
						  // cout << "Move Forward" << endl;
						   ObjectEvents * e = new ObjectEvents(MOVE_FORWARD);
						   string packetInfoStr = "";
						   int i;
						   for (i = 0;; i++)
						   {
							   if (packet.data[i] != '\n')
								   packetInfoStr += packet.data[i];
							   else
							   {
								   break;
							   }
						   }
						   unsigned int cid = stoul(packetInfoStr);
						   e->setCid(cid);
						   eventList->push_back(e);
						   break;


						   break;
	}
	//case MOVE_UP: {
	//				  ObjectEvents * e = new ObjectEvents(MOVE_UP);
	//				  string packetInfoStr = "";
	//				  int i;
	//				  for (i = 0;; i++)
	//				  {
	//					  if (packet.data[i] != '\n')
	//						  packetInfoStr += packet.data[i];
	//					  else
	//					  {
	//						  break;
	//					  }
	//				  }
	//				  unsigned int cid = stoul(packetInfoStr);
	//				  e->setCid(cid);
	//				  eventList->push_back(e);
	//				  break;

	//}

	//case MOVE_DOWN: {
	//					ObjectEvents * e = new ObjectEvents(MOVE_DOWN);
	//					string packetInfoStr = "";
	//					int i;
	//					for (i = 0;; i++)
	//					{
	//						if (packet.data[i] != '\n')
	//							packetInfoStr += packet.data[i];
	//						else
	//						{
	//							break;
	//						}
	//					}
	//					unsigned int cid = stoul(packetInfoStr);
	//					e->setCid(cid);
	//					eventList->push_back(e);
	//					break;
	//}
	case SHOOT:{
				   ObjectEvents * e = new ObjectEvents(SHOOT);
				   string packetInfoStr = "";
				   int i;
				   for (i = 0;; i++)
				   {
					   if (packet.data[i] != '\n')
						   packetInfoStr += packet.data[i];
					   else
					   {
						   break;
					   }
				   }
				   unsigned int cid = stoul(packetInfoStr);
				   e->setCid(cid);
				   eventList->push_back(e);
				   break;
	}
	case SUICIDE:{
				   ObjectEvents * e = new ObjectEvents(SUICIDE);
				   string packetInfoStr = "";
				   int i;
				   for (i = 0;; i++)
				   {
					   if (packet.data[i] != '\n')
						   packetInfoStr += packet.data[i];
					   else
					   {
						   break;
					   }
				   }
				   unsigned int cid = stoul(packetInfoStr);
				   e->setCid(cid);
				   eventList->push_back(e);
				   break;
	}
	case BOOST:
	{
					 ObjectEvents * e = new ObjectEvents(BOOST);
					 string packetInfoStr = "";
					 int i;
					 for (i = 0;; i++)
					 {
						 if (packet.data[i] != '\n')
							 packetInfoStr += packet.data[i];
						 else
						 {
							 break;
						 }
					 }
					 unsigned int cid = stoul(packetInfoStr);
					 e->setCid(cid);
					 eventList->push_back(e);
					 break;
	}
	case BUILD_ROBOT: {
		//cout << "Received Build Robot Packet" << endl;
						  ObjectEvents * e = new ObjectEvents(BUILD_ROBOT);
						  
							  string parseData = string(packet.data);
							  //cout << parseData << endl;
							  vector<string> splitByObject = vector<string>();
						  splitByObject.push_back("");
						  
						  for (int i = 0; i < parseData.length(); i++) {
							  //split by newline, each newline
							  //cout << parseData.length() << endl;
							  if (parseData[i] != '\n')
								  splitByObject[splitByObject.size() - 1] += parseData[i];
							  else
							  {
								  splitByObject.push_back("");
							  }
						  }
								  //pop last empty string
							 splitByObject.pop_back();
							 unsigned int cid;
							 //cout << "splitSize" << splitByObject.size() << endl;
							 for (int i = 0; i < splitByObject.size(); i++) {
								 
								  string objectInfo = splitByObject[i];
								  					   //split by space to get the information for each object
								  size_t pos = 0;
								  string token;
									  					   /*
														   					   while ((pos = objectInfo.find(" ")) != string::npos) {
														   					   token = objectInfo.substr(0, pos);
														   					   std::cout << token << std::endl;
														   					   objectInfo.erase(0, pos  + 1);
														   					   }
														   					   */
														   
						   		  //CID
								  pos = objectInfo.find(" ");
								  token = objectInfo.substr(0, pos);
								  //std::cout << token << std::endl;
								  cid = stoul(token);
								  e->setCid(cid);
								  //cout << cid << endl;
								  objectInfo.erase(0, pos  + 1);
									  					   //Object ID
								  pos = objectInfo.find(" ");
								  token = objectInfo.substr(0, pos);
									  //std::cout << token << std::endl;
								  unsigned int objId = stoul(token);
								  objectInfo.erase(0, pos  + 1);
									  
										  					   //position
								  pos = objectInfo.find(" ");
								  token = objectInfo.substr(0, pos);
									 // std::cout << token << std::endl;
								  float xPos = stold(token);
								  objectInfo.erase(0, pos  + 1);
								  pos = objectInfo.find(" ");
								  token = objectInfo.substr(0, pos);
									  //std::cout << token << std::endl;
								  float yPos = stold(token);
								  objectInfo.erase(0, pos  + 1);
								  pos = objectInfo.find(" ");
								  token = objectInfo.substr(0, pos);
								  //std::cout << token << std::endl;
								  float zPos = stold(token);
								  objectInfo.erase(0, pos  + 1);
								  
										  					   //rotation
								  pos = objectInfo.find(" ");
								  token = objectInfo.substr(0, pos);
									 // std::cout << token << std::endl;
								  float xRot = stold(token);
								  objectInfo.erase(0, pos  + 1);
								  pos = objectInfo.find(" ");
								  token = objectInfo.substr(0, pos);
									  //std::cout << token << std::endl;
								  float yRot = stold(token);
								  objectInfo.erase(0, pos  + 1);
									  pos = objectInfo.find(" ");
									  token = objectInfo.substr(0, pos);
									  //std::cout << token << std::endl;
									  float zRot = stold(token);
									  objectInfo.erase(0, pos  + 1);
									  
										  					   //block type
										  pos = objectInfo.find(" ");
									  token = objectInfo.substr(0, pos);
									 // std::cout << token << std::endl;
									  float block_type = stold(token);
									  objectInfo.erase(0, pos  + 1);
									  
										  					   //contraints
										  pos = objectInfo.find(" ");
									  token = objectInfo.substr(0, pos);
									  //std::cout << token << std::endl;
									  float below = stold(token);
									  objectInfo.erase(0, pos  + 1);
									  pos = objectInfo.find(" ");
									  token = objectInfo.substr(0, pos);
									 // std::cout << token << std::endl;
									  float left = stold(token);
									  objectInfo.erase(0, pos  + 1);
									  pos = objectInfo.find(" ");
									  token = objectInfo.substr(0, pos);
									  //std::cout << token << std::endl;
									  float right = stold(token);
									  objectInfo.erase(0, pos  + 1);
									  pos = objectInfo.find(" ");
									  token = objectInfo.substr(0, pos);
									  //std::cout << token << std::endl;
									  float front = stold(token);
									  objectInfo.erase(0, pos  + 1);
									  pos = objectInfo.find(" ");
									  token = objectInfo.substr(0, pos);
									  //std::cout << token << std::endl;
									  float back = stold(token);
									  objectInfo.erase(0, pos  + 1);
									  
										  					   //stats
									  pos = objectInfo.find(" ");
									  token = objectInfo.substr(0, pos);
									  ////std::cout << token << std::endl;
									  int money = stold(token);
									  objectInfo.erase(0, pos  + 1);
									  
									  btQuaternion* q = convertEulerToQuaternion(xRot, yRot, zRot); 

									  GameObj* object;
									 
								     if (objId == 0) {

										object = new Robot((int)cid, "No Name");
										object->setId(cid);
										object->setX(xPos);
										object->setY(yPos);
										object->setZ(zPos);
										object->setqX(q->getX());
										object->setqY(q->getY());
										object->setqZ(q->getZ());
										object->setqW(q->getW());
										object->setType(BOX);
										((Robot*)object)->setCurrMoney(money);
										((Robot*)object)->setWidth(3);
										((Robot*)object)->setHeight(1);
										((Robot*)object)->setDepth(3);
									  }
									else
									{
										//cout << "not robot y: " << rotations.y() << " w " << rotations.w() << endl;
										object = new GOBox(xPos, yPos, zPos, q->getX(), q->getY(), q->getZ(), q->getW(), 10, 1, 1, 1);
					
									}
									  
								      delete q;
									  object->setBlockType(block_type);
									  object->setBuildID(objId);
									  object->setBelowID(below);
									  object->setLeftID(left);
									  object->setRightID(right);
									  object->setFrontID(front);
									  object->setBackID(back);
									  e->roboBuild.push_back(object);
									  
								  }
								  splitByObject.clear();
								  eventList->push_back(e);
								  break;
	}
	default:{
				printf("error in packet types\n");
				break;
	}

	}
}
Beispiel #6
0
	long double operator()(const std::string& s) {
		return stold(s);
	}