00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "H5DataTypes/TimepixConfigV2.h"
00017
00018
00019
00020
00021 #include <algorithm>
00022 #include <string.h>
00023
00024
00025
00026
00027 #include "H5DataTypes/H5DataUtils.h"
00028 #include "hdf5pp/CompoundType.h"
00029 #include "hdf5pp/EnumType.h"
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 namespace H5DataTypes {
00040
00041
00042
00043
00044 TimepixConfigV2::TimepixConfigV2 ( const Pds::Timepix::ConfigV2& data )
00045 : readoutSpeed(data.readoutSpeed())
00046 , triggerMode(data.triggerMode())
00047 , timepixSpeed(data.timepixSpeed())
00048 , dac0Ikrum(data.dac0Ikrum())
00049 , dac0Disc(data.dac0Disc())
00050 , dac0Preamp(data.dac0Preamp())
00051 , dac0BufAnalogA(data.dac0BufAnalogA())
00052 , dac0BufAnalogB(data.dac0BufAnalogB())
00053 , dac0Hist(data.dac0Hist())
00054 , dac0ThlFine(data.dac0ThlFine())
00055 , dac0ThlCourse(data.dac0ThlCourse())
00056 , dac0Vcas(data.dac0Vcas())
00057 , dac0Fbk(data.dac0Fbk())
00058 , dac0Gnd(data.dac0Gnd())
00059 , dac0Ths(data.dac0Ths())
00060 , dac0BiasLvds(data.dac0BiasLvds())
00061 , dac0RefLvds(data.dac0RefLvds())
00062 , dac1Ikrum(data.dac1Ikrum())
00063 , dac1Disc(data.dac1Disc())
00064 , dac1Preamp(data.dac1Preamp())
00065 , dac1BufAnalogA(data.dac1BufAnalogA())
00066 , dac1BufAnalogB(data.dac1BufAnalogB())
00067 , dac1Hist(data.dac1Hist())
00068 , dac1ThlFine(data.dac1ThlFine())
00069 , dac1ThlCourse(data.dac1ThlCourse())
00070 , dac1Vcas(data.dac1Vcas())
00071 , dac1Fbk(data.dac1Fbk())
00072 , dac1Gnd(data.dac1Gnd())
00073 , dac1Ths(data.dac1Ths())
00074 , dac1BiasLvds(data.dac1BiasLvds())
00075 , dac1RefLvds(data.dac1RefLvds())
00076 , dac2Ikrum(data.dac2Ikrum())
00077 , dac2Disc(data.dac2Disc())
00078 , dac2Preamp(data.dac2Preamp())
00079 , dac2BufAnalogA(data.dac2BufAnalogA())
00080 , dac2BufAnalogB(data.dac2BufAnalogB())
00081 , dac2Hist(data.dac2Hist())
00082 , dac2ThlFine(data.dac2ThlFine())
00083 , dac2ThlCourse(data.dac2ThlCourse())
00084 , dac2Vcas(data.dac2Vcas())
00085 , dac2Fbk(data.dac2Fbk())
00086 , dac2Gnd(data.dac2Gnd())
00087 , dac2Ths(data.dac2Ths())
00088 , dac2BiasLvds(data.dac2BiasLvds())
00089 , dac2RefLvds(data.dac2RefLvds())
00090 , dac3Ikrum(data.dac3Ikrum())
00091 , dac3Disc(data.dac3Disc())
00092 , dac3Preamp(data.dac3Preamp())
00093 , dac3BufAnalogA(data.dac3BufAnalogA())
00094 , dac3BufAnalogB(data.dac3BufAnalogB())
00095 , dac3Hist(data.dac3Hist())
00096 , dac3ThlFine(data.dac3ThlFine())
00097 , dac3ThlCourse(data.dac3ThlCourse())
00098 , dac3Vcas(data.dac3Vcas())
00099 , dac3Fbk(data.dac3Fbk())
00100 , dac3Gnd(data.dac3Gnd())
00101 , dac3Ths(data.dac3Ths())
00102 , dac3BiasLvds(data.dac3BiasLvds())
00103 , dac3RefLvds(data.dac3RefLvds())
00104 , chipCount(data.chipCount())
00105 , driverVersion(data.driverVersion())
00106 , firmwareVersion(data.firmwareVersion())
00107 , pixelThreshSize(data.pixelThreshSize())
00108 , chip0ID(data.chip0ID())
00109 , chip1ID(data.chip1ID())
00110 , chip2ID(data.chip2ID())
00111 , chip3ID(data.chip3ID())
00112 {
00113 const ndarray<const uint8_t, 1>& pixelThresh = data.pixelThresh();
00114 std::copy(pixelThresh.begin(), pixelThresh.end(), this->pixelThresh);
00115
00116 const char* name = data.chip0Name();
00117 int len = strlen(name)+1;
00118 this->chip0Name = new char[len];
00119 std::copy(name, name+len, this->chip0Name);
00120
00121 name = data.chip1Name();
00122 len = strlen(name)+1;
00123 this->chip1Name = new char[len];
00124 std::copy(name, name+len, this->chip1Name);
00125
00126 name = data.chip2Name();
00127 len = strlen(name)+1;
00128 this->chip2Name = new char[len];
00129 std::copy(name, name+len, this->chip2Name);
00130
00131 name = data.chip3Name();
00132 len = strlen(name)+1;
00133 this->chip3Name = new char[len];
00134 std::copy(name, name+len, this->chip3Name);
00135 }
00136
00137 TimepixConfigV2::~TimepixConfigV2()
00138 {
00139 delete [] chip0Name;
00140 delete [] chip1Name;
00141 delete [] chip2Name;
00142 delete [] chip3Name;
00143 }
00144
00145
00146 hdf5pp::Type
00147 TimepixConfigV2::stored_type()
00148 {
00149 return native_type() ;
00150 }
00151
00152 hdf5pp::Type
00153 TimepixConfigV2::native_type()
00154 {
00155 hdf5pp::EnumType<uint8_t> speedEnum = hdf5pp::EnumType<uint8_t>::enumType() ;
00156 speedEnum.insert ( "ReadoutSpeed_Slow", Pds::Timepix::ConfigV2::ReadoutSpeed_Slow ) ;
00157 speedEnum.insert ( "ReadoutSpeed_Fast", Pds::Timepix::ConfigV2::ReadoutSpeed_Fast ) ;
00158
00159 hdf5pp::EnumType<uint8_t> trigEnum = hdf5pp::EnumType<uint8_t>::enumType() ;
00160 trigEnum.insert ( "TriggerMode_ExtPos", Pds::Timepix::ConfigV2::TriggerMode_ExtPos ) ;
00161 trigEnum.insert ( "TriggerMode_ExtNeg", Pds::Timepix::ConfigV2::TriggerMode_ExtNeg ) ;
00162 trigEnum.insert ( "TriggerMode_Soft", Pds::Timepix::ConfigV2::TriggerMode_Soft ) ;
00163
00164 hdf5pp::CompoundType confType = hdf5pp::CompoundType::compoundType<TimepixConfigV2>() ;
00165 confType.insert("readoutSpeed", offsetof(TimepixConfigV2, readoutSpeed), speedEnum);
00166 confType.insert("triggerMode", offsetof(TimepixConfigV2, triggerMode), trigEnum);
00167 confType.insert_native<int32_t>("timepixSpeed", offsetof(TimepixConfigV2, timepixSpeed));
00168 confType.insert_native<int32_t>("dac0Ikrum", offsetof(TimepixConfigV2, dac0Ikrum));
00169 confType.insert_native<int32_t>("dac0Disc", offsetof(TimepixConfigV2, dac0Disc));
00170 confType.insert_native<int32_t>("dac0Preamp", offsetof(TimepixConfigV2, dac0Preamp));
00171 confType.insert_native<int32_t>("dac0BufAnalogA", offsetof(TimepixConfigV2, dac0BufAnalogA));
00172 confType.insert_native<int32_t>("dac0BufAnalogB", offsetof(TimepixConfigV2, dac0BufAnalogB));
00173 confType.insert_native<int32_t>("dac0Hist", offsetof(TimepixConfigV2, dac0Hist));
00174 confType.insert_native<int32_t>("dac0ThlFine", offsetof(TimepixConfigV2, dac0ThlFine));
00175 confType.insert_native<int32_t>("dac0ThlCourse", offsetof(TimepixConfigV2, dac0ThlCourse));
00176 confType.insert_native<int32_t>("dac0Vcas", offsetof(TimepixConfigV2, dac0Vcas));
00177 confType.insert_native<int32_t>("dac0Fbk", offsetof(TimepixConfigV2, dac0Fbk));
00178 confType.insert_native<int32_t>("dac0Gnd", offsetof(TimepixConfigV2, dac0Gnd));
00179 confType.insert_native<int32_t>("dac0Ths", offsetof(TimepixConfigV2, dac0Ths));
00180 confType.insert_native<int32_t>("dac0BiasLvds", offsetof(TimepixConfigV2, dac0BiasLvds));
00181 confType.insert_native<int32_t>("dac0RefLvds", offsetof(TimepixConfigV2, dac0RefLvds));
00182 confType.insert_native<int32_t>("dac1Ikrum", offsetof(TimepixConfigV2, dac1Ikrum));
00183 confType.insert_native<int32_t>("dac1Disc", offsetof(TimepixConfigV2, dac1Disc));
00184 confType.insert_native<int32_t>("dac1Preamp", offsetof(TimepixConfigV2, dac1Preamp));
00185 confType.insert_native<int32_t>("dac1BufAnalogA", offsetof(TimepixConfigV2, dac1BufAnalogA));
00186 confType.insert_native<int32_t>("dac1BufAnalogB", offsetof(TimepixConfigV2, dac1BufAnalogB));
00187 confType.insert_native<int32_t>("dac1Hist", offsetof(TimepixConfigV2, dac1Hist));
00188 confType.insert_native<int32_t>("dac1ThlFine", offsetof(TimepixConfigV2, dac1ThlFine));
00189 confType.insert_native<int32_t>("dac1ThlCourse", offsetof(TimepixConfigV2, dac1ThlCourse));
00190 confType.insert_native<int32_t>("dac1Vcas", offsetof(TimepixConfigV2, dac1Vcas));
00191 confType.insert_native<int32_t>("dac1Fbk", offsetof(TimepixConfigV2, dac1Fbk));
00192 confType.insert_native<int32_t>("dac1Gnd", offsetof(TimepixConfigV2, dac1Gnd));
00193 confType.insert_native<int32_t>("dac1Ths", offsetof(TimepixConfigV2, dac1Ths));
00194 confType.insert_native<int32_t>("dac1BiasLvds", offsetof(TimepixConfigV2, dac1BiasLvds));
00195 confType.insert_native<int32_t>("dac1RefLvds", offsetof(TimepixConfigV2, dac1RefLvds));
00196 confType.insert_native<int32_t>("dac2Ikrum", offsetof(TimepixConfigV2, dac2Ikrum));
00197 confType.insert_native<int32_t>("dac2Disc", offsetof(TimepixConfigV2, dac2Disc));
00198 confType.insert_native<int32_t>("dac2Preamp", offsetof(TimepixConfigV2, dac2Preamp));
00199 confType.insert_native<int32_t>("dac2BufAnalogA", offsetof(TimepixConfigV2, dac2BufAnalogA));
00200 confType.insert_native<int32_t>("dac2BufAnalogB", offsetof(TimepixConfigV2, dac2BufAnalogB));
00201 confType.insert_native<int32_t>("dac2Hist", offsetof(TimepixConfigV2, dac2Hist));
00202 confType.insert_native<int32_t>("dac2ThlFine", offsetof(TimepixConfigV2, dac2ThlFine));
00203 confType.insert_native<int32_t>("dac2ThlCourse", offsetof(TimepixConfigV2, dac2ThlCourse));
00204 confType.insert_native<int32_t>("dac2Vcas", offsetof(TimepixConfigV2, dac2Vcas));
00205 confType.insert_native<int32_t>("dac2Fbk", offsetof(TimepixConfigV2, dac2Fbk));
00206 confType.insert_native<int32_t>("dac2Gnd", offsetof(TimepixConfigV2, dac2Gnd));
00207 confType.insert_native<int32_t>("dac2Ths", offsetof(TimepixConfigV2, dac2Ths));
00208 confType.insert_native<int32_t>("dac2BiasLvds", offsetof(TimepixConfigV2, dac2BiasLvds));
00209 confType.insert_native<int32_t>("dac2RefLvds", offsetof(TimepixConfigV2, dac2RefLvds));
00210 confType.insert_native<int32_t>("dac3Ikrum", offsetof(TimepixConfigV2, dac3Ikrum));
00211 confType.insert_native<int32_t>("dac3Disc", offsetof(TimepixConfigV2, dac3Disc));
00212 confType.insert_native<int32_t>("dac3Preamp", offsetof(TimepixConfigV2, dac3Preamp));
00213 confType.insert_native<int32_t>("dac3BufAnalogA", offsetof(TimepixConfigV2, dac3BufAnalogA));
00214 confType.insert_native<int32_t>("dac3BufAnalogB", offsetof(TimepixConfigV2, dac3BufAnalogB));
00215 confType.insert_native<int32_t>("dac3Hist", offsetof(TimepixConfigV2, dac3Hist));
00216 confType.insert_native<int32_t>("dac3ThlFine", offsetof(TimepixConfigV2, dac3ThlFine));
00217 confType.insert_native<int32_t>("dac3ThlCourse", offsetof(TimepixConfigV2, dac3ThlCourse));
00218 confType.insert_native<int32_t>("dac3Vcas", offsetof(TimepixConfigV2, dac3Vcas));
00219 confType.insert_native<int32_t>("dac3Fbk", offsetof(TimepixConfigV2, dac3Fbk));
00220 confType.insert_native<int32_t>("dac3Gnd", offsetof(TimepixConfigV2, dac3Gnd));
00221 confType.insert_native<int32_t>("dac3Ths", offsetof(TimepixConfigV2, dac3Ths));
00222 confType.insert_native<int32_t>("dac3BiasLvds", offsetof(TimepixConfigV2, dac3BiasLvds));
00223 confType.insert_native<int32_t>("dac3RefLvds", offsetof(TimepixConfigV2, dac3RefLvds));
00224 confType.insert_native<int32_t>("chipCount", offsetof(TimepixConfigV2, chipCount));
00225 confType.insert_native<int32_t>("driverVersion", offsetof(TimepixConfigV2, driverVersion));
00226 confType.insert_native<uint32_t>("firmwareVersion", offsetof(TimepixConfigV2, firmwareVersion));
00227 confType.insert_native<uint32_t>("pixelThreshSize", offsetof(TimepixConfigV2, pixelThreshSize));
00228 confType.insert_native<uint8_t>("pixelThresh", offsetof(TimepixConfigV2, pixelThresh), XtcType::PixelThreshMax);
00229 confType.insert_native<const char*>("chip0Name", offsetof(TimepixConfigV2, chip0Name));
00230 confType.insert_native<const char*>("chip1Name", offsetof(TimepixConfigV2, chip1Name));
00231 confType.insert_native<const char*>("chip2Name", offsetof(TimepixConfigV2, chip2Name));
00232 confType.insert_native<const char*>("chip3Name", offsetof(TimepixConfigV2, chip3Name));
00233 confType.insert_native<int32_t>("chip0ID", offsetof(TimepixConfigV2, chip0ID));
00234 confType.insert_native<int32_t>("chip1ID", offsetof(TimepixConfigV2, chip1ID));
00235 confType.insert_native<int32_t>("chip2ID", offsetof(TimepixConfigV2, chip2ID));
00236 confType.insert_native<int32_t>("chip3ID", offsetof(TimepixConfigV2, chip3ID));
00237
00238 return confType ;
00239 }
00240
00241 void
00242 TimepixConfigV2::store( const Pds::Timepix::ConfigV2& config, hdf5pp::Group grp )
00243 {
00244
00245 TimepixConfigV2 data ( config ) ;
00246 storeDataObject ( data, "config", grp ) ;
00247 }
00248
00249
00250 }