mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-20 02:40:03 +02:00
M3: master starts twice (non blocking) part 2 (#445)
* slaves and master vectors empty means all positions included: fixing double acquisition in masters * debug print out
This commit is contained in:
parent
f55bdd6eae
commit
0129c2c686
@ -1173,31 +1173,40 @@ int DetectorImpl::acquire() {
|
|||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DetectorImpl::startAcquisition(bool blocking, Positions pos) {
|
void DetectorImpl::startAcquisition(bool blocking, std::vector<int> positions) {
|
||||||
if (shm()->detType == defs::MYTHEN3 && size() > 1) {
|
if (shm()->detType == defs::MYTHEN3 && size() > 1) {
|
||||||
std::vector<int> master;
|
std::vector<int> master;
|
||||||
std::vector<int> slaves;
|
std::vector<int> slaves;
|
||||||
auto is_master = Parallel(&Module::isMaster, pos);
|
if (positions.empty() ||
|
||||||
// could be all slaves in pos
|
(positions.size() == 1 && positions[0] == -1)) {
|
||||||
slaves.reserve(pos.size());
|
positions.resize(modules.size());
|
||||||
for (size_t i = 0; i != pos.size(); ++i) {
|
std::iota(begin(positions), end(positions), 0);
|
||||||
|
}
|
||||||
|
// could be all slaves in positions
|
||||||
|
slaves.reserve(positions.size());
|
||||||
|
auto is_master = Parallel(&Module::isMaster, positions);
|
||||||
|
for (size_t i : positions) {
|
||||||
if (is_master[i])
|
if (is_master[i])
|
||||||
master.push_back(i);
|
master.push_back(i);
|
||||||
else
|
else
|
||||||
slaves.push_back(i);
|
slaves.push_back(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!slaves.empty()) {
|
||||||
Parallel(&Module::startAcquisition, slaves);
|
Parallel(&Module::startAcquisition, slaves);
|
||||||
|
}
|
||||||
|
if (!master.empty()) {
|
||||||
if (blocking) {
|
if (blocking) {
|
||||||
Parallel(&Module::startAndReadAll, master);
|
Parallel(&Module::startAndReadAll, master);
|
||||||
} else {
|
} else {
|
||||||
Parallel(&Module::startAcquisition, master);
|
Parallel(&Module::startAcquisition, master);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (blocking) {
|
if (blocking) {
|
||||||
Parallel(&Module::startAndReadAll, pos);
|
Parallel(&Module::startAndReadAll, positions);
|
||||||
} else {
|
} else {
|
||||||
Parallel(&Module::startAcquisition, pos);
|
Parallel(&Module::startAcquisition, positions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -279,7 +279,7 @@ class DetectorImpl : public virtual slsDetectorDefs {
|
|||||||
int acquire();
|
int acquire();
|
||||||
|
|
||||||
/** also takes care of master and slave for multi module mythen */
|
/** also takes care of master and slave for multi module mythen */
|
||||||
void startAcquisition(bool blocking, Positions pos);
|
void startAcquisition(bool blocking, std::vector<int> positions);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Combines data from all readouts and gives it to the gui
|
* Combines data from all readouts and gives it to the gui
|
||||||
|
Loading…
x
Reference in New Issue
Block a user