CMS 3D CMS Logo

HcalPedestalWidthsCheck Class Reference

#include <CondTools/Hcal/interface/HcalPedestalWidthsCheck.h>

Inheritance diagram for HcalPedestalWidthsCheck:

edm::EDAnalyzer

List of all members.

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


Detailed Description

Definition at line 43 of file HcalPedestalWidthsCheck.h.


Constructor & Destructor Documentation

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 (  ) 

Definition at line 13 of file HcalPedestalWidthsCheck.cc.

00014 {
00015 }


Member Function Documentation

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 }


Member Data Documentation

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().


The documentation for this class was generated from the following files:
Generated on Tue Jun 9 18:23:49 2009 for CMSSW by  doxygen 1.5.4