From a592081ac0c54bdf54a99d61f5da54f184b3957a Mon Sep 17 00:00:00 2001 From: Felix Weiglhofer <weiglhofer@fias.uni-frankfurt.de> Date: Thu, 19 Oct 2023 08:06:05 +0000 Subject: [PATCH] cbmreco: Integrate TRD and TRD2D Unpacker. * Add `--dump-setup` to dump unpacker setups to file. * Add TRD and TRD2D setup files converted to YAML * Enable TRD and TRD2D Unpacker in cbmreco * Make TRD and TRD2D Unpacker parallel --- algo/base/Options.cxx | 2 +- algo/detectors/trd/ReadoutConfig.h | 5 + algo/detectors/trd/Unpack.cxx | 48 +- algo/detectors/trd/Unpack.h | 53 +- algo/detectors/trd2d/ReadoutConfig.cxx | 23 +- algo/detectors/trd2d/ReadoutConfig.h | 35 +- algo/detectors/trd2d/Unpack.cxx | 31 +- algo/detectors/trd2d/Unpack.h | 19 +- algo/global/Reco.cxx | 8 - algo/params/Trd2dReadoutSetup.yaml | 1846 +++++++++++++++++++ algo/params/TrdReadoutSetup.yaml | 1524 +++++++++++++++ algo/unpack/Unpack.cxx | 37 +- algo/unpack/UnpackChain.cxx | 10 + macro/reco/reco_fairroot.C | 3 +- reco/app/cbmreco_fairrun/Application.cxx | 7 +- reco/app/cbmreco_fairrun/ProgramOptions.cxx | 1 + reco/app/cbmreco_fairrun/ProgramOptions.h | 4 + reco/app/cbmreco_fairrun/main.cxx | 2 +- reco/tasks/CbmReco.cxx | 17 +- reco/tasks/CbmReco.h | 11 +- reco/tasks/CbmTaskUnpack.cxx | 18 +- reco/tasks/CbmTaskUnpack.h | 11 +- 22 files changed, 3592 insertions(+), 123 deletions(-) create mode 100644 algo/params/Trd2dReadoutSetup.yaml create mode 100644 algo/params/TrdReadoutSetup.yaml diff --git a/algo/base/Options.cxx b/algo/base/Options.cxx index 51486227db..e743e92ab6 100644 --- a/algo/base/Options.cxx +++ b/algo/base/Options.cxx @@ -75,7 +75,7 @@ Options::Options(int argc, char** argv) "comma seperated list of reconstruction output types (hit, digi, ...)") ("steps", po::value(&fRecoSteps)->multitoken()->default_value({Step::Unpack, Step::LocalReco})->value_name("<steps>"), "comma seperated list of reconstruction steps (upack, digitrigger, localreco, ...)") - ("systems,s", po::value(&fDetectors)->multitoken()->default_value({Subsystem::STS, Subsystem::TOF, Subsystem::BMON, Subsystem::MUCH, Subsystem::RICH})->value_name("<detectors>"), + ("systems,s", po::value(&fDetectors)->multitoken()->default_value({Subsystem::STS, Subsystem::TOF, Subsystem::BMON, Subsystem::MUCH, Subsystem::RICH, Subsystem::TRD, Subsystem::TRD2D})->value_name("<detectors>"), "comma seperated list of detectors to process (sts, mvd, ...)") ("child-id,c", po::value(&fChildId)->default_value("00")->value_name("<id>"), "online process id on node") ("num-ts,n", po::value(&fNumTimeslices)->default_value(-1)->value_name("<num>"), diff --git a/algo/detectors/trd/ReadoutConfig.h b/algo/detectors/trd/ReadoutConfig.h index bd927bb03e..aeceeb60e4 100644 --- a/algo/detectors/trd/ReadoutConfig.h +++ b/algo/detectors/trd/ReadoutConfig.h @@ -10,6 +10,8 @@ #include <utility> #include <vector> +#include "config/Property.h" + namespace cbm::algo::trd { @@ -83,6 +85,9 @@ namespace cbm::algo::trd // --- TRD channel map // --- Map index: (equipment, crob, elink, chan), map value: (channel address) std::map<uint16_t, std::vector<std::vector<std::vector<uint32_t>>>> fChannelMap = {}; //! + + CBM_PROPERTIES(config::Property(&ReadoutConfig::fReadoutMap, "readoutMap", "TRD readout map", {}, YAML::Hex), + config::Property(&ReadoutConfig::fChannelMap, "channelMap", "TRD channel map")); }; } // namespace cbm::algo::trd diff --git a/algo/detectors/trd/Unpack.cxx b/algo/detectors/trd/Unpack.cxx index d16208fd22..3e7667371e 100644 --- a/algo/detectors/trd/Unpack.cxx +++ b/algo/detectors/trd/Unpack.cxx @@ -15,21 +15,23 @@ namespace cbm::algo::trd // ---- Algorithm execution --------------------------------------------- Unpack::resultType Unpack::operator()(const uint8_t* msContent, const fles::MicrosliceDescriptor& msDescr, - const uint64_t tTimeslice) + const uint64_t tTimeslice) const { // --- Output data resultType result = {}; + MsContext ctx = {}; + // Get the µSlice starttime relative to the timeslice starttime (constant is clock length of Spadic in ns) - fMsStartTimeRelCC = (msDescr.idx - tTimeslice) / fAsicClockCycle; + ctx.fMsStartTimeRelCC = (msDescr.idx - tTimeslice) / fAsicClockCycle; // We only want to count on TS_MSB per Stream per TS_MSB package (each eLink sends its own TS_MSB frame) // so we store the current TS_MSB and compare it to the incoming. std::int8_t currTsMsb = 0; // Reset the TS_MSB counter for the new µSlice we unpack - fNrTsMsbVec.clear(); - fNrTsMsbVec.resize(fStreamsPerWord); + ctx.fNrTsMsbVec.resize(fStreamsPerWord); + // Get the µslice size in bytes to calculate the number of completed words auto mssize = msDescr.size; @@ -47,6 +49,8 @@ namespace cbm::algo::trd // We have 32 bit spadic frames in this readout version const auto mscontent = reinterpret_cast<const size_t*>(msContent); + result.first.reserve(nwords); + // Loop over all 64bit-Spadic-Words in the current µslice for (std::uint32_t istream = 0; istream < fStreamsPerWord; istream++) { currTsMsb = -1; @@ -67,7 +71,7 @@ namespace cbm::algo::trd switch (kWordtype) { case Spadic::MsMessageType::kEPO: { auto tsmsb = getTsMsb(frame, result.second); - if (((tsmsb - currTsMsb) & 0x3f) == 1 || currTsMsb == -1) fNrTsMsbVec.at(istream)++; + if (((tsmsb - currTsMsb) & 0x3f) == 1 || currTsMsb == -1) ctx.fNrTsMsbVec.at(istream)++; currTsMsb = tsmsb; result.second.fNumEpochMsgs++; break; @@ -75,7 +79,7 @@ namespace cbm::algo::trd } case Spadic::MsMessageType::kSOM: { // Create the raw message and fill it with all information we can get from the SOM msg - CbmTrdRawMessageSpadic raw = makeRaw(frame, criId, crobId, elinkId, istream); + CbmTrdRawMessageSpadic raw = makeRaw(frame, criId, crobId, elinkId, istream, ctx); // FIXME since we can not deduce the sample position from the messages we need in // future some parameter handling here to place the samples at the correct position @@ -163,7 +167,7 @@ namespace cbm::algo::trd // the message is done and the raw message container should contain everything we need. // So now we can call makeDigi(). Nevertheless there is a chance for a corrupted message, // which ends up with 0 samples so we have to check for it. - if (isample > 0) result.first.push_back(makeDigi(raw)); + if (isample > 0) result.first.push_back(makeDigi(raw, ctx)); } else { // We move the word counter backwards by one, such that the unexpected message can correctly be digested @@ -207,7 +211,7 @@ namespace cbm::algo::trd // -------------------------------------------------------------------------- // ---- digestBufInfoFlags ---- - Spadic::MsInfoType Unpack::digestBufInfoFlags(const std::uint32_t frame) + Spadic::MsInfoType Unpack::digestBufInfoFlags(const std::uint32_t frame) const { auto flag = (frame >> 15) & 0x3; Spadic::MsInfoType infotype; @@ -218,16 +222,16 @@ namespace cbm::algo::trd } // ---- digestInfoMsg ---- - void Unpack::digestInfoMsg(const std::uint32_t frame) + void Unpack::digestInfoMsg(const std::uint32_t frame) const { /// Save info message if needed. - //if (fOptOutBVec) { fOptOutBVec->emplace_back(std::make_pair(fLastFulltime, frame)); } + //if (fOptOutBVec) { fOptOutBVec->emplace_back(std::make_pair(ctx.fLastFulltime, frame)); } Spadic::MsInfoType infotype = getInfoType(frame); // "Spadic_Info_Types"; } // ---- digestInfoMsg ---- - void Unpack::digestMsFlags(const std::uint16_t flags, UnpackMonitorData& monitor) + void Unpack::digestMsFlags(const std::uint16_t flags, UnpackMonitorData& monitor) const { if (flags & static_cast<std::uint16_t>(fles::MicrosliceFlags::CrcValid)) { monitor.fNumCrcValidFlags++; } if (flags & static_cast<std::uint16_t>(fles::MicrosliceFlags::OverflowFlim)) { monitor.fNumOverflowFlimFlags++; } @@ -236,7 +240,7 @@ namespace cbm::algo::trd } // ---- extractSample ---- - std::float_t Unpack::extractAvgSample(size_t* adcbuffer, size_t* nadcbits) + std::float_t Unpack::extractAvgSample(size_t* adcbuffer, size_t* nadcbits) const { // can not extract samples from a buffer with less than 9 bits assert(*nadcbits >= 9); @@ -263,7 +267,7 @@ namespace cbm::algo::trd } // ---- extractSample ---- - std::int16_t Unpack::extractSample(size_t* adcbuffer, size_t* nadcbits) + std::int16_t Unpack::extractSample(size_t* adcbuffer, size_t* nadcbits) const { // can not extract samples from a buffer with less than 9 bits assert(*nadcbits >= 9); @@ -284,7 +288,7 @@ namespace cbm::algo::trd } // ---- getInfoType ---- - Spadic::MsInfoType Unpack::getInfoType(const std::uint32_t frame) + Spadic::MsInfoType Unpack::getInfoType(const std::uint32_t frame) const { // Set first 20 bits to 1 for the mask size_t mask = 0x000FFFFF; @@ -324,7 +328,7 @@ namespace cbm::algo::trd } // ---- getMessageType ---- - Spadic::MsMessageType Unpack::getMessageType(const std::uint32_t frame) + Spadic::MsMessageType Unpack::getMessageType(const std::uint32_t frame) const { std::uint32_t checkframe = frame; checkframe &= 0xffffff; @@ -358,7 +362,7 @@ namespace cbm::algo::trd } // ---- getTsMsb ---- - std::uint8_t Unpack::getTsMsb(const std::uint32_t frame, UnpackMonitorData& monitor) + std::uint8_t Unpack::getTsMsb(const std::uint32_t frame, UnpackMonitorData& monitor) const { if ((frame & 0xf) > 0) return -2; // if a 'error' ts_msb is received the tsmsb value is not correct. To not mess up the counting -2 is returned. @@ -383,7 +387,7 @@ namespace cbm::algo::trd } // ---- makeDigi ---- - CbmTrdDigi Unpack::makeDigi(CbmTrdRawMessageSpadic raw) + CbmTrdDigi Unpack::makeDigi(CbmTrdRawMessageSpadic raw, MsContext& ctx) const { // Extract the trigger type and translate it to the digi enum auto rawTriggerType = static_cast<Spadic::eTriggerType>(raw.GetHitType()); @@ -401,7 +405,7 @@ namespace cbm::algo::trd int32_t padChNr = elinkPar.fChanAddress.at(raw.GetChannelId()); // Store the full time information to last full-time member for error message handling - fLastFulltime = raw.GetFullTime(); + ctx.fLastFulltime = raw.GetFullTime(); // Get the time information and apply the necessary correction uint64_t time = raw.GetTime() - elinkPar.fTimeOffset; @@ -434,7 +438,7 @@ namespace cbm::algo::trd // ---- makeRaw ---- CbmTrdRawMessageSpadic Unpack::makeRaw(const std::uint32_t frame, std::uint16_t criId, std::uint8_t crobId, - std::uint16_t elinkId, std::uint8_t istream) + std::uint16_t elinkId, std::uint8_t istream, MsContext& ctx) const { auto chId = static_cast<std::uint8_t>(((frame >> 17) & 0xf)); auto timestamp = static_cast<std::uint8_t>((frame >> 9) & 0xff); @@ -444,7 +448,7 @@ namespace cbm::algo::trd // We directly start with the largest possible samples vector to only init it once std::vector<std::int16_t> samples = std::vector<std::int16_t>(0); - uint64_t fulltime = fMsStartTimeRelCC + (fNrTsMsbVec.at(istream) * fTsMsbLengthCC) + timestamp; + uint64_t fulltime = ctx.fMsStartTimeRelCC + (ctx.fNrTsMsbVec.at(istream) * fTsMsbLengthCC) + timestamp; // Create message return CbmTrdRawMessageSpadic(chId, elinkId, crobId, criId, hitType, nsamples, multihit, fulltime, samples); @@ -467,7 +471,7 @@ namespace cbm::algo::trd } // --- GetCharge ---- - float_t Unpack::GetMaxAdcValue(const std::vector<std::int16_t>* samples) + float_t Unpack::GetMaxAdcValue(const std::vector<std::int16_t>* samples) const { // Safety for corrupted input samples assert(samples->size() >= fPeakingBinMin); @@ -494,7 +498,7 @@ namespace cbm::algo::trd } // ---- GetBaseline ---- - float_t Unpack::GetBaseline(const std::vector<std::int16_t>* samples) + float_t Unpack::GetBaseline(const std::vector<std::int16_t>* samples) const { // The spadic 2.2 has a functionality that an average baseline can be written to the first sample. // So first we have to check if this is active. diff --git a/algo/detectors/trd/Unpack.h b/algo/detectors/trd/Unpack.h index ff7e9e54b0..756f49ca3f 100644 --- a/algo/detectors/trd/Unpack.h +++ b/algo/detectors/trd/Unpack.h @@ -121,13 +121,25 @@ namespace cbm::algo::trd ** @return TRD digi data **/ resultType operator()(const uint8_t* msContent, const fles::MicrosliceDescriptor& msDescr, - const uint64_t tTimeslice); + const uint64_t tTimeslice) const; /** @brief Set the parameter container ** @param params Pointer to parameter container **/ void SetParams(std::unique_ptr<UnpackPar> params) { fParams = *(std::move(params)); } + private: // Types + struct MsContext { + /** @brief Start time of the current µSlice relative to the Timeslice start time in Spadic CC. */ + size_t fMsStartTimeRelCC = 0; + + /** @brief Time of the last succesful digest hit message */ + size_t fLastFulltime = 0; + + /** @brief Counter for the ts_msb used to reconstruct the time */ + std::vector<std::uint8_t> fNrTsMsbVec = {}; + }; + private: // members UnpackPar fParams = {}; ///< Parameter container @@ -143,20 +155,20 @@ namespace cbm::algo::trd ** @param frame ** @return Spadic::MsInfoType **/ - Spadic::MsInfoType digestBufInfoFlags(const std::uint32_t frame); + Spadic::MsInfoType digestBufInfoFlags(const std::uint32_t frame) const; /** ** @brief Digest the flags of the currently unpacked µSlice. ** @param flags flags stored in the µSlice descriptor ** @param storage of monitoring data **/ - void digestMsFlags(const std::uint16_t flags, UnpackMonitorData& monitor); + void digestMsFlags(const std::uint16_t flags, UnpackMonitorData& monitor) const; /** ** @brief Digest a info message run all default information forwarding from the msg. ** @param frame **/ - void digestInfoMsg(const std::uint32_t frame); + void digestInfoMsg(const std::uint32_t frame) const; /** ** @brief Extract one adc sample from a given adcbuffer @@ -164,7 +176,7 @@ namespace cbm::algo::trd ** @param[in,out] nadcbits ** @return std::int16_t **/ - std::int16_t extractSample(size_t* adcbuffer, size_t* nadcbits); + std::int16_t extractSample(size_t* adcbuffer, size_t* nadcbits) const; /** ** @brief Extract the baseline average sample from a given adcbuffer. @@ -175,10 +187,10 @@ namespace cbm::algo::trd ** @param[in,out] nadcbits ** @return std::float_t **/ - std::float_t extractAvgSample(size_t* adcbuffer, size_t* nadcbits); + std::float_t extractAvgSample(size_t* adcbuffer, size_t* nadcbits) const; /** @brief Identify the InfoType of a 64bit InfoMessage word inside a Microslice */ - Spadic::MsInfoType getInfoType(const std::uint32_t frame); + Spadic::MsInfoType getInfoType(const std::uint32_t frame) const; /** ** @brief Get the ts_msb information from the TS_MSB(kEPO) frame. We take the first of the 3 @@ -187,7 +199,7 @@ namespace cbm::algo::trd ** @param storage of monitoring data ** @return ts_msb value **/ - std::uint8_t getTsMsb(const std::uint32_t frame, UnpackMonitorData& monitor); + std::uint8_t getTsMsb(const std::uint32_t frame, UnpackMonitorData& monitor) const; /** ** @brief Create a CbmTrdRawMessageSpadic from the hit message input. @@ -199,7 +211,7 @@ namespace cbm::algo::trd ** @todo Check if we can get rid of the future obsolete microslice stuff. **/ CbmTrdRawMessageSpadic makeRaw(const std::uint32_t frame, std::uint16_t criId, std::uint8_t crobId, - std::uint16_t elinkId, std::uint8_t istream); + std::uint16_t elinkId, std::uint8_t istream, MsContext& ctx) const; /** ** @brief Get the Digi Trigger Type from the raw message triggertype @@ -212,21 +224,21 @@ namespace cbm::algo::trd ** @brief Create an actual digi from the raw message ** @param raw **/ - CbmTrdDigi makeDigi(CbmTrdRawMessageSpadic raw); + CbmTrdDigi makeDigi(CbmTrdRawMessageSpadic raw, MsContext& ctx) const; /** ** @brief Get the Bin Time Shift value ** @param samples ** @return ULong64_t **/ - uint64_t GetBinTimeShift(const std::vector<std::int16_t>* /*samples*/) { return 0.; }; + uint64_t GetBinTimeShift(const std::vector<std::int16_t>* /*samples*/) const { return 0.; }; /** ** @brief Get the MaxAdc value ** @param samples ** @return Float_t **/ - std::float_t GetMaxAdcValue(const std::vector<std::int16_t>* samples); + std::float_t GetMaxAdcValue(const std::vector<std::int16_t>* samples) const; /** ** @brief Get the Baseline value @@ -234,27 +246,18 @@ namespace cbm::algo::trd ** @param samples ** @return float_t **/ - float_t GetBaseline(const std::vector<std::int16_t>* samples); + float_t GetBaseline(const std::vector<std::int16_t>* samples) const; /** @brief Identify the message type of a given 32bit frame inside a Microslice */ - Spadic::MsMessageType getMessageType(const std::uint32_t frame); - - /** @brief Counter for the ts_msb used to reconstruct the time */ - std::vector<std::uint8_t> fNrTsMsbVec = {}; + Spadic::MsMessageType getMessageType(const std::uint32_t frame) const; /** @brief Bytes per spadic frame stored in the microslices */ - static const std::uint8_t fBytesPerWord = 8; + static constexpr std::uint8_t fBytesPerWord = 8; /** For the msg format used from 2021 ongoing we have 2 parallel streams per word. * ** All data from eLinks 0..20 go to one stream and 21..41 to the other */ /** @brief Number of streams per word **/ - static const std::uint8_t fStreamsPerWord = 2; - - /** @brief Start time of the current µSlice relative to the Timeslice start time in Spadic CC. */ - size_t fMsStartTimeRelCC = 0; - - /** @brief Time of the last succesful digest hit message */ - size_t fLastFulltime = 0; + static constexpr std::uint8_t fStreamsPerWord = 2; /** @brief Number of samples not considered for max adc */ static constexpr size_t fNrOfPresamples = 1; diff --git a/algo/detectors/trd2d/ReadoutConfig.cxx b/algo/detectors/trd2d/ReadoutConfig.cxx index 90914b95b9..7352f30eb0 100644 --- a/algo/detectors/trd2d/ReadoutConfig.cxx +++ b/algo/detectors/trd2d/ReadoutConfig.cxx @@ -72,7 +72,7 @@ namespace cbm::algo::trd2d for (uint8_t crob_id = 0; crob_id < NCROBMOD; crob_id++) { uint16_t eq_id = entry.second[crob_id]; if (!eq_id) continue; - fReadoutMap[eq_id] = std::make_pair(mod_id, crob_id); + fReadoutMap[eq_id] = {mod_id, crob_id}; } } } @@ -95,7 +95,8 @@ namespace cbm::algo::trd2d for (auto chanMap : asicMap.second) { uint16_t chanId = chanMap.first; std::tuple<int32_t, bool, uint64_t> chanPars = chanMap.second; - fChannelMap[equipmentId][asicId][chanId] = chanPars; + ChanMapping entry = {std::get<0>(chanPars), std::get<1>(chanPars), std::get<2>(chanPars)}; + fChannelMap[equipmentId][asicId][chanId] = entry; } } } @@ -104,9 +105,9 @@ namespace cbm::algo::trd2d // --- Mapping (equimentId, asicId, channel) -> (pad address, mask flag, daq offset) ----- - std::tuple<int32_t, bool, uint64_t> ReadoutConfig::ChanMap(uint16_t equipId, uint16_t asic, uint16_t chan) + ReadoutConfig::ChanMapping ReadoutConfig::ChanMap(uint16_t equipId, uint16_t asic, uint16_t chan) { - std::tuple<int32_t, bool, uint64_t> result = std::make_tuple(-1, false, 0); + ChanMapping result = {-1, false, 0}; auto it = fChannelMap.find(equipId); if (it != fChannelMap.end()) { if (asic < fChannelMap[equipId].size()) { @@ -119,9 +120,9 @@ namespace cbm::algo::trd2d // --- Mapping (equimentId) -> (module id, crob id) --------------------------------- - std::pair<uint16_t, uint8_t> ReadoutConfig::CompMap(uint16_t equipId) + ReadoutConfig::CompMapping ReadoutConfig::CompMap(uint16_t equipId) { - std::pair<uint16_t, uint8_t> result(0, 0); + CompMapping result = {}; auto equipIter = fReadoutMap.find(equipId); if (equipIter != fReadoutMap.end()) { result = equipIter->second; } return result; @@ -136,8 +137,8 @@ namespace cbm::algo::trd2d for (auto comp : fReadoutMap) { uint16_t equipmentId = comp.first; auto value = comp.second; - uint16_t moduleId = value.first; - uint16_t crobId = value.second; + uint16_t moduleId = value.moduleId; + uint16_t crobId = value.crobId; ss << "Equipment " << equipmentId << " Module " << moduleId << " Crob " << crobId << "\n"; } ss << "\n"; @@ -152,9 +153,9 @@ namespace cbm::algo::trd2d ss << "\n Equipment " << equipmentId << " AsicId " << asicId << " nChans " << numChans; for (size_t chanId = 0; chanId < numChans; chanId++) { auto entry = asicMap.second.at(asicId).at(chanId); - int32_t address = std::get<0>(entry); - bool isMasked = std::get<1>(entry); - uint64_t daqOffset = std::get<2>(entry); + int32_t address = entry.padAddress; + bool isMasked = entry.rPairingFlag; + uint64_t daqOffset = entry.daqOffset; ss << "\n Equipment " << equipmentId << " AsicId " << asicId << " chanID " << chanId << " pad address " << address << " mask " << isMasked << " daq offset " << daqOffset; } diff --git a/algo/detectors/trd2d/ReadoutConfig.h b/algo/detectors/trd2d/ReadoutConfig.h index f3f1bf7921..3d42facdc8 100644 --- a/algo/detectors/trd2d/ReadoutConfig.h +++ b/algo/detectors/trd2d/ReadoutConfig.h @@ -11,6 +11,7 @@ #include <vector> #include "Unpack.h" +#include "config/Property.h" namespace cbm::algo::trd2d { @@ -31,6 +32,26 @@ namespace cbm::algo::trd2d class ReadoutConfig { public: + struct CompMapping { + uint16_t moduleId; + uint8_t crobId; + + CBM_FORMAT(YAML::Flow); + CBM_PROPERTIES(config::Property(&CompMapping::moduleId, "moduleId", "Module ID"), + config::Property(&CompMapping::crobId, "crobId", "CROB ID")); + }; + + struct ChanMapping { + int32_t padAddress; + bool rPairingFlag; + uint64_t daqOffset; + + CBM_FORMAT(YAML::Flow); + CBM_PROPERTIES(config::Property(&ChanMapping::padAddress, "padAddress", "Pad address"), + config::Property(&ChanMapping::rPairingFlag, "rPairingFlag", "R pairing flag"), + config::Property(&ChanMapping::daqOffset, "daqOffset", "DAQ offset")); + }; + /** @brief Constructor **/ ReadoutConfig(); @@ -65,7 +86,7 @@ namespace cbm::algo::trd2d ** @param equipId Equipment identifier (component) ** @return pair (module id, crob id) */ - std::pair<uint16_t, uint8_t> CompMap(uint16_t equipId); + CompMapping CompMap(uint16_t equipId); /** @brief API: Mapping from component, asic and channel to tuple (pad address, R pairing flag, daq offset) @@ -74,7 +95,7 @@ namespace cbm::algo::trd2d ** @param channel Channel number within CROB ** @return tuple (pad address, R pairing flag, daq offset) */ - std::tuple<int32_t, bool, uint64_t> ChanMap(uint16_t equipId, uint16_t asic, uint16_t chan); + ChanMapping ChanMap(uint16_t equipId, uint16_t asic, uint16_t chan); /** @brief Debug output of readout map **/ @@ -90,11 +111,17 @@ namespace cbm::algo::trd2d private: // --- TRD2D readout map // --- Map index: (equipment), map value: (module id, crob id) - std::map<uint16_t, std::pair<uint16_t, uint8_t>> fReadoutMap = {}; //! + std::map<uint16_t, CompMapping> fReadoutMap = {}; //! // --- TRD2D channel map // --- Map index: (equipment, asic, chan), map value: (pad address, mask flag, daq offset) - std::map<uint16_t, std::vector<std::vector<std::tuple<int32_t, bool, uint64_t>>>> fChannelMap = {}; //! + std::map<uint16_t, std::vector<std::vector<ChanMapping>>> fChannelMap = {}; //! + + CBM_PROPERTIES(config::Property(&ReadoutConfig::fReadoutMap, "readoutMap", "Maps equipment to module and CROB ID", + YAML::Hex), + config::Property(&ReadoutConfig::fChannelMap, "channelMap", + "Maps equipment, ASIC and channel to pad address, R pairing flag and DAQ offset", + {}, YAML::Hex)); }; } // namespace cbm::algo::trd2d diff --git a/algo/detectors/trd2d/Unpack.cxx b/algo/detectors/trd2d/Unpack.cxx index 9e5b563b2a..89018954fa 100644 --- a/algo/detectors/trd2d/Unpack.cxx +++ b/algo/detectors/trd2d/Unpack.cxx @@ -27,13 +27,12 @@ namespace cbm::algo::trd2d // ---- Algorithm execution --------------------------------------------- Unpack::resultType Unpack::operator()(const uint8_t* msContent, const fles::MicrosliceDescriptor& msDescr, - const uint64_t tTimeslice) + const uint64_t tTimeslice) const { // --- Output data resultType result = {}; - // Reset monitoring data - fMonitor = UnpackMonitorData(); + MsContext ctx = {}; // define time wrt start of time slice in TRD/FASP clks [80 MHz]. Contains: // - relative offset of the MS wrt the TS @@ -63,7 +62,7 @@ namespace cbm::algo::trd2d if (isaux) { if (ch_id == 0) { // clear buffer - if (vMess.size()) { pushDigis(vMess, time); } + if (vMess.size()) { pushDigis(vMess, time, ctx); } vMess.clear(); lFaspOld = 0xff; @@ -72,28 +71,28 @@ namespace cbm::algo::trd2d continue; } if (lFaspOld != fasp_id) { - if (vMess.size()) { pushDigis(vMess, time); } + if (vMess.size()) { pushDigis(vMess, time, ctx); } vMess.clear(); lFaspOld = fasp_id; } if (data & 0x1) { - fMonitor.fNumErrEndBitSet++; + ctx.fMonitor.fNumErrEndBitSet++; continue; } if (data & 0x2000) { - fMonitor.fNumSelfTriggeredData++; + ctx.fMonitor.fNumSelfTriggeredData++; data &= 0x1fff; } vMess.emplace_back(ch_id, kData, slice, data >> 1, crob_id, lFaspOld); } - result.first = FinalizeComponent(); //TO DO: Original (non-algo) version calls this after MS loop!! - result.second = fMonitor; + result.first = FinalizeComponent(ctx); //TO DO: Original (non-algo) version calls this after MS loop!! + result.second = ctx.fMonitor; return result; } //_________________________________________________________________________________ - bool Unpack::pushDigis(std::vector<FaspMessage> messes, const uint64_t time) + bool Unpack::pushDigis(std::vector<FaspMessage> messes, const uint64_t time, MsContext& ctx) const { const uint16_t mod_id = fParams.fModId; const UnpackAsicPar& asicPar = fParams.fAsicParams[messes[0].fasp]; @@ -105,7 +104,7 @@ namespace cbm::algo::trd2d const uint64_t lTime = time + tdaqOffset + imess.tlab; const uint16_t lchR = hasPairingR ? imess.data : 0; const uint16_t lchT = hasPairingR ? 0 : imess.data; - std::vector<CbmTrdDigi>& digiBuffer = fDigiBuffer[pad]; + std::vector<CbmTrdDigi>& digiBuffer = ctx.fDigiBuffer[pad]; if (digiBuffer.size() == 0) { // init pad position in map and build digi for message digiBuffer.emplace_back(pad, lchT, lchR, lTime); @@ -161,14 +160,14 @@ namespace cbm::algo::trd2d return true; } - std::vector<CbmTrdDigi> Unpack::FinalizeComponent() + std::vector<CbmTrdDigi> Unpack::FinalizeComponent(MsContext& ctx) const { std::vector<CbmTrdDigi> outputDigis; for (uint16_t ipad(0); ipad < NFASPMOD * NFASPCH; ipad++) { - if (!fDigiBuffer[ipad].size()) continue; + if (!ctx.fDigiBuffer[ipad].size()) continue; uint nIncomplete(0); - for (auto id = fDigiBuffer[ipad].begin(); id != fDigiBuffer[ipad].end(); id++) { + for (auto id = ctx.fDigiBuffer[ipad].begin(); id != ctx.fDigiBuffer[ipad].end(); id++) { double r, t; int32_t dt; r = (*id).GetCharge(t, dt); @@ -183,9 +182,9 @@ namespace cbm::algo::trd2d outputDigis.emplace_back(std::move((*id))); } // clear digi buffer wrt the digi which was forwarded to higher structures - fDigiBuffer[ipad].clear(); + ctx.fDigiBuffer[ipad].clear(); if (nIncomplete > 2) { - fMonitor.fNumIncompleteDigis++; //TO DO: This must be moved if finalization is done after MS loop + ctx.fMonitor.fNumIncompleteDigis++; //TO DO: This must be moved if finalization is done after MS loop } } return outputDigis; diff --git a/algo/detectors/trd2d/Unpack.h b/algo/detectors/trd2d/Unpack.h index 1421df9180..408b659700 100644 --- a/algo/detectors/trd2d/Unpack.h +++ b/algo/detectors/trd2d/Unpack.h @@ -130,22 +130,28 @@ namespace cbm::algo::trd2d ** @return TRD digi data **/ resultType operator()(const uint8_t* msContent, const fles::MicrosliceDescriptor& msDescr, - const uint64_t tTimeslice); + const uint64_t tTimeslice) const; /** @brief Set the parameter container ** @param params Pointer to parameter container **/ void SetParams(std::unique_ptr<UnpackPar> params) { fParams = *(std::move(params)); } + private: // Types + struct MsContext { + UnpackMonitorData fMonitor; ///< Container for monitoring data + + std::array<std::vector<CbmTrdDigi>, NFASPMOD* NFASPCH> fDigiBuffer = { + {}}; ///> Buffered digi for each pad in CROB component + }; + private: // members UnpackPar fParams = {}; ///< Parameter container - UnpackMonitorData fMonitor; ///< Container for monitoring data - - bool pushDigis(std::vector<FaspMessage> messages, const uint64_t time); + bool pushDigis(std::vector<FaspMessage> messages, const uint64_t time, MsContext& ctx) const; /** @brief Finalize component (e.g. copy from temp buffers) */ - std::vector<CbmTrdDigi> FinalizeComponent(); + std::vector<CbmTrdDigi> FinalizeComponent(MsContext& ctx) const; // Constants /** @brief Bytes per FASP frame stored in the microslices (32 bits words) @@ -164,9 +170,6 @@ namespace cbm::algo::trd2d * c - channel id */ static const std::uint8_t fBytesPerWord = 4; - - std::array<std::vector<CbmTrdDigi>, NFASPMOD* NFASPCH> fDigiBuffer = { - {}}; ///> Buffered digi for each pad in CROB component }; diff --git a/algo/global/Reco.cxx b/algo/global/Reco.cxx index 14ce8b2a71..17da31ad94 100644 --- a/algo/global/Reco.cxx +++ b/algo/global/Reco.cxx @@ -27,14 +27,6 @@ void Reco::Validate(const Options& opts) if (!fs::exists(opts.ParamsDir())) { throw std::runtime_error("ParamsDir does not exist: " + opts.ParamsDir().string()); } - - for (auto detector : opts.Detectors()) { - switch (detector) { - case fles::Subsystem::TRD: - case fles::Subsystem::TRD2D: throw std::runtime_error(fmt::format("Unsupported system: {}", ToString(detector))); - default: break; - } - } } void Reco::Init(const Options& opts) diff --git a/algo/params/Trd2dReadoutSetup.yaml b/algo/params/Trd2dReadoutSetup.yaml new file mode 100644 index 0000000000..32ff7a1900 --- /dev/null +++ b/algo/params/Trd2dReadoutSetup.yaml @@ -0,0 +1,1846 @@ +--- +readoutMap: + 65473: {moduleId: 5, crobId: 2} + 65474: {moduleId: 5, crobId: 0} + 65477: {moduleId: 5, crobId: 1} +channelMap: + 65473: + - + - {padAddress: -1120, rPairingFlag: true, daqOffset: 0} + - {padAddress: 1119, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1119, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1118, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1118, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1117, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1117, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1116, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1116, rPairingFlag: true, daqOffset: 0} + - {padAddress: 1115, rPairingFlag: true, daqOffset: 0} + - {padAddress: -1115, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1114, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1114, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1113, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1113, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1112, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -1112, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1111, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1111, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1110, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1110, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1109, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1109, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1108, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1108, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1107, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1107, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1106, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1106, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1105, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1105, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1104, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -1104, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1103, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1103, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1102, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1102, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1101, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1101, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1100, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1100, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1099, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1099, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1098, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1098, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1097, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1097, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1096, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -1168, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1168, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1169, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1169, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1170, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1170, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1171, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1171, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1172, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1172, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1173, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1173, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1174, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1174, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1175, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1175, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -1176, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1176, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1177, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1177, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1178, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1178, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1179, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1179, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1180, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1180, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1181, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1181, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1182, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1182, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1183, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1183, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -1184, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1184, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1185, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1185, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1186, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1186, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1187, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1187, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1188, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1188, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1189, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1189, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1190, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1190, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1191, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1191, rPairingFlag: true, daqOffset: 3} + - + - {padAddress: -1144, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1143, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1143, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1142, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1142, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1141, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1141, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1140, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1140, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1139, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1139, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1138, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1138, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1137, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1137, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1136, rPairingFlag: true, daqOffset: 0} + - + - {padAddress: -1136, rPairingFlag: true, daqOffset: 0} + - {padAddress: 1135, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1135, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1134, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1134, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1133, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1133, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1132, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1132, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1131, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1131, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1130, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1130, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1129, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1129, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1128, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -1128, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1127, rPairingFlag: true, daqOffset: 0} + - {padAddress: -1127, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1126, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1126, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1125, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1125, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1124, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1124, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1123, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1123, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1122, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1122, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1121, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1121, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1120, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -1192, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1192, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1193, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1193, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1194, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1194, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1195, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1195, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1196, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1196, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1197, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1197, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1198, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1198, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1199, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1199, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -1200, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1200, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1201, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1201, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1202, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1202, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1203, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1203, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1204, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1204, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1205, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1205, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1206, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1206, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1207, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1207, rPairingFlag: true, daqOffset: 3} + - + - {padAddress: -1208, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1208, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1209, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1209, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1210, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1210, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1211, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1211, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1212, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1212, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1213, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1213, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1214, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1214, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1215, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1215, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -1264, rPairingFlag: true, daqOffset: 0} + - {padAddress: 1263, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1263, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1262, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1262, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1261, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1261, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1260, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1260, rPairingFlag: true, daqOffset: 0} + - {padAddress: 1259, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1259, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1258, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1258, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1257, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1257, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1256, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -1256, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1255, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1255, rPairingFlag: true, daqOffset: 0} + - {padAddress: 1254, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1254, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1253, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1253, rPairingFlag: true, daqOffset: 0} + - {padAddress: 1252, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1252, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1251, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1251, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1250, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1250, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1249, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1249, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1248, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -1248, rPairingFlag: true, daqOffset: 0} + - {padAddress: 1247, rPairingFlag: true, daqOffset: 0} + - {padAddress: -1247, rPairingFlag: true, daqOffset: 0} + - {padAddress: 1246, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1246, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1245, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1245, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1244, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1244, rPairingFlag: true, daqOffset: 0} + - {padAddress: 1243, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1243, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1242, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1242, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1241, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1241, rPairingFlag: true, daqOffset: 0} + - {padAddress: 1240, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -1312, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1312, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1313, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1313, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1314, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1314, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1315, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1315, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1316, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1316, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1317, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1317, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1318, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1318, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1319, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1319, rPairingFlag: true, daqOffset: 3} + - + - {padAddress: -1320, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1320, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1321, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1321, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1322, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1322, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1323, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1323, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1324, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1324, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1325, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1325, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1326, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1326, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1327, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1327, rPairingFlag: true, daqOffset: 3} + - + - {padAddress: -1328, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1328, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1329, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1329, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1330, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1330, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1331, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1331, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1332, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1332, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1333, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1333, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1334, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1334, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1335, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1335, rPairingFlag: true, daqOffset: 3} + - + - {padAddress: -1288, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1287, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1287, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1286, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1286, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1285, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1285, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1284, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1284, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1283, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1283, rPairingFlag: true, daqOffset: 0} + - {padAddress: 1282, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1282, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1281, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1281, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1280, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -1280, rPairingFlag: true, daqOffset: 0} + - {padAddress: 1279, rPairingFlag: true, daqOffset: 0} + - {padAddress: -1279, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1278, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1278, rPairingFlag: true, daqOffset: 0} + - {padAddress: 1277, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1277, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1276, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1276, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1275, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1275, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1274, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1274, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1273, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1273, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1272, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -1272, rPairingFlag: true, daqOffset: 0} + - {padAddress: 1271, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1271, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1270, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1270, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1269, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1269, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1268, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1268, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1267, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1267, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1266, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1266, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1265, rPairingFlag: false, daqOffset: 0} + - {padAddress: -1265, rPairingFlag: false, daqOffset: 0} + - {padAddress: 1264, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -1336, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1336, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1337, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1337, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1338, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1338, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1339, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1339, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1340, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1340, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1341, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1341, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1342, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1342, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1343, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1343, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -1344, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1344, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1345, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1345, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1346, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1346, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1347, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1347, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1348, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1348, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1349, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1349, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1350, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1350, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1351, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1351, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -1352, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1352, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1353, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1353, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1354, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1354, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1355, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1355, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1356, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1356, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1357, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1357, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1358, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1358, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1359, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1359, rPairingFlag: true, daqOffset: 3} + - + - {padAddress: -976, rPairingFlag: true, daqOffset: 0} + - {padAddress: 975, rPairingFlag: true, daqOffset: 0} + - {padAddress: -975, rPairingFlag: true, daqOffset: 0} + - {padAddress: 974, rPairingFlag: true, daqOffset: 0} + - {padAddress: -974, rPairingFlag: true, daqOffset: 0} + - {padAddress: 973, rPairingFlag: true, daqOffset: 0} + - {padAddress: -973, rPairingFlag: true, daqOffset: 0} + - {padAddress: 972, rPairingFlag: true, daqOffset: 0} + - {padAddress: -972, rPairingFlag: true, daqOffset: 0} + - {padAddress: 971, rPairingFlag: true, daqOffset: 0} + - {padAddress: -971, rPairingFlag: true, daqOffset: 0} + - {padAddress: 970, rPairingFlag: true, daqOffset: 0} + - {padAddress: -970, rPairingFlag: true, daqOffset: 0} + - {padAddress: 969, rPairingFlag: true, daqOffset: 0} + - {padAddress: -969, rPairingFlag: true, daqOffset: 0} + - {padAddress: 968, rPairingFlag: true, daqOffset: 0} + - + - {padAddress: -968, rPairingFlag: true, daqOffset: 0} + - {padAddress: 967, rPairingFlag: true, daqOffset: 0} + - {padAddress: -967, rPairingFlag: true, daqOffset: 0} + - {padAddress: 966, rPairingFlag: true, daqOffset: 0} + - {padAddress: -966, rPairingFlag: true, daqOffset: 0} + - {padAddress: 965, rPairingFlag: true, daqOffset: 0} + - {padAddress: -965, rPairingFlag: true, daqOffset: 0} + - {padAddress: 964, rPairingFlag: true, daqOffset: 0} + - {padAddress: -964, rPairingFlag: true, daqOffset: 0} + - {padAddress: 963, rPairingFlag: true, daqOffset: 0} + - {padAddress: -963, rPairingFlag: true, daqOffset: 0} + - {padAddress: 962, rPairingFlag: true, daqOffset: 0} + - {padAddress: -962, rPairingFlag: true, daqOffset: 0} + - {padAddress: 961, rPairingFlag: true, daqOffset: 0} + - {padAddress: -961, rPairingFlag: true, daqOffset: 0} + - {padAddress: 960, rPairingFlag: true, daqOffset: 0} + - + - {padAddress: -960, rPairingFlag: true, daqOffset: 0} + - {padAddress: 959, rPairingFlag: true, daqOffset: 0} + - {padAddress: -959, rPairingFlag: true, daqOffset: 0} + - {padAddress: 958, rPairingFlag: true, daqOffset: 0} + - {padAddress: -958, rPairingFlag: true, daqOffset: 0} + - {padAddress: 957, rPairingFlag: true, daqOffset: 0} + - {padAddress: -957, rPairingFlag: true, daqOffset: 0} + - {padAddress: 956, rPairingFlag: true, daqOffset: 0} + - {padAddress: -956, rPairingFlag: true, daqOffset: 0} + - {padAddress: 955, rPairingFlag: true, daqOffset: 0} + - {padAddress: -955, rPairingFlag: true, daqOffset: 0} + - {padAddress: 954, rPairingFlag: true, daqOffset: 0} + - {padAddress: -954, rPairingFlag: true, daqOffset: 0} + - {padAddress: 953, rPairingFlag: true, daqOffset: 0} + - {padAddress: -953, rPairingFlag: true, daqOffset: 0} + - {padAddress: 952, rPairingFlag: true, daqOffset: 0} + - + - {padAddress: -1024, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1024, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1025, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1025, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1026, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1026, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1027, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1027, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1028, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1028, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1029, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1029, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1030, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1030, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1031, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1031, rPairingFlag: true, daqOffset: 3} + - + - {padAddress: -1032, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1032, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1033, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1033, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1034, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1034, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1035, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1035, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1036, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1036, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1037, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1037, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1038, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1038, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1039, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1039, rPairingFlag: true, daqOffset: 3} + - + - {padAddress: -1040, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1040, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1041, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1041, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1042, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1042, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1043, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1043, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1044, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1044, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1045, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1045, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1046, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1046, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1047, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1047, rPairingFlag: true, daqOffset: 3} + - + - {padAddress: -1000, rPairingFlag: true, daqOffset: 0} + - {padAddress: 999, rPairingFlag: true, daqOffset: 0} + - {padAddress: -999, rPairingFlag: false, daqOffset: 0} + - {padAddress: 998, rPairingFlag: false, daqOffset: 0} + - {padAddress: -998, rPairingFlag: false, daqOffset: 0} + - {padAddress: 997, rPairingFlag: false, daqOffset: 0} + - {padAddress: -997, rPairingFlag: false, daqOffset: 0} + - {padAddress: 996, rPairingFlag: false, daqOffset: 0} + - {padAddress: -996, rPairingFlag: true, daqOffset: 0} + - {padAddress: 995, rPairingFlag: true, daqOffset: 0} + - {padAddress: -995, rPairingFlag: true, daqOffset: 0} + - {padAddress: 994, rPairingFlag: false, daqOffset: 0} + - {padAddress: -994, rPairingFlag: false, daqOffset: 0} + - {padAddress: 993, rPairingFlag: true, daqOffset: 0} + - {padAddress: -993, rPairingFlag: true, daqOffset: 0} + - {padAddress: 992, rPairingFlag: true, daqOffset: 0} + - + - {padAddress: -992, rPairingFlag: false, daqOffset: 0} + - {padAddress: 991, rPairingFlag: false, daqOffset: 0} + - {padAddress: -991, rPairingFlag: false, daqOffset: 0} + - {padAddress: 990, rPairingFlag: false, daqOffset: 0} + - {padAddress: -990, rPairingFlag: false, daqOffset: 0} + - {padAddress: 989, rPairingFlag: false, daqOffset: 0} + - {padAddress: -989, rPairingFlag: false, daqOffset: 0} + - {padAddress: 988, rPairingFlag: false, daqOffset: 0} + - {padAddress: -988, rPairingFlag: false, daqOffset: 0} + - {padAddress: 987, rPairingFlag: false, daqOffset: 0} + - {padAddress: -987, rPairingFlag: false, daqOffset: 0} + - {padAddress: 986, rPairingFlag: false, daqOffset: 0} + - {padAddress: -986, rPairingFlag: false, daqOffset: 0} + - {padAddress: 985, rPairingFlag: false, daqOffset: 0} + - {padAddress: -985, rPairingFlag: false, daqOffset: 0} + - {padAddress: 984, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -984, rPairingFlag: false, daqOffset: 0} + - {padAddress: 983, rPairingFlag: false, daqOffset: 0} + - {padAddress: -983, rPairingFlag: false, daqOffset: 0} + - {padAddress: 982, rPairingFlag: false, daqOffset: 0} + - {padAddress: -982, rPairingFlag: false, daqOffset: 0} + - {padAddress: 981, rPairingFlag: false, daqOffset: 0} + - {padAddress: -981, rPairingFlag: false, daqOffset: 0} + - {padAddress: 980, rPairingFlag: false, daqOffset: 0} + - {padAddress: -980, rPairingFlag: false, daqOffset: 0} + - {padAddress: 979, rPairingFlag: false, daqOffset: 0} + - {padAddress: -979, rPairingFlag: false, daqOffset: 0} + - {padAddress: 978, rPairingFlag: false, daqOffset: 0} + - {padAddress: -978, rPairingFlag: false, daqOffset: 0} + - {padAddress: 977, rPairingFlag: false, daqOffset: 0} + - {padAddress: -977, rPairingFlag: false, daqOffset: 0} + - {padAddress: 976, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -1048, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1048, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1049, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1049, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1050, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1050, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1051, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1051, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1052, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1052, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1053, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1053, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1054, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1054, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1055, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1055, rPairingFlag: true, daqOffset: 3} + - + - {padAddress: -1056, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1056, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1057, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1057, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1058, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1058, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1059, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1059, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1060, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1060, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1061, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1061, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1062, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1062, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1063, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1063, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -1064, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1064, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1065, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1065, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1066, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1066, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1067, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1067, rPairingFlag: true, daqOffset: 3} + - {padAddress: -1068, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1068, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1069, rPairingFlag: true, daqOffset: 3} + - {padAddress: 1069, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1070, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1070, rPairingFlag: false, daqOffset: 3} + - {padAddress: -1071, rPairingFlag: false, daqOffset: 3} + - {padAddress: 1071, rPairingFlag: true, daqOffset: 3} + 65474: + - + - {padAddress: -112, rPairingFlag: false, daqOffset: 0} + - {padAddress: 111, rPairingFlag: false, daqOffset: 0} + - {padAddress: -111, rPairingFlag: false, daqOffset: 0} + - {padAddress: 110, rPairingFlag: false, daqOffset: 0} + - {padAddress: -110, rPairingFlag: false, daqOffset: 0} + - {padAddress: 109, rPairingFlag: true, daqOffset: 0} + - {padAddress: -109, rPairingFlag: true, daqOffset: 0} + - {padAddress: 108, rPairingFlag: true, daqOffset: 0} + - {padAddress: -108, rPairingFlag: false, daqOffset: 0} + - {padAddress: 107, rPairingFlag: false, daqOffset: 0} + - {padAddress: -107, rPairingFlag: false, daqOffset: 0} + - {padAddress: 106, rPairingFlag: false, daqOffset: 0} + - {padAddress: -106, rPairingFlag: false, daqOffset: 0} + - {padAddress: 105, rPairingFlag: false, daqOffset: 0} + - {padAddress: -105, rPairingFlag: false, daqOffset: 0} + - {padAddress: 104, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -104, rPairingFlag: false, daqOffset: 0} + - {padAddress: 103, rPairingFlag: false, daqOffset: 0} + - {padAddress: -103, rPairingFlag: false, daqOffset: 0} + - {padAddress: 102, rPairingFlag: false, daqOffset: 0} + - {padAddress: -102, rPairingFlag: true, daqOffset: 0} + - {padAddress: 101, rPairingFlag: true, daqOffset: 0} + - {padAddress: -101, rPairingFlag: true, daqOffset: 0} + - {padAddress: 100, rPairingFlag: true, daqOffset: 0} + - {padAddress: -100, rPairingFlag: false, daqOffset: 0} + - {padAddress: 99, rPairingFlag: false, daqOffset: 0} + - {padAddress: -99, rPairingFlag: false, daqOffset: 0} + - {padAddress: 98, rPairingFlag: false, daqOffset: 0} + - {padAddress: -98, rPairingFlag: false, daqOffset: 0} + - {padAddress: 97, rPairingFlag: false, daqOffset: 0} + - {padAddress: -97, rPairingFlag: false, daqOffset: 0} + - {padAddress: 96, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -96, rPairingFlag: true, daqOffset: 0} + - {padAddress: 95, rPairingFlag: true, daqOffset: 0} + - {padAddress: -95, rPairingFlag: true, daqOffset: 0} + - {padAddress: 94, rPairingFlag: true, daqOffset: 0} + - {padAddress: -94, rPairingFlag: true, daqOffset: 0} + - {padAddress: 93, rPairingFlag: true, daqOffset: 0} + - {padAddress: -93, rPairingFlag: false, daqOffset: 0} + - {padAddress: 92, rPairingFlag: false, daqOffset: 0} + - {padAddress: -92, rPairingFlag: false, daqOffset: 0} + - {padAddress: 91, rPairingFlag: false, daqOffset: 0} + - {padAddress: -91, rPairingFlag: false, daqOffset: 0} + - {padAddress: 90, rPairingFlag: false, daqOffset: 0} + - {padAddress: -90, rPairingFlag: false, daqOffset: 0} + - {padAddress: 89, rPairingFlag: false, daqOffset: 0} + - {padAddress: -89, rPairingFlag: true, daqOffset: 0} + - {padAddress: 88, rPairingFlag: true, daqOffset: 0} + - + - {padAddress: -160, rPairingFlag: true, daqOffset: 3} + - {padAddress: 160, rPairingFlag: true, daqOffset: 3} + - {padAddress: -161, rPairingFlag: false, daqOffset: 3} + - {padAddress: 161, rPairingFlag: false, daqOffset: 3} + - {padAddress: -162, rPairingFlag: false, daqOffset: 3} + - {padAddress: 162, rPairingFlag: false, daqOffset: 3} + - {padAddress: -163, rPairingFlag: true, daqOffset: 3} + - {padAddress: 163, rPairingFlag: false, daqOffset: 3} + - {padAddress: -164, rPairingFlag: true, daqOffset: 3} + - {padAddress: 164, rPairingFlag: false, daqOffset: 3} + - {padAddress: -165, rPairingFlag: false, daqOffset: 3} + - {padAddress: 165, rPairingFlag: false, daqOffset: 3} + - {padAddress: -166, rPairingFlag: false, daqOffset: 3} + - {padAddress: 166, rPairingFlag: false, daqOffset: 3} + - {padAddress: -167, rPairingFlag: false, daqOffset: 3} + - {padAddress: 167, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -168, rPairingFlag: true, daqOffset: 3} + - {padAddress: 168, rPairingFlag: false, daqOffset: 3} + - {padAddress: -169, rPairingFlag: true, daqOffset: 3} + - {padAddress: 169, rPairingFlag: false, daqOffset: 3} + - {padAddress: -170, rPairingFlag: true, daqOffset: 3} + - {padAddress: 170, rPairingFlag: false, daqOffset: 3} + - {padAddress: -171, rPairingFlag: true, daqOffset: 3} + - {padAddress: 171, rPairingFlag: true, daqOffset: 3} + - {padAddress: -172, rPairingFlag: false, daqOffset: 3} + - {padAddress: 172, rPairingFlag: false, daqOffset: 3} + - {padAddress: -173, rPairingFlag: true, daqOffset: 3} + - {padAddress: 173, rPairingFlag: false, daqOffset: 3} + - {padAddress: -174, rPairingFlag: true, daqOffset: 3} + - {padAddress: 174, rPairingFlag: false, daqOffset: 3} + - {padAddress: -175, rPairingFlag: true, daqOffset: 3} + - {padAddress: 175, rPairingFlag: true, daqOffset: 3} + - + - {padAddress: -176, rPairingFlag: true, daqOffset: 3} + - {padAddress: 176, rPairingFlag: false, daqOffset: 3} + - {padAddress: -177, rPairingFlag: false, daqOffset: 3} + - {padAddress: 177, rPairingFlag: false, daqOffset: 3} + - {padAddress: -178, rPairingFlag: false, daqOffset: 3} + - {padAddress: 178, rPairingFlag: false, daqOffset: 3} + - {padAddress: -179, rPairingFlag: false, daqOffset: 3} + - {padAddress: 179, rPairingFlag: true, daqOffset: 3} + - {padAddress: -180, rPairingFlag: true, daqOffset: 3} + - {padAddress: 180, rPairingFlag: false, daqOffset: 3} + - {padAddress: -181, rPairingFlag: false, daqOffset: 3} + - {padAddress: 181, rPairingFlag: false, daqOffset: 3} + - {padAddress: -182, rPairingFlag: false, daqOffset: 3} + - {padAddress: 182, rPairingFlag: false, daqOffset: 3} + - {padAddress: -183, rPairingFlag: false, daqOffset: 3} + - {padAddress: 183, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -136, rPairingFlag: false, daqOffset: 0} + - {padAddress: 135, rPairingFlag: false, daqOffset: 0} + - {padAddress: -135, rPairingFlag: false, daqOffset: 0} + - {padAddress: 134, rPairingFlag: false, daqOffset: 0} + - {padAddress: -134, rPairingFlag: false, daqOffset: 0} + - {padAddress: 133, rPairingFlag: false, daqOffset: 0} + - {padAddress: -133, rPairingFlag: false, daqOffset: 0} + - {padAddress: 132, rPairingFlag: false, daqOffset: 0} + - {padAddress: -132, rPairingFlag: false, daqOffset: 0} + - {padAddress: 131, rPairingFlag: false, daqOffset: 0} + - {padAddress: -131, rPairingFlag: false, daqOffset: 0} + - {padAddress: 130, rPairingFlag: false, daqOffset: 0} + - {padAddress: -130, rPairingFlag: false, daqOffset: 0} + - {padAddress: 129, rPairingFlag: false, daqOffset: 0} + - {padAddress: -129, rPairingFlag: false, daqOffset: 0} + - {padAddress: 128, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -128, rPairingFlag: false, daqOffset: 0} + - {padAddress: 127, rPairingFlag: true, daqOffset: 0} + - {padAddress: -127, rPairingFlag: false, daqOffset: 0} + - {padAddress: 126, rPairingFlag: false, daqOffset: 0} + - {padAddress: -126, rPairingFlag: false, daqOffset: 0} + - {padAddress: 125, rPairingFlag: false, daqOffset: 0} + - {padAddress: -125, rPairingFlag: false, daqOffset: 0} + - {padAddress: 124, rPairingFlag: false, daqOffset: 0} + - {padAddress: -124, rPairingFlag: false, daqOffset: 0} + - {padAddress: 123, rPairingFlag: false, daqOffset: 0} + - {padAddress: -123, rPairingFlag: false, daqOffset: 0} + - {padAddress: 122, rPairingFlag: false, daqOffset: 0} + - {padAddress: -122, rPairingFlag: false, daqOffset: 0} + - {padAddress: 121, rPairingFlag: false, daqOffset: 0} + - {padAddress: -121, rPairingFlag: false, daqOffset: 0} + - {padAddress: 120, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -120, rPairingFlag: false, daqOffset: 0} + - {padAddress: 119, rPairingFlag: false, daqOffset: 0} + - {padAddress: -119, rPairingFlag: false, daqOffset: 0} + - {padAddress: 118, rPairingFlag: false, daqOffset: 0} + - {padAddress: -118, rPairingFlag: false, daqOffset: 0} + - {padAddress: 117, rPairingFlag: false, daqOffset: 0} + - {padAddress: -117, rPairingFlag: false, daqOffset: 0} + - {padAddress: 116, rPairingFlag: false, daqOffset: 0} + - {padAddress: -116, rPairingFlag: false, daqOffset: 0} + - {padAddress: 115, rPairingFlag: false, daqOffset: 0} + - {padAddress: -115, rPairingFlag: false, daqOffset: 0} + - {padAddress: 114, rPairingFlag: false, daqOffset: 0} + - {padAddress: -114, rPairingFlag: false, daqOffset: 0} + - {padAddress: 113, rPairingFlag: false, daqOffset: 0} + - {padAddress: -113, rPairingFlag: false, daqOffset: 0} + - {padAddress: 112, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -184, rPairingFlag: false, daqOffset: 3} + - {padAddress: 184, rPairingFlag: false, daqOffset: 3} + - {padAddress: -185, rPairingFlag: false, daqOffset: 3} + - {padAddress: 185, rPairingFlag: false, daqOffset: 3} + - {padAddress: -186, rPairingFlag: false, daqOffset: 3} + - {padAddress: 186, rPairingFlag: false, daqOffset: 3} + - {padAddress: -187, rPairingFlag: false, daqOffset: 3} + - {padAddress: 187, rPairingFlag: false, daqOffset: 3} + - {padAddress: -188, rPairingFlag: false, daqOffset: 3} + - {padAddress: 188, rPairingFlag: false, daqOffset: 3} + - {padAddress: -189, rPairingFlag: false, daqOffset: 3} + - {padAddress: 189, rPairingFlag: false, daqOffset: 3} + - {padAddress: -190, rPairingFlag: false, daqOffset: 3} + - {padAddress: 190, rPairingFlag: false, daqOffset: 3} + - {padAddress: -191, rPairingFlag: false, daqOffset: 3} + - {padAddress: 191, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -192, rPairingFlag: false, daqOffset: 3} + - {padAddress: 192, rPairingFlag: false, daqOffset: 3} + - {padAddress: -193, rPairingFlag: false, daqOffset: 3} + - {padAddress: 193, rPairingFlag: false, daqOffset: 3} + - {padAddress: -194, rPairingFlag: false, daqOffset: 3} + - {padAddress: 194, rPairingFlag: false, daqOffset: 3} + - {padAddress: -195, rPairingFlag: false, daqOffset: 3} + - {padAddress: 195, rPairingFlag: false, daqOffset: 3} + - {padAddress: -196, rPairingFlag: false, daqOffset: 3} + - {padAddress: 196, rPairingFlag: false, daqOffset: 3} + - {padAddress: -197, rPairingFlag: false, daqOffset: 3} + - {padAddress: 197, rPairingFlag: false, daqOffset: 3} + - {padAddress: -198, rPairingFlag: false, daqOffset: 3} + - {padAddress: 198, rPairingFlag: false, daqOffset: 3} + - {padAddress: -199, rPairingFlag: false, daqOffset: 3} + - {padAddress: 199, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -200, rPairingFlag: false, daqOffset: 3} + - {padAddress: 200, rPairingFlag: false, daqOffset: 3} + - {padAddress: -201, rPairingFlag: false, daqOffset: 3} + - {padAddress: 201, rPairingFlag: false, daqOffset: 3} + - {padAddress: -202, rPairingFlag: false, daqOffset: 3} + - {padAddress: 202, rPairingFlag: false, daqOffset: 3} + - {padAddress: -203, rPairingFlag: false, daqOffset: 3} + - {padAddress: 203, rPairingFlag: false, daqOffset: 3} + - {padAddress: -204, rPairingFlag: false, daqOffset: 3} + - {padAddress: 204, rPairingFlag: false, daqOffset: 3} + - {padAddress: -205, rPairingFlag: false, daqOffset: 3} + - {padAddress: 205, rPairingFlag: false, daqOffset: 3} + - {padAddress: -206, rPairingFlag: false, daqOffset: 3} + - {padAddress: 206, rPairingFlag: false, daqOffset: 3} + - {padAddress: -207, rPairingFlag: false, daqOffset: 3} + - {padAddress: 207, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -256, rPairingFlag: false, daqOffset: 0} + - {padAddress: 255, rPairingFlag: true, daqOffset: 0} + - {padAddress: -255, rPairingFlag: false, daqOffset: 0} + - {padAddress: 254, rPairingFlag: false, daqOffset: 0} + - {padAddress: -254, rPairingFlag: false, daqOffset: 0} + - {padAddress: 253, rPairingFlag: false, daqOffset: 0} + - {padAddress: -253, rPairingFlag: false, daqOffset: 0} + - {padAddress: 252, rPairingFlag: false, daqOffset: 0} + - {padAddress: -252, rPairingFlag: false, daqOffset: 0} + - {padAddress: 251, rPairingFlag: false, daqOffset: 0} + - {padAddress: -251, rPairingFlag: false, daqOffset: 0} + - {padAddress: 250, rPairingFlag: false, daqOffset: 0} + - {padAddress: -250, rPairingFlag: false, daqOffset: 0} + - {padAddress: 249, rPairingFlag: false, daqOffset: 0} + - {padAddress: -249, rPairingFlag: false, daqOffset: 0} + - {padAddress: 248, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -248, rPairingFlag: false, daqOffset: 0} + - {padAddress: 247, rPairingFlag: false, daqOffset: 0} + - {padAddress: -247, rPairingFlag: false, daqOffset: 0} + - {padAddress: 246, rPairingFlag: false, daqOffset: 0} + - {padAddress: -246, rPairingFlag: true, daqOffset: 0} + - {padAddress: 245, rPairingFlag: false, daqOffset: 0} + - {padAddress: -245, rPairingFlag: false, daqOffset: 0} + - {padAddress: 244, rPairingFlag: false, daqOffset: 0} + - {padAddress: -244, rPairingFlag: false, daqOffset: 0} + - {padAddress: 243, rPairingFlag: false, daqOffset: 0} + - {padAddress: -243, rPairingFlag: false, daqOffset: 0} + - {padAddress: 242, rPairingFlag: false, daqOffset: 0} + - {padAddress: -242, rPairingFlag: false, daqOffset: 0} + - {padAddress: 241, rPairingFlag: false, daqOffset: 0} + - {padAddress: -241, rPairingFlag: false, daqOffset: 0} + - {padAddress: 240, rPairingFlag: true, daqOffset: 0} + - + - {padAddress: -240, rPairingFlag: true, daqOffset: 0} + - {padAddress: 239, rPairingFlag: true, daqOffset: 0} + - {padAddress: -239, rPairingFlag: true, daqOffset: 0} + - {padAddress: 238, rPairingFlag: false, daqOffset: 0} + - {padAddress: -238, rPairingFlag: true, daqOffset: 0} + - {padAddress: 237, rPairingFlag: true, daqOffset: 0} + - {padAddress: -237, rPairingFlag: true, daqOffset: 0} + - {padAddress: 236, rPairingFlag: true, daqOffset: 0} + - {padAddress: -236, rPairingFlag: true, daqOffset: 0} + - {padAddress: 235, rPairingFlag: false, daqOffset: 0} + - {padAddress: -235, rPairingFlag: false, daqOffset: 0} + - {padAddress: 234, rPairingFlag: false, daqOffset: 0} + - {padAddress: -234, rPairingFlag: false, daqOffset: 0} + - {padAddress: 233, rPairingFlag: false, daqOffset: 0} + - {padAddress: -233, rPairingFlag: false, daqOffset: 0} + - {padAddress: 232, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -304, rPairingFlag: false, daqOffset: 3} + - {padAddress: 304, rPairingFlag: false, daqOffset: 3} + - {padAddress: -305, rPairingFlag: false, daqOffset: 3} + - {padAddress: 305, rPairingFlag: false, daqOffset: 3} + - {padAddress: -306, rPairingFlag: false, daqOffset: 3} + - {padAddress: 306, rPairingFlag: false, daqOffset: 3} + - {padAddress: -307, rPairingFlag: false, daqOffset: 3} + - {padAddress: 307, rPairingFlag: false, daqOffset: 3} + - {padAddress: -308, rPairingFlag: false, daqOffset: 3} + - {padAddress: 308, rPairingFlag: false, daqOffset: 3} + - {padAddress: -309, rPairingFlag: false, daqOffset: 3} + - {padAddress: 309, rPairingFlag: false, daqOffset: 3} + - {padAddress: -310, rPairingFlag: false, daqOffset: 3} + - {padAddress: 310, rPairingFlag: false, daqOffset: 3} + - {padAddress: -311, rPairingFlag: false, daqOffset: 3} + - {padAddress: 311, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -312, rPairingFlag: false, daqOffset: 3} + - {padAddress: 312, rPairingFlag: false, daqOffset: 3} + - {padAddress: -313, rPairingFlag: false, daqOffset: 3} + - {padAddress: 313, rPairingFlag: true, daqOffset: 3} + - {padAddress: -314, rPairingFlag: true, daqOffset: 3} + - {padAddress: 314, rPairingFlag: false, daqOffset: 3} + - {padAddress: -315, rPairingFlag: true, daqOffset: 3} + - {padAddress: 315, rPairingFlag: true, daqOffset: 3} + - {padAddress: -316, rPairingFlag: true, daqOffset: 3} + - {padAddress: 316, rPairingFlag: false, daqOffset: 3} + - {padAddress: -317, rPairingFlag: true, daqOffset: 3} + - {padAddress: 317, rPairingFlag: false, daqOffset: 3} + - {padAddress: -318, rPairingFlag: false, daqOffset: 3} + - {padAddress: 318, rPairingFlag: false, daqOffset: 3} + - {padAddress: -319, rPairingFlag: true, daqOffset: 3} + - {padAddress: 319, rPairingFlag: true, daqOffset: 3} + - + - {padAddress: -320, rPairingFlag: true, daqOffset: 3} + - {padAddress: 320, rPairingFlag: true, daqOffset: 3} + - {padAddress: -321, rPairingFlag: true, daqOffset: 3} + - {padAddress: 321, rPairingFlag: false, daqOffset: 3} + - {padAddress: -322, rPairingFlag: true, daqOffset: 3} + - {padAddress: 322, rPairingFlag: true, daqOffset: 3} + - {padAddress: -323, rPairingFlag: true, daqOffset: 3} + - {padAddress: 323, rPairingFlag: false, daqOffset: 3} + - {padAddress: -324, rPairingFlag: true, daqOffset: 3} + - {padAddress: 324, rPairingFlag: true, daqOffset: 3} + - {padAddress: -325, rPairingFlag: true, daqOffset: 3} + - {padAddress: 325, rPairingFlag: false, daqOffset: 3} + - {padAddress: -326, rPairingFlag: false, daqOffset: 3} + - {padAddress: 326, rPairingFlag: false, daqOffset: 3} + - {padAddress: -327, rPairingFlag: false, daqOffset: 3} + - {padAddress: 327, rPairingFlag: true, daqOffset: 3} + - + - {padAddress: -280, rPairingFlag: false, daqOffset: 0} + - {padAddress: 279, rPairingFlag: false, daqOffset: 0} + - {padAddress: -279, rPairingFlag: false, daqOffset: 0} + - {padAddress: 278, rPairingFlag: false, daqOffset: 0} + - {padAddress: -278, rPairingFlag: false, daqOffset: 0} + - {padAddress: 277, rPairingFlag: false, daqOffset: 0} + - {padAddress: -277, rPairingFlag: false, daqOffset: 0} + - {padAddress: 276, rPairingFlag: false, daqOffset: 0} + - {padAddress: -276, rPairingFlag: false, daqOffset: 0} + - {padAddress: 275, rPairingFlag: false, daqOffset: 0} + - {padAddress: -275, rPairingFlag: false, daqOffset: 0} + - {padAddress: 274, rPairingFlag: false, daqOffset: 0} + - {padAddress: -274, rPairingFlag: false, daqOffset: 0} + - {padAddress: 273, rPairingFlag: false, daqOffset: 0} + - {padAddress: -273, rPairingFlag: false, daqOffset: 0} + - {padAddress: 272, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -272, rPairingFlag: false, daqOffset: 0} + - {padAddress: 271, rPairingFlag: false, daqOffset: 0} + - {padAddress: -271, rPairingFlag: false, daqOffset: 0} + - {padAddress: 270, rPairingFlag: false, daqOffset: 0} + - {padAddress: -270, rPairingFlag: false, daqOffset: 0} + - {padAddress: 269, rPairingFlag: false, daqOffset: 0} + - {padAddress: -269, rPairingFlag: false, daqOffset: 0} + - {padAddress: 268, rPairingFlag: false, daqOffset: 0} + - {padAddress: -268, rPairingFlag: false, daqOffset: 0} + - {padAddress: 267, rPairingFlag: false, daqOffset: 0} + - {padAddress: -267, rPairingFlag: false, daqOffset: 0} + - {padAddress: 266, rPairingFlag: false, daqOffset: 0} + - {padAddress: -266, rPairingFlag: false, daqOffset: 0} + - {padAddress: 265, rPairingFlag: false, daqOffset: 0} + - {padAddress: -265, rPairingFlag: false, daqOffset: 0} + - {padAddress: 264, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -264, rPairingFlag: false, daqOffset: 0} + - {padAddress: 263, rPairingFlag: false, daqOffset: 0} + - {padAddress: -263, rPairingFlag: false, daqOffset: 0} + - {padAddress: 262, rPairingFlag: false, daqOffset: 0} + - {padAddress: -262, rPairingFlag: false, daqOffset: 0} + - {padAddress: 261, rPairingFlag: false, daqOffset: 0} + - {padAddress: -261, rPairingFlag: false, daqOffset: 0} + - {padAddress: 260, rPairingFlag: false, daqOffset: 0} + - {padAddress: -260, rPairingFlag: false, daqOffset: 0} + - {padAddress: 259, rPairingFlag: false, daqOffset: 0} + - {padAddress: -259, rPairingFlag: false, daqOffset: 0} + - {padAddress: 258, rPairingFlag: false, daqOffset: 0} + - {padAddress: -258, rPairingFlag: false, daqOffset: 0} + - {padAddress: 257, rPairingFlag: false, daqOffset: 0} + - {padAddress: -257, rPairingFlag: false, daqOffset: 0} + - {padAddress: 256, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -328, rPairingFlag: false, daqOffset: 3} + - {padAddress: 328, rPairingFlag: false, daqOffset: 3} + - {padAddress: -329, rPairingFlag: false, daqOffset: 3} + - {padAddress: 329, rPairingFlag: false, daqOffset: 3} + - {padAddress: -330, rPairingFlag: false, daqOffset: 3} + - {padAddress: 330, rPairingFlag: false, daqOffset: 3} + - {padAddress: -331, rPairingFlag: false, daqOffset: 3} + - {padAddress: 331, rPairingFlag: false, daqOffset: 3} + - {padAddress: -332, rPairingFlag: false, daqOffset: 3} + - {padAddress: 332, rPairingFlag: false, daqOffset: 3} + - {padAddress: -333, rPairingFlag: false, daqOffset: 3} + - {padAddress: 333, rPairingFlag: false, daqOffset: 3} + - {padAddress: -334, rPairingFlag: false, daqOffset: 3} + - {padAddress: 334, rPairingFlag: false, daqOffset: 3} + - {padAddress: -335, rPairingFlag: false, daqOffset: 3} + - {padAddress: 335, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -336, rPairingFlag: false, daqOffset: 3} + - {padAddress: 336, rPairingFlag: false, daqOffset: 3} + - {padAddress: -337, rPairingFlag: false, daqOffset: 3} + - {padAddress: 337, rPairingFlag: false, daqOffset: 3} + - {padAddress: -338, rPairingFlag: false, daqOffset: 3} + - {padAddress: 338, rPairingFlag: false, daqOffset: 3} + - {padAddress: -339, rPairingFlag: false, daqOffset: 3} + - {padAddress: 339, rPairingFlag: false, daqOffset: 3} + - {padAddress: -340, rPairingFlag: false, daqOffset: 3} + - {padAddress: 340, rPairingFlag: false, daqOffset: 3} + - {padAddress: -341, rPairingFlag: false, daqOffset: 3} + - {padAddress: 341, rPairingFlag: false, daqOffset: 3} + - {padAddress: -342, rPairingFlag: false, daqOffset: 3} + - {padAddress: 342, rPairingFlag: false, daqOffset: 3} + - {padAddress: -343, rPairingFlag: false, daqOffset: 3} + - {padAddress: 343, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -344, rPairingFlag: false, daqOffset: 3} + - {padAddress: 344, rPairingFlag: false, daqOffset: 3} + - {padAddress: -345, rPairingFlag: false, daqOffset: 3} + - {padAddress: 345, rPairingFlag: false, daqOffset: 3} + - {padAddress: -346, rPairingFlag: false, daqOffset: 3} + - {padAddress: 346, rPairingFlag: false, daqOffset: 3} + - {padAddress: -347, rPairingFlag: false, daqOffset: 3} + - {padAddress: 347, rPairingFlag: false, daqOffset: 3} + - {padAddress: -348, rPairingFlag: false, daqOffset: 3} + - {padAddress: 348, rPairingFlag: false, daqOffset: 3} + - {padAddress: -349, rPairingFlag: false, daqOffset: 3} + - {padAddress: 349, rPairingFlag: false, daqOffset: 3} + - {padAddress: -350, rPairingFlag: false, daqOffset: 3} + - {padAddress: 350, rPairingFlag: false, daqOffset: 3} + - {padAddress: -351, rPairingFlag: false, daqOffset: 3} + - {padAddress: 351, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -400, rPairingFlag: false, daqOffset: 0} + - {padAddress: 399, rPairingFlag: true, daqOffset: 0} + - {padAddress: -399, rPairingFlag: true, daqOffset: 0} + - {padAddress: 398, rPairingFlag: true, daqOffset: 0} + - {padAddress: -398, rPairingFlag: false, daqOffset: 0} + - {padAddress: 397, rPairingFlag: false, daqOffset: 0} + - {padAddress: -397, rPairingFlag: false, daqOffset: 0} + - {padAddress: 396, rPairingFlag: false, daqOffset: 0} + - {padAddress: -396, rPairingFlag: false, daqOffset: 0} + - {padAddress: 395, rPairingFlag: true, daqOffset: 0} + - {padAddress: -395, rPairingFlag: false, daqOffset: 0} + - {padAddress: 394, rPairingFlag: false, daqOffset: 0} + - {padAddress: -394, rPairingFlag: false, daqOffset: 0} + - {padAddress: 393, rPairingFlag: false, daqOffset: 0} + - {padAddress: -393, rPairingFlag: false, daqOffset: 0} + - {padAddress: 392, rPairingFlag: true, daqOffset: 0} + - + - {padAddress: -392, rPairingFlag: true, daqOffset: 0} + - {padAddress: 391, rPairingFlag: false, daqOffset: 0} + - {padAddress: -391, rPairingFlag: false, daqOffset: 0} + - {padAddress: 390, rPairingFlag: false, daqOffset: 0} + - {padAddress: -390, rPairingFlag: false, daqOffset: 0} + - {padAddress: 389, rPairingFlag: false, daqOffset: 0} + - {padAddress: -389, rPairingFlag: false, daqOffset: 0} + - {padAddress: 388, rPairingFlag: false, daqOffset: 0} + - {padAddress: -388, rPairingFlag: false, daqOffset: 0} + - {padAddress: 387, rPairingFlag: false, daqOffset: 0} + - {padAddress: -387, rPairingFlag: false, daqOffset: 0} + - {padAddress: 386, rPairingFlag: false, daqOffset: 0} + - {padAddress: -386, rPairingFlag: false, daqOffset: 0} + - {padAddress: 385, rPairingFlag: false, daqOffset: 0} + - {padAddress: -385, rPairingFlag: false, daqOffset: 0} + - {padAddress: 384, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -384, rPairingFlag: true, daqOffset: 0} + - {padAddress: 383, rPairingFlag: true, daqOffset: 0} + - {padAddress: -383, rPairingFlag: false, daqOffset: 0} + - {padAddress: 382, rPairingFlag: false, daqOffset: 0} + - {padAddress: -382, rPairingFlag: false, daqOffset: 0} + - {padAddress: 381, rPairingFlag: false, daqOffset: 0} + - {padAddress: -381, rPairingFlag: false, daqOffset: 0} + - {padAddress: 380, rPairingFlag: true, daqOffset: 0} + - {padAddress: -380, rPairingFlag: true, daqOffset: 0} + - {padAddress: 379, rPairingFlag: false, daqOffset: 0} + - {padAddress: -379, rPairingFlag: false, daqOffset: 0} + - {padAddress: 378, rPairingFlag: false, daqOffset: 0} + - {padAddress: -378, rPairingFlag: false, daqOffset: 0} + - {padAddress: 377, rPairingFlag: false, daqOffset: 0} + - {padAddress: -377, rPairingFlag: false, daqOffset: 0} + - {padAddress: 376, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -448, rPairingFlag: false, daqOffset: 3} + - {padAddress: 448, rPairingFlag: false, daqOffset: 3} + - {padAddress: -449, rPairingFlag: false, daqOffset: 3} + - {padAddress: 449, rPairingFlag: false, daqOffset: 3} + - {padAddress: -450, rPairingFlag: false, daqOffset: 3} + - {padAddress: 450, rPairingFlag: false, daqOffset: 3} + - {padAddress: -451, rPairingFlag: false, daqOffset: 3} + - {padAddress: 451, rPairingFlag: false, daqOffset: 3} + - {padAddress: -452, rPairingFlag: true, daqOffset: 3} + - {padAddress: 452, rPairingFlag: false, daqOffset: 3} + - {padAddress: -453, rPairingFlag: false, daqOffset: 3} + - {padAddress: 453, rPairingFlag: false, daqOffset: 3} + - {padAddress: -454, rPairingFlag: false, daqOffset: 3} + - {padAddress: 454, rPairingFlag: false, daqOffset: 3} + - {padAddress: -455, rPairingFlag: false, daqOffset: 3} + - {padAddress: 455, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -456, rPairingFlag: false, daqOffset: 3} + - {padAddress: 456, rPairingFlag: false, daqOffset: 3} + - {padAddress: -457, rPairingFlag: false, daqOffset: 3} + - {padAddress: 457, rPairingFlag: true, daqOffset: 3} + - {padAddress: -458, rPairingFlag: false, daqOffset: 3} + - {padAddress: 458, rPairingFlag: false, daqOffset: 3} + - {padAddress: -459, rPairingFlag: false, daqOffset: 3} + - {padAddress: 459, rPairingFlag: false, daqOffset: 3} + - {padAddress: -460, rPairingFlag: false, daqOffset: 3} + - {padAddress: 460, rPairingFlag: false, daqOffset: 3} + - {padAddress: -461, rPairingFlag: false, daqOffset: 3} + - {padAddress: 461, rPairingFlag: false, daqOffset: 3} + - {padAddress: -462, rPairingFlag: false, daqOffset: 3} + - {padAddress: 462, rPairingFlag: false, daqOffset: 3} + - {padAddress: -463, rPairingFlag: false, daqOffset: 3} + - {padAddress: 463, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -464, rPairingFlag: true, daqOffset: 3} + - {padAddress: 464, rPairingFlag: true, daqOffset: 3} + - {padAddress: -465, rPairingFlag: false, daqOffset: 3} + - {padAddress: 465, rPairingFlag: false, daqOffset: 3} + - {padAddress: -466, rPairingFlag: true, daqOffset: 3} + - {padAddress: 466, rPairingFlag: false, daqOffset: 3} + - {padAddress: -467, rPairingFlag: false, daqOffset: 3} + - {padAddress: 467, rPairingFlag: false, daqOffset: 3} + - {padAddress: -468, rPairingFlag: true, daqOffset: 3} + - {padAddress: 468, rPairingFlag: false, daqOffset: 3} + - {padAddress: -469, rPairingFlag: false, daqOffset: 3} + - {padAddress: 469, rPairingFlag: false, daqOffset: 3} + - {padAddress: -470, rPairingFlag: false, daqOffset: 3} + - {padAddress: 470, rPairingFlag: false, daqOffset: 3} + - {padAddress: -471, rPairingFlag: false, daqOffset: 3} + - {padAddress: 471, rPairingFlag: true, daqOffset: 3} + - + - {padAddress: -424, rPairingFlag: true, daqOffset: 0} + - {padAddress: 423, rPairingFlag: true, daqOffset: 0} + - {padAddress: -423, rPairingFlag: false, daqOffset: 0} + - {padAddress: 422, rPairingFlag: false, daqOffset: 0} + - {padAddress: -422, rPairingFlag: false, daqOffset: 0} + - {padAddress: 421, rPairingFlag: false, daqOffset: 0} + - {padAddress: -421, rPairingFlag: false, daqOffset: 0} + - {padAddress: 420, rPairingFlag: false, daqOffset: 0} + - {padAddress: -420, rPairingFlag: false, daqOffset: 0} + - {padAddress: 419, rPairingFlag: false, daqOffset: 0} + - {padAddress: -419, rPairingFlag: false, daqOffset: 0} + - {padAddress: 418, rPairingFlag: false, daqOffset: 0} + - {padAddress: -418, rPairingFlag: false, daqOffset: 0} + - {padAddress: 417, rPairingFlag: false, daqOffset: 0} + - {padAddress: -417, rPairingFlag: true, daqOffset: 0} + - {padAddress: 416, rPairingFlag: true, daqOffset: 0} + - + - {padAddress: -416, rPairingFlag: false, daqOffset: 0} + - {padAddress: 415, rPairingFlag: false, daqOffset: 0} + - {padAddress: -415, rPairingFlag: false, daqOffset: 0} + - {padAddress: 414, rPairingFlag: false, daqOffset: 0} + - {padAddress: -414, rPairingFlag: false, daqOffset: 0} + - {padAddress: 413, rPairingFlag: false, daqOffset: 0} + - {padAddress: -413, rPairingFlag: false, daqOffset: 0} + - {padAddress: 412, rPairingFlag: false, daqOffset: 0} + - {padAddress: -412, rPairingFlag: false, daqOffset: 0} + - {padAddress: 411, rPairingFlag: false, daqOffset: 0} + - {padAddress: -411, rPairingFlag: false, daqOffset: 0} + - {padAddress: 410, rPairingFlag: false, daqOffset: 0} + - {padAddress: -410, rPairingFlag: false, daqOffset: 0} + - {padAddress: 409, rPairingFlag: false, daqOffset: 0} + - {padAddress: -409, rPairingFlag: false, daqOffset: 0} + - {padAddress: 408, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -408, rPairingFlag: false, daqOffset: 0} + - {padAddress: 407, rPairingFlag: false, daqOffset: 0} + - {padAddress: -407, rPairingFlag: false, daqOffset: 0} + - {padAddress: 406, rPairingFlag: false, daqOffset: 0} + - {padAddress: -406, rPairingFlag: false, daqOffset: 0} + - {padAddress: 405, rPairingFlag: false, daqOffset: 0} + - {padAddress: -405, rPairingFlag: false, daqOffset: 0} + - {padAddress: 404, rPairingFlag: false, daqOffset: 0} + - {padAddress: -404, rPairingFlag: false, daqOffset: 0} + - {padAddress: 403, rPairingFlag: false, daqOffset: 0} + - {padAddress: -403, rPairingFlag: false, daqOffset: 0} + - {padAddress: 402, rPairingFlag: false, daqOffset: 0} + - {padAddress: -402, rPairingFlag: false, daqOffset: 0} + - {padAddress: 401, rPairingFlag: false, daqOffset: 0} + - {padAddress: -401, rPairingFlag: false, daqOffset: 0} + - {padAddress: 400, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -472, rPairingFlag: false, daqOffset: 3} + - {padAddress: 472, rPairingFlag: false, daqOffset: 3} + - {padAddress: -473, rPairingFlag: false, daqOffset: 3} + - {padAddress: 473, rPairingFlag: false, daqOffset: 3} + - {padAddress: -474, rPairingFlag: false, daqOffset: 3} + - {padAddress: 474, rPairingFlag: false, daqOffset: 3} + - {padAddress: -475, rPairingFlag: false, daqOffset: 3} + - {padAddress: 475, rPairingFlag: false, daqOffset: 3} + - {padAddress: -476, rPairingFlag: false, daqOffset: 3} + - {padAddress: 476, rPairingFlag: false, daqOffset: 3} + - {padAddress: -477, rPairingFlag: false, daqOffset: 3} + - {padAddress: 477, rPairingFlag: false, daqOffset: 3} + - {padAddress: -478, rPairingFlag: false, daqOffset: 3} + - {padAddress: 478, rPairingFlag: false, daqOffset: 3} + - {padAddress: -479, rPairingFlag: false, daqOffset: 3} + - {padAddress: 479, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -480, rPairingFlag: false, daqOffset: 3} + - {padAddress: 480, rPairingFlag: false, daqOffset: 3} + - {padAddress: -481, rPairingFlag: false, daqOffset: 3} + - {padAddress: 481, rPairingFlag: false, daqOffset: 3} + - {padAddress: -482, rPairingFlag: false, daqOffset: 3} + - {padAddress: 482, rPairingFlag: false, daqOffset: 3} + - {padAddress: -483, rPairingFlag: false, daqOffset: 3} + - {padAddress: 483, rPairingFlag: false, daqOffset: 3} + - {padAddress: -484, rPairingFlag: false, daqOffset: 3} + - {padAddress: 484, rPairingFlag: false, daqOffset: 3} + - {padAddress: -485, rPairingFlag: false, daqOffset: 3} + - {padAddress: 485, rPairingFlag: false, daqOffset: 3} + - {padAddress: -486, rPairingFlag: false, daqOffset: 3} + - {padAddress: 486, rPairingFlag: false, daqOffset: 3} + - {padAddress: -487, rPairingFlag: false, daqOffset: 3} + - {padAddress: 487, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -488, rPairingFlag: false, daqOffset: 3} + - {padAddress: 488, rPairingFlag: false, daqOffset: 3} + - {padAddress: -489, rPairingFlag: false, daqOffset: 3} + - {padAddress: 489, rPairingFlag: false, daqOffset: 3} + - {padAddress: -490, rPairingFlag: false, daqOffset: 3} + - {padAddress: 490, rPairingFlag: false, daqOffset: 3} + - {padAddress: -491, rPairingFlag: false, daqOffset: 3} + - {padAddress: 491, rPairingFlag: false, daqOffset: 3} + - {padAddress: -492, rPairingFlag: false, daqOffset: 3} + - {padAddress: 492, rPairingFlag: false, daqOffset: 3} + - {padAddress: -493, rPairingFlag: false, daqOffset: 3} + - {padAddress: 493, rPairingFlag: false, daqOffset: 3} + - {padAddress: -494, rPairingFlag: false, daqOffset: 3} + - {padAddress: 494, rPairingFlag: false, daqOffset: 3} + - {padAddress: -495, rPairingFlag: false, daqOffset: 3} + - {padAddress: 495, rPairingFlag: false, daqOffset: 3} + 65477: + - + - {padAddress: -544, rPairingFlag: true, daqOffset: 0} + - {padAddress: 543, rPairingFlag: true, daqOffset: 0} + - {padAddress: -543, rPairingFlag: false, daqOffset: 0} + - {padAddress: 542, rPairingFlag: false, daqOffset: 0} + - {padAddress: -542, rPairingFlag: false, daqOffset: 0} + - {padAddress: 541, rPairingFlag: false, daqOffset: 0} + - {padAddress: -541, rPairingFlag: false, daqOffset: 0} + - {padAddress: 540, rPairingFlag: false, daqOffset: 0} + - {padAddress: -540, rPairingFlag: false, daqOffset: 0} + - {padAddress: 539, rPairingFlag: false, daqOffset: 0} + - {padAddress: -539, rPairingFlag: false, daqOffset: 0} + - {padAddress: 538, rPairingFlag: false, daqOffset: 0} + - {padAddress: -538, rPairingFlag: false, daqOffset: 0} + - {padAddress: 537, rPairingFlag: false, daqOffset: 0} + - {padAddress: -537, rPairingFlag: true, daqOffset: 0} + - {padAddress: 536, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -536, rPairingFlag: false, daqOffset: 0} + - {padAddress: 535, rPairingFlag: true, daqOffset: 0} + - {padAddress: -535, rPairingFlag: false, daqOffset: 0} + - {padAddress: 534, rPairingFlag: false, daqOffset: 0} + - {padAddress: -534, rPairingFlag: false, daqOffset: 0} + - {padAddress: 533, rPairingFlag: false, daqOffset: 0} + - {padAddress: -533, rPairingFlag: false, daqOffset: 0} + - {padAddress: 532, rPairingFlag: false, daqOffset: 0} + - {padAddress: -532, rPairingFlag: false, daqOffset: 0} + - {padAddress: 531, rPairingFlag: true, daqOffset: 0} + - {padAddress: -531, rPairingFlag: false, daqOffset: 0} + - {padAddress: 530, rPairingFlag: false, daqOffset: 0} + - {padAddress: -530, rPairingFlag: false, daqOffset: 0} + - {padAddress: 529, rPairingFlag: false, daqOffset: 0} + - {padAddress: -529, rPairingFlag: false, daqOffset: 0} + - {padAddress: 528, rPairingFlag: true, daqOffset: 0} + - + - {padAddress: -528, rPairingFlag: false, daqOffset: 0} + - {padAddress: 527, rPairingFlag: true, daqOffset: 0} + - {padAddress: -527, rPairingFlag: false, daqOffset: 0} + - {padAddress: 526, rPairingFlag: false, daqOffset: 0} + - {padAddress: -526, rPairingFlag: false, daqOffset: 0} + - {padAddress: 525, rPairingFlag: false, daqOffset: 0} + - {padAddress: -525, rPairingFlag: false, daqOffset: 0} + - {padAddress: 524, rPairingFlag: false, daqOffset: 0} + - {padAddress: -524, rPairingFlag: false, daqOffset: 0} + - {padAddress: 523, rPairingFlag: false, daqOffset: 0} + - {padAddress: -523, rPairingFlag: false, daqOffset: 0} + - {padAddress: 522, rPairingFlag: false, daqOffset: 0} + - {padAddress: -522, rPairingFlag: false, daqOffset: 0} + - {padAddress: 521, rPairingFlag: false, daqOffset: 0} + - {padAddress: -521, rPairingFlag: true, daqOffset: 0} + - {padAddress: 520, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -592, rPairingFlag: false, daqOffset: 3} + - {padAddress: 592, rPairingFlag: false, daqOffset: 3} + - {padAddress: -593, rPairingFlag: false, daqOffset: 3} + - {padAddress: 593, rPairingFlag: false, daqOffset: 3} + - {padAddress: -594, rPairingFlag: false, daqOffset: 3} + - {padAddress: 594, rPairingFlag: false, daqOffset: 3} + - {padAddress: -595, rPairingFlag: false, daqOffset: 3} + - {padAddress: 595, rPairingFlag: false, daqOffset: 3} + - {padAddress: -596, rPairingFlag: true, daqOffset: 3} + - {padAddress: 596, rPairingFlag: false, daqOffset: 3} + - {padAddress: -597, rPairingFlag: false, daqOffset: 3} + - {padAddress: 597, rPairingFlag: false, daqOffset: 3} + - {padAddress: -598, rPairingFlag: false, daqOffset: 3} + - {padAddress: 598, rPairingFlag: false, daqOffset: 3} + - {padAddress: -599, rPairingFlag: false, daqOffset: 3} + - {padAddress: 599, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -600, rPairingFlag: true, daqOffset: 3} + - {padAddress: 600, rPairingFlag: false, daqOffset: 3} + - {padAddress: -601, rPairingFlag: true, daqOffset: 3} + - {padAddress: 601, rPairingFlag: false, daqOffset: 3} + - {padAddress: -602, rPairingFlag: false, daqOffset: 3} + - {padAddress: 602, rPairingFlag: false, daqOffset: 3} + - {padAddress: -603, rPairingFlag: false, daqOffset: 3} + - {padAddress: 603, rPairingFlag: false, daqOffset: 3} + - {padAddress: -604, rPairingFlag: false, daqOffset: 3} + - {padAddress: 604, rPairingFlag: false, daqOffset: 3} + - {padAddress: -605, rPairingFlag: false, daqOffset: 3} + - {padAddress: 605, rPairingFlag: false, daqOffset: 3} + - {padAddress: -606, rPairingFlag: false, daqOffset: 3} + - {padAddress: 606, rPairingFlag: false, daqOffset: 3} + - {padAddress: -607, rPairingFlag: false, daqOffset: 3} + - {padAddress: 607, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -608, rPairingFlag: false, daqOffset: 3} + - {padAddress: 608, rPairingFlag: false, daqOffset: 3} + - {padAddress: -609, rPairingFlag: false, daqOffset: 3} + - {padAddress: 609, rPairingFlag: false, daqOffset: 3} + - {padAddress: -610, rPairingFlag: false, daqOffset: 3} + - {padAddress: 610, rPairingFlag: false, daqOffset: 3} + - {padAddress: -611, rPairingFlag: false, daqOffset: 3} + - {padAddress: 611, rPairingFlag: false, daqOffset: 3} + - {padAddress: -612, rPairingFlag: false, daqOffset: 3} + - {padAddress: 612, rPairingFlag: false, daqOffset: 3} + - {padAddress: -613, rPairingFlag: false, daqOffset: 3} + - {padAddress: 613, rPairingFlag: false, daqOffset: 3} + - {padAddress: -614, rPairingFlag: false, daqOffset: 3} + - {padAddress: 614, rPairingFlag: false, daqOffset: 3} + - {padAddress: -615, rPairingFlag: false, daqOffset: 3} + - {padAddress: 615, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -568, rPairingFlag: false, daqOffset: 0} + - {padAddress: 567, rPairingFlag: false, daqOffset: 0} + - {padAddress: -567, rPairingFlag: false, daqOffset: 0} + - {padAddress: 566, rPairingFlag: false, daqOffset: 0} + - {padAddress: -566, rPairingFlag: false, daqOffset: 0} + - {padAddress: 565, rPairingFlag: false, daqOffset: 0} + - {padAddress: -565, rPairingFlag: false, daqOffset: 0} + - {padAddress: 564, rPairingFlag: false, daqOffset: 0} + - {padAddress: -564, rPairingFlag: false, daqOffset: 0} + - {padAddress: 563, rPairingFlag: false, daqOffset: 0} + - {padAddress: -563, rPairingFlag: false, daqOffset: 0} + - {padAddress: 562, rPairingFlag: false, daqOffset: 0} + - {padAddress: -562, rPairingFlag: false, daqOffset: 0} + - {padAddress: 561, rPairingFlag: false, daqOffset: 0} + - {padAddress: -561, rPairingFlag: false, daqOffset: 0} + - {padAddress: 560, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -560, rPairingFlag: false, daqOffset: 0} + - {padAddress: 559, rPairingFlag: true, daqOffset: 0} + - {padAddress: -559, rPairingFlag: false, daqOffset: 0} + - {padAddress: 558, rPairingFlag: false, daqOffset: 0} + - {padAddress: -558, rPairingFlag: false, daqOffset: 0} + - {padAddress: 557, rPairingFlag: false, daqOffset: 0} + - {padAddress: -557, rPairingFlag: false, daqOffset: 0} + - {padAddress: 556, rPairingFlag: false, daqOffset: 0} + - {padAddress: -556, rPairingFlag: false, daqOffset: 0} + - {padAddress: 555, rPairingFlag: false, daqOffset: 0} + - {padAddress: -555, rPairingFlag: false, daqOffset: 0} + - {padAddress: 554, rPairingFlag: false, daqOffset: 0} + - {padAddress: -554, rPairingFlag: false, daqOffset: 0} + - {padAddress: 553, rPairingFlag: false, daqOffset: 0} + - {padAddress: -553, rPairingFlag: false, daqOffset: 0} + - {padAddress: 552, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -552, rPairingFlag: true, daqOffset: 0} + - {padAddress: 551, rPairingFlag: false, daqOffset: 0} + - {padAddress: -551, rPairingFlag: true, daqOffset: 0} + - {padAddress: 550, rPairingFlag: false, daqOffset: 0} + - {padAddress: -550, rPairingFlag: false, daqOffset: 0} + - {padAddress: 549, rPairingFlag: false, daqOffset: 0} + - {padAddress: -549, rPairingFlag: false, daqOffset: 0} + - {padAddress: 548, rPairingFlag: false, daqOffset: 0} + - {padAddress: -548, rPairingFlag: false, daqOffset: 0} + - {padAddress: 547, rPairingFlag: false, daqOffset: 0} + - {padAddress: -547, rPairingFlag: false, daqOffset: 0} + - {padAddress: 546, rPairingFlag: false, daqOffset: 0} + - {padAddress: -546, rPairingFlag: true, daqOffset: 0} + - {padAddress: 545, rPairingFlag: true, daqOffset: 0} + - {padAddress: -545, rPairingFlag: false, daqOffset: 0} + - {padAddress: 544, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -616, rPairingFlag: false, daqOffset: 3} + - {padAddress: 616, rPairingFlag: false, daqOffset: 3} + - {padAddress: -617, rPairingFlag: false, daqOffset: 3} + - {padAddress: 617, rPairingFlag: false, daqOffset: 3} + - {padAddress: -618, rPairingFlag: false, daqOffset: 3} + - {padAddress: 618, rPairingFlag: false, daqOffset: 3} + - {padAddress: -619, rPairingFlag: false, daqOffset: 3} + - {padAddress: 619, rPairingFlag: false, daqOffset: 3} + - {padAddress: -620, rPairingFlag: false, daqOffset: 3} + - {padAddress: 620, rPairingFlag: false, daqOffset: 3} + - {padAddress: -621, rPairingFlag: false, daqOffset: 3} + - {padAddress: 621, rPairingFlag: false, daqOffset: 3} + - {padAddress: -622, rPairingFlag: false, daqOffset: 3} + - {padAddress: 622, rPairingFlag: false, daqOffset: 3} + - {padAddress: -623, rPairingFlag: false, daqOffset: 3} + - {padAddress: 623, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -624, rPairingFlag: true, daqOffset: 3} + - {padAddress: 624, rPairingFlag: false, daqOffset: 3} + - {padAddress: -625, rPairingFlag: false, daqOffset: 3} + - {padAddress: 625, rPairingFlag: false, daqOffset: 3} + - {padAddress: -626, rPairingFlag: false, daqOffset: 3} + - {padAddress: 626, rPairingFlag: false, daqOffset: 3} + - {padAddress: -627, rPairingFlag: false, daqOffset: 3} + - {padAddress: 627, rPairingFlag: false, daqOffset: 3} + - {padAddress: -628, rPairingFlag: false, daqOffset: 3} + - {padAddress: 628, rPairingFlag: false, daqOffset: 3} + - {padAddress: -629, rPairingFlag: false, daqOffset: 3} + - {padAddress: 629, rPairingFlag: false, daqOffset: 3} + - {padAddress: -630, rPairingFlag: false, daqOffset: 3} + - {padAddress: 630, rPairingFlag: false, daqOffset: 3} + - {padAddress: -631, rPairingFlag: false, daqOffset: 3} + - {padAddress: 631, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -632, rPairingFlag: true, daqOffset: 3} + - {padAddress: 632, rPairingFlag: false, daqOffset: 3} + - {padAddress: -633, rPairingFlag: false, daqOffset: 3} + - {padAddress: 633, rPairingFlag: false, daqOffset: 3} + - {padAddress: -634, rPairingFlag: false, daqOffset: 3} + - {padAddress: 634, rPairingFlag: false, daqOffset: 3} + - {padAddress: -635, rPairingFlag: false, daqOffset: 3} + - {padAddress: 635, rPairingFlag: false, daqOffset: 3} + - {padAddress: -636, rPairingFlag: false, daqOffset: 3} + - {padAddress: 636, rPairingFlag: false, daqOffset: 3} + - {padAddress: -637, rPairingFlag: false, daqOffset: 3} + - {padAddress: 637, rPairingFlag: false, daqOffset: 3} + - {padAddress: -638, rPairingFlag: false, daqOffset: 3} + - {padAddress: 638, rPairingFlag: false, daqOffset: 3} + - {padAddress: -639, rPairingFlag: false, daqOffset: 3} + - {padAddress: 639, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -688, rPairingFlag: false, daqOffset: 0} + - {padAddress: 687, rPairingFlag: false, daqOffset: 0} + - {padAddress: -687, rPairingFlag: false, daqOffset: 0} + - {padAddress: 686, rPairingFlag: false, daqOffset: 0} + - {padAddress: -686, rPairingFlag: false, daqOffset: 0} + - {padAddress: 685, rPairingFlag: false, daqOffset: 0} + - {padAddress: -685, rPairingFlag: false, daqOffset: 0} + - {padAddress: 684, rPairingFlag: false, daqOffset: 0} + - {padAddress: -684, rPairingFlag: false, daqOffset: 0} + - {padAddress: 683, rPairingFlag: false, daqOffset: 0} + - {padAddress: -683, rPairingFlag: false, daqOffset: 0} + - {padAddress: 682, rPairingFlag: false, daqOffset: 0} + - {padAddress: -682, rPairingFlag: false, daqOffset: 0} + - {padAddress: 681, rPairingFlag: false, daqOffset: 0} + - {padAddress: -681, rPairingFlag: false, daqOffset: 0} + - {padAddress: 680, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -680, rPairingFlag: false, daqOffset: 0} + - {padAddress: 679, rPairingFlag: false, daqOffset: 0} + - {padAddress: -679, rPairingFlag: false, daqOffset: 0} + - {padAddress: 678, rPairingFlag: false, daqOffset: 0} + - {padAddress: -678, rPairingFlag: false, daqOffset: 0} + - {padAddress: 677, rPairingFlag: false, daqOffset: 0} + - {padAddress: -677, rPairingFlag: false, daqOffset: 0} + - {padAddress: 676, rPairingFlag: true, daqOffset: 0} + - {padAddress: -676, rPairingFlag: false, daqOffset: 0} + - {padAddress: 675, rPairingFlag: false, daqOffset: 0} + - {padAddress: -675, rPairingFlag: false, daqOffset: 0} + - {padAddress: 674, rPairingFlag: false, daqOffset: 0} + - {padAddress: -674, rPairingFlag: false, daqOffset: 0} + - {padAddress: 673, rPairingFlag: false, daqOffset: 0} + - {padAddress: -673, rPairingFlag: false, daqOffset: 0} + - {padAddress: 672, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -672, rPairingFlag: true, daqOffset: 0} + - {padAddress: 671, rPairingFlag: false, daqOffset: 0} + - {padAddress: -671, rPairingFlag: false, daqOffset: 0} + - {padAddress: 670, rPairingFlag: false, daqOffset: 0} + - {padAddress: -670, rPairingFlag: false, daqOffset: 0} + - {padAddress: 669, rPairingFlag: false, daqOffset: 0} + - {padAddress: -669, rPairingFlag: false, daqOffset: 0} + - {padAddress: 668, rPairingFlag: false, daqOffset: 0} + - {padAddress: -668, rPairingFlag: false, daqOffset: 0} + - {padAddress: 667, rPairingFlag: false, daqOffset: 0} + - {padAddress: -667, rPairingFlag: false, daqOffset: 0} + - {padAddress: 666, rPairingFlag: false, daqOffset: 0} + - {padAddress: -666, rPairingFlag: false, daqOffset: 0} + - {padAddress: 665, rPairingFlag: false, daqOffset: 0} + - {padAddress: -665, rPairingFlag: false, daqOffset: 0} + - {padAddress: 664, rPairingFlag: true, daqOffset: 0} + - + - {padAddress: -736, rPairingFlag: true, daqOffset: 3} + - {padAddress: 736, rPairingFlag: false, daqOffset: 3} + - {padAddress: -737, rPairingFlag: false, daqOffset: 3} + - {padAddress: 737, rPairingFlag: false, daqOffset: 3} + - {padAddress: -738, rPairingFlag: false, daqOffset: 3} + - {padAddress: 738, rPairingFlag: false, daqOffset: 3} + - {padAddress: -739, rPairingFlag: true, daqOffset: 3} + - {padAddress: 739, rPairingFlag: false, daqOffset: 3} + - {padAddress: -740, rPairingFlag: true, daqOffset: 3} + - {padAddress: 740, rPairingFlag: false, daqOffset: 3} + - {padAddress: -741, rPairingFlag: false, daqOffset: 3} + - {padAddress: 741, rPairingFlag: false, daqOffset: 3} + - {padAddress: -742, rPairingFlag: false, daqOffset: 3} + - {padAddress: 742, rPairingFlag: false, daqOffset: 3} + - {padAddress: -743, rPairingFlag: false, daqOffset: 3} + - {padAddress: 743, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -744, rPairingFlag: false, daqOffset: 3} + - {padAddress: 744, rPairingFlag: false, daqOffset: 3} + - {padAddress: -745, rPairingFlag: false, daqOffset: 3} + - {padAddress: 745, rPairingFlag: false, daqOffset: 3} + - {padAddress: -746, rPairingFlag: false, daqOffset: 3} + - {padAddress: 746, rPairingFlag: false, daqOffset: 3} + - {padAddress: -747, rPairingFlag: true, daqOffset: 3} + - {padAddress: 747, rPairingFlag: false, daqOffset: 3} + - {padAddress: -748, rPairingFlag: true, daqOffset: 3} + - {padAddress: 748, rPairingFlag: false, daqOffset: 3} + - {padAddress: -749, rPairingFlag: false, daqOffset: 3} + - {padAddress: 749, rPairingFlag: false, daqOffset: 3} + - {padAddress: -750, rPairingFlag: false, daqOffset: 3} + - {padAddress: 750, rPairingFlag: false, daqOffset: 3} + - {padAddress: -751, rPairingFlag: false, daqOffset: 3} + - {padAddress: 751, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -752, rPairingFlag: false, daqOffset: 3} + - {padAddress: 752, rPairingFlag: false, daqOffset: 3} + - {padAddress: -753, rPairingFlag: true, daqOffset: 3} + - {padAddress: 753, rPairingFlag: true, daqOffset: 3} + - {padAddress: -754, rPairingFlag: false, daqOffset: 3} + - {padAddress: 754, rPairingFlag: false, daqOffset: 3} + - {padAddress: -755, rPairingFlag: false, daqOffset: 3} + - {padAddress: 755, rPairingFlag: false, daqOffset: 3} + - {padAddress: -756, rPairingFlag: false, daqOffset: 3} + - {padAddress: 756, rPairingFlag: false, daqOffset: 3} + - {padAddress: -757, rPairingFlag: false, daqOffset: 3} + - {padAddress: 757, rPairingFlag: false, daqOffset: 3} + - {padAddress: -758, rPairingFlag: false, daqOffset: 3} + - {padAddress: 758, rPairingFlag: false, daqOffset: 3} + - {padAddress: -759, rPairingFlag: false, daqOffset: 3} + - {padAddress: 759, rPairingFlag: true, daqOffset: 3} + - + - {padAddress: -712, rPairingFlag: false, daqOffset: 0} + - {padAddress: 711, rPairingFlag: true, daqOffset: 0} + - {padAddress: -711, rPairingFlag: true, daqOffset: 0} + - {padAddress: 710, rPairingFlag: false, daqOffset: 0} + - {padAddress: -710, rPairingFlag: true, daqOffset: 0} + - {padAddress: 709, rPairingFlag: false, daqOffset: 0} + - {padAddress: -709, rPairingFlag: false, daqOffset: 0} + - {padAddress: 708, rPairingFlag: false, daqOffset: 0} + - {padAddress: -708, rPairingFlag: true, daqOffset: 0} + - {padAddress: 707, rPairingFlag: false, daqOffset: 0} + - {padAddress: -707, rPairingFlag: false, daqOffset: 0} + - {padAddress: 706, rPairingFlag: false, daqOffset: 0} + - {padAddress: -706, rPairingFlag: false, daqOffset: 0} + - {padAddress: 705, rPairingFlag: false, daqOffset: 0} + - {padAddress: -705, rPairingFlag: true, daqOffset: 0} + - {padAddress: 704, rPairingFlag: true, daqOffset: 0} + - + - {padAddress: -704, rPairingFlag: false, daqOffset: 0} + - {padAddress: 703, rPairingFlag: true, daqOffset: 0} + - {padAddress: -703, rPairingFlag: false, daqOffset: 0} + - {padAddress: 702, rPairingFlag: false, daqOffset: 0} + - {padAddress: -702, rPairingFlag: false, daqOffset: 0} + - {padAddress: 701, rPairingFlag: false, daqOffset: 0} + - {padAddress: -701, rPairingFlag: false, daqOffset: 0} + - {padAddress: 700, rPairingFlag: false, daqOffset: 0} + - {padAddress: -700, rPairingFlag: false, daqOffset: 0} + - {padAddress: 699, rPairingFlag: false, daqOffset: 0} + - {padAddress: -699, rPairingFlag: false, daqOffset: 0} + - {padAddress: 698, rPairingFlag: false, daqOffset: 0} + - {padAddress: -698, rPairingFlag: false, daqOffset: 0} + - {padAddress: 697, rPairingFlag: false, daqOffset: 0} + - {padAddress: -697, rPairingFlag: false, daqOffset: 0} + - {padAddress: 696, rPairingFlag: true, daqOffset: 0} + - + - {padAddress: -696, rPairingFlag: false, daqOffset: 0} + - {padAddress: 695, rPairingFlag: false, daqOffset: 0} + - {padAddress: -695, rPairingFlag: false, daqOffset: 0} + - {padAddress: 694, rPairingFlag: false, daqOffset: 0} + - {padAddress: -694, rPairingFlag: false, daqOffset: 0} + - {padAddress: 693, rPairingFlag: false, daqOffset: 0} + - {padAddress: -693, rPairingFlag: false, daqOffset: 0} + - {padAddress: 692, rPairingFlag: false, daqOffset: 0} + - {padAddress: -692, rPairingFlag: false, daqOffset: 0} + - {padAddress: 691, rPairingFlag: false, daqOffset: 0} + - {padAddress: -691, rPairingFlag: true, daqOffset: 0} + - {padAddress: 690, rPairingFlag: false, daqOffset: 0} + - {padAddress: -690, rPairingFlag: false, daqOffset: 0} + - {padAddress: 689, rPairingFlag: false, daqOffset: 0} + - {padAddress: -689, rPairingFlag: false, daqOffset: 0} + - {padAddress: 688, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -760, rPairingFlag: false, daqOffset: 3} + - {padAddress: 760, rPairingFlag: false, daqOffset: 3} + - {padAddress: -761, rPairingFlag: false, daqOffset: 3} + - {padAddress: 761, rPairingFlag: false, daqOffset: 3} + - {padAddress: -762, rPairingFlag: false, daqOffset: 3} + - {padAddress: 762, rPairingFlag: false, daqOffset: 3} + - {padAddress: -763, rPairingFlag: false, daqOffset: 3} + - {padAddress: 763, rPairingFlag: false, daqOffset: 3} + - {padAddress: -764, rPairingFlag: false, daqOffset: 3} + - {padAddress: 764, rPairingFlag: false, daqOffset: 3} + - {padAddress: -765, rPairingFlag: false, daqOffset: 3} + - {padAddress: 765, rPairingFlag: false, daqOffset: 3} + - {padAddress: -766, rPairingFlag: false, daqOffset: 3} + - {padAddress: 766, rPairingFlag: false, daqOffset: 3} + - {padAddress: -767, rPairingFlag: false, daqOffset: 3} + - {padAddress: 767, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -768, rPairingFlag: false, daqOffset: 3} + - {padAddress: 768, rPairingFlag: false, daqOffset: 3} + - {padAddress: -769, rPairingFlag: false, daqOffset: 3} + - {padAddress: 769, rPairingFlag: false, daqOffset: 3} + - {padAddress: -770, rPairingFlag: false, daqOffset: 3} + - {padAddress: 770, rPairingFlag: false, daqOffset: 3} + - {padAddress: -771, rPairingFlag: false, daqOffset: 3} + - {padAddress: 771, rPairingFlag: false, daqOffset: 3} + - {padAddress: -772, rPairingFlag: false, daqOffset: 3} + - {padAddress: 772, rPairingFlag: false, daqOffset: 3} + - {padAddress: -773, rPairingFlag: false, daqOffset: 3} + - {padAddress: 773, rPairingFlag: false, daqOffset: 3} + - {padAddress: -774, rPairingFlag: false, daqOffset: 3} + - {padAddress: 774, rPairingFlag: false, daqOffset: 3} + - {padAddress: -775, rPairingFlag: false, daqOffset: 3} + - {padAddress: 775, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -776, rPairingFlag: false, daqOffset: 3} + - {padAddress: 776, rPairingFlag: false, daqOffset: 3} + - {padAddress: -777, rPairingFlag: false, daqOffset: 3} + - {padAddress: 777, rPairingFlag: false, daqOffset: 3} + - {padAddress: -778, rPairingFlag: false, daqOffset: 3} + - {padAddress: 778, rPairingFlag: false, daqOffset: 3} + - {padAddress: -779, rPairingFlag: false, daqOffset: 3} + - {padAddress: 779, rPairingFlag: false, daqOffset: 3} + - {padAddress: -780, rPairingFlag: false, daqOffset: 3} + - {padAddress: 780, rPairingFlag: false, daqOffset: 3} + - {padAddress: -781, rPairingFlag: false, daqOffset: 3} + - {padAddress: 781, rPairingFlag: false, daqOffset: 3} + - {padAddress: -782, rPairingFlag: false, daqOffset: 3} + - {padAddress: 782, rPairingFlag: false, daqOffset: 3} + - {padAddress: -783, rPairingFlag: false, daqOffset: 3} + - {padAddress: 783, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -832, rPairingFlag: false, daqOffset: 0} + - {padAddress: 831, rPairingFlag: false, daqOffset: 0} + - {padAddress: -831, rPairingFlag: false, daqOffset: 0} + - {padAddress: 830, rPairingFlag: false, daqOffset: 0} + - {padAddress: -830, rPairingFlag: false, daqOffset: 0} + - {padAddress: 829, rPairingFlag: false, daqOffset: 0} + - {padAddress: -829, rPairingFlag: false, daqOffset: 0} + - {padAddress: 828, rPairingFlag: true, daqOffset: 0} + - {padAddress: -828, rPairingFlag: false, daqOffset: 0} + - {padAddress: 827, rPairingFlag: false, daqOffset: 0} + - {padAddress: -827, rPairingFlag: false, daqOffset: 0} + - {padAddress: 826, rPairingFlag: false, daqOffset: 0} + - {padAddress: -826, rPairingFlag: false, daqOffset: 0} + - {padAddress: 825, rPairingFlag: false, daqOffset: 0} + - {padAddress: -825, rPairingFlag: false, daqOffset: 0} + - {padAddress: 824, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -824, rPairingFlag: false, daqOffset: 0} + - {padAddress: 823, rPairingFlag: true, daqOffset: 0} + - {padAddress: -823, rPairingFlag: true, daqOffset: 0} + - {padAddress: 822, rPairingFlag: false, daqOffset: 0} + - {padAddress: -822, rPairingFlag: false, daqOffset: 0} + - {padAddress: 821, rPairingFlag: false, daqOffset: 0} + - {padAddress: -821, rPairingFlag: false, daqOffset: 0} + - {padAddress: 820, rPairingFlag: true, daqOffset: 0} + - {padAddress: -820, rPairingFlag: true, daqOffset: 0} + - {padAddress: 819, rPairingFlag: false, daqOffset: 0} + - {padAddress: -819, rPairingFlag: false, daqOffset: 0} + - {padAddress: 818, rPairingFlag: false, daqOffset: 0} + - {padAddress: -818, rPairingFlag: false, daqOffset: 0} + - {padAddress: 817, rPairingFlag: false, daqOffset: 0} + - {padAddress: -817, rPairingFlag: false, daqOffset: 0} + - {padAddress: 816, rPairingFlag: true, daqOffset: 0} + - + - {padAddress: -816, rPairingFlag: false, daqOffset: 0} + - {padAddress: 815, rPairingFlag: true, daqOffset: 0} + - {padAddress: -815, rPairingFlag: false, daqOffset: 0} + - {padAddress: 814, rPairingFlag: true, daqOffset: 0} + - {padAddress: -814, rPairingFlag: true, daqOffset: 0} + - {padAddress: 813, rPairingFlag: true, daqOffset: 0} + - {padAddress: -813, rPairingFlag: false, daqOffset: 0} + - {padAddress: 812, rPairingFlag: true, daqOffset: 0} + - {padAddress: -812, rPairingFlag: false, daqOffset: 0} + - {padAddress: 811, rPairingFlag: true, daqOffset: 0} + - {padAddress: -811, rPairingFlag: true, daqOffset: 0} + - {padAddress: 810, rPairingFlag: false, daqOffset: 0} + - {padAddress: -810, rPairingFlag: true, daqOffset: 0} + - {padAddress: 809, rPairingFlag: true, daqOffset: 0} + - {padAddress: -809, rPairingFlag: true, daqOffset: 0} + - {padAddress: 808, rPairingFlag: true, daqOffset: 0} + - + - {padAddress: -880, rPairingFlag: false, daqOffset: 3} + - {padAddress: 880, rPairingFlag: false, daqOffset: 3} + - {padAddress: -881, rPairingFlag: false, daqOffset: 3} + - {padAddress: 881, rPairingFlag: false, daqOffset: 3} + - {padAddress: -882, rPairingFlag: true, daqOffset: 3} + - {padAddress: 882, rPairingFlag: false, daqOffset: 3} + - {padAddress: -883, rPairingFlag: false, daqOffset: 3} + - {padAddress: 883, rPairingFlag: false, daqOffset: 3} + - {padAddress: -884, rPairingFlag: true, daqOffset: 3} + - {padAddress: 884, rPairingFlag: false, daqOffset: 3} + - {padAddress: -885, rPairingFlag: false, daqOffset: 3} + - {padAddress: 885, rPairingFlag: false, daqOffset: 3} + - {padAddress: -886, rPairingFlag: false, daqOffset: 3} + - {padAddress: 886, rPairingFlag: false, daqOffset: 3} + - {padAddress: -887, rPairingFlag: true, daqOffset: 3} + - {padAddress: 887, rPairingFlag: true, daqOffset: 3} + - + - {padAddress: -888, rPairingFlag: false, daqOffset: 3} + - {padAddress: 888, rPairingFlag: true, daqOffset: 3} + - {padAddress: -889, rPairingFlag: false, daqOffset: 3} + - {padAddress: 889, rPairingFlag: false, daqOffset: 3} + - {padAddress: -890, rPairingFlag: true, daqOffset: 3} + - {padAddress: 890, rPairingFlag: false, daqOffset: 3} + - {padAddress: -891, rPairingFlag: false, daqOffset: 3} + - {padAddress: 891, rPairingFlag: false, daqOffset: 3} + - {padAddress: -892, rPairingFlag: true, daqOffset: 3} + - {padAddress: 892, rPairingFlag: false, daqOffset: 3} + - {padAddress: -893, rPairingFlag: false, daqOffset: 3} + - {padAddress: 893, rPairingFlag: true, daqOffset: 3} + - {padAddress: -894, rPairingFlag: true, daqOffset: 3} + - {padAddress: 894, rPairingFlag: true, daqOffset: 3} + - {padAddress: -895, rPairingFlag: true, daqOffset: 3} + - {padAddress: 895, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -896, rPairingFlag: false, daqOffset: 3} + - {padAddress: 896, rPairingFlag: false, daqOffset: 3} + - {padAddress: -897, rPairingFlag: false, daqOffset: 3} + - {padAddress: 897, rPairingFlag: false, daqOffset: 3} + - {padAddress: -898, rPairingFlag: true, daqOffset: 3} + - {padAddress: 898, rPairingFlag: false, daqOffset: 3} + - {padAddress: -899, rPairingFlag: false, daqOffset: 3} + - {padAddress: 899, rPairingFlag: false, daqOffset: 3} + - {padAddress: -900, rPairingFlag: true, daqOffset: 3} + - {padAddress: 900, rPairingFlag: false, daqOffset: 3} + - {padAddress: -901, rPairingFlag: false, daqOffset: 3} + - {padAddress: 901, rPairingFlag: false, daqOffset: 3} + - {padAddress: -902, rPairingFlag: false, daqOffset: 3} + - {padAddress: 902, rPairingFlag: false, daqOffset: 3} + - {padAddress: -903, rPairingFlag: false, daqOffset: 3} + - {padAddress: 903, rPairingFlag: true, daqOffset: 3} + - + - {padAddress: -856, rPairingFlag: false, daqOffset: 0} + - {padAddress: 855, rPairingFlag: true, daqOffset: 0} + - {padAddress: -855, rPairingFlag: false, daqOffset: 0} + - {padAddress: 854, rPairingFlag: false, daqOffset: 0} + - {padAddress: -854, rPairingFlag: false, daqOffset: 0} + - {padAddress: 853, rPairingFlag: false, daqOffset: 0} + - {padAddress: -853, rPairingFlag: false, daqOffset: 0} + - {padAddress: 852, rPairingFlag: false, daqOffset: 0} + - {padAddress: -852, rPairingFlag: false, daqOffset: 0} + - {padAddress: 851, rPairingFlag: false, daqOffset: 0} + - {padAddress: -851, rPairingFlag: false, daqOffset: 0} + - {padAddress: 850, rPairingFlag: false, daqOffset: 0} + - {padAddress: -850, rPairingFlag: false, daqOffset: 0} + - {padAddress: 849, rPairingFlag: false, daqOffset: 0} + - {padAddress: -849, rPairingFlag: true, daqOffset: 0} + - {padAddress: 848, rPairingFlag: true, daqOffset: 0} + - + - {padAddress: -848, rPairingFlag: true, daqOffset: 0} + - {padAddress: 847, rPairingFlag: false, daqOffset: 0} + - {padAddress: -847, rPairingFlag: true, daqOffset: 0} + - {padAddress: 846, rPairingFlag: false, daqOffset: 0} + - {padAddress: -846, rPairingFlag: false, daqOffset: 0} + - {padAddress: 845, rPairingFlag: false, daqOffset: 0} + - {padAddress: -845, rPairingFlag: true, daqOffset: 0} + - {padAddress: 844, rPairingFlag: false, daqOffset: 0} + - {padAddress: -844, rPairingFlag: false, daqOffset: 0} + - {padAddress: 843, rPairingFlag: false, daqOffset: 0} + - {padAddress: -843, rPairingFlag: false, daqOffset: 0} + - {padAddress: 842, rPairingFlag: false, daqOffset: 0} + - {padAddress: -842, rPairingFlag: false, daqOffset: 0} + - {padAddress: 841, rPairingFlag: false, daqOffset: 0} + - {padAddress: -841, rPairingFlag: false, daqOffset: 0} + - {padAddress: 840, rPairingFlag: false, daqOffset: 0} + - + - {padAddress: -840, rPairingFlag: false, daqOffset: 0} + - {padAddress: 839, rPairingFlag: true, daqOffset: 0} + - {padAddress: -839, rPairingFlag: true, daqOffset: 0} + - {padAddress: 838, rPairingFlag: true, daqOffset: 0} + - {padAddress: -838, rPairingFlag: false, daqOffset: 0} + - {padAddress: 837, rPairingFlag: false, daqOffset: 0} + - {padAddress: -837, rPairingFlag: true, daqOffset: 0} + - {padAddress: 836, rPairingFlag: true, daqOffset: 0} + - {padAddress: -836, rPairingFlag: false, daqOffset: 0} + - {padAddress: 835, rPairingFlag: false, daqOffset: 0} + - {padAddress: -835, rPairingFlag: false, daqOffset: 0} + - {padAddress: 834, rPairingFlag: true, daqOffset: 0} + - {padAddress: -834, rPairingFlag: true, daqOffset: 0} + - {padAddress: 833, rPairingFlag: true, daqOffset: 0} + - {padAddress: -833, rPairingFlag: true, daqOffset: 0} + - {padAddress: 832, rPairingFlag: true, daqOffset: 0} + - + - {padAddress: -904, rPairingFlag: true, daqOffset: 3} + - {padAddress: 904, rPairingFlag: false, daqOffset: 3} + - {padAddress: -905, rPairingFlag: false, daqOffset: 3} + - {padAddress: 905, rPairingFlag: false, daqOffset: 3} + - {padAddress: -906, rPairingFlag: false, daqOffset: 3} + - {padAddress: 906, rPairingFlag: false, daqOffset: 3} + - {padAddress: -907, rPairingFlag: false, daqOffset: 3} + - {padAddress: 907, rPairingFlag: false, daqOffset: 3} + - {padAddress: -908, rPairingFlag: false, daqOffset: 3} + - {padAddress: 908, rPairingFlag: false, daqOffset: 3} + - {padAddress: -909, rPairingFlag: false, daqOffset: 3} + - {padAddress: 909, rPairingFlag: false, daqOffset: 3} + - {padAddress: -910, rPairingFlag: false, daqOffset: 3} + - {padAddress: 910, rPairingFlag: false, daqOffset: 3} + - {padAddress: -911, rPairingFlag: false, daqOffset: 3} + - {padAddress: 911, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -912, rPairingFlag: false, daqOffset: 3} + - {padAddress: 912, rPairingFlag: false, daqOffset: 3} + - {padAddress: -913, rPairingFlag: false, daqOffset: 3} + - {padAddress: 913, rPairingFlag: false, daqOffset: 3} + - {padAddress: -914, rPairingFlag: false, daqOffset: 3} + - {padAddress: 914, rPairingFlag: false, daqOffset: 3} + - {padAddress: -915, rPairingFlag: false, daqOffset: 3} + - {padAddress: 915, rPairingFlag: false, daqOffset: 3} + - {padAddress: -916, rPairingFlag: false, daqOffset: 3} + - {padAddress: 916, rPairingFlag: false, daqOffset: 3} + - {padAddress: -917, rPairingFlag: false, daqOffset: 3} + - {padAddress: 917, rPairingFlag: false, daqOffset: 3} + - {padAddress: -918, rPairingFlag: false, daqOffset: 3} + - {padAddress: 918, rPairingFlag: false, daqOffset: 3} + - {padAddress: -919, rPairingFlag: false, daqOffset: 3} + - {padAddress: 919, rPairingFlag: false, daqOffset: 3} + - + - {padAddress: -920, rPairingFlag: true, daqOffset: 3} + - {padAddress: 920, rPairingFlag: false, daqOffset: 3} + - {padAddress: -921, rPairingFlag: false, daqOffset: 3} + - {padAddress: 921, rPairingFlag: false, daqOffset: 3} + - {padAddress: -922, rPairingFlag: false, daqOffset: 3} + - {padAddress: 922, rPairingFlag: false, daqOffset: 3} + - {padAddress: -923, rPairingFlag: true, daqOffset: 3} + - {padAddress: 923, rPairingFlag: false, daqOffset: 3} + - {padAddress: -924, rPairingFlag: false, daqOffset: 3} + - {padAddress: 924, rPairingFlag: false, daqOffset: 3} + - {padAddress: -925, rPairingFlag: false, daqOffset: 3} + - {padAddress: 925, rPairingFlag: false, daqOffset: 3} + - {padAddress: -926, rPairingFlag: false, daqOffset: 3} + - {padAddress: 926, rPairingFlag: false, daqOffset: 3} + - {padAddress: -927, rPairingFlag: false, daqOffset: 3} + - {padAddress: 927, rPairingFlag: false, daqOffset: 3} +... diff --git a/algo/params/TrdReadoutSetup.yaml b/algo/params/TrdReadoutSetup.yaml new file mode 100644 index 0000000000..407e6a3e5e --- /dev/null +++ b/algo/params/TrdReadoutSetup.yaml @@ -0,0 +1,1524 @@ +--- +readoutMap: + 0x80d3: + - + - 37017 + - 37017 + - 37018 + - 37018 + - 37019 + - 37019 + - 37020 + - 37020 + - 37021 + - 37021 + - 37022 + - 37022 + - 37023 + - 37023 + - 37009 + - 37009 + - 37010 + - 37010 + - 37011 + - 37011 + - 37012 + - 37012 + - 37013 + - 37013 + - 37014 + - 37014 + - 37015 + - 37015 + - 37001 + - 37001 + - 37002 + - 37002 + - 37003 + - 37003 + - 37004 + - 37004 + - 37005 + - 37005 + - 37006 + - 37006 + - 37007 + - 37007 + 0x80d5: + - + - 21017 + - 21017 + - 21018 + - 21018 + - 21019 + - 21019 + - 21020 + - 21020 + - 21021 + - 21021 + - 21022 + - 21022 + - 21023 + - 21023 + - 21009 + - 21009 + - 21010 + - 21010 + - 21011 + - 21011 + - 21012 + - 21012 + - 21013 + - 21013 + - 21014 + - 21014 + - 21015 + - 21015 + - 21001 + - 21001 + - 21002 + - 21002 + - 21003 + - 21003 + - 21004 + - 21004 + - 21005 + - 21005 + - 21006 + - 21006 + - 21007 + - 21007 +channelMap: + 32979: + - + - + - 663 + - 535 + - 662 + - 534 + - 661 + - 659 + - 533 + - 660 + - 658 + - 532 + - 531 + - 657 + - 656 + - 530 + - 529 + - 528 + - + - 671 + - 670 + - 669 + - 543 + - 542 + - 668 + - 667 + - 541 + - 539 + - 666 + - 540 + - 538 + - 665 + - 537 + - 664 + - 536 + - + - 679 + - 551 + - 678 + - 550 + - 677 + - 675 + - 549 + - 676 + - 674 + - 548 + - 547 + - 673 + - 672 + - 546 + - 545 + - 544 + - + - 687 + - 686 + - 685 + - 559 + - 558 + - 684 + - 683 + - 557 + - 555 + - 682 + - 556 + - 554 + - 681 + - 553 + - 680 + - 552 + - + - 695 + - 567 + - 694 + - 566 + - 693 + - 691 + - 565 + - 692 + - 690 + - 564 + - 563 + - 689 + - 688 + - 562 + - 561 + - 560 + - + - 703 + - 702 + - 701 + - 575 + - 574 + - 700 + - 699 + - 573 + - 571 + - 698 + - 572 + - 570 + - 697 + - 569 + - 696 + - 568 + - + - 711 + - 583 + - 710 + - 582 + - 709 + - 707 + - 581 + - 708 + - 706 + - 580 + - 579 + - 705 + - 704 + - 578 + - 577 + - 576 + - + - 719 + - 718 + - 717 + - 591 + - 590 + - 716 + - 715 + - 589 + - 587 + - 714 + - 588 + - 586 + - 713 + - 585 + - 712 + - 584 + - + - 727 + - 599 + - 726 + - 598 + - 725 + - 723 + - 597 + - 724 + - 722 + - 596 + - 595 + - 721 + - 720 + - 594 + - 593 + - 592 + - + - 735 + - 734 + - 733 + - 607 + - 606 + - 732 + - 731 + - 605 + - 603 + - 730 + - 604 + - 602 + - 729 + - 601 + - 728 + - 600 + - + - 743 + - 615 + - 742 + - 614 + - 741 + - 739 + - 613 + - 740 + - 738 + - 612 + - 611 + - 737 + - 736 + - 610 + - 609 + - 608 + - + - 751 + - 750 + - 749 + - 623 + - 622 + - 748 + - 747 + - 621 + - 619 + - 746 + - 620 + - 618 + - 745 + - 617 + - 744 + - 616 + - + - 759 + - 631 + - 758 + - 630 + - 757 + - 755 + - 629 + - 756 + - 754 + - 628 + - 627 + - 753 + - 752 + - 626 + - 625 + - 624 + - + - 767 + - 766 + - 765 + - 639 + - 638 + - 764 + - 763 + - 637 + - 635 + - 762 + - 636 + - 634 + - 761 + - 633 + - 760 + - 632 + - + - 407 + - 279 + - 406 + - 278 + - 405 + - 403 + - 277 + - 404 + - 402 + - 276 + - 275 + - 401 + - 400 + - 274 + - 273 + - 272 + - + - 415 + - 414 + - 413 + - 287 + - 286 + - 412 + - 411 + - 285 + - 283 + - 410 + - 284 + - 282 + - 409 + - 281 + - 408 + - 280 + - + - 423 + - 295 + - 422 + - 294 + - 421 + - 419 + - 293 + - 420 + - 418 + - 292 + - 291 + - 417 + - 416 + - 290 + - 289 + - 288 + - + - 431 + - 430 + - 429 + - 303 + - 302 + - 428 + - 427 + - 301 + - 299 + - 426 + - 300 + - 298 + - 425 + - 297 + - 424 + - 296 + - + - 439 + - 311 + - 438 + - 310 + - 437 + - 435 + - 309 + - 436 + - 434 + - 308 + - 307 + - 433 + - 432 + - 306 + - 305 + - 304 + - + - 447 + - 446 + - 445 + - 319 + - 318 + - 444 + - 443 + - 317 + - 315 + - 442 + - 316 + - 314 + - 441 + - 313 + - 440 + - 312 + - + - 455 + - 327 + - 454 + - 326 + - 453 + - 451 + - 325 + - 452 + - 450 + - 324 + - 323 + - 449 + - 448 + - 322 + - 321 + - 320 + - + - 463 + - 462 + - 461 + - 335 + - 334 + - 460 + - 459 + - 333 + - 331 + - 458 + - 332 + - 330 + - 457 + - 329 + - 456 + - 328 + - + - 471 + - 343 + - 470 + - 342 + - 469 + - 467 + - 341 + - 468 + - 466 + - 340 + - 339 + - 465 + - 464 + - 338 + - 337 + - 336 + - + - 479 + - 478 + - 477 + - 351 + - 350 + - 476 + - 475 + - 349 + - 347 + - 474 + - 348 + - 346 + - 473 + - 345 + - 472 + - 344 + - + - 487 + - 359 + - 486 + - 358 + - 485 + - 483 + - 357 + - 484 + - 482 + - 356 + - 355 + - 481 + - 480 + - 354 + - 353 + - 352 + - + - 495 + - 494 + - 493 + - 367 + - 366 + - 492 + - 491 + - 365 + - 363 + - 490 + - 364 + - 362 + - 489 + - 361 + - 488 + - 360 + - + - 503 + - 375 + - 502 + - 374 + - 501 + - 499 + - 373 + - 500 + - 498 + - 372 + - 371 + - 497 + - 496 + - 370 + - 369 + - 368 + - + - 511 + - 510 + - 509 + - 383 + - 382 + - 508 + - 507 + - 381 + - 379 + - 506 + - 380 + - 378 + - 505 + - 377 + - 504 + - 376 + - + - 151 + - 23 + - 150 + - 22 + - 149 + - 147 + - 21 + - 148 + - 146 + - 20 + - 19 + - 145 + - 144 + - 18 + - 17 + - 16 + - + - 159 + - 158 + - 157 + - 31 + - 30 + - 156 + - 155 + - 29 + - 27 + - 154 + - 28 + - 26 + - 153 + - 25 + - 152 + - 24 + - + - 167 + - 39 + - 166 + - 38 + - 165 + - 163 + - 37 + - 164 + - 162 + - 36 + - 35 + - 161 + - 160 + - 34 + - 33 + - 32 + - + - 175 + - 174 + - 173 + - 47 + - 46 + - 172 + - 171 + - 45 + - 43 + - 170 + - 44 + - 42 + - 169 + - 41 + - 168 + - 40 + - + - 183 + - 55 + - 182 + - 54 + - 181 + - 179 + - 53 + - 180 + - 178 + - 52 + - 51 + - 177 + - 176 + - 50 + - 49 + - 48 + - + - 191 + - 190 + - 189 + - 63 + - 62 + - 188 + - 187 + - 61 + - 59 + - 186 + - 60 + - 58 + - 185 + - 57 + - 184 + - 56 + - + - 199 + - 71 + - 198 + - 70 + - 197 + - 195 + - 69 + - 196 + - 194 + - 68 + - 67 + - 193 + - 192 + - 66 + - 65 + - 64 + - + - 207 + - 206 + - 205 + - 79 + - 78 + - 204 + - 203 + - 77 + - 75 + - 202 + - 76 + - 74 + - 201 + - 73 + - 200 + - 72 + - + - 215 + - 87 + - 214 + - 86 + - 213 + - 211 + - 85 + - 212 + - 210 + - 84 + - 83 + - 209 + - 208 + - 82 + - 81 + - 80 + - + - 223 + - 222 + - 221 + - 95 + - 94 + - 220 + - 219 + - 93 + - 91 + - 218 + - 92 + - 90 + - 217 + - 89 + - 216 + - 88 + - + - 231 + - 103 + - 230 + - 102 + - 229 + - 227 + - 101 + - 228 + - 226 + - 100 + - 99 + - 225 + - 224 + - 98 + - 97 + - 96 + - + - 239 + - 238 + - 237 + - 111 + - 110 + - 236 + - 235 + - 109 + - 107 + - 234 + - 108 + - 106 + - 233 + - 105 + - 232 + - 104 + - + - 247 + - 119 + - 246 + - 118 + - 245 + - 243 + - 117 + - 244 + - 242 + - 116 + - 115 + - 241 + - 240 + - 114 + - 113 + - 112 + - + - 255 + - 254 + - 253 + - 127 + - 126 + - 252 + - 251 + - 125 + - 123 + - 250 + - 124 + - 122 + - 249 + - 121 + - 248 + - 120 + 32981: + - + - + - 663 + - 535 + - 662 + - 534 + - 661 + - 659 + - 533 + - 660 + - 658 + - 532 + - 531 + - 657 + - 656 + - 530 + - 529 + - 528 + - + - 671 + - 670 + - 669 + - 543 + - 542 + - 668 + - 667 + - 541 + - 539 + - 666 + - 540 + - 538 + - 665 + - 537 + - 664 + - 536 + - + - 679 + - 551 + - 678 + - 550 + - 677 + - 675 + - 549 + - 676 + - 674 + - 548 + - 547 + - 673 + - 672 + - 546 + - 545 + - 544 + - + - 687 + - 686 + - 685 + - 559 + - 558 + - 684 + - 683 + - 557 + - 555 + - 682 + - 556 + - 554 + - 681 + - 553 + - 680 + - 552 + - + - 695 + - 567 + - 694 + - 566 + - 693 + - 691 + - 565 + - 692 + - 690 + - 564 + - 563 + - 689 + - 688 + - 562 + - 561 + - 560 + - + - 703 + - 702 + - 701 + - 575 + - 574 + - 700 + - 699 + - 573 + - 571 + - 698 + - 572 + - 570 + - 697 + - 569 + - 696 + - 568 + - + - 711 + - 583 + - 710 + - 582 + - 709 + - 707 + - 581 + - 708 + - 706 + - 580 + - 579 + - 705 + - 704 + - 578 + - 577 + - 576 + - + - 719 + - 718 + - 717 + - 591 + - 590 + - 716 + - 715 + - 589 + - 587 + - 714 + - 588 + - 586 + - 713 + - 585 + - 712 + - 584 + - + - 727 + - 599 + - 726 + - 598 + - 725 + - 723 + - 597 + - 724 + - 722 + - 596 + - 595 + - 721 + - 720 + - 594 + - 593 + - 592 + - + - 735 + - 734 + - 733 + - 607 + - 606 + - 732 + - 731 + - 605 + - 603 + - 730 + - 604 + - 602 + - 729 + - 601 + - 728 + - 600 + - + - 743 + - 615 + - 742 + - 614 + - 741 + - 739 + - 613 + - 740 + - 738 + - 612 + - 611 + - 737 + - 736 + - 610 + - 609 + - 608 + - + - 751 + - 750 + - 749 + - 623 + - 622 + - 748 + - 747 + - 621 + - 619 + - 746 + - 620 + - 618 + - 745 + - 617 + - 744 + - 616 + - + - 759 + - 631 + - 758 + - 630 + - 757 + - 755 + - 629 + - 756 + - 754 + - 628 + - 627 + - 753 + - 752 + - 626 + - 625 + - 624 + - + - 767 + - 766 + - 765 + - 639 + - 638 + - 764 + - 763 + - 637 + - 635 + - 762 + - 636 + - 634 + - 761 + - 633 + - 760 + - 632 + - + - 407 + - 279 + - 406 + - 278 + - 405 + - 403 + - 277 + - 404 + - 402 + - 276 + - 275 + - 401 + - 400 + - 274 + - 273 + - 272 + - + - 415 + - 414 + - 413 + - 287 + - 286 + - 412 + - 411 + - 285 + - 283 + - 410 + - 284 + - 282 + - 409 + - 281 + - 408 + - 280 + - + - 423 + - 295 + - 422 + - 294 + - 421 + - 419 + - 293 + - 420 + - 418 + - 292 + - 291 + - 417 + - 416 + - 290 + - 289 + - 288 + - + - 431 + - 430 + - 429 + - 303 + - 302 + - 428 + - 427 + - 301 + - 299 + - 426 + - 300 + - 298 + - 425 + - 297 + - 424 + - 296 + - + - 439 + - 311 + - 438 + - 310 + - 437 + - 435 + - 309 + - 436 + - 434 + - 308 + - 307 + - 433 + - 432 + - 306 + - 305 + - 304 + - + - 447 + - 446 + - 445 + - 319 + - 318 + - 444 + - 443 + - 317 + - 315 + - 442 + - 316 + - 314 + - 441 + - 313 + - 440 + - 312 + - + - 455 + - 327 + - 454 + - 326 + - 453 + - 451 + - 325 + - 452 + - 450 + - 324 + - 323 + - 449 + - 448 + - 322 + - 321 + - 320 + - + - 463 + - 462 + - 461 + - 335 + - 334 + - 460 + - 459 + - 333 + - 331 + - 458 + - 332 + - 330 + - 457 + - 329 + - 456 + - 328 + - + - 471 + - 343 + - 470 + - 342 + - 469 + - 467 + - 341 + - 468 + - 466 + - 340 + - 339 + - 465 + - 464 + - 338 + - 337 + - 336 + - + - 479 + - 478 + - 477 + - 351 + - 350 + - 476 + - 475 + - 349 + - 347 + - 474 + - 348 + - 346 + - 473 + - 345 + - 472 + - 344 + - + - 487 + - 359 + - 486 + - 358 + - 485 + - 483 + - 357 + - 484 + - 482 + - 356 + - 355 + - 481 + - 480 + - 354 + - 353 + - 352 + - + - 495 + - 494 + - 493 + - 367 + - 366 + - 492 + - 491 + - 365 + - 363 + - 490 + - 364 + - 362 + - 489 + - 361 + - 488 + - 360 + - + - 503 + - 375 + - 502 + - 374 + - 501 + - 499 + - 373 + - 500 + - 498 + - 372 + - 371 + - 497 + - 496 + - 370 + - 369 + - 368 + - + - 511 + - 510 + - 509 + - 383 + - 382 + - 508 + - 507 + - 381 + - 379 + - 506 + - 380 + - 378 + - 505 + - 377 + - 504 + - 376 + - + - 151 + - 23 + - 150 + - 22 + - 149 + - 147 + - 21 + - 148 + - 146 + - 20 + - 19 + - 145 + - 144 + - 18 + - 17 + - 16 + - + - 159 + - 158 + - 157 + - 31 + - 30 + - 156 + - 155 + - 29 + - 27 + - 154 + - 28 + - 26 + - 153 + - 25 + - 152 + - 24 + - + - 167 + - 39 + - 166 + - 38 + - 165 + - 163 + - 37 + - 164 + - 162 + - 36 + - 35 + - 161 + - 160 + - 34 + - 33 + - 32 + - + - 175 + - 174 + - 173 + - 47 + - 46 + - 172 + - 171 + - 45 + - 43 + - 170 + - 44 + - 42 + - 169 + - 41 + - 168 + - 40 + - + - 183 + - 55 + - 182 + - 54 + - 181 + - 179 + - 53 + - 180 + - 178 + - 52 + - 51 + - 177 + - 176 + - 50 + - 49 + - 48 + - + - 191 + - 190 + - 189 + - 63 + - 62 + - 188 + - 187 + - 61 + - 59 + - 186 + - 60 + - 58 + - 185 + - 57 + - 184 + - 56 + - + - 199 + - 71 + - 198 + - 70 + - 197 + - 195 + - 69 + - 196 + - 194 + - 68 + - 67 + - 193 + - 192 + - 66 + - 65 + - 64 + - + - 207 + - 206 + - 205 + - 79 + - 78 + - 204 + - 203 + - 77 + - 75 + - 202 + - 76 + - 74 + - 201 + - 73 + - 200 + - 72 + - + - 215 + - 87 + - 214 + - 86 + - 213 + - 211 + - 85 + - 212 + - 210 + - 84 + - 83 + - 209 + - 208 + - 82 + - 81 + - 80 + - + - 223 + - 222 + - 221 + - 95 + - 94 + - 220 + - 219 + - 93 + - 91 + - 218 + - 92 + - 90 + - 217 + - 89 + - 216 + - 88 + - + - 231 + - 103 + - 230 + - 102 + - 229 + - 227 + - 101 + - 228 + - 226 + - 100 + - 99 + - 225 + - 224 + - 98 + - 97 + - 96 + - + - 239 + - 238 + - 237 + - 111 + - 110 + - 236 + - 235 + - 109 + - 107 + - 234 + - 108 + - 106 + - 233 + - 105 + - 232 + - 104 + - + - 247 + - 119 + - 246 + - 118 + - 245 + - 243 + - 117 + - 244 + - 242 + - 116 + - 115 + - 241 + - 240 + - 114 + - 113 + - 112 + - + - 255 + - 254 + - 253 + - 127 + - 126 + - 252 + - 251 + - 125 + - 123 + - 250 + - 124 + - 122 + - 249 + - 121 + - 248 + - 120 +... diff --git a/algo/unpack/Unpack.cxx b/algo/unpack/Unpack.cxx index 0c9ada648e..bb71ddcd56 100644 --- a/algo/unpack/Unpack.cxx +++ b/algo/unpack/Unpack.cxx @@ -53,6 +53,17 @@ namespace cbm::algo ParallelMsLoop(Subsystem::RICH, monitor, digiTs.fRich, monitor.fRich, *timeslice, fAlgoRich, 0x03); } + if (DetectorEnabled(Subsystem::TRD)) { + monitor.fNumBytesInTrd += + ParallelMsLoop(Subsystem::TRD, monitor, digiTs.fTrd, monitor.fTrd, *timeslice, fAlgoTrd, 0x01); + } + + if (DetectorEnabled(Subsystem::TRD2D)) { + monitor.fNumBytesInTrd2d += + ParallelMsLoop(Subsystem::TRD2D, monitor, digiTs.fTrd2d, monitor.fTrd2d, *timeslice, fAlgoTrd2d, 0x02); + } + + // --- Component loop for (uint64_t comp = 0; comp < timeslice->num_components(); comp++) { @@ -84,14 +95,14 @@ namespace cbm::algo // if (subsystem == Subsystem::BMON) { // MsLoop(timeslice, fAlgoBmon, comp, equipmentId, &digiTs.fT0, monitor, &monitor.fBmon, 0x00); // } - if (subsystem == Subsystem::TRD) { - monitor.fNumBytesInTrd += - MsLoop(timeslice, fAlgoTrd, comp, equipmentId, &digiTs.fTrd, monitor, &monitor.fTrd, 0x01); - } - if (subsystem == Subsystem::TRD2D) { - monitor.fNumBytesInTrd2d += - MsLoop(timeslice, fAlgoTrd2d, comp, equipmentId, &digiTs.fTrd2d, monitor, &monitor.fTrd2d, 0x02); - } + // if (subsystem == Subsystem::TRD) { + // monitor.fNumBytesInTrd += + // MsLoop(timeslice, fAlgoTrd, comp, equipmentId, &digiTs.fTrd, monitor, &monitor.fTrd, 0x01); + // } + // if (subsystem == Subsystem::TRD2D) { + // monitor.fNumBytesInTrd2d += + // MsLoop(timeslice, fAlgoTrd2d, comp, equipmentId, &digiTs.fTrd2d, monitor, &monitor.fTrd2d, 0x02); + // } // if (subsystem == Subsystem::RICH) { // monitor.fNumBytesInRich += // MsLoop(timeslice, fAlgoRich, comp, equipmentId, &digiTs.fRich, monitor, &monitor.fRich, 0x03); @@ -408,15 +419,15 @@ namespace cbm::algo for (size_t chan = 0; chan < numChans; chan++) { trd2d::UnpackChannelPar chanPar; auto pars = fTrd2dConfig.ChanMap(equip, asic, chan); - chanPar.fPadAddress = std::get<0>(pars); // Pad address for channel - chanPar.fMask = std::get<1>(pars); // Flag channel mask - chanPar.fDaqOffset = std::get<2>(pars); // Time calibration parameter + chanPar.fPadAddress = pars.padAddress; // Pad address for channel + chanPar.fMask = pars.rPairingFlag; // Flag channel mask + chanPar.fDaqOffset = pars.daqOffset; // Time calibration parameter asicPar.fChanParams.push_back(chanPar); } auto comppars = fTrd2dConfig.CompMap(equip); par->fSystemTimeOffset = fSystemTimeOffset[Subsystem::TRD2D]; - par->fModId = comppars.first; - par->fCrobId = comppars.second; + par->fModId = comppars.moduleId; + par->fCrobId = comppars.crobId; par->fAsicParams.push_back(asicPar); } fAlgoTrd2d[equip].SetParams(std::move(par)); diff --git a/algo/unpack/UnpackChain.cxx b/algo/unpack/UnpackChain.cxx index 670652090f..68ff5f9bd1 100644 --- a/algo/unpack/UnpackChain.cxx +++ b/algo/unpack/UnpackChain.cxx @@ -3,12 +3,22 @@ Authors: Felix Weiglhofer [committer] */ #include "UnpackChain.h" +#include "config/Yaml.h" + using namespace cbm::algo; using fles::Subsystem; void UnpackChain::Init() { fUnpack.SetApplyWalkCorrection(true); + if (Opts().HasDetector(Subsystem::TRD)) { + auto yaml = YAML::LoadFile((Opts().ParamsDir() / "TrdReadoutSetup.yaml").string()); + fUnpack.fTrdConfig = config::Read<trd::ReadoutConfig>(yaml); + } + if (Opts().HasDetector(Subsystem::TRD2D)) { + auto yaml = YAML::LoadFile((Opts().ParamsDir() / "Trd2dReadoutSetup.yaml").string()); + fUnpack.fTrd2dConfig = config::Read<trd2d::ReadoutConfig>(yaml); + } fUnpack.Init(Opts().Detectors()); } diff --git a/macro/reco/reco_fairroot.C b/macro/reco/reco_fairroot.C index a234228a34..059dc1d849 100644 --- a/macro/reco/reco_fairroot.C +++ b/macro/reco/reco_fairroot.C @@ -62,7 +62,8 @@ void reco_fairroot(TString tsaFile, TString configFile, TString outFile, // ----- Run reconstruction ------------------------------------------- TStopwatch timer; timer.Start(); - CbmReco run(tsaFile.Data(), outFile.Data(), configFile.Data(), numTs, port); + CbmReco::Config config; + CbmReco run(config, tsaFile.Data(), outFile.Data(), configFile.Data(), numTs, port); run.Run(); timer.Stop(); // ------------------------------------------------------------------------ diff --git a/reco/app/cbmreco_fairrun/Application.cxx b/reco/app/cbmreco_fairrun/Application.cxx index e58543c8aa..a5aedb8935 100644 --- a/reco/app/cbmreco_fairrun/Application.cxx +++ b/reco/app/cbmreco_fairrun/Application.cxx @@ -23,8 +23,11 @@ Application::Application(ProgramOptions const& opt) : fOpt(opt) fout << config.ToYaml(); } - fCbmReco = std::make_unique<CbmReco>(fOpt.InputUri(), fOpt.OutputRootFile(), fOpt.ConfigYamlFile(), fOpt.MaxNumTs(), - fOpt.HttpServerPort(), fMonitor.get()); + CbmReco::Config recoConfig; + recoConfig.dumpSetup = fOpt.DumpSetup(); + + fCbmReco = std::make_unique<CbmReco>(recoConfig, fOpt.InputUri(), fOpt.OutputRootFile(), fOpt.ConfigYamlFile(), + fOpt.MaxNumTs(), fOpt.HttpServerPort(), fMonitor.get()); } void Application::Run() { fCbmReco->Run(); } diff --git a/reco/app/cbmreco_fairrun/ProgramOptions.cxx b/reco/app/cbmreco_fairrun/ProgramOptions.cxx index 970485daa0..12b8972f1b 100644 --- a/reco/app/cbmreco_fairrun/ProgramOptions.cxx +++ b/reco/app/cbmreco_fairrun/ProgramOptions.cxx @@ -52,6 +52,7 @@ void ProgramOptions::ParseOptions(int argc, char* argv[]) "name of a yaml config file containing the reconstruction chain configuration"); config_add("save-config", po::value<std::string>(&fSaveConfigYamlFile)->value_name("<filename>"), "save configuration to yaml file (mostly for debugging)"); + config_add("dump-setup", po::bool_switch(&fDumpSetup), "dump the readout setup to yaml"); config_add("max-timeslice-number,n", po::value<int32_t>(&fMaxNumTs)->value_name("<n>"), "quit after processing given number of timeslices (default: unlimited)"); config_add("http-server-port,p", po::value<uint16_t>(&fHttpServerPort)->value_name("<n>"), diff --git a/reco/app/cbmreco_fairrun/ProgramOptions.h b/reco/app/cbmreco_fairrun/ProgramOptions.h index 0b253a7f25..fd22cdf2c3 100644 --- a/reco/app/cbmreco_fairrun/ProgramOptions.h +++ b/reco/app/cbmreco_fairrun/ProgramOptions.h @@ -51,6 +51,9 @@ public: /** @brief Get save configuration file name (.yaml format) **/ [[nodiscard]] const std::string& SaveConfigYamlFile() const { return fSaveConfigYamlFile; } + /** @brief Get flag to dump the readout setup to yaml **/ + [[nodiscard]] bool DumpSetup() const { return fDumpSetup; } + /** @brief Get maximum number of timeslices to process **/ [[nodiscard]] int32_t MaxNumTs() const { return fMaxNumTs; } @@ -67,6 +70,7 @@ private: std::string fOutputRootFile = "/dev/null"; ///< Output file name (.root format) std::string fConfigYamlFile; ///< Configuration file name (.yaml format) std::string fSaveConfigYamlFile; ///< Save configuration file name (.yaml format) + bool fDumpSetup = false; ///< Dump the readout setup to yaml int32_t fMaxNumTs = INT32_MAX; ///< Maximum number of timeslices to process uint16_t fHttpServerPort = 0; ///< Port number for the HTTP server. If 0, server will not be activated. }; diff --git a/reco/app/cbmreco_fairrun/main.cxx b/reco/app/cbmreco_fairrun/main.cxx index 461e8b6d1c..bb47c0e4fe 100644 --- a/reco/app/cbmreco_fairrun/main.cxx +++ b/reco/app/cbmreco_fairrun/main.cxx @@ -15,7 +15,7 @@ int main(int argc, char* argv[]) } catch (std::exception const& e) { L_(fatal) << e.what(); - return EXIT_FAILURE; + throw; } L_(info) << "exiting"; diff --git a/reco/tasks/CbmReco.cxx b/reco/tasks/CbmReco.cxx index 3045c23c93..a08eb468b1 100644 --- a/reco/tasks/CbmReco.cxx +++ b/reco/tasks/CbmReco.cxx @@ -33,8 +33,10 @@ using std::string; // ----- Constructor from single source ----------------------------------- -CbmReco::CbmReco(string source, string outFile, string configFile, int32_t numTs, uint16_t port, cbm::Monitor* monitor) - : fSourceNames {source} +CbmReco::CbmReco(Config config, string source, string outFile, string configFile, int32_t numTs, uint16_t port, + cbm::Monitor* monitor) + : fConfig(config) + , fSourceNames {source} , fOutputFileName(outFile) , fConfigFileName(configFile) , fNumTs(numTs) @@ -46,9 +48,10 @@ CbmReco::CbmReco(string source, string outFile, string configFile, int32_t numTs // ----- Constructor from multiple sources -------------------------------- -CbmReco::CbmReco(std::vector<string> sources, string outFile, string configFile, int32_t numTs, uint16_t port, - cbm::Monitor* monitor) - : fSourceNames(sources) +CbmReco::CbmReco(Config config, std::vector<string> sources, string outFile, string configFile, int32_t numTs, + uint16_t port, cbm::Monitor* monitor) + : fConfig(config) + , fSourceNames(sources) , fOutputFileName(outFile) , fConfigFileName(configFile) , fNumTs(numTs) @@ -122,7 +125,9 @@ int32_t CbmReco::Run() // --- Unpacking if (!isRootInput) { - auto unpack = make_unique<CbmTaskUnpack>(); + CbmTaskUnpack::Config unpackConfig; + unpackConfig.dumpSetup = fConfig.dumpSetup; + auto unpack = make_unique<CbmTaskUnpack>(unpackConfig); unpack->SetMonitor(fMonitor); unpack->SetOutputBranchPersistent("DigiTimeslice.", false); run.AddTask(unpack.release()); diff --git a/reco/tasks/CbmReco.h b/reco/tasks/CbmReco.h index 77d11ab08e..54658a3256 100644 --- a/reco/tasks/CbmReco.h +++ b/reco/tasks/CbmReco.h @@ -44,6 +44,12 @@ namespace cbm class CbmReco { public: + // Configuration structure + // TODO: move more settings here + struct Config { + bool dumpSetup = false; + }; + /** @brief Default constructor **/ //CbmReco() {}; @@ -55,7 +61,7 @@ public: ** @param config Configuration ** @param port Port number for the http server. If 0, server will not be activated. **/ - CbmReco(std::string source, std::string outFile, std::string configFile, + CbmReco(Config config, std::string source, std::string outFile, std::string configFile, int32_t numTs = std::numeric_limits<int32_t>::max(), uint16_t port = 0, cbm::Monitor* monitor = nullptr); @@ -66,7 +72,7 @@ public: ** @param config Configuration ** @param port Port number for the http server **/ - CbmReco(std::vector<std::string> sources, std::string outFile, std::string configFile, + CbmReco(Config config, std::vector<std::string> sources, std::string outFile, std::string configFile, int32_t numTs = std::numeric_limits<int32_t>::max(), uint16_t port = 0, cbm::Monitor* monitor = nullptr); @@ -87,6 +93,7 @@ public: private: + Config fConfig = {}; ///< Configuration std::vector<std::string> fSourceNames = {}; ///< Sources (input files or stream) std::string fOutputFileName = ""; ///< Output file (ROOT) std::string fConfigFileName = ""; ///< Configuration file (YAML) diff --git a/reco/tasks/CbmTaskUnpack.cxx b/reco/tasks/CbmTaskUnpack.cxx index 3fab920d5e..aea57d1d8e 100644 --- a/reco/tasks/CbmTaskUnpack.cxx +++ b/reco/tasks/CbmTaskUnpack.cxx @@ -36,10 +36,13 @@ #include <sstream> #include <vector> +#include "config/Yaml.h" + using namespace std; +using namespace cbm::algo; // ----- Constructor ----------------------------------------------------- -CbmTaskUnpack::CbmTaskUnpack() : FairTask("Unpack") {} +CbmTaskUnpack::CbmTaskUnpack(Config config) : FairTask("Unpack"), fConfig(config) {} // --------------------------------------------------------------------------- @@ -154,6 +157,8 @@ InitStatus CbmTaskUnpack::Init() // ---- Initialize unpacker fUnpack.fTrdConfig = InitTrdReadoutConfig(); fUnpack.fTrd2dConfig = InitTrd2dReadoutConfig(); + if (fConfig.dumpSetup) { DumpUnpackSetup(); } + fUnpack.Init(); return kSUCCESS; @@ -292,4 +297,15 @@ cbm::algo::trd::ReadoutConfig CbmTaskUnpack::InitTrdReadoutConfig() return TrdConfig; } +void CbmTaskUnpack::DumpUnpackSetup() +{ + LOG(info) << "--- Dumping readout setup to yaml file ---"; + + auto yaml = config::Dump {}(fUnpack.fTrdConfig); + std::ofstream("TrdReadoutSetup.yaml") << yaml; + + yaml = config::Dump {}(fUnpack.fTrd2dConfig); + std::ofstream("Trd2dReadoutSetup.yaml") << yaml; +} + ClassImp(CbmTaskUnpack) diff --git a/reco/tasks/CbmTaskUnpack.h b/reco/tasks/CbmTaskUnpack.h index 9fe372bcf3..2c5c3c78b7 100644 --- a/reco/tasks/CbmTaskUnpack.h +++ b/reco/tasks/CbmTaskUnpack.h @@ -46,8 +46,12 @@ class CbmTaskUnpack : public FairTask { public: + struct Config { + bool dumpSetup = false; + }; + /** @brief Constructor **/ - CbmTaskUnpack(); + CbmTaskUnpack(Config config); /** @brief Copy constructor (disabled) **/ @@ -78,7 +82,6 @@ private: // methods /** @brief Task initialisation **/ virtual InitStatus Init(); - /** @brief Initialisation of address maps for Trd **/ cbm::algo::trd::ReadoutConfig InitTrdReadoutConfig(); @@ -86,7 +89,11 @@ private: // methods /** @brief Initialisation of address maps for Trd2d **/ cbm::algo::trd2d::ReadoutConfig InitTrd2dReadoutConfig(); + void DumpUnpackSetup(); + private: // members + Config fConfig = {}; ///< Configuration + CbmSourceTs* fSource = nullptr; cbm::Monitor* fMonitor = nullptr; std::string fHostname; -- GitLab