00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00015
00016 #include "Plex/PlexPixelToRawChannel.h"
00017 #include "MessageService/MsgService.h"
00018 #include "DatabaseInterface/DbiOutRowStream.h"
00019 #include "DatabaseInterface/DbiResultSet.h"
00020 #include "DatabaseInterface/DbiValidityRec.h"
00021
00022 ClassImp(PlexPixelToRawChannel)
00023
00024
00025
00026
00027 CVSID("$Id: PlexPixelToRawChannel.cxx,v 1.14 2005/08/26 18:47:03 rhatcher Exp $ CVSID_DBIRESULTPTR ");
00028 Bool_t PlexPixelToRawChannel::fgDefensiveUnpkg = kFALSE;
00029
00030
00031
00032
00033 #include "DatabaseInterface/DbiResultPtr.tpl"
00034 template class DbiResultPtr<PlexPixelToRawChannel>;
00035
00036 #include "DatabaseInterface/DbiWriter.tpl"
00037 template class DbiWriter<PlexPixelToRawChannel>;
00038
00039
00040
00041
00042
00043
00044
00045 void PlexPixelToRawChannel::Fill(DbiResultSet& rs,
00046 const DbiValidityRec* vrec) {
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070 Detector::Detector_t det =
00071 (Detector::Detector_t)
00072 ((vrec) ? vrec->GetVldRange().GetDetectorMask() : 0);
00073
00074 char elecName = '?';
00075 char elecType = ElecType::kUnknown;
00076 char rackEastWest='?', rackLevel='?';
00077 int rackBay=0, muxboxInRack=0;
00078 int muxbox=0, tube, pixel;
00079 int crate=0, chadd=0;
00080 int varc, vmm, adcsel, vachip, vachan;
00081 int geoaddr, master, minder;
00082
00083 if (fgDefensiveUnpkg) {
00084
00085
00086
00087 Int_t numCol = rs.NumCols();
00088
00089 for (Int_t curCol = rs.HasRowCounter() ? 3 : 2; curCol <= numCol; ++curCol) {
00090 string colName = rs.CurColName();
00091 if ( colName == "AGGREGATENO" ) rs >> fAggregate;
00092 else if ( colName == "ELECTYPE" ) rs >> elecType;
00093 else if ( colName == "ELECNAME" ) rs >> elecName;
00094 else if ( colName == "CRATE" ) rs >> crate;
00095 else if ( colName == "CHADD" ) rs >> chadd;
00096 else if ( colName == "VARC" ) rs >> varc;
00097 else if ( colName == "VMM" ) rs >> vmm;
00098 else if ( colName == "VFB" ) rs >> adcsel;
00099 else if ( colName == "VAADCSEL" ) rs >> adcsel;
00100 else if ( colName == "VACHIP" ) rs >> vachip;
00101 else if ( colName == "VACHAN" ) rs >> vachan;
00102 else if ( colName == "GEOADDR" ) rs >> geoaddr;
00103 else if ( colName == "MASTER" ) rs >> master;
00104 else if ( colName == "MINDER" ) rs >> minder;
00105 else if ( colName == "MUXBOX" ) rs >> muxbox;
00106 else if ( colName == "RACKEASTWEST") rs >> rackEastWest;
00107 else if ( colName == "RACKLEVEL" ) rs >> rackLevel;
00108 else if ( colName == "RACKBAY" ) rs >> rackBay;
00109 else if ( colName == "MUXBOXINRACK") rs >> muxboxInRack;
00110 else if ( colName == "TUBE" ) rs >> tube;
00111 else if ( colName == "PIXEL" ) rs >> pixel;
00112 else {
00113 static int nmsg = 25;
00114 if (nmsg-- > 0) MSG("Plex",Msg::kWarning)
00115 << "Ignoring column " << rs.CurColNum()
00116 << " (of " << rs.NumCols() << ")"
00117 << " \""<< colName << "\"; not part of "
00118 << ClassName() << endl;
00119 rs.IncrementCurCol();
00120 }
00121 }
00122 }
00123 else {
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143 rs >> fAggregate
00144 >> elecName
00145 >> rackEastWest
00146 >> rackLevel
00147 >> rackBay
00148 >> muxboxInRack
00149 >> tube
00150 >> pixel
00151 >> crate
00152 >> varc
00153 >> vmm
00154 >> adcsel
00155 >> vachip
00156 >> vachan
00157 >> geoaddr
00158 >> master
00159 >> minder;
00160 }
00161
00162 const Int_t spot = 0;
00163
00164 ElecType::Elec_t elec = ElecType::CharToEnum(elecName);
00165 if (ElecType::kUnknown == elec) elec = (ElecType::Elec_t) elecType;
00166
00167 if (chadd) {
00168 fRawChannelId = RawChannelId(det,elec,crate,chadd);
00169 }
00170 else if (ElecType::kVA == elec) {
00171 fRawChannelId = RawChannelId(det,elec,crate,varc,vmm,adcsel,vachip,vachan);
00172
00173 }
00174 else if (ElecType::kQIE == elec) {
00175 fRawChannelId = RawChannelId(det,elec,crate,geoaddr,master,minder);
00176 } else {
00177 MSG("Plex",Msg::kWarning)
00178 << " bad electronics type \"" << elecName << "\"" << endl;
00179 }
00180
00181 fPlexPixelSpotId = PlexPixelSpotId(det,elec,rackEastWest,rackLevel,
00182 rackBay,muxboxInRack,tube,pixel,spot);
00183
00184 #ifdef AGGREGATE_TEST
00185 int numeric = fPlexPixelSpotId.GetNumericMuxBox();
00186 MSG("Plex",Msg::kInfo)
00187 << "PlexPixelToRawChannel "
00188 << " aggrno " << fAggregate
00189 << " 0x" << hex << setw(8) << fAggregate << dec
00190 << " numeric " << numeric
00191 << " 0x" << hex << setw(8) << numeric << dec
00192 << endl;
00193
00194
00195
00196
00197 #endif
00198
00199
00200
00201 }
00202
00203
00204 void PlexPixelToRawChannel::Store(DbiOutRowStream& ors,
00205 const DbiValidityRec* ) const {
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229 int elect = (int)fPlexPixelSpotId.GetElecType();
00230 char rackEastWest = fPlexPixelSpotId.GetEastWest();
00231 char rackLevel = fPlexPixelSpotId.GetRackLevel();
00232 int rackBay = fPlexPixelSpotId.GetRackBay();
00233 int muxInRack = fPlexPixelSpotId.GetInRack();
00234
00235 ors << fAggregate
00236 << elect
00237 << rackEastWest
00238 << rackLevel
00239 << rackBay
00240 << muxInRack
00241 << fPlexPixelSpotId.GetTube()
00242 << fPlexPixelSpotId.GetPixel()
00243 << fRawChannelId.GetCrate()
00244 << fRawChannelId.GetChAdd();
00245
00246 }
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278