pxar
 All Classes Namespaces Functions Variables Typedefs Friends
api.h
1 
6 #ifndef PXAR_API_H
7 #define PXAR_API_H
8 
12 #include "pxardllexport.h"
13 
15 #if ((defined WIN32) && (defined __CINT__))
16 typedef int int32_t;
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;
21 #else
22 #include <stdint.h>
23 #endif
24 
25 
26 #include <string>
27 #include <vector>
28 #include <map>
29 #include "datatypes.h"
30 #include "exceptions.h"
31 
32 // PXAR Flags
33 
37 #define FLAG_FORCE_SERIAL 0x0001
38 
42 #define FLAG_CALS 0x0002
43 
47 #define FLAG_XTALK 0x0004
48 
51 #define FLAG_RISING_EDGE 0x0008
52 
58 #define FLAG_FORCE_MASKED 0x0010
59 
64 #define FLAG_DISABLE_DACCAL 0x0020
65 
69 #define FLAG_NOSORT 0x0040
70 
78 #define FLAG_CHECK_ORDER 0x0080
79 
83 #define FLAG_FORCE_UNMASKED 0x0100
84 
85 
90 #define CALL_MEMBER_FN(object,ptrToMember) ((object).*(ptrToMember))
91 
92 namespace pxar {
93 
96  class dut;
97 
100  class hal;
101 
102 
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);
111 
112 
113 
146  class DLLEXPORT pxarCore {
147 
148  public:
149 
162  pxarCore(std::string usbId = "*", std::string logLevel = "WARNING");
163 
169  ~pxarCore();
170 
181  std::string getVersion();
182 
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);
203 
211  void setTestboardPower(std::vector<std::pair<std::string,double> > power_settings);
212 
220  void setTestboardDelays(std::vector<std::pair<std::string,uint8_t> > sig_delays);
221 
233  void setPatternGenerator(std::vector<std::pair<std::string, uint8_t> > pg_setup);
234 
251  bool initDUT(uint8_t hubId,
252  std::string tbmtype,
253  std::vector<std::vector<std::pair<std::string,uint8_t> > > tbmDACs,
254  std::string roctype,
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);
258 
264  bool initDUT(uint8_t hubid,
265  std::string tbmtype,
266  std::vector<std::vector<std::pair<std::string,uint8_t> > > tbmDACs,
267  std::string roctype,
268  std::vector<std::vector<std::pair<std::string,uint8_t> > > rocDACs,
269  std::vector<std::vector<pixelConfig> > rocPixels);
270 
282  bool programDUT();
283 
284 
285  // DTB functions
286 
289  bool flashTB(std::string filename);
290 
294  double getTBia();
295 
299  double getTBva();
300 
304  double getTBid();
305 
309  double getTBvd();
310 
313  void HVoff();
314 
317  void HVon();
318 
321  void Pon();
322 
325  void Poff();
326 
334  bool SignalProbe(std::string probe, std::string name);
335 
336  std::vector<uint16_t> daqADC(std::string signal, uint8_t gain, uint16_t nSample, uint8_t source, uint8_t start);
337 
338  // TEST functions
339 
348  bool setDAC(std::string dacName, uint8_t dacValue, uint8_t rocI2C);
349 
355  bool setDAC(std::string dacName, uint8_t dacValue);
356 
359  uint8_t getDACRange(std::string dacName);
360 
371  bool setTbmReg(std::string regName, uint8_t regValue, uint8_t tbmid);
372 
382  bool setTbmReg(std::string regName, uint8_t regValue);
383 
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);
393 
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);
406 
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);
416 
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);
428 
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);
441 
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);
461 
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);
482 
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);
494 
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);
509 
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);
520 
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);
534 
543  std::vector<pixel> getPulseheightMap(uint16_t flags, uint16_t nTriggers);
544 
553  std::vector<pixel> getEfficiencyMap(uint16_t flags, uint16_t nTriggers);
554 
572  std::vector<pixel> getThresholdMap(std::string dacName, uint8_t dacStep, uint8_t dacMin, uint8_t dacMax, uint16_t flags, uint16_t nTriggers);
573 
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);
593 
604  std::vector<pixel> getThresholdMap(std::string dacName, uint16_t flags, uint16_t nTriggers);
605 
610  bool setExternalClock(bool enable);
611 
616  void setClockStretch(uint8_t src, uint16_t delay, uint16_t width);
617 
624  void setSignalMode(std::string signal, uint8_t mode);
625 
626 
627  // DAQ functions
628 
635  bool daqStart();
636  bool daqStart(const int bufsize, const bool init);
637 
644  bool daqStatus();
645 
650  bool daqStatus(uint8_t & perFull);
651 
659  Event daqGetEvent();
660 
665  rawEvent daqGetRawEvent();
666 
672  uint16_t daqTrigger(uint32_t nTrig = 1, uint16_t period = 0);
673 
679  uint16_t daqTriggerLoop(uint16_t period = 1000);
680 
684  void daqTriggerLoopHalt();
685 
688  bool daqStop();
689  bool daqStop(const bool init);
690 
696  std::vector<rawEvent> daqGetRawEventBuffer();
697 
702  std::vector<uint16_t> daqGetBuffer();
703 
711  std::vector<Event> daqGetEventBuffer();
712 
718  std::vector<std::vector<uint16_t> > daqGetReadback();
719 
724  statistics getStatistics();
725 
729 
734  bool status();
735 
738  uint16_t GetADC( uint8_t rpc_par1 ) ;
739 
740  private:
741 
744  hal * _hal;
745 
754  std::vector<Event*> expandLoop(HalMemFnPixelSerial pixelfn, HalMemFnPixelParallel multipixelfn, HalMemFnRocSerial rocfn, HalMemFnRocParallel multirocfn, std::vector<int32_t> param, uint16_t flags = 0);
755 
759  std::vector<Event*> condenseTriggers(std::vector<Event*> data, uint16_t nTriggers, bool efficiency);
760 
764  std::vector<pixel> repackMapData (std::vector<Event*> data, uint16_t nTriggers, uint16_t flags, bool efficiency);
765 
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);
770 
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);
774 
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);
778 
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);
783 
791  bool verifyRegister(std::string name, uint8_t &id, uint8_t &value, uint8_t type);
792 
795  uint8_t stringToDeviceCode(std::string name);
796 
802  void MaskAndTrimNIOS();
803 
813  void MaskAndTrim(bool trim);
814 
824  void MaskAndTrim(bool trim, std::vector<rocConfig>::iterator rocit);
825 
826  public:
827 
837  void SetCalibrateBits(bool enable);
838 
839  private:
840 
849  void verifyPatternGenerator(std::vector<std::pair<std::string,uint8_t> > &pg_setup);
850 
854  void checkTestboardPower(std::vector<std::pair<std::string,double> > power_settings);
855 
859  void checkTestboardDelays(std::vector<std::pair<std::string,uint8_t> > sig_delays);
860 
863  uint32_t getPatternGeneratorDelaySum(std::vector<std::pair<uint16_t,uint8_t> > &pg_setup);
864 
867  bool _daq_running;
868 
871  uint32_t _daq_buffersize;
872 
874  bool _daq_startstop_warning;
875 
876  }; // class pxarCore
877 
878 
879  class DLLEXPORT dut {
880 
884  friend class pxarCore;
885 
886  public:
887 
890  dut() : _initialized(false), _programmed(false), roc(), tbm(), sig_delays(),
891  va(0), vd(0), ia(0), id(0), pg_setup(), pg_sum(0) {}
892 
893  // GET functions to read information
894 
897  void info();
898 
901  size_t getNEnabledPixels(uint8_t rocid);
902 
905  size_t getNEnabledPixels();
906 
909  size_t getNMaskedPixels(uint8_t rocid);
910 
913  size_t getNMaskedPixels();
914 
917  size_t getNEnabledTbms();
918 
921  size_t getNTbms();
922 
925  std::string getTbmType();
926 
929  size_t getNEnabledRocs();
930 
933  size_t getNRocs();
934 
937  std::string getRocType();
938 
941  std::vector< pixelConfig > getEnabledPixels(size_t rocid);
942 
945  std::vector< pixelConfig > getEnabledPixels();
946 
949  std::vector< pixelConfig > getMaskedPixels(size_t rocid);
950 
953  std::vector< pixelConfig > getMaskedPixels();
954 
957  std::vector< rocConfig > getEnabledRocs();
958 
961  std::vector< uint8_t > getEnabledRocIDs();
962 
965  std::vector< uint8_t > getEnabledRocI2Caddr();
966 
969  std::vector< uint8_t > getRocI2Caddr();
970 
973  std::vector< tbmConfig > getEnabledTbms();
974 
977  bool getPixelEnabled(uint8_t column, uint8_t row);
978 
981  bool getAllPixelEnable();
982 
985  bool getModuleEnable();
986 
989  pixelConfig getPixelConfig(size_t rocid, uint8_t column, uint8_t row);
990 
993  uint8_t getDAC(size_t rocId, std::string dacName);
994 
997  std::vector<std::pair<std::string,uint8_t> > getDACs(size_t rocId);
998 
1001  std::vector< std::pair<std::string,uint8_t> > getTbmDACs(size_t tbmId);
1002 
1006  void printDACs(size_t rocId);
1007 
1012  void setROCEnable(size_t rocId, bool enable);
1013 
1016  void setTBMEnable(size_t tbmId, bool enable);
1017 
1020  void testPixel(uint8_t column, uint8_t row, bool enable);
1021 
1024  void testPixel(uint8_t column, uint8_t row, bool enable, uint8_t rocid);
1025 
1028  void maskPixel(uint8_t column, uint8_t row, bool mask);
1029 
1032  void maskPixel(uint8_t column, uint8_t row, bool mask, uint8_t rocid);
1033 
1036  void testAllPixels(bool enable);
1037 
1040  void testAllPixels(bool enable, uint8_t rocid);
1041 
1044  void maskAllPixels(bool mask, uint8_t rocid);
1045 
1048  void maskAllPixels(bool mask);
1049 
1052  bool updateTrimBits(std::vector<pixelConfig> trimming, uint8_t rocid);
1053 
1056  bool updateTrimBits(uint8_t column, uint8_t row, uint8_t trim, uint8_t rocid);
1057 
1060  bool updateTrimBits(pixelConfig trim, uint8_t rocid);
1061 
1064  bool status();
1065 
1066  private:
1067 
1071  bool _initialized;
1072 
1076  bool _programmed;
1077 
1081  std::vector< bool > getEnabledColumns(size_t roci2c);
1082 
1085  uint8_t hubId;
1086 
1089  std::vector< rocConfig > roc;
1090 
1093  std::vector< tbmConfig > tbm;
1094 
1097  std::map<uint8_t,uint8_t> sig_delays;
1098 
1101  double va, vd, ia, id;
1102 
1105  std::vector<std::pair<uint16_t,uint8_t> > pg_setup;
1106 
1110  uint32_t pg_sum;
1111 
1112  }; //class DUT
1113 
1114 } //namespace pxar
1115 
1116 #endif /* PXAR_API_H */
dut * _dut
Definition: api.h:728
dut()
Definition: api.h:890
Definition: api.h:879
std::vector< Event * >(hal::* HalMemFnRocParallel)(std::vector< uint8_t > rocids, std::vector< int32_t > parameter)
Definition: api.h:107