CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_4_5_patch3/src/CalibCalorimetry/HcalAlgos/src/HcalDbASCIIIO.cc

Go to the documentation of this file.
00001 
00002 //
00003 // F.Ratnikov (UMd), Oct 28, 2005
00004 // $Id: HcalDbASCIIIO.cc,v 1.62 2011/07/21 16:58:16 temple Exp $
00005 //
00006 #include <vector>
00007 #include <string>
00008 #include <cstdio>
00009 #include <sstream>
00010 
00011 #include "DataFormats/HcalDetId/interface/HcalGenericDetId.h"
00012 #include "DataFormats/HcalDetId/interface/HcalElectronicsId.h"
00013 #include "DataFormats/HcalDetId/interface/HcalDcsDetId.h"
00014 #include "CalibFormats/HcalObjects/interface/HcalText2DetIdConverter.h"
00015 
00016 #include "CondFormats/HcalObjects/interface/AllObjects.h"
00017 #include "CalibCalorimetry/HcalAlgos/interface/HcalDbASCIIIO.h"
00018 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00019 
00020 namespace {
00021   class DetIdLess {
00022   public:
00023     bool operator () (DetId fFirst, DetId fSecond) const {
00024       HcalGenericDetId first (fFirst);
00025       HcalGenericDetId second (fSecond);
00026       if (first.genericSubdet () != second.genericSubdet ()) return first.genericSubdet () < second.genericSubdet ();
00027       if (first.isHcalDetId ()) {
00028         HcalDetId f1 (first);
00029         HcalDetId s1 (second);
00030         return  f1.zside () != s1.zside () ? f1.zside () < s1.zside () :
00031           f1.iphi () != s1.iphi () ? f1.iphi () < s1.iphi () :
00032           f1.ietaAbs () != s1.ietaAbs () ? f1.ietaAbs () < s1.ietaAbs () :
00033           f1.depth () < s1.depth ();
00034       }
00035       else {
00036         return first.rawId() < second.rawId();
00037       }
00038     }
00039   };
00040   class HcalElectronicsIdLess {
00041   public:
00042     bool operator () (HcalElectronicsId first, HcalElectronicsId second) const {
00043       return
00044         first.readoutVMECrateId () != second.readoutVMECrateId () ? first.readoutVMECrateId () < second.readoutVMECrateId () :
00045         first.htrSlot () != second.htrSlot () ? first.htrSlot () < second.htrSlot () :
00046         first.htrTopBottom () != second.htrTopBottom () ? first.htrTopBottom () < second.htrTopBottom () :
00047         first.fiberIndex () != second.fiberIndex () ? first.fiberIndex () < second.fiberIndex () :
00048         first.fiberChanId () < second.fiberChanId ();
00049     }
00050   };
00051 }
00052 
00053 // ------------------------------ some little helpers ------------------------------
00054 
00055 std::vector <std::string> splitString (const std::string& fLine) {
00056   std::vector <std::string> result;
00057   int start = 0;
00058   bool empty = true;
00059   for (unsigned i = 0; i <= fLine.size (); i++) {
00060     if (fLine [i] == ' ' || i == fLine.size ()) {
00061       if (!empty) {
00062         std::string item (fLine, start, i-start);
00063         result.push_back (item);
00064         empty = true;
00065       }
00066       start = i+1;
00067     }
00068     else {
00069       if (empty) empty = false;
00070     }
00071   }
00072   return result;
00073 }
00074 
00075 std::vector <unsigned int> splitStringToIntByComma (const std::string& fLine) {
00076   std::vector <unsigned int> result;
00077   int start = 0;
00078   bool empty = true;
00079   for (unsigned i = 0; i <= fLine.size (); i++) {
00080     if (fLine [i] == ',' || i == fLine.size ()) {
00081       if (!empty) {
00082         std::string itemString (fLine, start, i-start);
00083         result.push_back (atoi (itemString.c_str()) );
00084         empty = true;
00085       }
00086       start = i+1;
00087     }
00088     else {
00089       if (empty) empty = false;
00090     }
00091   }
00092   return result;
00093 }
00094 
00095 std::vector <float> splitStringToFloatByComma (const std::string& fLine) {
00096   std::vector <float> result;
00097   int start = 0;
00098   bool empty = true;
00099   for (unsigned i = 0; i <= fLine.size (); i++) {
00100     if (fLine [i] == ',' || i == fLine.size ()) {
00101       if (!empty) {
00102         std::string itemString (fLine, start, i-start);
00103         result.push_back (atof (itemString.c_str()) );
00104         empty = true;
00105       }
00106       start = i+1;
00107     }
00108     else {
00109       if (empty) empty = false;
00110     }
00111   }
00112   return result;
00113 }
00114 
00115 std::vector <double> splitStringToDoubleByComma (const std::string& fLine) {
00116   std::vector <double> result;
00117   int start = 0;
00118   bool empty = true;
00119   for (unsigned i = 0; i <= fLine.size (); i++) {
00120     if (fLine [i] == ',' || i == fLine.size ()) {
00121       if (!empty) {
00122         std::string itemString (fLine, start, i-start);
00123         result.push_back (atof (itemString.c_str()) );
00124         empty = true;
00125       }
00126       start = i+1;
00127     }
00128     else {
00129       if (empty) empty = false;
00130     }
00131   }
00132   return result;
00133 }
00134 
00135 DetId HcalDbASCIIIO::getId (const std::vector <std::string> & items) {
00136   HcalText2DetIdConverter converter (items [3], items [0], items [1], items [2]);
00137   return converter.getId ();
00138 }
00139 
00140 void HcalDbASCIIIO::dumpId (std::ostream& fOutput, DetId id) {
00141   HcalText2DetIdConverter converter (id);
00142   char buffer [1024];
00143   sprintf (buffer, "  %15s %15s %15s %15s",
00144            converter.getField1 ().c_str (), converter.getField2 ().c_str (), converter.getField3 ().c_str (),converter.getFlavor ().c_str ());  
00145   fOutput << buffer;
00146 }
00147 
00148 // ------------------------------ start templates ------------------------------
00149 
00150 template<class T>
00151 bool from_string(T& t, const std::string& s, std::ios_base& (*f)(std::ios_base&)) {
00152   std::istringstream iss(s);
00153   return !(iss >> f >> t).fail();
00154 }
00155 
00156 template <class T,class S> 
00157 bool getHcalObject (std::istream& fInput, T* fObject, S* fCondObject) {
00158   if (!fObject) fObject = new T;
00159   char buffer [1024];
00160   while (fInput.getline(buffer, 1024)) {
00161     if (buffer [0] == '#') continue; //ignore comment
00162     std::vector <std::string> items = splitString (std::string (buffer));
00163     if (items.size()==0) continue; // blank line
00164     if (items.size () < 8) {
00165       edm::LogWarning("Format Error") << "Bad line: " << buffer << "\n line must contain 8 items: eta, phi, depth, subdet, 4x values" << std::endl;
00166       continue;
00167     }
00168     DetId id = HcalDbASCIIIO::getId (items);
00169     
00170 //    if (fObject->exists(id) )
00171 //      edm::LogWarning("Redefining Channel") << "line: " << buffer << "\n attempts to redefine data. Ignored" << std::endl;
00172 //    else
00173 //      {
00174         fCondObject = new S(id, atof (items [4].c_str()), atof (items [5].c_str()), 
00175                            atof (items [6].c_str()), atof (items [7].c_str()));
00176         fObject->addValues(*fCondObject);
00177         delete fCondObject;
00178         //      }
00179   }
00180 
00181   return true;
00182 }
00183 
00184 template <class T>
00185 bool dumpHcalObject (std::ostream& fOutput, const T& fObject) {
00186   char buffer [1024];
00187   sprintf (buffer, "# %15s %15s %15s %15s %8s %8s %8s %8s %10s\n", "eta", "phi", "dep", "det", "cap0", "cap1", "cap2", "cap3", "DetId");
00188   fOutput << buffer;
00189   std::vector<DetId> channels = fObject.getAllChannels ();
00190   std::sort (channels.begin(), channels.end(), DetIdLess ());
00191   for (std::vector<DetId>::iterator channel = channels.begin ();
00192        channel !=  channels.end ();
00193        channel++) {
00194     const float* values = fObject.getValues (*channel)->getValues ();
00195     if (values) {
00196       HcalDbASCIIIO::dumpId (fOutput, *channel);
00197       sprintf (buffer, " %8.5f %8.5f %8.5f %8.5f %10X\n",
00198                values[0], values[1], values[2], values[3], channel->rawId ());
00199       fOutput << buffer;
00200     }
00201   }
00202   return true;
00203 }
00204 
00205 template <class T,class S> 
00206 bool getHcalSingleFloatObject (std::istream& fInput, T* fObject, S* fCondObject) {
00207   if (!fObject) fObject = new T;
00208   char buffer [1024];
00209   while (fInput.getline(buffer, 1024)) {
00210     if (buffer [0] == '#') continue; //ignore comment
00211     std::vector <std::string> items = splitString (std::string (buffer));
00212     if (items.size()==0) continue; // blank line
00213     if (items.size () < 5) {
00214       edm::LogWarning("Format Error") << "Bad line: " << buffer << "\n line must contain 5 items: eta, phi, depth, subdet, value" << std::endl;
00215       continue;
00216     }
00217     DetId id = HcalDbASCIIIO::getId (items);
00218     
00219 //    if (fObject->exists(id) )
00220 //      edm::LogWarning("Redefining Channel") << "line: " << buffer << "\n attempts to redefine data. Ignored" << std::endl;
00221 //    else
00222 //      {
00223         fCondObject = new S(id, atof (items [4].c_str()) );
00224         fObject->addValues(*fCondObject);
00225         delete fCondObject;
00226         //      }
00227   }
00228   return true;
00229 }
00230 
00231 template <class T>
00232 bool dumpHcalSingleFloatObject (std::ostream& fOutput, const T& fObject) {
00233   char buffer [1024];
00234   sprintf (buffer, "# %15s %15s %15s %15s %8s %10s\n", "eta", "phi", "dep", "det", "value", "DetId");
00235   fOutput << buffer;
00236   std::vector<DetId> channels = fObject.getAllChannels ();
00237   std::sort (channels.begin(), channels.end(), DetIdLess ());
00238   for (std::vector<DetId>::iterator channel = channels.begin ();
00239        channel !=  channels.end ();
00240        channel++) {
00241     const float value = fObject.getValues (*channel)->getValue ();
00242     HcalDbASCIIIO::dumpId (fOutput, *channel);
00243     sprintf (buffer, " %8.5f %10X\n",
00244              value, channel->rawId ());
00245     fOutput << buffer;
00246   }
00247   return true;
00248 }
00249 
00250 template <class T,class S> 
00251 bool getHcalSingleIntObject (std::istream& fInput, T* fObject, S* fCondObject) {
00252   if (!fObject) fObject = new T;
00253   char buffer [1024];
00254   while (fInput.getline(buffer, 1024)) {
00255     if (buffer [0] == '#') continue; //ignore comment
00256     std::vector <std::string> items = splitString (std::string (buffer));
00257     if (items.size()==0) continue; // blank line
00258     if (items.size () < 5) {
00259       edm::LogWarning("Format Error") << "Bad line: " << buffer << "\n line must contain 5 items: eta, phi, depth, subdet, value" << std::endl;
00260       continue;
00261     }
00262     DetId id = HcalDbASCIIIO::getId (items);
00263     
00264 //    if (fObject->exists(id) )
00265 //      edm::LogWarning("Redefining Channel") << "line: " << buffer << "\n attempts to redefine data. Ignored" << std::endl;
00266 //    else
00267 //      {
00268         fCondObject = new S(id, atoi (items [4].c_str()) );
00269         fObject->addValues(*fCondObject);
00270         delete fCondObject;
00271         //      }
00272   }
00273   return true;
00274 }
00275 
00276 template <class T>
00277 bool dumpHcalSingleIntObject (std::ostream& fOutput, const T& fObject) {
00278   char buffer [1024];
00279   sprintf (buffer, "# %15s %15s %15s %15s %8s %10s\n", "eta", "phi", "dep", "det", "value", "DetId");
00280   fOutput << buffer;
00281   std::vector<DetId> channels = fObject.getAllChannels ();
00282   std::sort (channels.begin(), channels.end(), DetIdLess ());
00283   for (std::vector<DetId>::iterator channel = channels.begin ();
00284        channel !=  channels.end ();
00285        channel++) {
00286     const int value = fObject.getValues (*channel)->getValue ();
00287     HcalDbASCIIIO::dumpId (fOutput, *channel);
00288     sprintf (buffer, " %15d %10X\n",
00289              value, channel->rawId ());
00290     fOutput << buffer;
00291   }
00292   return true;
00293 }
00294 
00295 template <class T,class S>
00296 bool getHcalMatrixObject (std::istream& fInput, T* fObject, S* fCondObject) {
00297   if (!fObject) fObject = new T;
00298   char buffer [1024];
00299   while (fInput.getline(buffer, 1024)) {
00300     if (buffer [0] == '#') continue; //ignore comment
00301     std::vector <std::string> items = splitString (std::string (buffer));
00302     if (items.size()==0) continue; // blank line
00303     DetId firstid = HcalDbASCIIIO::getId (items);
00304     fCondObject = new S(firstid.rawId());
00305     for(int j = 0; j != 10; j++) fCondObject->setValue(atoi(items[4].c_str()), 0, j, atof(items[j+5].c_str()));
00306     for(int i = 1; i != 40; i++){
00307        fInput.getline(buffer, 1024);
00308        items = splitString (std::string (buffer));
00309        DetId id = HcalDbASCIIIO::getId (items);
00310        if(id.rawId() != firstid.rawId()) break;//throw cms::Exception("Wrong number of elements");
00311        for(int j = 0; j != 10; j++) fCondObject->setValue(atoi(items[4].c_str()), i%10, j, atof(items[j+5].c_str()));
00312      }
00313      fObject->addValues(*fCondObject);
00314      delete fCondObject;
00315   }
00316   return true;
00317 }
00318 
00319 template <class T>
00320 bool dumpHcalMatrixObject (std::ostream& fOutput, const T& fObject) {
00321   char buffer [1024];
00322   sprintf (buffer, "# %5s %5s %5s %5s %5s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %10s\n",
00323         "eta", "phi", "dep", "det", "capid","c0", "c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "DetId");
00324   fOutput << buffer;
00325   std::vector<DetId> channels = fObject.getAllChannels ();
00326   std::sort (channels.begin(), channels.end(), DetIdLess ());
00327   for (std::vector<DetId>::iterator channel = channels.begin ();
00328        channel !=  channels.end ();
00329        channel++) {
00330     float thisline[10];
00331     for(int m = 0; m != 4; m++){
00332        for(int i = 0; i != 10; i++){
00333           for(int j = 0; j != 10; j++){
00334 //          std::cout <<"test "<<(fObject.getValues(*channel))->getValue(0,0,0);
00335             thisline[j] = fObject.getValues(*channel)->getValue(m,i,j);
00336 //          thisline[j] = fObject.getValues(*channel)->getValue(1,1,1);
00337           }
00338           HcalDbASCIIIO::dumpId (fOutput, *channel);
00339           sprintf(buffer, " %5i %8.5f %8.5f %8.5f %8.5f  %8.5f %8.5f %8.5f %8.5f  %8.5f %8.5f %10X\n",
00340            m, thisline[0], thisline[1], thisline[2], thisline[3], thisline[4], thisline[5], thisline[6], thisline[7],
00341             thisline[8], thisline[9], channel->rawId());
00342           fOutput << buffer;
00343        }
00344     }
00345   }
00346 
00347   return true;
00348 }
00349 
00350 // ------------------------------ end templates ------------------------------
00351 
00352 bool HcalDbASCIIIO::getObject (std::istream& fInput, HcalGains* fObject) {return getHcalObject (fInput, fObject, new HcalGain);}
00353 bool HcalDbASCIIIO::dumpObject (std::ostream& fOutput, const HcalGains& fObject) {return dumpHcalObject (fOutput, fObject);}
00354 bool HcalDbASCIIIO::getObject (std::istream& fInput, HcalGainWidths* fObject) {return getHcalObject (fInput, fObject, new HcalGainWidth);}
00355 bool HcalDbASCIIIO::dumpObject (std::ostream& fOutput, const HcalGainWidths& fObject) {return dumpHcalObject (fOutput, fObject);}
00356 
00357 bool HcalDbASCIIIO::getObject (std::istream& fInput, HcalRespCorrs* fObject) {return getHcalSingleFloatObject (fInput, fObject, new HcalRespCorr); }
00358 bool HcalDbASCIIIO::dumpObject (std::ostream& fOutput, const HcalRespCorrs& fObject) {return dumpHcalSingleFloatObject (fOutput, fObject); }
00359 
00360 bool HcalDbASCIIIO::getObject (std::istream& fInput, HcalLUTCorrs* fObject) {return getHcalSingleFloatObject (fInput, fObject, new HcalLUTCorr); }
00361 bool HcalDbASCIIIO::dumpObject (std::ostream& fOutput, const HcalLUTCorrs& fObject) {return dumpHcalSingleFloatObject (fOutput, fObject); }
00362 
00363 bool HcalDbASCIIIO::getObject (std::istream& fInput, HcalPFCorrs* fObject) {return getHcalSingleFloatObject (fInput, fObject, new HcalPFCorr); }
00364 bool HcalDbASCIIIO::dumpObject (std::ostream& fOutput, const HcalPFCorrs& fObject) {return dumpHcalSingleFloatObject (fOutput, fObject); }
00365 
00366 bool HcalDbASCIIIO::getObject (std::istream& fInput, HcalTimeCorrs* fObject) {return getHcalSingleFloatObject (fInput, fObject, new HcalTimeCorr); }
00367 bool HcalDbASCIIIO::dumpObject (std::ostream& fOutput, const HcalTimeCorrs& fObject) {return dumpHcalSingleFloatObject (fOutput, fObject); }
00368 
00369 bool HcalDbASCIIIO::getObject (std::istream& fInput, HcalZSThresholds* fObject) {return getHcalSingleIntObject (fInput, fObject, new HcalZSThreshold); }
00370 bool HcalDbASCIIIO::dumpObject (std::ostream& fOutput, const HcalZSThresholds& fObject) {return dumpHcalSingleIntObject (fOutput, fObject); }
00371 
00372 bool HcalDbASCIIIO::getObject (std::istream& fInput, HcalValidationCorrs* fObject) {return getHcalSingleFloatObject (fInput, fObject, new HcalValidationCorr); }
00373 bool HcalDbASCIIIO::dumpObject (std::ostream& fOutput, const HcalValidationCorrs& fObject) {return dumpHcalSingleFloatObject (fOutput, fObject); }
00374 bool HcalDbASCIIIO::getObject (std::istream& fInput, HcalCholeskyMatrices* fObject) {return getHcalMatrixObject (fInput, fObject, new HcalCholeskyMatrix); }
00375 bool HcalDbASCIIIO::dumpObject (std::ostream& fOutput, const HcalCholeskyMatrices& fObject) {return dumpHcalMatrixObject (fOutput, fObject); }
00376 bool HcalDbASCIIIO::getObject (std::istream& fInput, HcalCovarianceMatrices* fObject) {return getHcalMatrixObject (fInput, fObject, new HcalCovarianceMatrix); }
00377 bool HcalDbASCIIIO::dumpObject (std::ostream& fOutput, const HcalCovarianceMatrices& fObject) {return dumpHcalMatrixObject (fOutput, fObject); }
00378 
00379 
00380 // ------------------------------ start specific implementations ------------------------------
00381 bool HcalDbASCIIIO::getObject (std::istream& fInput, HcalRecoParams* fObject)
00382 {
00383   if (!fObject) fObject = new HcalRecoParams();
00384   char buffer [1024];
00385   while (fInput.getline(buffer, 1024)) {
00386     if (buffer [0] == '#') continue; //ignore comment
00387     std::vector <std::string> items = splitString (std::string (buffer));
00388     if (items.size()==0) continue; // blank line
00389     if (items.size () < 6) {
00390       edm::LogWarning("Format Error") << "Bad line: " << buffer << "\n line must contain 6 items: eta, phi, depth, subdet, firstSample, samplesToAdd" << std::endl;
00391       continue;
00392     }
00393     DetId id = HcalDbASCIIIO::getId (items);
00394     
00395     HcalRecoParam* fCondObject = new HcalRecoParam(id, atoi (items [4].c_str()), atoi (items [5].c_str()) );
00396     fObject->addValues(*fCondObject);
00397     delete fCondObject;
00398   }
00399   return true;
00400 }
00401 bool HcalDbASCIIIO::dumpObject (std::ostream& fOutput, const HcalRecoParams& fObject)
00402 {
00403   char buffer [1024];
00404   sprintf (buffer, "# %15s %15s %15s %15s %18s %15s %10s\n", "eta", "phi", "dep", "det", "firstSample", "samplesToAdd", "DetId");
00405   fOutput << buffer;
00406   std::vector<DetId> channels = fObject.getAllChannels ();
00407   std::sort (channels.begin(), channels.end(), DetIdLess ());
00408   for (std::vector<DetId>::iterator channel = channels.begin ();
00409        channel !=  channels.end ();
00410        channel++) {
00411     HcalDbASCIIIO::dumpId (fOutput, *channel);
00412     sprintf (buffer, " %15d %15d %16X\n",
00413              fObject.getValues (*channel)->firstSample(), fObject.getValues (*channel)->samplesToAdd(), channel->rawId ());
00414     fOutput << buffer;
00415   }
00416   return true;
00417 }
00418 
00419 bool HcalDbASCIIIO::getObject (std::istream& fInput, HcalLongRecoParams* fObject)
00420 {
00421   if (!fObject) fObject = new HcalLongRecoParams();
00422   char buffer [1024];
00423   while (fInput.getline(buffer, 1024)) {
00424     if (buffer [0] == '#') continue; //ignore comment
00425     std::vector <std::string> items = splitString (std::string (buffer));
00426     if (items.size()==0) continue; // blank line
00427     if (items.size() < 5) {
00428       edm::LogWarning("Format Error") << "Bad line: " << buffer << "\n line must contain 6 items: eta, phi, depth, subdet, signalTSs, noiseTSs" << std::endl;
00429       continue;
00430     }
00431     if (items.size() > 7) {
00432       edm::LogWarning("Format Problem ?") << "Check line: " << buffer << "\n line must contain 6 items: eta, phi, depth, subdet, signalTSs, noiseTSs. "
00433                                           << "\n ! signalTS and noiseTS must be of format <ts1,ts2,ts3,...> withOUT spaces. Ignoring line for safety" << std::endl;
00434       continue;
00435     }
00436     DetId id = HcalDbASCIIIO::getId (items);
00437     
00438     std::vector<unsigned int> mySignalTS = splitStringToIntByComma(items[4]);
00439     std::vector<unsigned int> myNoiseTS = splitStringToIntByComma(items[5]);
00440 
00441     HcalLongRecoParam* fCondObject = new HcalLongRecoParam(id, mySignalTS, myNoiseTS );
00442     fObject->addValues(*fCondObject);
00443     delete fCondObject;
00444   }
00445   return true;
00446 }
00447 bool HcalDbASCIIIO::dumpObject (std::ostream& fOutput, const HcalLongRecoParams& fObject)
00448 {
00449   char buffer [1024];
00450   sprintf (buffer, "# %15s %15s %15s %15s %10s %10s %10s\n", "eta", "phi", "dep", "det", "signalTSs", "noiseTSs", "DetId");
00451   fOutput << buffer;
00452   std::vector<DetId> channels = fObject.getAllChannels ();
00453   std::sort (channels.begin(), channels.end(), DetIdLess ());
00454   for (std::vector<DetId>::iterator channel = channels.begin ();
00455        channel !=  channels.end ();
00456        channel++) {
00457     HcalGenericDetId fId(*channel);
00458     if (fId.isHcalZDCDetId())
00459       {
00460         std::vector<unsigned int> vSignalTS = fObject.getValues (*channel)->signalTS();
00461         std::vector<unsigned int> vNoiseTS = fObject.getValues (*channel)->noiseTS();
00462         HcalDbASCIIIO::dumpId (fOutput, *channel);
00463         sprintf (buffer, "    ");
00464         fOutput << buffer;
00465         for (unsigned int i=0; i<vSignalTS.size(); i++)
00466           {
00467             if (i>0) {sprintf (buffer, ",");   fOutput << buffer;}
00468             sprintf (buffer, "%u", vSignalTS.at(i));
00469             fOutput << buffer;
00470           }
00471         sprintf (buffer, "       ");
00472         fOutput << buffer;
00473         for (unsigned int i=0; i<vNoiseTS.size(); i++)
00474           {
00475             if (i>0) { sprintf (buffer, ",");   fOutput << buffer;}
00476             sprintf (buffer, "%u", vNoiseTS.at(i));
00477             fOutput << buffer;
00478           }
00479         sprintf (buffer, "     %10X\n", channel->rawId ());
00480         fOutput << buffer;
00481       }
00482   }
00483   return true;
00484 }
00485 
00486 bool HcalDbASCIIIO::getObject (std::istream& fInput, HcalMCParams* fObject)
00487 {
00488   if (!fObject) fObject = new HcalMCParams();
00489   char buffer [1024];
00490   while (fInput.getline(buffer, 1024)) {
00491     if (buffer [0] == '#') continue; //ignore comment
00492     std::vector <std::string> items = splitString (std::string (buffer));
00493     if (items.size()==0) continue; // blank line
00494     if (items.size () < 5) {
00495       edm::LogWarning("Format Error") << "Bad line: " << buffer << "\n line must contain 5 items: eta, phi, depth, subdet, signalShape" << std::endl;
00496       continue;
00497     }
00498     DetId id = HcalDbASCIIIO::getId (items);
00499     
00500     HcalMCParam* fCondObject = new HcalMCParam(id, atoi (items [4].c_str()) );
00501     fObject->addValues(*fCondObject);
00502     delete fCondObject;
00503   }
00504   return true;
00505 }
00506 bool HcalDbASCIIIO::dumpObject (std::ostream& fOutput, const HcalMCParams& fObject)
00507 {
00508   char buffer [1024];
00509   sprintf (buffer, "# %15s %15s %15s %15s %14s %10s\n", "eta", "phi", "dep", "det", "signalShape", "DetId");
00510   fOutput << buffer;
00511   std::vector<DetId> channels = fObject.getAllChannels ();
00512   std::sort (channels.begin(), channels.end(), DetIdLess ());
00513   for (std::vector<DetId>::iterator channel = channels.begin ();
00514        channel !=  channels.end ();
00515        channel++) {
00516     const int value = fObject.getValues (*channel)->signalShape();
00517     HcalDbASCIIIO::dumpId (fOutput, *channel);
00518     sprintf (buffer, " %10d %17X\n",
00519              value, channel->rawId ());
00520     fOutput << buffer;
00521   }
00522   return true;
00523 }
00524 
00525 bool HcalDbASCIIIO::getObject (std::istream& fInput, HcalPedestals* fObject) {
00526   if (!fObject) fObject = new HcalPedestals(false);
00527   char buffer [1024];
00528 
00529   while (fInput.getline(buffer, 1024)) {
00530     std::vector <std::string> items = splitString (std::string (buffer));
00531     if (items.size()==0) continue; // blank line
00532     else {
00533       if (items[0] == "#U")
00534         {
00535           if (items[1] == (std::string)"ADC") fObject->setUnitADC(true);
00536             else if (items[1] == (std::string)"fC") fObject->setUnitADC(false);
00537           else 
00538             {
00539               edm::LogWarning("Pedestal Unit Error") << "Unrecognized unit for pedestals. Assuming fC." << std::endl;
00540               fObject->setUnitADC(false);
00541             }
00542           break;
00543         }
00544       else
00545         {
00546           edm::LogWarning("Pedestal Unit Missing") << "The unit for the pedestals is missing in the txt file." << std::endl;
00547           return false;
00548         }
00549     }
00550   }
00551   while (fInput.getline(buffer, 1024)) {
00552     if (buffer [0] == '#') continue;
00553     std::vector <std::string> items = splitString (std::string (buffer));
00554     if (items.size()==0) continue; // blank line
00555     if (items.size () < 8) {
00556       edm::LogWarning("Format Error") << "Bad line: " << buffer << "\n line must contain 8 items: eta, phi, depth, subdet, 4x values" 
00557                                       << " or 12 items: eta, phi, depth, subdet, 4x values for mean, 4x values for width"
00558                                       << std::endl;
00559       continue;
00560     }
00561     DetId id = getId (items);
00562     
00563 //    if (fObject->exists(id) )
00564 //      edm::LogWarning("Redefining Channel") << "line: " << buffer << "\n attempts to redefine data. Ignored" << std::endl;
00565 //    else
00566 //      {
00567 
00568     if (items.size() < 12) // old format without widths
00569       {
00570         HcalPedestal* fCondObject = new HcalPedestal(id, atof (items [4].c_str()), atof (items [5].c_str()), 
00571                                                      atof (items [6].c_str()), atof (items [7].c_str()), 
00572                                                      0., 0., 0., 0. );
00573         fObject->addValues(*fCondObject);
00574         delete fCondObject;
00575       }
00576     else // new format with widths
00577       {
00578         HcalPedestal* fCondObject = new HcalPedestal(id, atof (items [4].c_str()), atof (items [5].c_str()), 
00579                                                      atof (items [6].c_str()), atof (items [7].c_str()), 
00580                                                      atof (items [8].c_str()), atof (items [9].c_str()),
00581                                                      atof (items [10].c_str()), atof (items [11].c_str()) );
00582         fObject->addValues(*fCondObject);
00583         delete fCondObject;
00584       }
00585 
00586         //      }
00587   }
00588   return true;
00589 }
00590 
00591 
00592 bool HcalDbASCIIIO::dumpObject (std::ostream& fOutput, const HcalPedestals& fObject) {
00593   char buffer [1024];
00594   if (fObject.isADC() ) sprintf (buffer, "#U ADC  << this is the unit \n");
00595   else  sprintf (buffer, "#U fC  << this is the unit \n");
00596   fOutput << buffer;
00597 
00598   sprintf (buffer, "# %15s %15s %15s %15s %8s %8s %8s %8s %8s %8s %8s %8s %10s\n", "eta", "phi", "dep", "det", "cap0", "cap1", "cap2", "cap3", "widthcap0", "widthcap1", "widthcap2", "widthcap3", "DetId");
00599   fOutput << buffer;
00600 
00601   std::vector<DetId> channels = fObject.getAllChannels ();
00602   std::sort (channels.begin(), channels.end(), DetIdLess ());
00603   for (std::vector<DetId>::iterator channel = channels.begin ();
00604        channel !=  channels.end ();
00605        channel++) {
00606     const float* values = fObject.getValues (*channel)->getValues ();
00607     if (values) {
00608       dumpId (fOutput, *channel);
00609       sprintf (buffer, " %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %10X\n",
00610                values[0], values[1], values[2], values[3], values[4], values[5], values[6], values[7], channel->rawId ());
00611       fOutput << buffer;
00612     }
00613   }
00614   return true;
00615 }
00616 
00617 
00618 // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
00619 bool HcalDbASCIIIO::getObject (std::istream& fInput, HcalChannelQuality* fObject) 
00620 {
00621   if (!fObject) fObject = new HcalChannelQuality;
00622   char buffer [1024];
00623   while (fInput.getline(buffer, 1024)) {
00624     if (buffer [0] == '#') continue; //ignore comment
00625     std::vector <std::string> items = splitString (std::string (buffer));
00626     if (items.size()==0) continue; // blank line
00627     if (items.size () < 6) {
00628       edm::LogWarning("Format Error") << "Bad line: " << buffer << "\n line must contain 6 items: eta, phi, depth, subdet, base - either (hex) or (dec), value" << std::endl;
00629       continue;
00630     }
00631     DetId id = getId (items);
00632     
00633 //    if (fObject->exists(id) )
00634 //      edm::LogWarning("Redefining Channel") << "line: " << buffer << "\n attempts to redefine data. Ignored" << std::endl;
00635 //    else
00636 //      {
00637     uint32_t mystatus;
00638     if (items[4] == "(hex)")
00639       sscanf(items[5].c_str(),"%X", &mystatus);
00640     else if (items[4] == "(dec)")
00641       sscanf(items[5].c_str(),"%u", &mystatus);
00642     else
00643       {
00644         edm::LogWarning("Format Error") << "Bad line: " << buffer << "\n value field must contain the base: one of (hex), (dec)" << std::endl;
00645         continue;
00646       }
00647 
00648     HcalChannelStatus* fCondObject = new HcalChannelStatus(id, mystatus); //atoi (items [4].c_str()) );
00649     fObject->addValues(*fCondObject);
00650     delete fCondObject;
00651         //      }
00652   }
00653   return true;
00654 }
00655 
00656 
00657 bool HcalDbASCIIIO::dumpObject (std::ostream& fOutput, const HcalChannelQuality& fObject) {
00658   char buffer [1024];
00659   sprintf (buffer, "# %15s %15s %15s %15s %15s %10s\n", "eta", "phi", "dep", "det", "(base) value", "DetId");
00660   fOutput << buffer;
00661   std::vector<DetId> channels = fObject.getAllChannels ();
00662   std::sort (channels.begin(), channels.end(), DetIdLess ());
00663   for (std::vector<DetId>::iterator channel = channels.begin ();
00664        channel !=  channels.end ();
00665        channel++) {
00666     const int value = fObject.getValues (*channel)->getValue ();
00667     dumpId (fOutput, *channel);
00668     sprintf (buffer, "%6s %15X %10X\n", "(hex)",
00669              value, channel->rawId ());
00670     fOutput << buffer;
00671   }
00672   return true;
00673 }
00674 
00675 
00676 // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
00677 bool HcalDbASCIIIO::getObject (std::istream& fInput, HcalL1TriggerObjects* fObject)
00678 {
00679   if (!fObject) fObject = new HcalL1TriggerObjects;
00680   char buffer [1024];
00681 
00682   while (fInput.getline(buffer, 1024)) {
00683     if (buffer [0] == '#') 
00684       {
00685         if (buffer [1] == 'T') // contains tag name
00686           {
00687             std::vector <std::string> items = splitString (std::string (buffer) );
00688             fObject->setTagString(items[1]);
00689             continue;
00690           }
00691         if (buffer [1] == 'A') // contains algo name
00692           {
00693             std::vector <std::string> items = splitString (std::string (buffer) );
00694             fObject->setAlgoString(items[1]);
00695             continue;
00696           }
00697         else continue; //ignore comment
00698       }
00699     std::vector <std::string> items = splitString (std::string (buffer));
00700     if (items.size()==0) continue; // blank line
00701     if (items.size () < 7) { 
00702       edm::LogWarning("Format Error") << "Bad line: " << buffer << "\n line must contain 7 items: eta, phi, depth, subdet, pedestal, resp.corr.gain, flag" << std::endl;
00703       continue;
00704     }
00705     DetId id = getId (items);
00706     
00707     HcalL1TriggerObject* fCondObject = new HcalL1TriggerObject(id, atof(items[4].c_str()), atof(items[5].c_str()), atoi(items[6].c_str()) );
00708     
00709     fObject->addValues(*fCondObject);
00710     delete fCondObject;
00711   }
00712   return true;
00713 }
00714 
00715 bool HcalDbASCIIIO::dumpObject (std::ostream& fOutput, const HcalL1TriggerObjects& fObject)
00716 {
00717   char buffer [1024];
00718   //first print tag and algo
00719   sprintf (buffer, "#T %s  << this is the tag name \n", fObject.getTagString().c_str() );
00720   fOutput << buffer;
00721   sprintf (buffer, "#A %s  << this is the algorithm name \n", fObject.getAlgoString().c_str() );
00722   fOutput << buffer;
00723 
00724   //then the values
00725   sprintf (buffer, "# %15s %15s %15s %15s %8s %13s %8s %10s\n", 
00726            "eta", "phi", "dep", "det", "ped", "respcorrgain", "flag",
00727            "DetId");
00728   fOutput << buffer;
00729   std::vector<DetId> channels = fObject.getAllChannels ();
00730   //  std::sort (channels.begin(), channels.end(), DetIdLess ());
00731   for (std::vector<DetId>::iterator channel = channels.begin ();
00732        channel !=  channels.end ();
00733        channel++) {
00734     const HcalL1TriggerObject* item = fObject.getValues (*channel);
00735     if (item) {
00736       dumpId (fOutput, *channel);
00737       sprintf (buffer, " %10.7f %10.7f %12d %10X\n",
00738                item->getPedestal(), item->getRespGain(), item->getFlag(), channel->rawId ());
00739       fOutput << buffer;
00740     }
00741   }
00742   return true;
00743 
00744 }
00745 
00746 
00747 // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
00748 bool HcalDbASCIIIO::getObject (std::istream& fInput, HcalPedestalWidths* fObject) {
00749   if (!fObject) fObject = new HcalPedestalWidths(false);
00750   char buffer [1024];
00751   int linecounter = 0;
00752 
00753   while (fInput.getline(buffer, 1024)) {
00754     linecounter++;
00755     std::vector <std::string> items = splitString (std::string (buffer));
00756     if (items.size()==0) continue; // blank line
00757     else {
00758       if (items[0] == (std::string)"#U")
00759         {
00760           if (items[1] == (std::string)"ADC") fObject->setUnitADC(true); 
00761           else if (items[1] == (std::string)"fC") fObject->setUnitADC(false);
00762           else 
00763             {
00764               edm::LogWarning("Pedestal Width Unit Error") << "Unrecognized unit for pedestal widths. Assuming fC." << std::endl;
00765               fObject->setUnitADC(false);
00766             }
00767           break;
00768         }
00769       else
00770         {
00771           edm::LogWarning("Pedestal Width Unit Missing") << "The unit for the pedestal widths is missing in the txt file." << std::endl;
00772           return false;
00773         }
00774     }
00775   }
00776 
00777   while (fInput.getline(buffer, 1024)) {
00778     linecounter++;
00779     if (buffer [0] == '#') continue; //ignore comment
00780     std::vector <std::string> items = splitString (std::string (buffer));
00781     if (items.size()==0) continue; // blank line
00782     if (items.size () < 14) {
00783       edm::LogWarning("Format Error") << "Bad line: " << buffer << "\n line number: " << linecounter << "\n line must contain 14 items: eta, phi, depth, subdet, 10x correlations" 
00784                                       << " or 20 items: eta, phi, depth, subdet, 16x correlations" 
00785                                       << std::endl;
00786       continue;
00787     }
00788     DetId id = getId (items);
00789 
00790 //    if (fObject->exists(id) )
00791 //      edm::LogWarning("Redefining Channel") << "line: " << buffer << "\n attempts to redefine data. Ignored" << std::endl;
00792 //    else
00793 //      {
00794 
00795     if (items.size() < 20) //old format
00796       {
00797         HcalPedestalWidth values(id);
00798         values.setSigma (0, 0, atof (items [4].c_str()));
00799         values.setSigma (1, 0, atof (items [5].c_str()));
00800         values.setSigma (1, 1, atof (items [6].c_str()));
00801         values.setSigma (2, 0, atof (items [7].c_str()));
00802         values.setSigma (2, 1, atof (items [8].c_str()));
00803         values.setSigma (2, 2, atof (items [9].c_str()));
00804         values.setSigma (3, 0, atof (items [10].c_str()));
00805         values.setSigma (3, 1, atof (items [11].c_str()));
00806         values.setSigma (3, 2, atof (items [12].c_str()));
00807         values.setSigma (3, 3, atof (items [13].c_str()));
00808         values.setSigma (0, 1, 0.);
00809         values.setSigma (0, 2, 0.);
00810         values.setSigma (0, 3, 0.);
00811         values.setSigma (1, 2, 0.);
00812         values.setSigma (1, 3, 0.);
00813         values.setSigma (2, 3, 0.);
00814         fObject->addValues(values);     
00815       }
00816     else // new format
00817       {
00818         HcalPedestalWidth values(id);
00819         values.setSigma (0, 0, atof (items [4].c_str()) );
00820         values.setSigma (0, 1, atof (items [5].c_str()) );
00821         values.setSigma (0, 2, atof (items [6].c_str()) );
00822         values.setSigma (0, 3, atof (items [7].c_str()) );
00823         values.setSigma (1, 0, atof (items [8].c_str()) );
00824         values.setSigma (1, 1, atof (items [9].c_str()) );
00825         values.setSigma (1, 2, atof (items [10].c_str()) );
00826         values.setSigma (1, 3, atof (items [11].c_str()) );
00827         values.setSigma (2, 0, atof (items [12].c_str()) );
00828         values.setSigma (2, 1, atof (items [13].c_str()) );
00829         values.setSigma (2, 2, atof (items [14].c_str()) );
00830         values.setSigma (2, 3, atof (items [15].c_str()) );
00831         values.setSigma (3, 0, atof (items [16].c_str()) );
00832         values.setSigma (3, 1, atof (items [17].c_str()) );
00833         values.setSigma (3, 2, atof (items [18].c_str()) );
00834         values.setSigma (3, 3, atof (items [19].c_str()) );
00835         fObject->addValues(values);     
00836       }
00837 
00838         //      }
00839   }
00840   return true;
00841 }
00842 
00843 bool HcalDbASCIIIO::dumpObject (std::ostream& fOutput, const HcalPedestalWidths& fObject) {
00844   char buffer [1024];
00845   if (fObject.isADC() ) sprintf (buffer, "#U ADC  << this is the unit \n");
00846   else  sprintf (buffer, "#U fC  << this is the unit \n");
00847   fOutput << buffer;
00848 
00849   sprintf (buffer, "# %15s %15s %15s %15s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %10s\n", 
00850            "eta", "phi", "dep", "det", 
00851            "cov_0_0", "cov_0_1", "cov_0_2", "cov_0_3", "cov_1_0", "cov_1_1", "cov_1_2", "cov_1_3", "cov_2_0", "cov_2_1", "cov_2_2", "cov_2_3", "cov_3_0", "cov_3_1", "cov_3_2", "cov_3_3", 
00852            "DetId");
00853   fOutput << buffer;
00854   std::vector<DetId> channels = fObject.getAllChannels ();
00855   std::sort (channels.begin(), channels.end(), DetIdLess ());
00856   for (std::vector<DetId>::iterator channel = channels.begin ();
00857        channel !=  channels.end ();
00858        channel++) {
00859     const HcalPedestalWidth* item = fObject.getValues (*channel);
00860     if (item) {
00861       dumpId (fOutput, *channel);
00862       sprintf (buffer, " %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %10X\n",
00863                item->getSigma (0,0), item->getSigma (0,1), item->getSigma (0,2), item->getSigma (0,3), 
00864                item->getSigma (1,0), item->getSigma (1,1), item->getSigma (1,2), item->getSigma (1,3),
00865                item->getSigma (2,0), item->getSigma (2,1), item->getSigma (2,2), item->getSigma (2,3),
00866                item->getSigma (3,0), item->getSigma (3,1), item->getSigma (3,2), item->getSigma (3,3), channel->rawId ());
00867       fOutput << buffer;
00868     }
00869   }
00870   return true;
00871 }
00872 
00873 
00874 // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
00875 bool HcalDbASCIIIO::getObject (std::istream& fInput, HcalQIEData* fObject) {
00876   char buffer [1024];
00877   while (fInput.getline(buffer, 1024)) {
00878     if (buffer [0] == '#') continue; //ignore comment
00879     std::vector <std::string> items = splitString (std::string (buffer));
00880     if (items.size()<1) continue;
00881     if (items [0] == "SHAPE") { // basic shape
00882       if (items.size () < 33) {
00883         edm::LogWarning("Format Error") << "Bad line: " << buffer << "\n line must contain 33 items: SHAPE  32 x low QIE edges for first 32 bins" << std::endl;
00884         continue;
00885       }
00886       float lowEdges [32];
00887       int i = 32;
00888       while (--i >= 0) lowEdges [i] = atof (items [i+1].c_str ());
00889       //      fObject->setShape (lowEdges);
00890     }
00891     else { // QIE parameters
00892       if (items.size () < 36) {
00893         edm::LogWarning("Format Error") << "Bad line: " << buffer << "\n line must contain 36 items: eta, phi, depth, subdet, 4 capId x 4 Ranges x offsets, 4 capId x 4 Ranges x slopes" << std::endl;
00894         continue;
00895       }
00896       DetId id = getId (items);
00897       fObject->sort ();
00898       //      try {
00899       //      fObject->getCoder (id);
00900       //      edm::LogWarning("Redefining Channel") << "line: " << buffer << "\n attempts to redefine data. Ignored" << std::endl;
00901         //      }
00902 //      catch (cms::Exception& e) {
00903         HcalQIECoder coder (id.rawId ());
00904         int index = 4;
00905         for (unsigned capid = 0; capid < 4; capid++) {
00906           for (unsigned range = 0; range < 4; range++) {
00907             coder.setOffset (capid, range, atof (items [index++].c_str ()));
00908           }
00909         }
00910         for (unsigned capid = 0; capid < 4; capid++) {
00911           for (unsigned range = 0; range < 4; range++) {
00912             coder.setSlope (capid, range, atof (items [index++].c_str ()));
00913           }
00914         }
00915         fObject->addCoder (coder);
00916 //      }
00917     }
00918   }
00919   fObject->sort ();
00920   return true;
00921 }
00922 
00923 bool HcalDbASCIIIO::dumpObject (std::ostream& fOutput, const HcalQIEData& fObject) {
00924   char buffer [1024];
00925   fOutput << "# QIE basic shape: SHAPE 32 x low edge values for first 32 channels" << std::endl;
00926   sprintf (buffer, "SHAPE ");
00927   fOutput << buffer;
00928   for (unsigned bin = 0; bin < 32; bin++) {
00929     sprintf (buffer, " %8.5f", fObject.getShape ().lowEdge (bin));
00930     fOutput << buffer;
00931   }
00932   fOutput << std::endl;
00933 
00934   fOutput << "# QIE data" << std::endl;
00935   sprintf (buffer, "# %15s %15s %15s %15s %36s %36s %36s %36s %36s %36s %36s %36s\n", 
00936            "eta", "phi", "dep", "det", 
00937            "4 x offsets cap0", "4 x offsets cap1", "4 x offsets cap2", "4 x offsets cap3",
00938            "4 x slopes cap0", "4 x slopes cap1", "4 x slopes cap2", "4 x slopes cap3");
00939   fOutput << buffer;
00940   std::vector<DetId> channels = fObject.getAllChannels ();
00941   std::sort (channels.begin(), channels.end(), DetIdLess ());
00942   for (std::vector<DetId>::iterator channel = channels.begin ();
00943        channel !=  channels.end ();
00944        channel++) {
00945     const HcalQIECoder* coder = fObject.getCoder (*channel);
00946     dumpId (fOutput, *channel);
00947     for (unsigned capid = 0; capid < 4; capid++) {
00948       for (unsigned range = 0; range < 4; range++) {
00949         sprintf (buffer, " %8.5f", coder->offset (capid, range));
00950         fOutput << buffer;
00951       }
00952     }
00953     for (unsigned capid = 0; capid < 4; capid++) {
00954       for (unsigned range = 0; range < 4; range++) {
00955         sprintf (buffer, " %8.5f", coder->slope (capid, range));
00956         fOutput << buffer;
00957       }
00958     }
00959     fOutput << std::endl;
00960   }
00961   return true;
00962 }
00963 
00964 // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
00965 bool HcalDbASCIIIO::getObject (std::istream& fInput, HcalCalibrationQIEData* fObject) {
00966   char buffer [1024];
00967   while (fInput.getline(buffer, 1024)) {
00968     if (buffer [0] == '#') continue; //ignore comment
00969     std::vector <std::string> items = splitString (std::string (buffer));
00970     if (items.size () < 36) {
00971       edm::LogWarning("Format Error") << "Bad line: " << buffer << "\n line must contain 36 items: eta, phi, depth, subdet, 32 bin values" << std::endl;
00972       continue;
00973     }
00974     DetId id = getId (items);
00975     fObject->sort ();
00976     //    try {
00977     //    fObject->getCoder (id);
00978     //    edm::LogWarning("Redefining Channel") << "line: " << buffer << "\n attempts to redefine data. Ignored" << std::endl;
00979       //    }
00980 //    catch (cms::Exception& e) {
00981       HcalCalibrationQIECoder coder (id.rawId ());
00982       int index = 4;
00983       float values [32];
00984       for (unsigned bin = 0; bin < 32; bin++) {
00985         values[bin] = atof (items [index++].c_str ());
00986       }
00987       coder.setMinCharges (values);
00988       fObject->addCoder (coder);
00989 //    }
00990   }
00991   fObject->sort ();
00992   return true;
00993 }
00994 
00995 bool HcalDbASCIIIO::dumpObject (std::ostream& fOutput, const HcalCalibrationQIEData& fObject) {
00996   char buffer [1024];
00997   fOutput << "# QIE data in calibration mode" << std::endl;
00998   sprintf (buffer, "# %15s %15s %15s %15s %288s\n", 
00999            "eta", "phi", "dep", "det", "32 x charges");
01000   fOutput << buffer;
01001   std::vector<DetId> channels = fObject.getAllChannels ();
01002   std::sort (channels.begin(), channels.end(), DetIdLess ());
01003   for (std::vector<DetId>::iterator channel = channels.begin ();
01004        channel !=  channels.end ();
01005        channel++) {
01006     const HcalCalibrationQIECoder* coder = fObject.getCoder (*channel);
01007     if (coder) {
01008       dumpId (fOutput, *channel);
01009       const float* lowEdge = coder->minCharges ();
01010       for (unsigned bin = 0; bin < 32; bin++) {
01011         sprintf (buffer, " %8.5f", lowEdge [bin]);
01012         fOutput << buffer;
01013       }
01014       fOutput << std::endl;
01015     }
01016   }
01017   return true;
01018 }
01019 
01020 
01021 // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
01022 bool HcalDbASCIIIO::getObject (std::istream& fInput, HcalElectronicsMap* fObject) {
01023   char buffer [1024];
01024   while (fInput.getline(buffer, 1024)) {
01025     if (buffer [0] == '#') continue; //ignore comment
01026     std::vector <std::string> items = splitString (std::string (buffer));
01027     if (items.size () < 12) {
01028       if (items.size()==0) continue; // no warning here
01029       if (items.size()<9) {
01030         edm::LogError("MapFormat") << "HcalElectronicsMap-> line too short: " << buffer;
01031         continue;
01032       }
01033       if (items[8]=="NA" || items[8]=="NT") {
01034         while (items.size()<12) items.push_back(""); // don't worry here
01035       } else if (items[8]=="HT") {
01036         if (items.size()==11) items.push_back("");
01037         else {
01038           edm::LogError("MapFormat") << "HcalElectronicsMap-> Bad line: " << buffer 
01039                                      << "\n HT line must contain at least 11 items: i  cr sl tb dcc spigot fiber fiberchan subdet=HT ieta iphi";
01040           continue;
01041         }
01042       } else {
01043         edm::LogError("MapFormat") << "HcalElectronicsMap-> Bad line: " << buffer 
01044                                    << "\n line must contain 12 items: i  cr sl tb dcc spigot fiber fiberchan subdet ieta iphi depth";
01045         continue;
01046       }
01047     }
01048     //    std::cout << "HcalElectronicsMap-> processing line: " << buffer << std::endl;
01049     int crate = atoi (items [1].c_str());
01050     int slot = atoi (items [2].c_str());
01051     int top = 1;
01052     if (items [3] == "b") top = 0;
01053     int dcc = atoi (items [4].c_str());
01054     int spigot = atoi (items [5].c_str());
01055     HcalElectronicsId elId;
01056     if (items[8] == "HT" || items[8] == "NT") {
01057       int slb = atoi (items [6].c_str());
01058       int slbCh = atoi (items [7].c_str());
01059       elId=HcalElectronicsId(slbCh, slb, spigot, dcc,crate,slot,top);
01060     } else {
01061       int fiber = atoi (items [6].c_str());
01062       int fiberCh = atoi (items [7].c_str());
01063 
01064       elId=HcalElectronicsId(fiberCh, fiber, spigot, dcc);
01065       elId.setHTR (crate, slot, top);
01066     }
01067 
01068     // first, handle undefined cases
01069     if (items [8] == "NA") { // undefined channel
01070       fObject->mapEId2chId (elId, DetId (HcalDetId::Undefined));
01071     } else if (items [8] == "NT") { // undefined trigger channel
01072       fObject->mapEId2tId (elId, DetId (HcalTrigTowerDetId::Undefined));
01073     } else {
01074       HcalText2DetIdConverter converter (items [8], items [9], items [10], items [11]);
01075       if (converter.isHcalDetId ()) { 
01076         fObject->mapEId2chId (elId, converter.getId ());
01077       }
01078       else if (converter.isHcalTrigTowerDetId ()) {
01079         fObject->mapEId2tId (elId, converter.getId ());
01080       }
01081       else if (converter.isHcalCalibDetId ()) {
01082         fObject->mapEId2chId (elId, converter.getId ());
01083       }
01084       else if (converter.isHcalZDCDetId ()) {
01085         fObject->mapEId2chId (elId, converter.getId ());
01086       }
01087       else {
01088         edm::LogWarning("Format Error") << "HcalElectronicsMap-> Unknown subdetector: " 
01089                   << items [8] << '/' << items [9] << '/' << items [10] << '/' << items [11] << std::endl; 
01090       }
01091     }
01092   }
01093   fObject->sort ();
01094   return true;
01095 }
01096 
01097 bool HcalDbASCIIIO::dumpObject (std::ostream& fOutput, const HcalElectronicsMap& fObject) {
01098   std::vector<HcalElectronicsId> eids = fObject.allElectronicsId ();
01099   char buf [1024];
01100   // changes by Jared, 6.03.09/(included 25.03.09)
01101   //  sprintf (buf, "#%10s %6s %6s %6s %6s %6s %6s %6s %15s %15s %15s %15s",
01102   sprintf (buf, "# %7s %3s %3s %3s %4s %7s %10s %14s %7s %5s %5s %6s",
01103            "i", "cr", "sl", "tb", "dcc", "spigot", "fiber/slb", "fibcha/slbcha", "subdet", "ieta", "iphi", "depth");
01104   fOutput << buf << std::endl;
01105 
01106   for (unsigned i = 0; i < eids.size (); i++) {
01107     HcalElectronicsId eid = eids[i];
01108     if (eid.isTriggerChainId()) {
01109       DetId trigger = fObject.lookupTrigger (eid);
01110       if (trigger.rawId ()) {
01111         HcalText2DetIdConverter converter (trigger);
01112         // changes by Jared, 6.03.09/(included 25.03.09)
01113         //      sprintf (buf, " %10X %6d %6d %6c %6d %6d %6d %6d %15s %15s %15s %15s",
01114         sprintf (buf, " %7X %3d %3d %3c %4d %7d %10d %14d %7s %5s %5s %6s",
01115                  //              i,
01116                  converter.getId().rawId(),
01117                  // changes by Jared, 6.03.09/(included 25.03.09)
01118                  //              eid.readoutVMECrateId(), eid.htrSlot(), eid.htrTopBottom()>0?'t':'b', eid.dccid(), eid.spigot(), eid.fiberIndex(), eid.fiberChanId(),
01119                  eid.readoutVMECrateId(), eid.htrSlot(), eid.htrTopBottom()>0?'t':'b', eid.dccid(), eid.spigot(), eid.slbSiteNumber(), eid.slbChannelIndex(),
01120                  converter.getFlavor ().c_str (), converter.getField1 ().c_str (), converter.getField2 ().c_str (), converter.getField3 ().c_str ()
01121                  );
01122         fOutput << buf << std::endl;
01123       }
01124     } else {
01125       DetId channel = fObject.lookup (eid);
01126       if (channel.rawId()) {
01127         HcalText2DetIdConverter converter (channel);
01128         // changes by Jared, 6.03.09/(included 25.03.09)
01129         //      sprintf (buf, " %10X %6d %6d %6c %6d %6d %6d %6d %15s %15s %15s %15s",
01130         sprintf (buf, " %7X %3d %3d %3c %4d %7d %10d %14d %7s %5s %5s %6s",
01131                  //              i,
01132                  converter.getId().rawId(),
01133                  eid.readoutVMECrateId(), eid.htrSlot(), eid.htrTopBottom()>0?'t':'b', eid.dccid(), eid.spigot(), eid.fiberIndex(), eid.fiberChanId(),
01134                  converter.getFlavor ().c_str (), converter.getField1 ().c_str (), converter.getField2 ().c_str (), converter.getField3 ().c_str ()
01135                );
01136         fOutput << buf << std::endl;
01137       }
01138     }
01139   }
01140   return true;
01141 }
01142 
01143 
01144 bool HcalDbASCIIIO::getObject (std::istream& fInput, HcalLutMetadata* fObject){
01145   if (!fObject) fObject = new HcalLutMetadata;
01146   char buffer [1024];
01147   while (fInput.getline(buffer, 1024)) {
01148     if (buffer [0] == '#') continue; //ignore comment
01149     std::vector <std::string> items = splitString (std::string (buffer));
01150     if (items.size()==0) continue; // blank line
01151     // now get non-channel data
01152     if (items.size() > 1 && 
01153         items[0].find("RctLsb")!=std::string::npos){
01154       fObject->setRctLsb( atof( items[1].c_str() ) );
01155       continue;
01156     }
01157     if (items.size() > 1 && 
01158         items[0].find("Gain")!=std::string::npos){
01159       fObject->setNominalGain( atof( items[1].c_str() ) );
01160       continue;
01161     }
01162     // now proceeed to per-channel data
01163     if (items.size () < 7) {
01164       edm::LogWarning("Format Error") << "Bad line: " << buffer << "\n line must contain 7 items: eta, phi, depth, subdet, Rcalib, LutGranularity, OutputLutThreshold" << std::endl;
01165       continue;
01166     }
01167     DetId id = getId (items);
01168     
01169     HcalLutMetadatum * fCondObject = new HcalLutMetadatum(id,
01170                                                           atof (items [4].c_str()),
01171                                                           atoi (items [5].c_str()),
01172                                                           atoi (items [6].c_str()));
01173     fObject->addValues(*fCondObject);
01174     delete fCondObject;
01175   }
01176   return true;
01177 }
01178 
01179 
01180 bool HcalDbASCIIIO::dumpObject (std::ostream& fOutput, const HcalLutMetadata& fObject){
01181   char buffer [1024];
01182   const float _rctLsb = fObject.getRctLsb();
01183   const float _gain   = fObject.getNominalGain();
01184   sprintf (buffer, "# %20s\n", "Non-channel data");
01185   fOutput << buffer;
01186   sprintf (buffer, "%8s %8.5f\n", "RctLsb", _rctLsb);
01187   fOutput << buffer;
01188   sprintf (buffer, "%8s %8.5f\n", "Gain", _gain);
01189   fOutput << buffer;
01190   sprintf (buffer, "# %15s %15s %15s %15s %8s %15s %19s %10s\n", "eta", "phi", "dep", "det", "Rcalib", "LutGranularity", "OutputLutThreshold", "DetId");
01191   fOutput << buffer;
01192   std::vector<DetId> channels = fObject.getAllChannels ();
01193   std::sort (channels.begin(), channels.end(), DetIdLess ());
01194   for (std::vector<DetId>::iterator channel = channels.begin ();
01195        channel !=  channels.end ();
01196        channel++) {
01197     const float   _rCalib             = fObject.getValues (*channel)->getRCalib();
01198     const uint8_t _lutGranularity     = fObject.getValues (*channel)->getLutGranularity();
01199     const uint8_t _outputLutThreshold = fObject.getValues (*channel)->getOutputLutThreshold();
01200     dumpId (fOutput, *channel);
01201     sprintf (buffer, " %8.5f %15d %19d %10X\n",
01202              _rCalib,
01203              _lutGranularity,
01204              _outputLutThreshold,
01205              channel->rawId ());
01206     fOutput << buffer;
01207   }
01208   return true;
01209 }
01210 
01211 //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
01212 bool HcalDbASCIIIO::getObject(std::istream& fInput, HcalDcsValues * fObject) {
01213   if (!fObject) fObject = new HcalDcsValues;
01214   std::string buffer;
01215   while (getline(fInput, buffer)) {
01216     if (buffer.at(0) == '#') continue; //ignore comment
01217     std::vector <std::string> items = splitString (buffer);
01218     if (items.size()==0) continue; // blank line
01219 
01220     if (items.size() < 9) {
01221       edm::LogWarning("Format Error") << "Bad line: " << buffer << "\n line must contain 9 items: subDet, side_ring, slice, type, subChannel, LS, Value, UpperLimit, LowerLimit" << std::endl;
01222       continue;
01223     }
01224 
01225     HcalOtherSubdetector subd;
01226     int sidering;
01227     unsigned int slice, subchan;
01228     switch (items[0].at(1)) {
01229     case 'B':
01230       subd = HcalDcsBarrel;
01231       break;
01232     case 'E':
01233       subd = HcalDcsEndcap;
01234       break;
01235     case 'F':
01236       subd = HcalDcsForward;
01237       break;
01238     case 'O':
01239       subd = HcalDcsOuter;
01240       break;
01241     default:
01242       continue;
01243     }
01244     //from_string<int>(subd, items[0], std::dec);
01245     from_string<int>(sidering, items[1], std::dec);
01246     from_string<unsigned int>(slice, items[2], std::dec);
01247     //from_string<int>(ty, items[3], std::dec);
01248     from_string<unsigned int>(subchan, items[4], std::dec);
01249 
01250     HcalDcsDetId newId(subd, sidering, slice, 
01251                        HcalDcsDetId::DcsTypeFromString(items[3]), subchan);
01252 
01253     int LS;
01254     float val,upper,lower;
01255     from_string<int>(LS, items[5], std::dec);
01256     from_string<float>(val, items[6], std::dec);
01257     from_string<float>(upper, items[7], std::dec);
01258     from_string<float>(lower, items[8], std::dec);
01259 
01260     HcalDcsValue newVal(newId.rawId(),LS,val,upper,lower);
01261 //     std::cout << buffer << '\n';
01262 //     std::cout << subd << ' ' << sidering << ' ' << slice << ' '
01263 //            << ty << ' ' << subchan << ' ' << LS << ' '
01264 //            << val << ' ' << upper << ' ' << lower << '\n';
01265 //     std::cout << newId ;
01266     if (!(fObject->addValue(newVal))) {
01267       edm::LogWarning("Data Error") << "Data from line " << buffer 
01268                                     << "\nwas not added to the HcalDcsValues object." << std::endl;
01269     }
01270 //     std::cout << std::endl;
01271   }
01272   fObject->sortAll();
01273   return true;
01274 }
01275 
01276 bool HcalDbASCIIIO::dumpObject(std::ostream& fOutput, 
01277                                HcalDcsValues const& fObject) {
01278   fOutput << "# subDet side_ring slice type subChan LS Value UpperLimit LowerLimit DcsId\n";
01279   for(int subd = HcalDcsValues::HcalHB; 
01280       subd <= HcalDcsValues::HcalHF; ++subd) {
01281 //     std::cout << "subd: " << subd << '\n';
01282     HcalDcsValues::DcsSet const & vals= 
01283       fObject.getAllSubdetValues(HcalDcsValues::DcsSubDet(subd));
01284     for (HcalDcsValues::DcsSet::const_iterator val = vals.begin(); 
01285          val != vals.end(); ++val) {
01286       HcalDcsDetId valId(val->DcsId());
01287 
01288       switch (valId.subdet()) {
01289       case HcalDcsBarrel:
01290         fOutput << "HB ";
01291         break;
01292       case HcalDcsEndcap:
01293         fOutput << "HE ";
01294         break;
01295       case HcalDcsOuter:
01296         fOutput << "HO ";
01297         break;
01298       case HcalDcsForward:
01299         fOutput << "HF ";
01300         break;
01301       default :
01302         fOutput << valId.subdet() << ' ';
01303       }
01304 
01305       if (valId.subdet() == HcalDcsOuter)
01306         fOutput << valId.ring() << ' ';
01307       else
01308         fOutput << valId.zside() << ' ';
01309 
01310       fOutput << valId.slice() << ' ' 
01311               << valId.typeString(valId.type()) << ' '
01312               << valId.subchannel() << ' ';
01313       fOutput << val->LS() << ' ' 
01314               << val->getValue() << ' '
01315               << val->getUpperLimit() << ' '
01316               << val->getLowerLimit() << ' ';
01317       fOutput << std::hex << val->DcsId() << std::dec << '\n';
01318 
01319 //       std::cout << valId << ' '
01320 //              << valId.subdet() << ' ' 
01321 //              << val->LS() << ' ' << val->getValue() << ' '
01322 //              << val->getUpperLimit() << ' ' << val->getLowerLimit()
01323 //              << std::endl;
01324     }
01325   }
01326 
01327   return true;
01328 }
01329 
01330 
01331 // Format of the ASCII file:
01332 // line# Ring Slice Subchannel Subdetector Eta Phi Depth
01333 // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
01334 bool HcalDbASCIIIO::getObject (std::istream& fInput, HcalDcsMap* fObject) {
01335   char buffer [1024];
01336   while (fInput.getline(buffer, 1024)) {
01337     if (buffer [0] == '#') continue; //ignore comment
01338     std::vector <std::string> items = splitString (std::string (buffer));
01339     if (items.size () < 8) {
01340       if (items.size()==0) continue; // no warning here
01341       else {
01342         edm::LogError("MapFormat") << "HcalDcsMap-> Bad line: " << buffer 
01343                                    << "\n line must contain 8 items: line side_ring slice subchannel subdet ieta iphi depth";
01344         continue;
01345       }
01346     }
01347     //    std::cout << "HcalDcsMap-> processing line: " << buffer << std::endl;
01348     //int ring = atoi (items [1].c_str());
01349     int ring = atoi(items[1].c_str());
01350     unsigned int slice = atoi (items [2].c_str());
01351     unsigned int subchannel = atoi (items [3].c_str());
01352     HcalDcsDetId::DcsType type = HcalDcsDetId::DCSUNKNOWN;
01353 //    if(items[4].find("HV")!=std::string::npos){
01354 //      type = HcalDcsDetId::HV;
01355 //    }
01356 //    else if (items[4].find("BV")!=std::string::npos){
01357 //      type = HcalDcsDetId::BV;
01358 //    }
01359 //    else if (items[4].find("CATH")!=std::string::npos){
01360 //      type = HcalDcsDetId::CATH;
01361 //    }
01362 //    else if (items[4].find("DYN7")!=std::string::npos){
01363 //      type = HcalDcsDetId::DYN7;
01364 //    }
01365 //    else if (items[4].find("DYN8")!=std::string::npos){
01366 //      type = HcalDcsDetId::DYN8;
01367 //    }
01368 //    else if (items[4].find("RM_TEMP")!=std::string::npos){
01369 //      type = HcalDcsDetId::RM_TEMP;
01370 //    }
01371 //    else if (items[4].find("CCM_TEMP")!=std::string::npos){
01372 //      type = HcalDcsDetId::CCM_TEMP;
01373 //    }
01374 //    else if (items[4].find("CALIB_TEMP")!=std::string::npos){
01375 //      type = HcalDcsDetId::CALIB_TEMP;
01376 //    }
01377 //    else if (items[4].find("LVTTM_TEMP")!=std::string::npos){
01378 //      type = HcalDcsDetId::LVTTM_TEMP;
01379 //    }
01380 //    else if (items[4].find("TEMP")!=std::string::npos){
01381 //      type = HcalDcsDetId::TEMP;
01382 //    }
01383 //    else if (items[4].find("QPLL_LOCK")!=std::string::npos){
01384 //      type = HcalDcsDetId::QPLL_LOCK;
01385 //    }
01386 //    else if (items[4].find("STATUS")!=std::string::npos){
01387 //      type = HcalDcsDetId::STATUS;
01388 //    }
01389 //    else if (items[4].find("DCS_MAX")!=std::string::npos){
01390 //      type = HcalDcsDetId::DCS_MAX;
01391 //    }
01392 //    else{
01393 //      edm::LogError("MapFormat") << "HcalDcsMap-> Unknown DCS Type, line is not accepted: " << items[4];
01394 //      continue;
01395 //    }
01396     HcalOtherSubdetector subdet = HcalOtherEmpty;
01397     if (items[4].find("CALIB")!=std::string::npos){
01398       subdet = HcalCalibration;
01399     }
01400     else if (items[4].find("HB")!=std::string::npos){
01401       subdet = HcalDcsBarrel;
01402     }
01403     else if (items[4].find("HE")!=std::string::npos){
01404       subdet = HcalDcsEndcap;
01405     }
01406     else if (items[4].find("HO")!=std::string::npos){
01407       subdet = HcalDcsOuter;
01408     }
01409     else if (items[4].find("HF")!=std::string::npos){
01410       subdet = HcalDcsForward;
01411     }
01412     else{
01413       edm::LogError("MapFormat") << "HcalDcsMap-> Unknown subdetector, line is not accepted: " << items[5];
01414       continue;
01415     }
01416     HcalDcsDetId dcsId(subdet, ring, slice, type, subchannel);
01417     HcalText2DetIdConverter converter (items [4], items [5], items [6], items [7]);
01418     HcalDetId id(0);
01419     if (converter.isHcalDetId()){
01420       id = converter.getId();
01421     }
01422     else{
01423       edm::LogWarning("Invalid HCAL channel") << "HcalDcsMap-> invalid channel: " 
01424                                               << items [4] << '/' 
01425                                               << items [5] << '/'
01426                                               << items [6] << '/' 
01427                                               << items [7] << std::endl; 
01428       continue;
01429     }
01430     fObject->mapGeomId2DcsId(id, dcsId);
01431   }
01432   fObject->sort ();
01433   return true;
01434 }
01435 
01436 // Format of the ASCII file:
01437 // line# Ring Slice Subchannel Subdetector Eta Phi Depth
01438 // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
01439 bool HcalDbASCIIIO::dumpObject (std::ostream& fOutput, const HcalDcsMap& fObject) {
01440   char buf [1024];
01441   sprintf (buf, "# %7s %10s %6s %8s %7s %5s %5s %6s",
01442            "i", "side_ring", "slice", "subchan", "subdet", "ieta", "iphi", "depth");
01443   fOutput << buf << std::endl;
01444   HcalDcsMap::const_iterator _line;
01445   unsigned int line_counter = 0;
01446   for (_line = fObject.beginById();
01447        _line != fObject.endById();
01448        ++_line) {
01449     HcalDcsDetId dcsId = _line.getHcalDcsDetId();
01450     //std::string _dcs_type = "DCSUNKNOWN";
01451     HcalText2DetIdConverter _converter(_line.getHcalDetId());
01452     sprintf (buf, " %8X %10d %6d %8d %7s %5s %5s %6s",
01453              line_counter,
01454              dcsId.ring(), // contains zside() already
01455              dcsId.slice(),
01456              dcsId.subchannel(),
01457              _converter.getFlavor().c_str(),
01458              _converter.getField1().c_str(),
01459              _converter.getField2().c_str(),
01460              _converter.getField3().c_str()
01461              );
01462     fOutput << buf << std::endl;
01463     ++line_counter;
01464   }
01465   return true;
01466 }
01467 
01468 
01469 bool HcalDbASCIIIO::getObject (std::istream& fInput, HcalFlagHFDigiTimeParams* fObject)
01470 {
01471   
01472   if (!fObject) fObject = new HcalFlagHFDigiTimeParams();
01473   char buffer [1024];
01474   while (fInput.getline(buffer, 1024)) {
01475     if (buffer [0] == '#') continue; //ignore comment
01476     std::vector <std::string> items = splitString (std::string (buffer));
01477     if (items.size()==0) continue; // blank line
01478     if (items.size () != 9) {
01479       edm::LogWarning("Format Error") << "Bad line: " << buffer << "\n line must contain at 9 least items: eta, phi, depth, subdet, firstSample, samplesToAdd, ExpectedPeak, MinEnergy, and a set of comma-separated coefficients" << std::endl;
01480       continue;
01481     }
01482     // expects (ieta, iphi, depth, subdet) as first four arguments
01483     DetId id = HcalDbASCIIIO::getId (items);
01484     std::vector<double> coef= splitStringToDoubleByComma(items[8].c_str());
01485 
01486     HcalFlagHFDigiTimeParam* fCondObject = new HcalFlagHFDigiTimeParam(id, 
01487                                                                        atoi (items [4].c_str()), //firstSample
01488                                                                        atoi (items [5].c_str()), //samplesToAdd
01489                                                                        atoi (items [6].c_str()), //expectedPeak
01490                                                                        atof (items [7].c_str()), // minEThreshold
01491                                                                        coef // coefficients
01492                                                                   );
01493     fObject->addValues(*fCondObject);
01494     delete fCondObject;
01495   }
01496   return true;
01497 } // getObject (HcalFlagHFDigiTime)
01498 
01499 bool HcalDbASCIIIO::dumpObject (std::ostream& fOutput, const HcalFlagHFDigiTimeParams& fObject)
01500 {
01501   char buffer [1024];
01502   sprintf (buffer, "# %15s %15s %15s %15s  %15s %15s %15s %15s %30s\n", "eta", "phi", "dep", "det", "FirstSample", "SamplesToAdd", "ExpectedPeak","MinEnergy","Coefficients");
01503   fOutput << buffer;
01504   std::vector<DetId> channels = fObject.getAllChannels ();
01505   std::sort (channels.begin(), channels.end(), DetIdLess ());
01506   for (std::vector<DetId>::iterator channel = channels.begin ();
01507        channel !=  channels.end ();
01508        channel++) {
01509     // Dump out channel (ieta,iphi,depth,subdet) info
01510     HcalDbASCIIIO::dumpId (fOutput, *channel);
01511     // Dump out values for channel
01512     sprintf (buffer, " %15u %15u %15u %15f",
01513              fObject.getValues (*channel)->HFdigiflagFirstSample(), 
01514              fObject.getValues (*channel)->HFdigiflagSamplesToAdd(), 
01515              fObject.getValues (*channel)->HFdigiflagExpectedPeak(), 
01516              fObject.getValues (*channel)->HFdigiflagMinEThreshold() 
01517              );
01518 
01519     std::vector<double> coef=fObject.getValues(*channel)->HFdigiflagCoefficients();
01520     for (std::vector<double>::size_type x=0;x<coef.size();++x)
01521       sprintf(buffer, "%f,",coef[x]); // comma-separated values
01522     sprintf(buffer,"\n");
01523     fOutput << buffer;
01524   }
01525   return true;
01526 }
01527 
01528