This commit is contained in:
Erik Frojdh 2019-08-08 10:18:21 +02:00
parent bba6e1667b
commit 095a7eac05
5 changed files with 103 additions and 87 deletions

View File

@ -209,29 +209,44 @@ class Detector {
*/
Result<std::string> getDetectorTypeAsString(Positions pos = {}) const;
// Erik
/** CTB only.Sets the mask applied to every pattern. */
void setPatternMask(uint64_t mask, Positions pos = {});
/** CTB only. Gets the mask applied to every pattern. */
Result<uint64_t> getPatternMask(Positions pos = {});
/**
* Set LED Enable for CTB
* CTB only. Sets the bitmask that the mask will be applied to for every
* pattern.
* @param mask mask to select bits
*/
void setPatternBitMask(uint64_t mask, Positions pos = {});
/**
* CTB only. Gets the bits that the mask will be applied to for every
* pattern
*/
Result<uint64_t> getPatternBitMask(Positions pos = {}) const;
/**
* CTB only. Enable or disable the LED
* @param enable true to switch on, false to switch off
*/
void setLEDEnable(bool enable, Positions pos = {});
/**
* Get LED enable for CTB
* CTB only. Get LED enable.
*/
Result<bool> getLEDEnable(Positions pos = {}) const;
/**
* Set Digital IO Delay CTB
* CTB only. Set Digital IO Delay
* @param digital IO mask to select the pins
* @param delay delay in ps(1 bit=25ps, max of 775 ps)
*/
void setDigitalIODelay(uint64_t pinMask, int delay, Positions pos = {});
};
} // namespace sls

View File

