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:
Dhanya Thattil 2022-05-10 15:23:39 +02:00 committed by GitHub
parent f55bdd6eae
commit 0129c2c686
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 13 deletions

View File

@ -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);
} }
} }
} }

View File

@ -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