Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bsunanda:Run2-hcx82 Add the possibility of a FrontEnd map for HCAL #14456

Merged
merged 2 commits into from May 22, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 4 additions & 0 deletions CalibCalorimetry/HcalAlgos/interface/HcalDbASCIIIO.h
Expand Up @@ -34,6 +34,8 @@ Text file formats for different data types is as following:
if electronics channel is known to be unconnected, either "subdet" or "eta" should be NA
- HcalDcsMap:
line# Ring Slice Subchannel Type Subdetector Eta Phi Depth
- HcalFrontEndMap:
eta(int) phi(int) depth(int) det(HB,HE,HF) RM# RBX#
*/
namespace HcalDbASCIIIO {
bool getObject (std::istream& fInput, HcalPedestals* fObject);
Expand Down Expand Up @@ -66,6 +68,8 @@ namespace HcalDbASCIIIO {
bool dumpObject (std::ostream& fOutput, const HcalZSThresholds& fObject);
bool getObject (std::istream& fInput, HcalL1TriggerObjects* fObject);
bool dumpObject (std::ostream& fOutput, const HcalL1TriggerObjects& fObject);
bool getObject (std::istream& fInput, HcalFrontEndMap* fObject);
bool dumpObject (std::ostream& fOutput, const HcalFrontEndMap& fObject);

bool getObject (std::istream& fInput, HcalValidationCorrs* fObject);
bool dumpObject (std::ostream& fOutput, const HcalValidationCorrs& fObject);
Expand Down
1 change: 1 addition & 0 deletions CalibCalorimetry/HcalAlgos/interface/HcalDbHardcode.h
Expand Up @@ -16,6 +16,7 @@
#include "CondFormats/HcalObjects/interface/HcalQIEType.h"
#include "CondFormats/HcalObjects/interface/HcalCalibrationQIECoder.h"
#include "CondFormats/HcalObjects/interface/HcalElectronicsMap.h"
#include "CondFormats/HcalObjects/interface/HcalFrontEndMap.h"
#include "DataFormats/HcalDetId/interface/HcalDcsDetId.h"
#include "CondFormats/HcalObjects/interface/HcalDcsMap.h"
#include "CondFormats/HcalObjects/interface/HcalRecoParam.h"
Expand Down
45 changes: 44 additions & 1 deletion CalibCalorimetry/HcalAlgos/src/HcalDbASCIIIO.cc
Expand Up @@ -1204,7 +1204,7 @@ bool HcalDbASCIIIO::getObject (std::istream& fInput, HcalQIEData* fObject) {
}

bool HcalDbASCIIIO::dumpObject (std::ostream& fOutput, const HcalQIEData& fObject) {
std::cout <<"dumping object\n";

char buffer [1024];

fOutput << "# QIE data" << std::endl;
Expand Down Expand Up @@ -1838,3 +1838,46 @@ bool HcalDbASCIIIO::dumpObject (std::ostream& fOutput, const HcalFlagHFDigiTimeP
}


// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
bool HcalDbASCIIIO::getObject (std::istream& fInput, HcalFrontEndMap* fObject) {
char buffer [1024];
unsigned int all(0), good(0);
while (fInput.getline(buffer, 1024)) {
++all;
if (buffer [0] == '#') continue; //ignore comment
std::vector <std::string> items = splitString (std::string (buffer));
if (items.size () != 6) {
edm::LogError("MapFormat") << "HcalFrontEndMap-> line ignored: " << buffer;
continue;
}
++good;
// std::cout << "HcalFrontEndMap-> processing line: " << buffer << std::endl;
DetId id = HcalDbASCIIIO::getId (items);
int rm = atoi (items [5].c_str());
fObject->loadObject (id, rm, items[4]);
}
fObject->sort ();
edm::LogInfo("MapFormat") << "HcalFrontEndMap:: processed " << good << " records in " << all << " record" << std::endl;
return true;
}

bool HcalDbASCIIIO::dumpObject (std::ostream& fOutput, const HcalFrontEndMap& fObject) {

char buffer [1024];
sprintf (buffer, "# %15s %15s %15s %15s %8s %8s\n", "eta", "phi", "dep", "det", "rbx", "rm");
fOutput << buffer;

std::vector<DetId> channels = fObject.allDetIds();
std::sort (channels.begin(), channels.end(), DetIdLess ());
for (std::vector<DetId>::iterator channel = channels.begin ();
channel != channels.end (); ++channel) {
const std::string rbx = fObject.lookupRBX(*channel);
const int rm = fObject.lookupRM(*channel);
dumpId (fOutput, *channel);
sprintf (buffer, " %8s %8d \n", rbx.c_str(), rm);
fOutput << buffer;
}
return true;
return true;
}

11 changes: 11 additions & 0 deletions CalibCalorimetry/HcalPlugins/src/HcalDbProducer.cc
Expand Up @@ -60,6 +60,7 @@ HcalDbProducer::HcalDbProducer( const edm::ParameterSet& fConfig)
&HcalDbProducer::zsThresholdsCallback &
&HcalDbProducer::L1triggerObjectsCallback &
&HcalDbProducer::electronicsMapCallback &
// &HcalDbProducer::frontEndMapCallback &
&HcalDbProducer::lutMetadataCallback
)
);
Expand Down Expand Up @@ -350,6 +351,16 @@ void HcalDbProducer::electronicsMapCallback (const HcalElectronicsMapRcd& fRecor
}
}

