12 #include "pxardllexport.h"
15 #if ((defined WIN32) && (defined __CINT__))
17 typedef short int int16_t;
18 typedef unsigned int uint32_t;
19 typedef unsigned short int uint16_t;
20 typedef unsigned char uint8_t;
29 #include "datatypes.h"
30 #include "exceptions.h"
37 #define FLAG_FORCE_SERIAL 0x0001
42 #define FLAG_CALS 0x0002
47 #define FLAG_XTALK 0x0004
51 #define FLAG_RISING_EDGE 0x0008
58 #define FLAG_FORCE_MASKED 0x0010
64 #define FLAG_DISABLE_DACCAL 0x0020
69 #define FLAG_NOSORT 0x0040
78 #define FLAG_CHECK_ORDER 0x0080
83 #define FLAG_FORCE_UNMASKED 0x0100
90 #define CALL_MEMBER_FN(object,ptrToMember) ((object).*(ptrToMember))
107 typedef std::vector<Event*> (hal::*
HalMemFnRocParallel)(std::vector<uint8_t> rocids, std::vector<int32_t> parameter);
108 typedef std::vector<Event*> (hal::*HalMemFnPixelParallel)(std::vector<uint8_t> rocids, uint8_t column, uint8_t row, std::vector<int32_t> parameter);
109 typedef std::vector<Event*> (hal::*HalMemFnRocSerial)(uint8_t rocid, std::vector<int32_t> parameter);
110 typedef std::vector<Event*> (hal::*HalMemFnPixelSerial)(uint8_t rocid, uint8_t column, uint8_t row, std::vector<int32_t> parameter);
162 pxarCore(std::string usbId =
"*", std::string logLevel =
"WARNING");
181 std::string getVersion();
200 bool initTestboard(std::vector<std::pair<std::string,uint8_t> > sig_delays,
201 std::vector<std::pair<std::string,double> > power_settings,
202 std::vector<std::pair<std::string, uint8_t> > pg_setup);
211 void setTestboardPower(std::vector<std::pair<std::string,double> > power_settings);
220 void setTestboardDelays(std::vector<std::pair<std::string,uint8_t> > sig_delays);
233 void setPatternGenerator(std::vector<std::pair<std::string, uint8_t> > pg_setup);
251 bool initDUT(uint8_t hubId,
253 std::vector<std::vector<std::pair<std::string,uint8_t> > > tbmDACs,
255 std::vector<std::vector<std::pair<std::string,uint8_t> > > rocDACs,
256 std::vector<std::vector<pixelConfig> > rocPixels,
257 std::vector<uint8_t> rocI2Cs);
264 bool initDUT(uint8_t hubid,
266 std::vector<std::vector<std::pair<std::string,uint8_t> > > tbmDACs,
268 std::vector<std::vector<std::pair<std::string,uint8_t> > > rocDACs,
269 std::vector<std::vector<pixelConfig> > rocPixels);
289 bool flashTB(std::string filename);
334 bool SignalProbe(std::string probe, std::string name);
336 std::vector<uint16_t> daqADC(std::string signal, uint8_t gain, uint16_t nSample, uint8_t source, uint8_t start);
348 bool setDAC(std::string dacName, uint8_t dacValue, uint8_t rocI2C);
355 bool setDAC(std::string dacName, uint8_t dacValue);
359 uint8_t getDACRange(std::string dacName);
371 bool setTbmReg(std::string regName, uint8_t regValue, uint8_t tbmid);
382 bool setTbmReg(std::string regName, uint8_t regValue);
392 std::vector< std::pair<uint8_t, std::vector<pixel> > > getPulseheightVsDAC(std::string dacName, uint8_t dacMin, uint8_t dacMax, uint16_t flags, uint16_t nTriggers);
405 std::vector< std::pair<uint8_t, std::vector<pixel> > > getPulseheightVsDAC(std::string dacName, uint8_t dacStep, uint8_t dacMin, uint8_t dacMax, uint16_t flags, uint16_t nTrigger);
415 std::vector< std::pair<uint8_t, std::vector<pixel> > > getEfficiencyVsDAC(std::string dacName, uint8_t dacMin, uint8_t dacMax, uint16_t flags, uint16_t nTriggers);
427 std::vector< std::pair<uint8_t, std::vector<pixel> > > getEfficiencyVsDAC(std::string dacName, uint8_t dacStep, uint8_t dacMin, uint8_t dacMax, uint16_t flags, uint16_t nTriggers);
440 std::vector< std::pair<uint8_t, std::vector<pixel> > > getThresholdVsDAC(std::string dacName, std::string dac2name, uint8_t dac2min, uint8_t dac2max, uint16_t flags, uint16_t nTriggers);
460 std::vector< std::pair<uint8_t, std::vector<pixel> > > getThresholdVsDAC(std::string dac1name, uint8_t dac1step, uint8_t dac1min, uint8_t dac1max, std::string dac2name, uint8_t dac2step, uint8_t dac2min, uint8_t dac2max, uint16_t flags, uint16_t nTriggers);
481 std::vector< std::pair<uint8_t, std::vector<pixel> > > getThresholdVsDAC(std::string dac1name, uint8_t dac1step, uint8_t dac1min, uint8_t dac1max, std::string dac2name, uint8_t dac2step, uint8_t dac2min, uint8_t dac2max, uint8_t threshold, uint16_t flags, uint16_t nTriggers);
493 std::vector< std::pair<uint8_t, std::pair<uint8_t, std::vector<pixel> > > > getPulseheightVsDACDAC(std::string dac1name, uint8_t dac1min, uint8_t dac1max, std::string dac2name, uint8_t dac2min, uint8_t dac2max, uint16_t flags, uint16_t nTriggers);
508 std::vector< std::pair<uint8_t, std::pair<uint8_t, std::vector<pixel> > > > getPulseheightVsDACDAC(std::string dac1name, uint8_t dac1step, uint8_t dac1min, uint8_t dac1max, std::string dac2name, uint8_t dac2step, uint8_t dac2min, uint8_t dac2max, uint16_t flags, uint16_t nTriggers);
519 std::vector< std::pair<uint8_t, std::pair<uint8_t, std::vector<pixel> > > > getEfficiencyVsDACDAC(std::string dac1name, uint8_t dac1min, uint8_t dac1max, std::string dac2name, uint8_t dac2min, uint8_t dac2max, uint16_t flags, uint16_t nTriggers);
533 std::vector< std::pair<uint8_t, std::pair<uint8_t, std::vector<pixel> > > > getEfficiencyVsDACDAC(std::string dac1name, uint8_t dac1step, uint8_t dac1min, uint8_t dac1max, std::string dac2name, uint8_t dac2step, uint8_t dac2min, uint8_t dac2max, uint16_t flags, uint16_t nTriggers);
543 std::vector<pixel> getPulseheightMap(uint16_t flags, uint16_t nTriggers);
553 std::vector<pixel> getEfficiencyMap(uint16_t flags, uint16_t nTriggers);
572 std::vector<pixel> getThresholdMap(std::string dacName, uint8_t dacStep, uint8_t dacMin, uint8_t dacMax, uint16_t flags, uint16_t nTriggers);
592 std::vector<pixel> getThresholdMap(std::string dacName, uint8_t dacStep, uint8_t dacMin, uint8_t dacMax, uint8_t threshold, uint16_t flags, uint16_t nTriggers);
604 std::vector<pixel> getThresholdMap(std::string dacName, uint16_t flags, uint16_t nTriggers);
610 bool setExternalClock(
bool enable);
616 void setClockStretch(uint8_t src, uint16_t delay, uint16_t width);
624 void setSignalMode(std::string signal, uint8_t mode);
636 bool daqStart(
const int bufsize,
const bool init);
650 bool daqStatus(uint8_t & perFull);
672 uint16_t daqTrigger(uint32_t nTrig = 1, uint16_t period = 0);
679 uint16_t daqTriggerLoop(uint16_t period = 1000);
684 void daqTriggerLoopHalt();
689 bool daqStop(
const bool init);
696 std::vector<rawEvent> daqGetRawEventBuffer();
702 std::vector<uint16_t> daqGetBuffer();
711 std::vector<Event> daqGetEventBuffer();
718 std::vector<std::vector<uint16_t> > daqGetReadback();
738 uint16_t GetADC( uint8_t rpc_par1 ) ;
754 std::vector<Event*> expandLoop(HalMemFnPixelSerial pixelfn, HalMemFnPixelParallel multipixelfn, HalMemFnRocSerial rocfn,
HalMemFnRocParallel multirocfn, std::vector<int32_t> param, uint16_t flags = 0);
759 std::vector<Event*> condenseTriggers(std::vector<Event*> data, uint16_t nTriggers,
bool efficiency);
764 std::vector<pixel> repackMapData (std::vector<Event*> data, uint16_t nTriggers, uint16_t flags,
bool efficiency);
769 std::vector<pixel> repackThresholdMapData (std::vector<Event*> data, uint8_t dacStep, uint8_t dacMin, uint8_t dacMax, uint8_t thresholdlevel, uint16_t nTriggers, uint16_t flags);
773 std::vector< std::pair<uint8_t, std::vector<pixel> > > repackDacScanData (std::vector<Event*> data, uint8_t dacStep, uint8_t dacMin, uint8_t dacMax, uint16_t nTriggers, uint16_t flags,
bool efficiency);
777 std::vector<std::pair<uint8_t,std::vector<pixel> > > repackThresholdDacScanData (std::vector<Event*> data, uint8_t dac1step, uint8_t dac1min, uint8_t dac1max, uint8_t dac2step, uint8_t dac2min, uint8_t dac2max, uint8_t thresholdlevel, uint16_t nTriggers, uint16_t flags);
782 std::vector< std::pair<uint8_t, std::pair<uint8_t, std::vector<pixel> > > > repackDacDacScanData (std::vector<Event*> data, uint8_t dac1step, uint8_t dac1min, uint8_t dac1max, uint8_t dac2step, uint8_t dac2min, uint8_t dac2max, uint16_t nTriggers, uint16_t flags,
bool efficiency);
791 bool verifyRegister(std::string name, uint8_t &
id, uint8_t &value, uint8_t type);
795 uint8_t stringToDeviceCode(std::string name);
802 void MaskAndTrimNIOS();
813 void MaskAndTrim(
bool trim);
824 void MaskAndTrim(
bool trim, std::vector<rocConfig>::iterator rocit);
837 void SetCalibrateBits(
bool enable);
849 void verifyPatternGenerator(std::vector<std::pair<std::string,uint8_t> > &pg_setup);
854 void checkTestboardPower(std::vector<std::pair<std::string,double> > power_settings);
859 void checkTestboardDelays(std::vector<std::pair<std::string,uint8_t> > sig_delays);
863 uint32_t getPatternGeneratorDelaySum(std::vector<std::pair<uint16_t,uint8_t> > &pg_setup);
871 uint32_t _daq_buffersize;
874 bool _daq_startstop_warning;
890 dut() : _initialized(false), _programmed(false), roc(), tbm(), sig_delays(),
891 va(0), vd(0), ia(0), id(0), pg_setup(), pg_sum(0) {}
901 size_t getNEnabledPixels(uint8_t rocid);
905 size_t getNEnabledPixels();
909 size_t getNMaskedPixels(uint8_t rocid);
913 size_t getNMaskedPixels();
917 size_t getNEnabledTbms();
925 std::string getTbmType();
929 size_t getNEnabledRocs();
937 std::string getRocType();
941 std::vector< pixelConfig > getEnabledPixels(
size_t rocid);
945 std::vector< pixelConfig > getEnabledPixels();
949 std::vector< pixelConfig > getMaskedPixels(
size_t rocid);
953 std::vector< pixelConfig > getMaskedPixels();
957 std::vector< rocConfig > getEnabledRocs();
961 std::vector< uint8_t > getEnabledRocIDs();
965 std::vector< uint8_t > getEnabledRocI2Caddr();
969 std::vector< uint8_t > getRocI2Caddr();
973 std::vector< tbmConfig > getEnabledTbms();
977 bool getPixelEnabled(uint8_t column, uint8_t row);
981 bool getAllPixelEnable();
985 bool getModuleEnable();
989 pixelConfig getPixelConfig(
size_t rocid, uint8_t column, uint8_t row);
993 uint8_t getDAC(
size_t rocId, std::string dacName);
997 std::vector<std::pair<std::string,uint8_t> > getDACs(
size_t rocId);
1001 std::vector< std::pair<std::string,uint8_t> > getTbmDACs(
size_t tbmId);
1006 void printDACs(
size_t rocId);
1012 void setROCEnable(
size_t rocId,
bool enable);
1016 void setTBMEnable(
size_t tbmId,
bool enable);
1020 void testPixel(uint8_t column, uint8_t row,
bool enable);
1024 void testPixel(uint8_t column, uint8_t row,
bool enable, uint8_t rocid);
1028 void maskPixel(uint8_t column, uint8_t row,
bool mask);
1032 void maskPixel(uint8_t column, uint8_t row,
bool mask, uint8_t rocid);
1036 void testAllPixels(
bool enable);
1040 void testAllPixels(
bool enable, uint8_t rocid);
1044 void maskAllPixels(
bool mask, uint8_t rocid);
1048 void maskAllPixels(
bool mask);
1052 bool updateTrimBits(std::vector<pixelConfig> trimming, uint8_t rocid);
1056 bool updateTrimBits(uint8_t column, uint8_t row, uint8_t trim, uint8_t rocid);
1060 bool updateTrimBits(
pixelConfig trim, uint8_t rocid);
1081 std::vector< bool > getEnabledColumns(
size_t roci2c);
1089 std::vector< rocConfig > roc;
1093 std::vector< tbmConfig > tbm;
1097 std::map<uint8_t,uint8_t> sig_delays;
1101 double va, vd, ia, id;
1105 std::vector<std::pair<uint16_t,uint8_t> > pg_setup;
std::vector< Event * >(hal::* HalMemFnRocParallel)(std::vector< uint8_t > rocids, std::vector< int32_t > parameter)