mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-14 13:57:13 +02:00
Merge branch 'refactor' of github.com:slsdetectorgroup/slsDetectorPackage into refactor
This commit is contained in:
@ -65,9 +65,7 @@ multiSlsDetector::~multiSlsDetector() {
|
|||||||
|
|
||||||
|
|
||||||
void multiSlsDetector::setupMultiDetector(bool verify, bool update) {
|
void multiSlsDetector::setupMultiDetector(bool verify, bool update) {
|
||||||
if (initSharedMemory(verify))
|
initSharedMemory(verify);
|
||||||
// shared memory just created, so initialize the structure
|
|
||||||
initializeDetectorStructure();
|
|
||||||
initializeMembers(verify);
|
initializeMembers(verify);
|
||||||
if (update)
|
if (update)
|
||||||
updateUserdetails();
|
updateUserdetails();
|
||||||
@ -78,13 +76,8 @@ template <typename RT, typename... CT>
|
|||||||
std::vector<RT> multiSlsDetector::serialCall(RT (slsDetector::*somefunc)(CT...), CT... Args)
|
std::vector<RT> multiSlsDetector::serialCall(RT (slsDetector::*somefunc)(CT...), CT... Args)
|
||||||
{
|
{
|
||||||
std::vector<RT> result;
|
std::vector<RT> result;
|
||||||
for (auto& d: detectors) {
|
for (auto& d: detectors)
|
||||||
result.push_back((d.get()->*somefunc)(Args...));
|
result.push_back((d.get()->*somefunc)(Args...));
|
||||||
/*
|
|
||||||
if ((*this)[idet]->getErrorMask())
|
|
||||||
setErrorMask(getErrorMask() | (1 << idet));
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,17 +85,11 @@ template <typename RT, typename... CT>
|
|||||||
std::vector<RT> multiSlsDetector::parallelCall(RT (slsDetector::*somefunc)(CT...), CT... Args)
|
std::vector<RT> multiSlsDetector::parallelCall(RT (slsDetector::*somefunc)(CT...), CT... Args)
|
||||||
{
|
{
|
||||||
std::vector<std::future<RT>> futures;
|
std::vector<std::future<RT>> futures;
|
||||||
for (auto &d : detectors) {
|
for (auto &d : detectors)
|
||||||
futures.push_back(std::async(std::launch::async, somefunc, d.get(), Args...));
|
futures.push_back(std::async(std::launch::async, somefunc, d.get(), Args...));
|
||||||
/*
|
|
||||||
if ((*this)[idet]->getErrorMask())
|
|
||||||
setErrorMask(getErrorMask() | (1 << idet));
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
std::vector<RT> result;
|
std::vector<RT> result;
|
||||||
for (auto& i : futures)
|
for (auto& i : futures)
|
||||||
result.push_back(i.get());
|
result.push_back(i.get());
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -290,23 +277,22 @@ int64_t multiSlsDetector::getId(idMode mode, int detPos) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
slsDetector* multiSlsDetector::getSlsDetector(int detPos) {
|
// slsDetector* multiSlsDetector::getSlsDetector(int detPos) {
|
||||||
return detectors[detPos].get();
|
// return detectors[detPos].get();
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
// slsDetector *multiSlsDetector::operator()(int detPos) const {
|
||||||
|
// return detectors[detPos].get();
|
||||||
|
// }
|
||||||
|
|
||||||
slsDetector *multiSlsDetector::operator()(int detPos) const {
|
// slsDetector* multiSlsDetector::operator[](int detPos) const {
|
||||||
return detectors[detPos].get();
|
// //Providing access to detectors with range checking
|
||||||
}
|
// //throw exception if out of range
|
||||||
|
// if (detPos >= 0 && detPos < (int)detectors.size())
|
||||||
slsDetector* multiSlsDetector::operator[](int detPos) const {
|
// return detectors[detPos].get();
|
||||||
//Providing access to detectors with range checking
|
// else
|
||||||
//throw exception if out of range
|
// throw(std::range_error("Detector does not exist"));
|
||||||
if (detPos >= 0 && detPos < (int)detectors.size())
|
// }
|
||||||
return detectors[detPos].get();
|
|
||||||
else
|
|
||||||
throw(std::range_error("Detector does not exist"));
|
|
||||||
}
|
|
||||||
|
|
||||||
void multiSlsDetector::freeSharedMemory(int multiId, int detPos) {
|
void multiSlsDetector::freeSharedMemory(int multiId, int detPos) {
|
||||||
// single
|
// single
|
||||||
@ -318,22 +304,20 @@ void multiSlsDetector::freeSharedMemory(int multiId, int detPos) {
|
|||||||
// multi
|
// multi
|
||||||
// get number of detectors
|
// get number of detectors
|
||||||
int numDetectors = 0;
|
int numDetectors = 0;
|
||||||
SharedMemory* shm = new SharedMemory(multiId, -1);
|
auto shm = SharedMemory(multiId, -1);
|
||||||
|
|
||||||
// get number of detectors from multi shm
|
// get number of detectors from multi shm
|
||||||
if (shm->IsExisting()) {
|
if (shm.IsExisting()) {
|
||||||
sharedMultiSlsDetector* mdet = (sharedMultiSlsDetector*)shm->OpenSharedMemory(
|
sharedMultiSlsDetector* mdet = (sharedMultiSlsDetector*)shm.OpenSharedMemory(
|
||||||
sizeof(sharedMultiSlsDetector));
|
sizeof(sharedMultiSlsDetector));
|
||||||
numDetectors = mdet->numberOfDetectors;
|
numDetectors = mdet->numberOfDetectors;
|
||||||
shm->UnmapSharedMemory(mdet);
|
shm.UnmapSharedMemory(mdet);
|
||||||
shm->RemoveSharedMemory();
|
shm.RemoveSharedMemory();
|
||||||
}
|
}
|
||||||
delete shm;
|
|
||||||
|
|
||||||
for (int i = 0; i < numDetectors; ++i) {
|
for (int i = 0; i < numDetectors; ++i) {
|
||||||
SharedMemory* shm = new SharedMemory(multiId, i);
|
auto shm = SharedMemory(multiId, i);
|
||||||
shm->RemoveSharedMemory();
|
shm.RemoveSharedMemory();
|
||||||
delete shm;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -405,18 +389,16 @@ std::string multiSlsDetector::getUserDetails() {
|
|||||||
* pre: sharedMemory=0, thisMultiDetector = 0, detectors.size() = 0
|
* pre: sharedMemory=0, thisMultiDetector = 0, detectors.size() = 0
|
||||||
* exceptions are caught in calling function, shm unmapped and deleted
|
* exceptions are caught in calling function, shm unmapped and deleted
|
||||||
*/
|
*/
|
||||||
bool multiSlsDetector::initSharedMemory(bool verify) {
|
void multiSlsDetector::initSharedMemory(bool verify) {
|
||||||
size_t sz = sizeof(sharedMultiSlsDetector);
|
|
||||||
bool created = false;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// shared memory object with name
|
// shared memory object with name
|
||||||
sharedMemory = new SharedMemory(detId, -1);
|
sharedMemory = new SharedMemory(detId, -1);
|
||||||
|
size_t sz = sizeof(sharedMultiSlsDetector);
|
||||||
|
|
||||||
//create
|
//create
|
||||||
if (!sharedMemory->IsExisting()) {
|
if (!sharedMemory->IsExisting()) {
|
||||||
thisMultiDetector = (sharedMultiSlsDetector*)sharedMemory->CreateSharedMemory(sz);
|
thisMultiDetector = (sharedMultiSlsDetector*)sharedMemory->CreateSharedMemory(sz);
|
||||||
created = true;
|
initializeDetectorStructure();
|
||||||
}
|
}
|
||||||
// open and verify version
|
// open and verify version
|
||||||
else {
|
else {
|
||||||
@ -441,8 +423,6 @@ bool multiSlsDetector::initSharedMemory(bool verify) {
|
|||||||
}
|
}
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
|
||||||
return created;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -607,8 +587,6 @@ void multiSlsDetector::addSlsDetector (std::string s) {
|
|||||||
|
|
||||||
|
|
||||||
int pos = (int)detectors.size();
|
int pos = (int)detectors.size();
|
||||||
// slsDetector* sdet = new slsDetector(type, detId, pos, false);
|
|
||||||
// detectors.push_back(sdet);
|
|
||||||
detectors.push_back(sls::make_unique<slsDetector>(type, detId, pos, false));
|
detectors.push_back(sls::make_unique<slsDetector>(type, detId, pos, false));
|
||||||
|
|
||||||
|
|
||||||
@ -654,7 +632,7 @@ std::string multiSlsDetector::getDetectorType(int detPos) {
|
|||||||
|
|
||||||
|
|
||||||
int multiSlsDetector::getNumberOfDetectors() {
|
int multiSlsDetector::getNumberOfDetectors() {
|
||||||
return (int)detectors.size();
|
return detectors.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -664,7 +642,8 @@ int multiSlsDetector::getNumberOfDetectors(dimension d) {
|
|||||||
|
|
||||||
|
|
||||||
void multiSlsDetector::getNumberOfDetectors(int& nx, int& ny) {
|
void multiSlsDetector::getNumberOfDetectors(int& nx, int& ny) {
|
||||||
nx=thisMultiDetector->numberOfDetector[X];ny=thisMultiDetector->numberOfDetector[Y];
|
nx=thisMultiDetector->numberOfDetector[X];
|
||||||
|
ny=thisMultiDetector->numberOfDetector[Y];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2987,10 +2966,6 @@ int multiSlsDetector::createReceivingDataSockets(const bool destroy) {
|
|||||||
uint32_t portnum = stoi(detectors[iSocket / numSocketsPerDetector]->getClientStreamingPort());
|
uint32_t portnum = stoi(detectors[iSocket / numSocketsPerDetector]->getClientStreamingPort());
|
||||||
portnum += (iSocket % numSocketsPerDetector);
|
portnum += (iSocket % numSocketsPerDetector);
|
||||||
try {
|
try {
|
||||||
// ZmqSocket* z = new ZmqSocket(
|
|
||||||
// detectors[iSocket / numSocketsPerDetector]->getClientStreamingIP().c_str(),
|
|
||||||
// portnum);
|
|
||||||
// zmqSocket.push_back(z);
|
|
||||||
zmqSocket.push_back(sls::make_unique<ZmqSocket>(detectors[iSocket / numSocketsPerDetector]->getClientStreamingIP().c_str(),
|
zmqSocket.push_back(sls::make_unique<ZmqSocket>(detectors[iSocket / numSocketsPerDetector]->getClientStreamingIP().c_str(),
|
||||||
portnum));
|
portnum));
|
||||||
printf("Zmq Client[%lu] at %s\n", iSocket, zmqSocket.back()->GetZmqServerAddress());
|
printf("Zmq Client[%lu] at %s\n", iSocket, zmqSocket.back()->GetZmqServerAddress());
|
||||||
|
@ -237,16 +237,16 @@ public:
|
|||||||
* @param detPos -1 for all detectors in list or specific detector position
|
* @param detPos -1 for all detectors in list or specific detector position
|
||||||
* @returns pointer to sls detector object
|
* @returns pointer to sls detector object
|
||||||
*/
|
*/
|
||||||
slsDetector* getSlsDetector(int detPos = -1);
|
// slsDetector* getSlsDetector(int detPos = -1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Accessing the sls detector from the multi list using position
|
* Accessing the sls detector from the multi list using position
|
||||||
* @param detPos -1 for all detectors in list or specific detector position
|
* @param detPos -1 for all detectors in list or specific detector position
|
||||||
* @returns slsDetector object
|
* @returns slsDetector object
|
||||||
*/
|
*/
|
||||||
slsDetector *operator()(int detPos = -1) const;
|
// slsDetector *operator()(int detPos = -1) const;
|
||||||
|
|
||||||
slsDetector* operator[](int detPos) const;
|
// slsDetector* operator[](int detPos) const;
|
||||||
/**
|
/**
|
||||||
* Free shared memory from the command line
|
* Free shared memory from the command line
|
||||||
* avoiding creating the constructor classes and mapping
|
* avoiding creating the constructor classes and mapping
|
||||||
@ -1594,7 +1594,7 @@ private:
|
|||||||
* @param update true to update last user pid, date etc
|
* @param update true to update last user pid, date etc
|
||||||
* @returns true if shared memory was created in this call, else false
|
* @returns true if shared memory was created in this call, else false
|
||||||
*/
|
*/
|
||||||
bool initSharedMemory(bool verify = true);
|
void initSharedMemory(bool verify = true);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize detector structure for the shared memory just created
|
* Initialize detector structure for the shared memory just created
|
||||||
|
Reference in New Issue
Block a user