00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "H5DataTypes/TimepixConfigV3.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 TimepixConfigV3::TimepixConfigV3 ( const Pds::Timepix::ConfigV3& data )
00045 : readoutSpeed(data.readoutSpeed())
00046 , timepixMode(data.timepixMode())
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 , dacBias(data.dacBias())
00105 , flags(data.flags())
00106 , chipCount(data.chipCount())
00107 , driverVersion(data.driverVersion())
00108 , firmwareVersion(data.firmwareVersion())
00109 , pixelThreshSize(data.pixelThreshSize())
00110 , chip0ID(data.chip0ID())
00111 , chip1ID(data.chip1ID())
00112 , chip2ID(data.chip2ID())
00113 , chip3ID(data.chip3ID())
00114 {
00115 const ndarray<const uint8_t, 1>& pixelThresh = data.pixelThresh();
00116 std::copy(pixelThresh.begin(), pixelThresh.end(), this->pixelThresh);
00117
00118 const char* name = data.chip0Name();
00119 int len = strlen(name)+1;
00120 this->chip0Name = new char[len];
00121 std::copy(name, name+len, this->chip0Name);
00122
00123 name = data.chip1Name();
00124 len = strlen(name)+1;
00125 this->chip1Name = new char[len];
00126 std::copy(name, name+len, this->chip1Name);
00127
00128 name = data.chip2Name();
00129 len = strlen(name)+1;
00130 this->chip2Name = new char[len];
00131 std::copy(name, name+len, this->chip2Name);
00132
00133 name = data.chip3Name();
00134 len = strlen(name)+1;
00135 this->chip3Name = new char[len];
00136 std::copy(name, name+len, this->chip3Name);
00137 }
00138
00139 TimepixConfigV3::~TimepixConfigV3()
00140 {
00141 delete [] chip0Name;
00142 delete [] chip1Name;
00143 delete [] chip2Name;
00144 delete [] chip3Name;
00145 }
00146
00147
00148 hdf5pp::Type
00149 TimepixConfigV3::stored_type()
00150 {
00151 return native_type() ;
00152 }
00153
00154 hdf5pp::Type
00155 TimepixConfigV3::native_type()
00156 {
00157 hdf5pp::EnumType<uint8_t> speedEnum = hdf5pp::EnumType<uint8_t>::enumType() ;
00158 speedEnum.insert ( "ReadoutSpeed_Slow", Pds::Timepix::ConfigV3::ReadoutSpeed_Slow ) ;
00159 speedEnum.insert ( "ReadoutSpeed_Fast", Pds::Timepix::ConfigV3::ReadoutSpeed_Fast ) ;
00160
00161 hdf5pp::EnumType<uint8_t> timepixModeEnum = hdf5pp::EnumType<uint8_t>::enumType() ;
00162 timepixModeEnum.insert ( "TimepixMode_Counting", Pds::Timepix::ConfigV3::TimepixMode_Counting ) ;
00163 timepixModeEnum.insert ( "TimepixMode_TOT", Pds::Timepix::ConfigV3::TimepixMode_TOT ) ;
00164
00165 hdf5pp::CompoundType confType = hdf5pp::CompoundType::compoundType<TimepixConfigV3>() ;
00166 confType.insert("readoutSpeed", offsetof(TimepixConfigV3, readoutSpeed), speedEnum);
00167 confType.insert("timepixMode", offsetof(TimepixConfigV3, timepixMode), timepixModeEnum);
00168 confType.insert_native<int32_t>("timepixSpeed", offsetof(TimepixConfigV3, timepixSpeed));
00169 confType.insert_native<int32_t>("dac0Ikrum", offsetof(TimepixConfigV3, dac0Ikrum));
00170 confType.insert_native<int32_t>("dac0Disc", offsetof(TimepixConfigV3, dac0Disc));
00171 confType.insert_native<int32_t>("dac0Preamp", offsetof(TimepixConfigV3, dac0Preamp));
00172 confType.insert_native<int32_t>("dac0BufAnalogA", offsetof(TimepixConfigV3, dac0BufAnalogA));
00173 confType.insert_native<int32_t>("dac0BufAnalogB", offsetof(TimepixConfigV3, dac0BufAnalogB));
00174 confType.insert_native<int32_t>("dac0Hist", offsetof(TimepixConfigV3, dac0Hist));
00175 confType.insert_native<int32_t>("dac0ThlFine", offsetof(TimepixConfigV3, dac0ThlFine));
00176 confType.insert_native<int32_t>("dac0ThlCourse", offsetof(TimepixConfigV3, dac0ThlCourse));
00177 confType.insert_native<int32_t>("dac0Vcas", offsetof(TimepixConfigV3, dac0Vcas));
00178 confType.insert_native<int32_t>("dac0Fbk", offsetof(TimepixConfigV3, dac0Fbk));
00179 confType.insert_native<int32_t>("dac0Gnd", offsetof(TimepixConfigV3, dac0Gnd));
00180 confType.insert_native<int32_t>("dac0Ths", offsetof(TimepixConfigV3, dac0Ths));
00181 confType.insert_native<int32_t>("dac0BiasLvds", offsetof(TimepixConfigV3, dac0BiasLvds));
00182 confType.insert_native<int32_t>("dac0RefLvds", offsetof(TimepixConfigV3, dac0RefLvds));
00183 confType.insert_native<int32_t>("dac1Ikrum", offsetof(TimepixConfigV3, dac1Ikrum));
00184 confType.insert_native<int32_t>("dac1Disc", offsetof(TimepixConfigV3, dac1Disc));
00185 confType.insert_native<int32_t>("dac1Preamp", offsetof(TimepixConfigV3, dac1Preamp));
00186 confType.insert_native<int32_t>("dac1BufAnalogA", offsetof(TimepixConfigV3, dac1BufAnalogA));
00187 confType.insert_native<int32_t>("dac1BufAnalogB", offsetof(TimepixConfigV3, dac1BufAnalogB));
00188 confType.insert_native<int32_t>("dac1Hist", offsetof(TimepixConfigV3, dac1Hist));
00189 confType.insert_native<int32_t>("dac1ThlFine", offsetof(TimepixConfigV3, dac1ThlFine));
00190 confType.insert_native<int32_t>("dac1ThlCourse", offsetof(TimepixConfigV3, dac1ThlCourse));
00191 confType.insert_native<int32_t>("dac1Vcas", offsetof(TimepixConfigV3, dac1Vcas));
00192 confType.insert_native<int32_t>("dac1Fbk", offsetof(TimepixConfigV3, dac1Fbk));
00193 confType.insert_native<int32_t>("dac1Gnd", offsetof(TimepixConfigV3, dac1Gnd));
00194 confType.insert_native<int32_t>("dac1Ths", offsetof(TimepixConfigV3, dac1Ths));
00195 confType.insert_native<int32_t>("dac1BiasLvds", offsetof(TimepixConfigV3, dac1BiasLvds));
00196 confType.insert_native<int32_t>("dac1RefLvds", offsetof(TimepixConfigV3, dac1RefLvds));
00197 confType.insert_native<int32_t>("dac2Ikrum", offsetof(TimepixConfigV3, dac2Ikrum));
00198 confType.insert_native<int32_t>("dac2Disc", offsetof(TimepixConfigV3, dac2Disc));
00199 confType.insert_native<int32_t>("dac2Preamp", offsetof(TimepixConfigV3, dac2Preamp));
00200 confType.insert_native<int32_t>("dac2BufAnalogA", offsetof(TimepixConfigV3, dac2BufAnalogA));
00201 confType.insert_native<int32_t>("dac2BufAnalogB", offsetof(TimepixConfigV3, dac2BufAnalogB));
00202 confType.insert_native<int32_t>("dac2Hist", offsetof(TimepixConfigV3, dac2Hist));
00203 confType.insert_native<int32_t>("dac2ThlFine", offsetof(TimepixConfigV3, dac2ThlFine));
00204 confType.insert_native<int32_t>("dac2ThlCourse", offsetof(TimepixConfigV3, dac2ThlCourse));
00205 confType.insert_native<int32_t>("dac2Vcas", offsetof(TimepixConfigV3, dac2Vcas));
00206 confType.insert_native<int32_t>("dac2Fbk", offsetof(TimepixConfigV3, dac2Fbk));
00207 confType.insert_native<int32_t>("dac2Gnd", offsetof(TimepixConfigV3, dac2Gnd));
00208 confType.insert_native<int32_t>("dac2Ths", offsetof(TimepixConfigV3, dac2Ths));
00209 confType.insert_native<int32_t>("dac2BiasLvds", offsetof(TimepixConfigV3, dac2BiasLvds));
00210 confType.insert_native<int32_t>("dac2RefLvds", offsetof(TimepixConfigV3, dac2RefLvds));
00211 confType.insert_native<int32_t>("dac3Ikrum", offsetof(TimepixConfigV3, dac3Ikrum));
00212 confType.insert_native<int32_t>("dac3Disc", offsetof(TimepixConfigV3, dac3Disc));
00213 confType.insert_native<int32_t>("dac3Preamp", offsetof(TimepixConfigV3, dac3Preamp));
00214 confType.insert_native<int32_t>("dac3BufAnalogA", offsetof(TimepixConfigV3, dac3BufAnalogA));
00215 confType.insert_native<int32_t>("dac3BufAnalogB", offsetof(TimepixConfigV3, dac3BufAnalogB));
00216 confType.insert_native<int32_t>("dac3Hist", offsetof(TimepixConfigV3, dac3Hist));
00217 confType.insert_native<int32_t>("dac3ThlFine", offsetof(TimepixConfigV3, dac3ThlFine));
00218 confType.insert_native<int32_t>("dac3ThlCourse", offsetof(TimepixConfigV3, dac3ThlCourse));
00219 confType.insert_native<int32_t>("dac3Vcas", offsetof(TimepixConfigV3, dac3Vcas));
00220 confType.insert_native<int32_t>("dac3Fbk", offsetof(TimepixConfigV3, dac3Fbk));
00221 confType.insert_native<int32_t>("dac3Gnd", offsetof(TimepixConfigV3, dac3Gnd));
00222 confType.insert_native<int32_t>("dac3Ths", offsetof(TimepixConfigV3, dac3Ths));
00223 confType.insert_native<int32_t>("dac3BiasLvds", offsetof(TimepixConfigV3, dac3BiasLvds));
00224 confType.insert_native<int32_t>("dac3RefLvds", offsetof(TimepixConfigV3, dac3RefLvds));
00225 confType.insert_native<uint8_t>("dacBias", offsetof(TimepixConfigV3, dacBias));
00226 confType.insert_native<uint8_t>("flags", offsetof(TimepixConfigV3, flags));
00227 confType.insert_native<int32_t>("chipCount", offsetof(TimepixConfigV3, chipCount));
00228 confType.insert_native<int32_t>("driverVersion", offsetof(TimepixConfigV3, driverVersion));
00229 confType.insert_native<uint32_t>("firmwareVersion", offsetof(TimepixConfigV3, firmwareVersion));
00230 confType.insert_native<uint32_t>("pixelThreshSize", offsetof(TimepixConfigV3, pixelThreshSize));
00231 confType.insert_native<uint8_t>("pixelThresh", offsetof(TimepixConfigV3, pixelThresh), XtcType::PixelThreshMax);
00232 confType.insert_native<const char*>("chip0Name", offsetof(TimepixConfigV3, chip0Name));
00233 confType.insert_native<const char*>("chip1Name", offsetof(TimepixConfigV3, chip1Name));
00234 confType.insert_native<const char*>("chip2Name", offsetof(TimepixConfigV3, chip2Name));
00235 confType.insert_native<const char*>("chip3Name", offsetof(TimepixConfigV3, chip3Name));
00236 confType.insert_native<int32_t>("chip0ID", offsetof(TimepixConfigV3, chip0ID));
00237 confType.insert_native<int32_t>("chip1ID", offsetof(TimepixConfigV3, chip1ID));
00238 confType.insert_native<int32_t>("chip2ID", offsetof(TimepixConfigV3, chip2ID));
00239 confType.insert_native<int32_t>("chip3ID", offsetof(TimepixConfigV3, chip3ID));
00240
00241 return confType ;
00242 }
00243
00244 void
00245 TimepixConfigV3::store( const Pds::Timepix::ConfigV3& config, hdf5pp::Group grp )
00246 {
00247
00248 TimepixConfigV3 data ( config ) ;
00249 storeDataObject ( data, "config", grp ) ;
00250 }
00251
00252
00253 }