@ -2106,14 +2106,14 @@ class multiSlsDetector : public virtual slsDetectorDefs {
* @param mask mask to be applied
* @param detPos -1 for all detectors in list or specific detector position
*/
void setPatternMask(uint64_t mask, int detPos = -1);
void setPatternMask(uint64_t mask, int detPos = -1); //
/**
* Gets the mask applied to every pattern (CTB/ Moench)
* @param detPos -1 for all detectors in list or specific detector position
* @returns mask set
*/
uint64_t getPatternMask(int detPos = -1);
uint64_t getPatternMask(int detPos = -1); //
/**
* Selects the bits that the mask will be applied to for every pattern (CTB/
@ -2121,7 +2121,7 @@ class multiSlsDetector : public virtual slsDetectorDefs {
* @param mask mask to select bits
* @param detPos -1 for all detectors in list or specific detector position
*/
void setPatternBitMask(uint64_t mask, int detPos = -1);
void setPatternBitMask(uint64_t mask, int detPos = -1);//
/**
* Gets the bits that the mask will be applied to for every pattern (CTB/
@ -2129,7 +2129,7 @@ class multiSlsDetector : public virtual slsDetectorDefs {
* @param detPos -1 for all detectors in list or specific detector position
* @returns mask of bits selected
*/
uint64_t getPatternBitMask(int detPos = -1);
uint64_t getPatternBitMask(int detPos = -1);//
/**
* Set LED Enable (Moench, CTB only)
@ -2137,7 +2137,7 @@ class multiSlsDetector : public virtual slsDetectorDefs {
* @param detPos -1 for all detectors in list or specific detector position
* @returns LED enable
*/
int setLEDEnable(int enable = -1, int detPos = -1);
int setLEDEnable(int enable = -1, int detPos = -1); //
/**
* Set Digital IO Delay (Moench, CTB only)
@ -2145,7 +2145,7 @@ class multiSlsDetector : public virtual slsDetectorDefs {
* @param delay delay in ps(1 bit=25ps, max of 775 ps)
* @param detPos -1 for all detectors in list or specific detector position
*/
void setDigitalIODelay(uint64_t pinMask, int delay, int detPos = -1);
void setDigitalIODelay(uint64_t pinMask, int delay, int detPos = -1); //
/**
* Loads the detector setup from file
@ -2209,8 +2209,7 @@ class multiSlsDetector : public virtual slsDetectorDefs {
* or just gives progress of acquisition by polling receivers
*/
void processData();
void addSlsDetector(std::unique_ptr<slsDetector> det);
private:
/**

View File

@ -171,6 +171,19 @@ Result<std::string> Detector::getDetectorTypeAsString(Positions pos) const {
// Erik
Result<uint64_t> Detector::getPatternMask(Positions pos){
return pimpl->Parallel(&slsDetector::getPatternMask, pos);
}
void Detector::setPatternBitMask(uint64_t mask, Positions pos){
pimpl->Parallel(&slsDetector::setPatternBitMask, pos, mask);
}
Result<uint64_t> Detector::getPatternBitMask(Positions pos) const{
return pimpl->Parallel(&slsDetector::getPatternBitMask, pos);
}
void Detector::setLEDEnable(bool enable, Positions pos) {
pimpl->Parallel(&slsDetector::setLEDEnable, pos, static_cast<int>(enable));
}

View File

@ -476,17 +476,6 @@ void multiSlsDetector::addSlsDetector(const std::string &hostname) {
multi_shm()->multiDetectorType = getDetectorTypeAsEnum(-1);// -1 needed here
}
void multiSlsDetector::addSlsDetector(std::unique_ptr<slsDetector> det) {
detectors.push_back(std::move(det));
multi_shm()->numberOfDetectors = detectors.size();
multi_shm()->dataBytes += detectors.back()->getDataBytes();
multi_shm()->dataBytesInclGapPixels +=
detectors.back()->getDataBytesInclGapPixels();
multi_shm()->numberOfChannels +=
detectors.back()->getTotalNumberOfChannels();
multi_shm()->multiDetectorType = getDetectorTypeAsEnum(-1);// -1 needed here
}
slsDetectorDefs::detectorType multiSlsDetector::getDetectorTypeAsEnum() const {
return multi_shm()->multiDetectorType;
}

View File

@ -9,75 +9,75 @@
using namespace sls;
SCENARIO("Multi detector operation", "[detector]") {
// SCENARIO("Multi detector operation", "[detector]") {
multiSlsDetector::freeSharedMemory(20, -1);
// multiSlsDetector::freeSharedMemory(20, -1);
GIVEN("An empty multi detector") {
multiSlsDetector m(20);
THEN("the size is zero") {
CHECK(m.getNumberOfDetectors() == 0);
CHECK(m.getDataBytes() == 0);
CHECK(m.getTotalNumberOfChannels() == 0);
}
// GIVEN("An empty multi detector") {
// multiSlsDetector m(20);
// THEN("the size is zero") {
// CHECK(m.getNumberOfDetectors() == 0);
// CHECK(m.getDataBytes() == 0);
// CHECK(m.getTotalNumberOfChannels() == 0);
// }
WHEN("we add a detector") {
m.addSlsDetector(sls::make_unique<slsDetector>(
slsDetectorDefs::detectorType::EIGER, 20, 0));
THEN("the size and number of detector changes") {
CHECK(m.getNumberOfDetectors() == 1);
CHECK(m.getTotalNumberOfChannels() == 256 * 1024);
}
// WHEN("we add a detector") {
// m.addSlsDetector(sls::make_unique<slsDetector>(
// slsDetectorDefs::detectorType::EIGER, 20, 0));
// THEN("the size and number of detector changes") {
// CHECK(m.getNumberOfDetectors() == 1);
// CHECK(m.getTotalNumberOfChannels() == 256 * 1024);
// }
WHEN("we add another detector") {
m.addSlsDetector(sls::make_unique<slsDetector>(
slsDetectorDefs::detectorType::EIGER, 20, 1));
THEN("the size and number of detector changes") {
CHECK(m.getNumberOfDetectors() == 2);
CHECK(m.getTotalNumberOfChannels() == 2 * 256 * 1024);
}
// WHEN("we add another detector") {
// m.addSlsDetector(sls::make_unique<slsDetector>(
// slsDetectorDefs::detectorType::EIGER, 20, 1));
// THEN("the size and number of detector changes") {
// CHECK(m.getNumberOfDetectors() == 2);
// CHECK(m.getTotalNumberOfChannels() == 2 * 256 * 1024);
// }
WHEN("We set the trimen") {
std::vector<int> energies{5000, 6000, 7000, 8000, 9000};
m.setTrimEn(energies);
THEN("we read back the same values") {
CHECK(m.getTrimEn() == energies);
}
}
WHEN("We set the trimen to different values") {
std::vector<int> en0{5000, 6000, 7000, 8000, 9000};
std::vector<int> en1{6000, 7000, 8000, 9000};
m.setTrimEn(en0, 0);
m.setTrimEn(en1, 1);
THEN("we read back the same values") {
CHECK(m.getTrimEn(0) == en0);
CHECK(m.getTrimEn(1) == en1);
CHECK(m.getTrimEn() == std::vector<int>{-1});
}
}
}
}
m.freeSharedMemory();
}
}
// WHEN("We set the trimen") {
// std::vector<int> energies{5000, 6000, 7000, 8000, 9000};
// m.setTrimEn(energies);
// THEN("we read back the same values") {
// CHECK(m.getTrimEn() == energies);
// }
// }
// WHEN("We set the trimen to different values") {
// std::vector<int> en0{5000, 6000, 7000, 8000, 9000};
// std::vector<int> en1{6000, 7000, 8000, 9000};
// m.setTrimEn(en0, 0);
// m.setTrimEn(en1, 1);
// THEN("we read back the same values") {
// CHECK(m.getTrimEn(0) == en0);
// CHECK(m.getTrimEn(1) == en1);
// CHECK(m.getTrimEn() == std::vector<int>{-1});
// }
// }
// }
// }
// m.freeSharedMemory();
// }
// }
TEST_CASE("Set and get partialFramesPadding", "[detector][somenewtag]"){
// TEST_CASE("Set and get partialFramesPadding", "[detector][somenewtag]"){
multiSlsDetector::freeSharedMemory(20, -1);
multiSlsDetector m(20);
m.addSlsDetector(sls::make_unique<slsDetector>(
slsDetectorDefs::detectorType::EIGER, 20, 0));
m.addSlsDetector(sls::make_unique<slsDetector>(
slsDetectorDefs::detectorType::EIGER, 20, 1));
// multiSlsDetector::freeSharedMemory(20, -1);
// multiSlsDetector m(20);
// m.addSlsDetector(sls::make_unique<slsDetector>(
// slsDetectorDefs::detectorType::EIGER, 20, 0));
// m.addSlsDetector(sls::make_unique<slsDetector>(
// slsDetectorDefs::detectorType::EIGER, 20, 1));
m.setPartialFramesPadding(false);
CHECK(m.getPartialFramesPadding() == 0);
// m.setPartialFramesPadding(false);
// CHECK(m.getPartialFramesPadding() == 0);
m.setPartialFramesPadding(true);
CHECK(m.getPartialFramesPadding() == 1);
// m.setPartialFramesPadding(true);
// CHECK(m.getPartialFramesPadding() == 1);
m.setPartialFramesPadding(false, 0);
CHECK(m.getPartialFramesPadding() == -1);
// m.setPartialFramesPadding(false, 0);
// CHECK(m.getPartialFramesPadding() == -1);
m.freeSharedMemory();
}
// m.freeSharedMemory();
// }