#include <CondTools/Hcal/interface/HcalPedestalWidthsCheck.h>
Public Member Functions | |
void | analyze (const edm::Event &ev, const edm::EventSetup &es) |
HcalPedestalWidthsCheck (edm::ParameterSet const &ps) | |
~HcalPedestalWidthsCheck () | |
Private Attributes | |
bool | checkemapflag |
std::string | dumprefs |
std::string | dumpupdate |
double | epsilon |
std::string | outfile |
bool | validateflag |
Definition at line 43 of file HcalPedestalWidthsCheck.h.
HcalPedestalWidthsCheck::HcalPedestalWidthsCheck | ( | edm::ParameterSet const & | ps | ) |
Definition at line 3 of file HcalPedestalWidthsCheck.cc.
References checkemapflag, dumprefs, dumpupdate, epsilon, edm::ParameterSet::getUntrackedParameter(), outfile, and validateflag.
00004 { 00005 outfile = ps.getUntrackedParameter<std::string>("outFile","null"); 00006 dumprefs = ps.getUntrackedParameter<std::string>("dumpRefWidthsTo","null"); 00007 dumpupdate = ps.getUntrackedParameter<std::string>("dumpUpdateWidthsTo","null"); 00008 checkemapflag = ps.getUntrackedParameter<bool>("checkEmap",false); 00009 validateflag = ps.getUntrackedParameter<bool>("validateWidths",false); 00010 epsilon = ps.getUntrackedParameter<double>("deltaW",0); 00011 }
HcalPedestalWidthsCheck::~HcalPedestalWidthsCheck | ( | ) |
void HcalPedestalWidthsCheck::analyze | ( | const edm::Event & | ev, | |
const edm::EventSetup & | es | |||
) | [virtual] |
Implements edm::EDAnalyzer.
Definition at line 17 of file HcalPedestalWidthsCheck.cc.
References HcalElectronicsMap::allPrecisionId(), checkemapflag, GenMuonPlsPt100GeV_cfg::cout, HcalDbASCIIIO::dumpObject(), dumprefs, dumpupdate, lat::endl(), epsilon, Exception, find(), first, edm::EventSetup::get(), HcalPedestalWidth::getValues(), it, outfile, edm::ESHandle< T >::product(), edm::second(), and validateflag.
00018 { 00019 using namespace edm::eventsetup; 00020 00021 // get fake pedestals from file ("new pedestals") 00022 edm::ESHandle<HcalPedestalWidths> newPeds; 00023 es.get<HcalPedestalWidthsRcd>().get("update",newPeds); 00024 const HcalPedestalWidths* myNewPeds = newPeds.product(); 00025 00026 // get DB pedestals from Frontier/OrcoX ("reference") 00027 edm::ESHandle<HcalPedestalWidths> refPeds; 00028 es.get<HcalPedestalWidthsRcd>().get("reference",refPeds); 00029 const HcalPedestalWidths* myRefPeds = refPeds.product(); 00030 00031 // get e-map from reference 00032 edm::ESHandle<HcalElectronicsMap> refEMap; 00033 es.get<HcalElectronicsMapRcd>().get("reference",refEMap); 00034 const HcalElectronicsMap* myRefEMap = refEMap.product(); 00035 00036 00037 // dump pedestals: 00038 if(dumpupdate.compare("null")!=0){ 00039 std::ofstream outStream(dumpupdate.c_str()); 00040 std::cout << "--- Dumping PedestalWidths - update ---" << std::endl; 00041 HcalDbASCIIIO::dumpObject (outStream, (*myNewPeds) ); 00042 } 00043 if(dumprefs.compare("null")!=0){ 00044 std::ofstream outStream2(dumprefs.c_str()); 00045 std::cout << "--- Dumping PedestalWidths - reference ---" << std::endl; 00046 HcalDbASCIIIO::dumpObject (outStream2, (*myRefPeds) ); 00047 } 00048 // first get the list of all channels from the update 00049 std::vector<DetId> listNewChan = myNewPeds->getAllChannels(); 00050 00051 // go through list of valid channels from reference, look up if pedestals exist for update 00052 // push back into new vector the corresponding updated pedestals, 00053 // or if it doesn't exist, the reference 00054 HcalPedestalWidths *resultPeds = new HcalPedestalWidths(); 00055 std::vector<DetId> listRefChan = myRefPeds->getAllChannels(); 00056 std::vector<DetId>::iterator cell; 00057 00058 if(validateflag){ 00059 for (std::vector<DetId>::iterator it = listRefChan.begin(); it != listRefChan.end(); it++) 00060 { 00061 DetId mydetid = *it; 00062 cell = std::find(listNewChan.begin(), listNewChan.end(), mydetid); 00063 if (cell == listNewChan.end()) // not present in new list, take old pedestals 00064 { 00065 throw cms::Exception("DataDoesNotMatch")<<"Value not found in reference" << std::endl; 00066 } 00067 else // present in new list, take new pedestals 00068 { 00069 const HcalPedestalWidth* first = myNewPeds->getValues( mydetid ); 00070 const HcalPedestalWidth* second = myRefPeds->getValues( mydetid ); 00071 const float* newwidth = first->getValues(); 00072 const float* oldwidth = second->getValues(); 00073 if( (*newwidth != *oldwidth) || (*(newwidth+1)!=*(oldwidth+1)) || (*(newwidth+2)!=*(oldwidth+2)) || (*(newwidth+3)!=*(oldwidth+3)) || (*(newwidth+4)!=*(oldwidth+4)) || (*(newwidth+5)!=*(oldwidth+5)) || (*(newwidth+6)!=*(oldwidth+6)) || (*(newwidth+7)!=*(oldwidth+7)) || (*(newwidth+8)!=*(oldwidth+8)) || (*(newwidth+9)!=*(oldwidth+9))){ 00074 throw cms::Exception("DataDoesNotMatch") << "Values are not identical" << std::endl; 00075 } 00076 listNewChan.erase(cell); // fix 25.02.08 00077 } 00078 } 00079 std::cout << "These are identical" << std::endl; 00080 } 00081 00082 00083 00084 00085 if(epsilon!=0){ 00086 for (std::vector<DetId>::iterator it = listRefChan.begin(); it != listRefChan.end(); it++) 00087 { 00088 DetId mydetid = *it; 00089 cell = std::find(listNewChan.begin(), listNewChan.end(), mydetid); 00090 if (cell == listNewChan.end()) // not present in new list, take old pedestals 00091 { 00092 throw cms::Exception("DataDoesNotMatch")<<"Value not found in reference" << std::endl; 00093 } 00094 else // present in new list, take new pedestals 00095 { 00096 const HcalPedestalWidth* first = myNewPeds->getValues( mydetid ); 00097 const HcalPedestalWidth* second = myRefPeds->getValues( mydetid ); 00098 const float* newwidth = first->getValues(); 00099 const float* oldwidth = second->getValues(); 00100 if( fabs(*newwidth-*oldwidth)>epsilon || fabs(*(newwidth+1)-*(oldwidth+1))>epsilon || fabs(*(newwidth+2)-*(oldwidth+2))>epsilon || fabs(*(newwidth+3)-*(oldwidth+3))>epsilon || fabs(*(newwidth+4)-*(oldwidth+4))>epsilon || fabs(*(newwidth+5)-*(oldwidth+5))>epsilon || fabs(*(newwidth+6)-*(oldwidth+6))>epsilon || fabs(*(newwidth+7)-*(oldwidth+7))>epsilon || fabs(*(newwidth+8)-*(oldwidth+8))>epsilon || fabs(*(newwidth+9)-*(oldwidth+9))>epsilon){ 00101 throw cms::Exception("DataDoesNotMatch") << "Values differ by more than deltaW" << std::endl; 00102 } 00103 listNewChan.erase(cell); // fix 25.02.08 00104 } 00105 } 00106 std::cout << "These are identical" << std::endl; 00107 } 00108 if(outfile.compare("null")!=0){ 00109 for (std::vector<DetId>::iterator it = listRefChan.begin(); it != listRefChan.end(); it++) 00110 { 00111 DetId mydetid = *it; 00112 cell = std::find(listNewChan.begin(), listNewChan.end(), mydetid); 00113 if (cell == listNewChan.end()) // not present in new list, take old pedestals 00114 { 00115 const HcalPedestalWidth* mywidth = myRefPeds->getValues( mydetid ); 00116 std::cout << "o"; 00117 resultPeds->addValues( *mywidth ); 00118 } 00119 else // present in new list, take new pedestals 00120 { 00121 const HcalPedestalWidth* mywidth = myNewPeds->getValues( mydetid ); 00122 std::cout << "n"; 00123 resultPeds->addValues( *mywidth ); 00124 00125 listNewChan.erase(cell); // fix 25.02.08 00126 } 00127 } 00128 00129 for (std::vector<DetId>::iterator it = listNewChan.begin(); it != listNewChan.end(); it++) // fix 25.02.08 00130 { 00131 DetId mydetid = *it; 00132 const HcalPedestalWidth* mywidth = myNewPeds->getValues( mydetid ); 00133 std::cout << "N"; 00134 resultPeds->addValues( *mywidth ); 00135 } 00136 // dump the resulting list of pedestals into a file 00137 std::ofstream outStream3(outfile.c_str()); 00138 std::cout << "--- Dumping PedestalWidths - the combined ones ---" << std::endl; 00139 HcalDbASCIIIO::dumpObject (outStream3, (*resultPeds) ); 00140 00141 00142 00143 } 00144 std::cout << std::endl; 00145 if(checkemapflag){ 00146 std::vector<DetId> listResult = resultPeds->getAllChannels(); 00147 // get the e-map list of channels 00148 std::vector<HcalGenericDetId> listEMap = myRefEMap->allPrecisionId(); 00149 // look up if emap channels are all present in pedestals, if not then cerr 00150 for (std::vector<HcalGenericDetId>::const_iterator it = listEMap.begin(); it != listEMap.end(); it++) 00151 { 00152 DetId mydetid = DetId(it->rawId()); 00153 if (std::find(listResult.begin(), listResult.end(), mydetid ) == listResult.end() ) 00154 { 00155 std::cout << "Conditions not found for DetId = " << HcalGenericDetId(it->rawId()) << std::endl; 00156 } 00157 } 00158 } 00159 00160 }
bool HcalPedestalWidthsCheck::checkemapflag [private] |
Definition at line 56 of file HcalPedestalWidthsCheck.h.
Referenced by analyze(), and HcalPedestalWidthsCheck().
std::string HcalPedestalWidthsCheck::dumprefs [private] |
Definition at line 54 of file HcalPedestalWidthsCheck.h.
Referenced by analyze(), and HcalPedestalWidthsCheck().
std::string HcalPedestalWidthsCheck::dumpupdate [private] |
Definition at line 55 of file HcalPedestalWidthsCheck.h.
Referenced by analyze(), and HcalPedestalWidthsCheck().
double HcalPedestalWidthsCheck::epsilon [private] |
Definition at line 58 of file HcalPedestalWidthsCheck.h.
Referenced by analyze(), and HcalPedestalWidthsCheck().
std::string HcalPedestalWidthsCheck::outfile [private] |
Definition at line 53 of file HcalPedestalWidthsCheck.h.
Referenced by analyze(), and HcalPedestalWidthsCheck().
bool HcalPedestalWidthsCheck::validateflag [private] |
Definition at line 57 of file HcalPedestalWidthsCheck.h.
Referenced by analyze(), and HcalPedestalWidthsCheck().