void HcalDbProducer::frontEndMapCallback (const HcalFrontEndMapRcd& fRecord) {
edm::ESHandle <HcalFrontEndMap> item;
fRecord.get (item);
mService->setData (item.product ());
if (std::find (mDumpRequest.begin(), mDumpRequest.end(), std::string ("FrontEndMap")) != mDumpRequest.end()) {
*mDumpStream << "New HCAL FrontEnd Map set" << std::endl;
HcalDbASCIIIO::dumpObject (*mDumpStream, *(item.product ()));
}
}

void HcalDbProducer::lutMetadataCallback (const HcalLutMetadataRcd& fRecord) {
edm::ESTransientHandle <HcalLutMetadata> item;
fRecord.get (item);
Expand Down
1 change: 1 addition & 0 deletions CalibCalorimetry/HcalPlugins/src/HcalDbProducer.h
Expand Up @@ -52,6 +52,7 @@ class HcalDbProducer : public edm::ESProducer {
void respCorrsCallback (const HcalRespCorrsRcd& fRecord);
void L1triggerObjectsCallback (const HcalL1TriggerObjectsRcd& fRecord);
void electronicsMapCallback (const HcalElectronicsMapRcd& fRecord);
void frontEndMapCallback (const HcalFrontEndMapRcd& fRecord);
void timeCorrsCallback (const HcalTimeCorrsRcd& fRecord);
void LUTCorrsCallback (const HcalLUTCorrsRcd& fRecord);
void PFCorrsCallback (const HcalPFCorrsRcd& fRecord);
Expand Down
11 changes: 10 additions & 1 deletion CalibCalorimetry/HcalPlugins/src/HcalTextCalibrations.cc
Expand Up @@ -35,6 +35,7 @@ HcalTextCalibrations::HcalTextCalibrations ( const edm::ParameterSet& iConfig )
std::string objectName = request->getParameter<std::string> ("object");
edm::FileInPath fp = request->getParameter<edm::FileInPath>("file");
mInputs [objectName] = fp.fullPath();
// std::cout << objectName << " with file " << fp.fullPath() << std::endl;
if (objectName == "Pedestals") {
setWhatProduced (this, &HcalTextCalibrations::producePedestals);
findingRecord <HcalPedestalsRcd> ();
Expand Down Expand Up @@ -91,6 +92,10 @@ HcalTextCalibrations::HcalTextCalibrations ( const edm::ParameterSet& iConfig )
setWhatProduced (this, &HcalTextCalibrations::produceElectronicsMap);
findingRecord <HcalElectronicsMapRcd> ();
}
else if (objectName == "FrontEndMap") {
setWhatProduced (this, &HcalTextCalibrations::produceFrontEndMap);
findingRecord <HcalFrontEndMapRcd> ();
}
else if (objectName == "ValidationCorrs") {
setWhatProduced (this, &HcalTextCalibrations::produceValidationCorrs);
findingRecord <HcalValidationCorrsRcd> ();
Expand Down Expand Up @@ -143,7 +148,7 @@ HcalTextCalibrations::HcalTextCalibrations ( const edm::ParameterSet& iConfig )
std::cerr << "HcalTextCalibrations-> Unknown object name '" << objectName
<< "', known names are: "
<< "Pedestals PedestalWidths Gains GainWidths QIEData QIETypes ChannelQuality ElectronicsMap "
<< "ZSThresholds RespCorrs LUTCorrs PFCorrs TimeCorrs L1TriggerObjects "
<< "FrontEndMap ZSThresholds RespCorrs LUTCorrs PFCorrs TimeCorrs L1TriggerObjects "
<< "ValidationCorrs LutMetadata DcsValues DcsMap CholeskyMatrices CovarianceMatrices "
<< "RecoParams LongRecoParams ZDCLowGainFraction FlagHFDigiTimeParams MCParams "
<< std::endl;
Expand Down Expand Up @@ -296,6 +301,10 @@ std::unique_ptr<HcalElectronicsMap> HcalTextCalibrations::produceElectronicsMap
return produce_impl<HcalElectronicsMap> (mInputs ["ElectronicsMap"]);
}

std::unique_ptr<HcalFrontEndMap> HcalTextCalibrations::produceFrontEndMap (const HcalFrontEndMapRcd& rcd) {
return produce_impl<HcalFrontEndMap> (mInputs ["FrontEndMap"]);
}

std::unique_ptr<HcalValidationCorrs> HcalTextCalibrations::produceValidationCorrs (const HcalValidationCorrsRcd& rcd) {
edm::ESHandle<HcalTopology> htopo;
rcd.getRecord<HcalRecNumberingRecord>().get(htopo);
Expand Down
4 changes: 3 additions & 1 deletion CalibCalorimetry/HcalPlugins/src/HcalTextCalibrations.h
Expand Up @@ -20,6 +20,7 @@ class HcalQIEDataRcd;
class HcalQIETypesRcd;
class HcalChannelQualityRcd;
class HcalElectronicsMapRcd;
class HcalFrontEndMapRcd;
class HcalRespCorrsRcd;
class HcalTimeCorrsRcd;
class HcalLUTCorrsRcd;
Expand All @@ -40,7 +41,7 @@ class HcalFlagHFDigiTimeParamsRcd;
class HcalTimingParamsRcd;

class HcalTextCalibrations : public edm::ESProducer,
public edm::EventSetupRecordIntervalFinder
public edm::EventSetupRecordIntervalFinder
{
public:
HcalTextCalibrations (const edm::ParameterSet& );
Expand All @@ -61,6 +62,7 @@ class HcalTextCalibrations : public edm::ESProducer,
std::unique_ptr<HcalQIETypes> produceQIETypes (const HcalQIETypesRcd& rcd);
std::unique_ptr<HcalChannelQuality> produceChannelQuality (const HcalChannelQualityRcd& rcd);
std::unique_ptr<HcalElectronicsMap> produceElectronicsMap (const HcalElectronicsMapRcd& rcd);
std::unique_ptr<HcalFrontEndMap> produceFrontEndMap (const HcalFrontEndMapRcd& rcd);

std::unique_ptr<HcalRespCorrs> produceRespCorrs (const HcalRespCorrsRcd& rcd);
std::unique_ptr<HcalZSThresholds> produceZSThresholds (const HcalZSThresholdsRcd& rcd);
Expand Down
2 changes: 1 addition & 1 deletion CalibFormats/HcalObjects/interface/HcalDbRecord.h
Expand Up @@ -30,7 +30,7 @@ class HcalDbRecord : public edm::eventsetup::DependentRecordImplementation <Hcal
boost::mpl::vector<IdealGeometryRecord, HcalPedestalsRcd, HcalPedestalWidthsRcd, HcalGainsRcd, HcalGainWidthsRcd,
HcalQIEDataRcd, HcalQIETypesRcd, HcalChannelQualityRcd, HcalZSThresholdsRcd, HcalRespCorrsRcd,
HcalL1TriggerObjectsRcd, HcalElectronicsMapRcd, HcalTimeCorrsRcd, HcalLUTCorrsRcd, HcalPFCorrsRcd,
HcalLutMetadataRcd > > {};
HcalFrontEndMapRcd, HcalLutMetadataRcd > > {};

#endif /* HCALDBPRODUCER_HCALDBRECORD_H */

3 changes: 3 additions & 0 deletions CalibFormats/HcalObjects/interface/HcalDbService.h
Expand Up @@ -41,6 +41,7 @@ class HcalDbService {
const HcalQIEShape* getHcalShape (const HcalGenericDetId& fId) const;
const HcalQIEShape* getHcalShape (const HcalQIECoder *coder) const;
const HcalElectronicsMap* getHcalMapping () const;
const HcalFrontEndMap* getHcalFrontEndMapping () const;
const HcalRespCorr* getHcalRespCorr (const HcalGenericDetId& fId) const;
const HcalTimeCorr* getHcalTimeCorr (const HcalGenericDetId& fId) const;
const HcalL1TriggerObject* getHcalL1TriggerObject (const HcalGenericDetId& fId) const;
Expand All @@ -59,6 +60,7 @@ class HcalDbService {
void setData (const HcalQIETypes* fItem) {mQIETypes = fItem; mCalibSet = nullptr; }
void setData (const HcalChannelQuality* fItem) {mChannelQuality = fItem;}
void setData (const HcalElectronicsMap* fItem) {mElectronicsMap = fItem;}
void setData (const HcalFrontEndMap* fItem) {mFrontEndMap = fItem;}
void setData (const HcalRespCorrs* fItem) {mRespCorrs = fItem; mCalibSet = nullptr; }
void setData (const HcalTimeCorrs* fItem) {mTimeCorrs = fItem; mCalibSet = nullptr; }
void setData (const HcalZSThresholds* fItem) {mZSThresholds = fItem;}
Expand All @@ -82,6 +84,7 @@ class HcalDbService {
const HcalQIETypes* mQIETypes;
const HcalChannelQuality* mChannelQuality;
const HcalElectronicsMap* mElectronicsMap;
const HcalFrontEndMap* mFrontEndMap;
const HcalRespCorrs* mRespCorrs;
const HcalZSThresholds* mZSThresholds;
const HcalL1TriggerObjects* mL1TriggerObjects;
Expand Down
6 changes: 5 additions & 1 deletion CalibFormats/HcalObjects/src/HcalDbService.cc
Expand Up @@ -18,7 +18,7 @@ HcalDbService::HcalDbService (const edm::ParameterSet& cfg):
mGains (0), mGainWidths (0),
mQIEData(0),
mQIETypes(0),
mElectronicsMap(0),
mElectronicsMap(0), mFrontEndMap(0),
mRespCorrs(0),
mL1TriggerObjects(0),
mTimeCorrs(0),
Expand Down Expand Up @@ -251,6 +251,10 @@ const HcalElectronicsMap* HcalDbService::getHcalMapping () const {
return mElectronicsMap;
}

const HcalFrontEndMap* HcalDbService::getHcalFrontEndMapping () const {
return mFrontEndMap;
}

const HcalL1TriggerObject* HcalDbService::getHcalL1TriggerObject (const HcalGenericDetId& fId) const
{
return mL1TriggerObjects->getValues (fId);
Expand Down
1 change: 1 addition & 0 deletions CondCore/HcalPlugins/src/plugin.cc
Expand Up @@ -44,6 +44,7 @@ REGISTER_PLUGIN(HcalPedestalWidthsRcd,HcalPedestalWidths);
REGISTER_PLUGIN(HcalGainsRcd,HcalGains);
REGISTER_PLUGIN(HcalGainWidthsRcd,HcalGainWidths);
REGISTER_PLUGIN(HcalElectronicsMapRcd,HcalElectronicsMap);
REGISTER_PLUGIN(HcalFrontEndMapRcd,HcalFrontEndMap);
REGISTER_PLUGIN(HcalChannelQualityRcd,HcalChannelQuality);
REGISTER_PLUGIN(HcalQIEDataRcd,HcalQIEData);
REGISTER_PLUGIN(HcalQIETypesRcd,HcalQIETypes);
Expand Down
1 change: 1 addition & 0 deletions CondFormats/DataRecord/interface/HcalAllRcds.h
Expand Up @@ -4,6 +4,7 @@
#include "CondFormats/DataRecord/interface/HcalCalibrationQIEDataRcd.h"
#include "CondFormats/DataRecord/interface/HcalChannelQualityRcd.h"
#include "CondFormats/DataRecord/interface/HcalElectronicsMapRcd.h"
#include "CondFormats/DataRecord/interface/HcalFrontEndMapRcd.h"
#include "CondFormats/DataRecord/interface/HcalGainsRcd.h"
#include "CondFormats/DataRecord/interface/HcalGainWidthsRcd.h"
#include "CondFormats/DataRecord/interface/HcalL1TriggerObjectsRcd.h"
Expand Down
5 changes: 5 additions & 0 deletions CondFormats/DataRecord/interface/HcalFrontEndMapRcd.h
@@ -0,0 +1,5 @@
#ifndef HcalFrontEndMapRcd_H
#define HcalFrontEndMapRcd_H
#include "FWCore/Framework/interface/EventSetupRecordImplementation.h"
class HcalFrontEndMapRcd : public edm::eventsetup::EventSetupRecordImplementation<HcalFrontEndMapRcd> {};
#endif
3 changes: 3 additions & 0 deletions CondFormats/DataRecord/src/HcalFrontEndMapRcd.cc
@@ -0,0 +1,3 @@
#include "CondFormats/DataRecord/interface/HcalFrontEndMapRcd.h"
#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h"
EVENTSETUP_RECORD_REG(HcalFrontEndMapRcd);
2 changes: 1 addition & 1 deletion CondFormats/HcalObjects/interface/AllObjects.h
Expand Up @@ -36,5 +36,5 @@
#include "CondFormats/HcalObjects/interface/HcalInterpolatedPulse.h"
#include "CondFormats/HcalObjects/interface/HBHEChannelGroups.h"
#include "CondFormats/HcalObjects/interface/HcalInterpolatedPulseColl.h"

#include "CondFormats/HcalObjects/interface/HcalFrontEndMap.h"
#endif
76 changes: 76 additions & 0 deletions CondFormats/HcalObjects/interface/HcalFrontEndMap.h
@@ -0,0 +1,76 @@
#ifndef HcalFrontEndMap_h
#define HcalFrontEndMap_h

#include "CondFormats/Serialization/interface/Serializable.h"

#include <vector>
#include <algorithm>
#include <boost/cstdint.hpp>
#if !defined(__CINT__) && !defined(__MAKECINT__) && !defined(__REFLEX__)
#include <atomic>
#endif

#include "DataFormats/DetId/interface/DetId.h"
#include "DataFormats/HcalDetId/interface/HcalDetId.h"
//
class HcalFrontEndMap {
public:
HcalFrontEndMap();
~HcalFrontEndMap();

// swap function
void swap(HcalFrontEndMap& other);
// copy-ctor
HcalFrontEndMap(const HcalFrontEndMap& src);
// copy assignment operator
HcalFrontEndMap& operator=(const HcalFrontEndMap& rhs);
// move constructor
#if !defined(__CINT__) && !defined(__MAKECINT__) && !defined(__REFLEX__)
HcalFrontEndMap(HcalFrontEndMap&& other);
#endif

/// load a new entry
bool loadObject(DetId fId, int rm, std::string rbx);

/// brief lookup the RM associated with the given logical id
//return Null item if no such mapping
const int lookupRM(DetId fId) const;

/// brief lookup the RBX associated with the given logical id
//return Null item if no such mapping
const std::string lookupRBX(DetId fId) const;
const int lookupRBXIndex(DetId fId) const;

std::vector <DetId> allDetIds() const;
std::vector <int> allRMs() const;
std::vector <std::string> allRBXs() const;

// sorting
void sortById () const;
void sort() {}

class PrecisionItem {
public:
PrecisionItem () {mId = mRM = 0; mRBX = "";}
PrecisionItem (uint32_t fId, int fRM, std::string fRBX)
: mId (fId), mRM (fRM), mRBX (fRBX) {}
uint32_t mId;
int mRM;
std::string mRBX;

COND_SERIALIZABLE;
};
protected:
const PrecisionItem* findById (uint32_t fId) const;

std::vector<PrecisionItem> mPItems;
#if !defined(__CINT__) && !defined(__MAKECINT__) && !defined(__REFLEX__)
mutable std::atomic<std::vector<const PrecisionItem*>*> mPItemsById COND_TRANSIENT;
#else
mutable std::vector<const PrecisionItem*>* mPItemsById COND_TRANSIENT;
#endif

COND_SERIALIZABLE;
};

#endif