Commit d6081bbf authored by Marco Drache's avatar Marco Drache
Browse files

feature: label and filter polymers during binary export

parent 08b15b39
Loading
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -74,7 +74,7 @@ public:
	void exportConcentrationNumMolecules(double _reactionTime) const;
	void exportReactionsCount(double _reactionTime) const;
	void exportPolymers(std::string _prefixFilename, double _reactionTime, bool _binaryExport, bool _writeHeader);
	void exportLabeledPolymers(std::string _prefixFilename, int _id1, int _id2, double _reactionTime, bool _writeHeader, bool _filter);
	void exportLabeledPolymers(std::string _prefixFilename, int _id1, int _id2, uint64_t _filter, double _reactionTime, bool _writeHeader);
	
protected:
	void exportComplete(time_t _timerStart, TerminationConditions _terminationConditions) const;
+3 −0
Original line number Diff line number Diff line
@@ -40,6 +40,8 @@ public:
	void exportCLD(const std::string& _filename, const kineticModel* _mcPolymerModel);
	void writeCLD(const std::string& _filename, const std::map<int, std::string>& _speciesNameMap, const std::map<int, int>& _speciesTypeMap, const std::map<int, double>& _molarMassMap) const;
	void exportPolymers(std::ofstream* _os) const;
	void exportPolymersSubsetNoFilter(std::ofstream* _os, uint64_t _filter);
	void exportPolymersSubsetFilter(std::ofstream* _os, uint64_t _filter);
	void getCLD(Histogram* _CLD, const std::vector<Histogram*>& _monomerHistogram);
	void getCLDHomopolymerization(Histogram* _CLD);
	std::vector<int> getChainLengthList() const;
@@ -58,6 +60,7 @@ public:
	void addPolymers(std::vector<Polymer*> _p);
	void addPolymerFromCombination(Polymer* p1, Polymer* p2);
	std::vector<Polymer*> getAllPolymers();
	uint64_t getNumFilterPolymers(uint64_t _filter);
private:
	Polymer* getPolymer() const;
	std::vector<Polymer*> p;
+2 −0
Original line number Diff line number Diff line
@@ -48,6 +48,8 @@ public:
	const MnMw exportPolymersCLDHompolymerization(const std::string& _filename, const kineticModel* _mcPolymerModel) const;
	bool exportPolymersBinary(const std::string& _filename, const kineticModel* _mcPolymerModel) const;
	bool exportPolymersBinary(const std::string& _filename, const kineticModel* _mcPolymerModel, const uint64_t _addID, const bool _writeHeader) const;
	bool exportPolymersBinary(const std::string& _filename, const std::string& _filenameFilter, const kineticModel* _mcPolymerModel, const int _id1, const int _id2, const uint64_t _filter, const bool _writeHeader) const;
	
	void setMolecules(int index, uint64_t count);
	void setRateCoeficient(int _id, double _value);
	void addMolecules(int _id, int64_t _plusmole);
+5 −0
Original line number Diff line number Diff line
@@ -463,6 +463,11 @@ void SimulationController::exportPolymers(std::string _prefixFilename, double _r
		kMC->exportPolymersCLD(simulationParameter.outputdir + "/" + "Polymers." + to_string(_reactionTime), currentModel);
	}
}
void SimulationController::exportLabeledPolymers(std::string _prefixFilename, int _id1, int _id2, uint64_t _filter, double _reactionTime, bool _writeHeader) {
	string filename = simulationParameter.outputdir + "/" + _prefixFilename + "Polymers." + to_string(_reactionTime);
	string filenameFilter = simulationParameter.outputdir + "/" + _prefixFilename + "PolymersFilter." + to_string(_reactionTime);
	kMC->exportPolymersBinary(filename, filenameFilter, currentModel, _id1, _id2, _filter, _writeHeader);
}
int SimulationController::getSpeciesIDTransferSpecies(TransferSpeciesDefinition _transferObject) {
	vector<parameterObject> parameterObjects  = currentModel->getParameters();
	string speciesName = "";
+47 −0
Original line number Diff line number Diff line
@@ -339,6 +339,9 @@ void polymerSpecies::getCLD(Histogram* _CLD, const vector<Histogram*> &_monomerH
			}
		}
	}
	if (transferToPolymer) {
		p.resize(0);
	}
}
void polymerSpecies::exportCLD(const string& _filename, const kineticModel* _mcPolymerModel) {

@@ -528,6 +531,34 @@ void polymerSpecies::exportPolymers(ofstream* _os) const {
		}
	}
}
void polymerSpecies::exportPolymersSubsetNoFilter(std::ofstream* _os, uint64_t _filter) {
	if (transferToPolymer) {
		p = bintree->analyzeAllPolymers();
	}
	for (const auto& elem : p) {
		Fragment* frg = elem->getFragment(0);
		if (frg->getLength() != _filter) {
			elem->exportPolymer(_os);
		}
	}
	if (transferToPolymer) {
		p.resize(0);
	}
}
void polymerSpecies::exportPolymersSubsetFilter(std::ofstream* _os, uint64_t _filter) {
	if (transferToPolymer) {
		p = bintree->analyzeAllPolymers();
	}
	for (const auto& elem : p) {
		Fragment* frg = elem->getFragment(0);
		if (frg->getLength() == _filter) {
			elem->exportPolymer(_os);
		}
	}
	if (transferToPolymer) {
		p.resize(0);
	}
}

size_t polymerSpecies::getSize() const {
	if (transferToPolymer) {
@@ -595,5 +626,21 @@ polymerSpeciesProperties polymerSpecies::getPolymerSpeciesProperties() {
	}
	return properties;
}
uint64_t polymerSpecies::getNumFilterPolymers(uint64_t _filter) {
	if (transferToPolymer) {
		p = bintree->analyzeAllPolymers();
	}
	uint64_t numFilterPolymers = 0;
	for (const auto& elem : p) {
		Fragment* frg = elem->getFragment(0);
		if (frg->getLength() == _filter) {
			++numFilterPolymers;
		}
	}
	if (transferToPolymer) {
		p.resize(0);
	}
	return numFilterPolymers;
}
} // namespace
Loading