CMS 3D CMS Logo

List of all members | Public Member Functions | Private Types | Private Member Functions | Private Attributes | Static Private Attributes
EcalDccWeightBuilder Class Reference

#include <EcalDccWeightBuilder.h>

Inheritance diagram for EcalDccWeightBuilder:
edm::EDAnalyzer edm::EDConsumerBase

Public Member Functions

void analyze (const edm::Event &event, const edm::EventSetup &es) override
 
 EcalDccWeightBuilder (edm::ParameterSet const &ps)
 
 ~EcalDccWeightBuilder () override
 
- Public Member Functions inherited from edm::EDAnalyzer
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 EDAnalyzer ()
 
SerialTaskQueueglobalLuminosityBlocksQueue ()
 
SerialTaskQueueglobalRunsQueue ()
 
ModuleDescription const & moduleDescription () const
 
std::string workerType () const
 
 ~EDAnalyzer () override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Types

enum  mode_t { WEIGHTS_FROM_CONFIG, COMPUTE_WEIGHTS }
 

Private Member Functions

void computeAllWeights (bool withIntercalib, const edm::EventSetup &es)
 
void computeWeights (const EcalShapeBase &shape, int binOfMax, double timePhase, int iFirst0, int nWeights, int iSkip0, std::vector< double > &result)
 
void dbId (const DetId &detId, int &fedId, int &smId, int &ruId, int &xtalId) const
 
double decodeWeight (int W)
 
int encodeWeight (double w)
 
double intercalib (const DetId &detId)
 
template<class T >
void sort (const std::vector< T > &a, std::vector< int > &s, bool decreasingOrder=false)
 
void unbiasWeights (std::vector< double > &weights, std::vector< int32_t > *encodedWeigths)
 
void writeWeightToAsciiFile ()
 
void writeWeightToDB ()
 
void writeWeightToRootFile ()
 

Private Attributes

std::string asciiOutputFileName_
 
EcalIntercalibConstantMapcalibMap_
 
std::string dbPassword_
 
std::string dbSid_
 
std::string dbTag_
 
std::string dbUser_
 
int dbVersion_
 
int dcc1stSample_
 
bool dccWeightsWithIntercalib_
 
const EcalElectronicsMappingecalElectronicsMap_
 
EcalIntercalibConstantMap emptyCalibMap_
 
std::map< DetId, std::vector< int > > encodedWeights_
 
edm::ESHandle< CaloGeometrygeom_
 
mode_t imode_
 
std::vector< double > inputWeights_
 
std::string mode_
 
int nDccWeights_
 
std::string rootOutputFileName_
 
int sampleToSkip_
 
bool sqlMode_
 
bool writeToAsciiFile_
 
bool writeToDB_
 
bool writeToRootFile_
 

Static Private Attributes

static const int ecalDccFedIdMax = 654
 
static const int ecalDccFedIdMin = 601
 
static const int nDccs = ecalDccFedIdMax-ecalDccFedIdMin+1
 
static const double weightScale_ = 1024.
 

Additional Inherited Members

- Public Types inherited from edm::EDAnalyzer
typedef EDAnalyzer ModuleType
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::EDAnalyzer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &)
 
static bool wantsGlobalLuminosityBlocks ()
 
static bool wantsGlobalRuns ()
 
static bool wantsStreamLuminosityBlocks ()
 
static bool wantsStreamRuns ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Definition at line 27 of file EcalDccWeightBuilder.h.

Member Enumeration Documentation

Constructor & Destructor Documentation

EcalDccWeightBuilder::EcalDccWeightBuilder ( edm::ParameterSet const &  ps)

Constructs an EcalDccWeightBuilder

Parameters
psCMSSW mondule configuration

Definition at line 45 of file EcalDccWeightBuilder.cc.

References COMPUTE_WEIGHTS, Exception, imode_, inputWeights_, mode_, nDccWeights_, and WEIGHTS_FROM_CONFIG.

45  :
46  dcc1stSample_(ps.getParameter<int>("dcc1stSample")),
47  sampleToSkip_(ps.getParameter<int>("sampleToSkip")),
48  nDccWeights_(ps.getParameter<int>("nDccWeights")),
49  inputWeights_(ps.getParameter<vector<double> >("inputWeights")),
50  mode_(ps.getParameter<string>("mode")),
51  dccWeightsWithIntercalib_(ps.getParameter<bool>("dccWeightsWithIntercalib")),
52  writeToDB_(ps.getParameter<bool>("writeToDB")),
53  writeToAsciiFile_(ps.getParameter<bool>("writeToAsciiFile")),
54  writeToRootFile_(ps.getParameter<bool>("writeToRootFile")),
55  asciiOutputFileName_(ps.getParameter<string>("asciiOutputFileName")),
56  rootOutputFileName_(ps.getParameter<string>("rootOutputFileName")),
57  dbSid_(ps.getParameter<string>("dbSid")),
58  dbUser_(ps.getParameter<string>("dbUser")),
59  dbPassword_(ps.getUntrackedParameter<string>("dbPassword","")),
60  dbTag_(ps.getParameter<string>("dbTag")),
61  dbVersion_(ps.getParameter<int>("dbVersion")),
62  sqlMode_(ps.getParameter<bool>("sqlMode")),
64 {
65  if(mode_=="weightsFromConfig"){
67  if(inputWeights_.size()!=(unsigned)nDccWeights_){
68  throw cms::Exception("Config")
69  << "Inconsistent configuration. 'nDccWeights' parameters indicated "
70  << nDccWeights_ << " weights while parameter 'inputWeights_' contains "
71  << inputWeights_.size() << " weight values!\n";
72  }
73  } else if(mode_=="computeWeights"){
75  } else{
76  throw cms::Exception("Config")
77  << "Invalid value ('" << mode_ << "') for parameter mode. "
78  << "Valid values are: 'weightsFromConfig' and 'computeWeights'\n";
79  }
80 }
std::vector< double > inputWeights_
EcalIntercalibConstantMap & calibMap_
EcalIntercalibConstantMap emptyCalibMap_
EcalDccWeightBuilder::~EcalDccWeightBuilder ( )
inlineoverride

Member Function Documentation

void EcalDccWeightBuilder::analyze ( const edm::Event event,
const edm::EventSetup es 
)
override

Analyze method called by the event loop.

Parameters
eventCMSSW event
esevent setup

Definition at line 84 of file EcalDccWeightBuilder.cc.

References calibMap_, computeAllWeights(), dccWeightsWithIntercalib_, ecalElectronicsMap_, geom_, edm::EventSetup::get(), EcalCondObjectContainer< T >::getMap(), cmsBatch::handle, intercalib(), edm::ESHandle< T >::product(), writeToAsciiFile_, writeToDB_, writeToRootFile_, writeWeightToAsciiFile(), writeWeightToDB(), and writeWeightToRootFile().

Referenced by ~EcalDccWeightBuilder().

85  {
86 
88  es.get<EcalMappingRcd>().get(handle);
89  ecalElectronicsMap_ = handle.product();
90 
91  // Retrieval of intercalib constants
94  es.get<EcalIntercalibConstantsRcd>().get(hIntercalib) ;
95  const EcalIntercalibConstants* intercalib = hIntercalib.product();
96  calibMap_ = intercalib->getMap();
97  }
98 
99  //gets geometry
100  es.get<CaloGeometryRecord>().get(geom_);
101 
102 
103  //computes the weights:
105 
106  //Writing out weights.
110 }
const self & getMap() const
double intercalib(const DetId &detId)
edm::ESHandle< CaloGeometry > geom_
EcalIntercalibConstantMap & calibMap_
T get() const
Definition: EventSetup.h:62
void computeAllWeights(bool withIntercalib, const edm::EventSetup &es)
T const * product() const
Definition: ESHandle.h:86
const EcalElectronicsMapping * ecalElectronicsMap_
void EcalDccWeightBuilder::computeAllWeights ( bool  withIntercalib,
const edm::EventSetup es 
)
private

Definition at line 112 of file EcalDccWeightBuilder.cc.

References CaloSimParameters::binOfMaximum(), COMPUTE_WEIGHTS, computeWeights(), popcon2dropbox::copy(), gather_cfg::cout, dcc1stSample_, MillePedeFileConverter_cfg::e, DetId::Ecal, EcalBarrel, EcalEndcap, encodedWeights_, cppFunctionSkipper::exception, Exception, geom_, CaloGeometry::getValidDetIds(), mps_fire::i, imode_, inputWeights_, intercalib(), min(), nDccWeights_, hcalRecAlgoESProd_cfi::phase, sampleToSkip_, EcalSimParameterMap::simParameters(), CaloSimParameters::timePhase(), unbiasWeights(), w, and WEIGHTS_FROM_CONFIG.

Referenced by analyze(), and ~EcalDccWeightBuilder().

112  {
113  const int nw = nDccWeights_;
114  int iSkip0_ = sampleToSkip_>=0?(sampleToSkip_-dcc1stSample_):-1;
115 
116  EcalSimParameterMap parameterMap;
117  const vector<DetId>& ebDetIds
119 
120  // cout << __FILE__ << ":" << __LINE__ << ": "
121  // << "Number of EB det IDs: " << ebDetIds.size() << "\n";
122 
123  const vector<DetId>& eeDetIds
125 
126  // cout << __FILE__ << ":" << __LINE__ << ": "
127  // << "Number of EE det IDs: " << eeDetIds.size() << "\n";
128 
129 
130  vector<DetId> detIds(ebDetIds.size()+eeDetIds.size());
131  copy(ebDetIds.begin(), ebDetIds.end(), detIds.begin());
132  copy(eeDetIds.begin(), eeDetIds.end(), detIds.begin()+ebDetIds.size());
133 
134  vector<double> baseWeights(nw); //weight obtained from signal shape
135  vector<double> w(nw); //weight*intercalib
136  vector<int> W(nw); //weight in hw encoding (integrer)
137  double prevPhase = numeric_limits<double>::min();
138 
139 
141  assert(inputWeights_.size()==baseWeights.size());
142  copy(inputWeights_.begin(), inputWeights_.end(), baseWeights.begin());
143  }
144 
145  for(vector<DetId>::const_iterator it = detIds.begin();
146  it != detIds.end(); ++it){
147 
148  double phase = parameterMap.simParameters(*it).timePhase();
149  int binOfMax = parameterMap.simParameters(*it).binOfMaximum();
150 
151 #if 0
152  //for debugging...
153  cout << __FILE__ << ":" << __LINE__ << ": ";
154  if(it->subdetId()==EcalBarrel){
155  cout << "ieta = " << setw(4) << ((EBDetId)(*it)).ieta()
156  << " iphi = " << setw(4) << ((EBDetId)(*it)).iphi() << " ";
157  } else if(it->subdetId()==EcalEndcap){
158  cout << "ix = " << setw(3) << ((EEDetId)(*it)).ix()
159  << " iy = " << setw(3) << ((EEDetId)(*it)).iy()
160  << " iz = " << setw(1) << ((EEDetId)(*it)).iy() << " ";
161  } else{
162  throw cms::Exception("EcalDccWeightBuilder")
163  << "Bug found in " << __FILE__ << ":" << __LINE__ << ": "
164  << "Got a detId which is neither tagged as ECAL Barrel "
165  << "not ECAL endcap while looping on ECAL cell detIds\n";
166  }
167  cout << " -> phase: " << phase << "\n";
168  cout << " -> binOfMax: " << binOfMax << "\n";
169 #endif
170 
171  try{
172  bool useDBShape = true;
173  EBShape ebShape(useDBShape);
174  EEShape eeShape(useDBShape);
175  EcalShapeBase* pShape;
176 
177  if(it->subdetId()==EcalBarrel){
178  pShape = &ebShape;
179  } else if(it->subdetId()==EcalEndcap){
180  pShape = &eeShape;
181  } else{
182  throw cms::Exception("EcalDccWeightBuilder")
183  << "Bug found in " << __FILE__ << ":" << __LINE__ << ": "
184  << "Got a detId which is neither tagged as ECAL Barrel "
185  << "not ECAL endcap while looping on ECAL cell detIds\n";
186  }
187 
188  if(phase!=prevPhase){
189  if(imode_==COMPUTE_WEIGHTS){
190  if(it->subdetId()==EcalBarrel){
191  computeWeights(*pShape, binOfMax, phase,
192  dcc1stSample_-1, nDccWeights_, iSkip0_,
193  baseWeights);
194  }
195  prevPhase = phase;
196  }
197  }
198  for(int i = 0; i < nw; ++i){
199  w[i] = baseWeights[i];
200  if(withIntercalib) w[i]*= intercalib(*it);
201  }
202  unbiasWeights(w, &W);
203  encodedWeights_[*it] = W;
204  } catch(std::exception& e){
205  cout << __FILE__ << ":" << __LINE__ << ": ";
206  if(it->subdetId()==EcalBarrel){
207  cout << "ieta = " << setw(4) << ((EBDetId)(*it)).ieta()
208  << " iphi = " << setw(4) << ((EBDetId)(*it)).iphi() << " ";
209  } else if(it->subdetId()==EcalEndcap){
210  cout << "ix = " << setw(3) << ((EEDetId)(*it)).ix()
211  << " iy = " << setw(3) << ((EEDetId)(*it)).iy()
212  << " iz = " << setw(1) << ((EEDetId)(*it)).iy() << " ";
213  } else{
214  cout << "DetId " << (uint32_t) (*it);
215  }
216  cout << "phase: " << phase << "\n";
217  throw;
218  }
219  }
220 }
const double w
Definition: UKUtility.cc:23
std::map< DetId, std::vector< int > > encodedWeights_
def copy(args, dbName)
double intercalib(const DetId &detId)
std::vector< double > inputWeights_
edm::ESHandle< CaloGeometry > geom_
void computeWeights(const EcalShapeBase &shape, int binOfMax, double timePhase, int iFirst0, int nWeights, int iSkip0, std::vector< double > &result)
double timePhase() const
the adjustment you need to apply to get the signal where you want it
const CaloSimParameters & simParameters(const DetId &id) const override
return the sim parameters relative to the right subdet
T min(T a, T b)
Definition: MathUtil.h:58
Definition: EBShape.h:6
void unbiasWeights(std::vector< double > &weights, std::vector< int32_t > *encodedWeigths)
std::vector< DetId > getValidDetIds() const
Get the list of all valid detector ids.
int binOfMaximum() const
Definition: EEShape.h:6
void EcalDccWeightBuilder::computeWeights ( const EcalShapeBase shape,
int  binOfMax,
double  timePhase,
int  iFirst0,
int  nWeights,
int  iSkip0,
std::vector< double > &  result 
)
private

Weight computation

Parameters
shapesignal shape to use for weight computation
binOfMaxtime bin which shall contain the pulse peak
timePhasesignal phase. First sample corresponds to t = ((binOfMax-1)*25+timePhase) ns in the time reference of EcalShapeBase.
iFirstfirst sample the weights must be applied to
nWeightsnumber of weights
iSkip0if greater than 0, the corresponding sample will not be used (weights forced to 0).
result[out] vector filled with computed weights. The vector is resized to the number of weights

Definition at line 223 of file EcalDccWeightBuilder.cc.

References mps_fire::i, alignCSCRings::s, combinedConstraintHelpers::sum2(), EcalShapeBase::timeToRise(), and tzero.

Referenced by computeAllWeights(), and ~EcalDccWeightBuilder().

228  {
229  double sum2 = 0.;
230  double sum = 0;
231  result.resize(nWeights);
232 
233  int nActualWeights = 0;
234 
235  const double tzero = -(binOfMax-1)*25+timePhase + shape.timeToRise();//ns
236 
237  for(int i=0; i<nWeights; ++i){
238  double t_ns = tzero+(iFirst+i)*25;
239  double s = shape(t_ns);
240  if(i==iSkip){
241  continue;
242  }
243  result[i] = s;
244  sum += s;
245  sum2 += s*s;
246  ++nActualWeights;
247  }
248  for(int i=0; i<nWeights; ++i){
249  if(i==iSkip){
250  result[i] = 0;
251  } else{
252  result[i] = (result[i]-sum/nActualWeights)/(sum2-sum*sum/nActualWeights);
253  }
254  }
255 }
static const double tzero[3]
double timeToRise() const override
void EcalDccWeightBuilder::dbId ( const DetId detId,
int &  fedId,
int &  smId,
int &  ruId,
int &  xtalId 
) const
private

Definition at line 638 of file EcalDccWeightBuilder.cc.

References gather_cfg::cout, EcalElectronicsId::dccId(), EcalBarrel, ecalElectronicsMap_, l1t::stage2::layer2::fedId, EcalElectronicsMapping::getElectronicsId(), EcalElectronicsId::stripId(), DetId::subdetId(), EcalElectronicsId::towerId(), and EcalElectronicsId::xtalId().

Referenced by writeWeightToAsciiFile(), writeWeightToDB(), writeWeightToRootFile(), and ~EcalDccWeightBuilder().

640  {
641  const EcalElectronicsId& elecId
643 
644  fedId = 600 + elecId.dccId();
646 
647  if(detId.subdetId()==EcalBarrel) {
648  smId=((EBDetId)detId).ism();
649  } else{
650  smId = 10000-fedId; //no SM in EE. Use some unique value to satisfy
651  // current DB PK constraints.
652  }
653  const int stripLength = 5; //1 strip = 5 crystals in a row
654  xtalId = (elecId.stripId()-1)*stripLength + elecId.xtalId();
655 
656 #if 0
657  cout << __FILE__ << ":" << __LINE__ << ": FED ID "
658  << fedId << "\n";
659 
660  cout << __FILE__ << ":" << __LINE__ << ": SM logical ID "
661  << smId << "\n";
662 
663  cout << __FILE__ << ":" << __LINE__ << ": RU ID (TT or SC): "
664  << ruId << "\n";
665 
666  cout << __FILE__ << ":" << __LINE__ << ": strip:"
667  << elecId.stripId() << "\n";
668 
669  cout << __FILE__ << ":" << __LINE__ << ": xtal in strip: "
670  << elecId.xtalId() << "\n";
671 
672  cout << __FILE__ << ":" << __LINE__ << ": xtalId in RU: "
673  << xtalId << "\n";
674 #endif
675 }
int xtalId() const
get the channel id
int stripId() const
get the tower id
Ecal readout channel identification [32:20] Unused (so far) [19:13] DCC id [12:6] tower [5:3] strip [...
int towerId() const
get the tower id
EcalElectronicsId getElectronicsId(const DetId &id) const
Get the electronics id for this det id.
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:41
int dccId() const
get the DCC (Ecal Local DCC value not global one) id
const EcalElectronicsMapping * ecalElectronicsMap_
double EcalDccWeightBuilder::decodeWeight ( int  W)
private

Definition at line 261 of file EcalDccWeightBuilder.cc.

References weightScale_.

Referenced by unbiasWeights(), and ~EcalDccWeightBuilder().

261  {
262  return ((double) W) / weightScale_;
263 }
static const double weightScale_
int EcalDccWeightBuilder::encodeWeight ( double  w)
private

Definition at line 257 of file EcalDccWeightBuilder.cc.

References weightScale_.

Referenced by unbiasWeights(), and ~EcalDccWeightBuilder().

257  {
258  return lround(w * weightScale_);
259 }
const double w
Definition: UKUtility.cc:23
static const double weightScale_
double EcalDccWeightBuilder::intercalib ( const DetId detId)
private

Retrieve intercalibration coefficent for channel detId.

Parameters
detIdID of the channel the intercalibration coef. must be retrieved for.

Definition at line 369 of file EcalDccWeightBuilder.cc.

References calibMap_, gather_cfg::cout, EcalBarrel, EcalCondObjectContainer< T >::end(), EcalCondObjectContainer< T >::find(), DetId::rawId(), and DetId::subdetId().

Referenced by analyze(), computeAllWeights(), and ~EcalDccWeightBuilder().

369  {
370  // get current intercalibration coeff
371  double coef;
373  = calibMap_.find(detId.rawId());
374  if(itCalib != calibMap_.end()){
375  coef = (*itCalib);
376  } else{
377  coef = 1.;
378  std::cout << (uint32_t) detId
379  << " not found in EcalIntercalibConstantMap"<<std::endl ;
380  }
381 #if 0
382  cout << __FILE__ << ":" << __LINE__ << ": ";
383  if(detId.subdetId()==EcalBarrel){
384  cout << "ieta = " << ((EBDetId)detId).ieta()
385  << " iphi = " << ((EBDetId)detId).iphi();
386  } else{
387  cout << "ix = " << ((EEDetId)detId).ix()
388  << " iy = " << ((EEDetId)detId).iy()
389  << " iz = " << ((EEDetId)detId).zside();
390  }
391  cout << " coef = " << coef << "\n";
392 #endif
393  return coef;
394 }
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:47
EcalIntercalibConstantMap & calibMap_
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:41
std::vector< Item >::const_iterator const_iterator
const_iterator find(uint32_t rawId) const
const_iterator end() const
template<class T >
void EcalDccWeightBuilder::sort ( const std::vector< T > &  a,
std::vector< int > &  s,
bool  decreasingOrder = false 
)
private

Vector index sorting.

Parameters
vectorof values
[out]sortedindex of the vector
decreasingOrderswitch to use decreasing order instead of default increasing order

Definition at line 267 of file EcalDccWeightBuilder.cc.

References mps_fire::i, and std::swap().

Referenced by unbiasWeights(), and ~EcalDccWeightBuilder().

269  {
270  // cout << __FILE__ << ":" << __LINE__ << ": "
271  // << "sort input array:" ;
272  // for(unsigned i=0; i<a.size(); ++i){
273  // cout << "\t" << a[i];
274  // }
275  // cout << "\n";
276 
277  //performs a bubble sort: adjacent elements are successively swapped 2 by 2
278  //until the list is finally sorted.
279  bool changed = false;
280  s.resize(a.size());
281  for(unsigned i=0; i<a.size(); ++i) s[i] = i;
282  if(a.empty()) return;
283  do {
284  changed = false;
285  for(unsigned i = 0; i < a.size()-1; ++i){
286  const int j = s[i];
287  const int nextj = s[i+1];
288  if((decreasingOrder && (a[j] < a[nextj]))
289  || (!decreasingOrder && (a[j] > a[nextj]))){
290  std::swap(s[i], s[i+1]);
291  changed = true;
292  }
293  }
294  } while(changed);
295 
296  // cout << __FILE__ << ":" << __LINE__ << ": "
297  // << "sorted list of indices:" ;
298  // for(unsigned i=0; i < s.size(); ++i){
299  // cout << "\t" << s[i];
300  // }
301  // cout << "\n";
302 }
void swap(edm::DataFrameContainer &lhs, edm::DataFrameContainer &rhs)
double a
Definition: hdecay.h:121
void EcalDccWeightBuilder::unbiasWeights ( std::vector< double > &  weights,
std::vector< int32_t > *  encodedWeigths 
)
private

Definition at line 304 of file EcalDccWeightBuilder.cc.

References decodeWeight(), encodeWeight(), mps_fire::i, and sort().

Referenced by computeAllWeights(), and ~EcalDccWeightBuilder().

305  {
306  const unsigned nw = weights.size();
307 
308  //computes integer weights, weights residuals and weight sum residual:
309  vector<double> dw(nw); //weight residuals due to interger encoding
310  vector<int> W(nw); //integer weights
311  int wsum = 0;
312  for(unsigned i = 0; i < nw; ++i){
313  W[i] = encodeWeight(weights[i]);
314  dw[i] = decodeWeight(W[i]) - weights[i];
315  wsum += W[i];
316  }
317 
318 // cout << __FILE__ << ":" << __LINE__ << ": "
319 // << "weights before bias correction: ";
320 // for(unsigned i=0; i<weights.size(); ++i){
321 // const double w = weights[i];
322 // cout << "\t" << encodeWeight(w) << "(" << w << ", dw = " << dw[i] << ")";
323 // }
324 // cout << "\t sum: " << wsum << "\n";
325 
326  //sorts weight residuals in decreasing order:
327  vector<int> iw(nw);
328  sort(dw, iw, true);
329 
330  //compensates weight sum residual by adding or substracting 1 to weights
331  //starting from:
332  // 1) the weight with the minimal signed residual if the correction
333  // is positive (wsum<0)
334  // 2) the weight with the maximal signed residual if the correction
335  // is negative (wsum>0)
336  int wsumSign = wsum>0?1:-1;
337  int i = wsum>0?0:(nw-1);
338  while(wsum!=0){
339  W[iw[i]] -= wsumSign;
340  wsum -= wsumSign;
341  i += wsumSign;
342  if(i<0 || i>=(int)nw){ //recompute the residuals if a second iteration is
343  // needed (in principle, it is not expected with usual input weights), :
344  for(unsigned i = 0; i < nw; ++i){
345  dw[i] = decodeWeight(W[i]) - weights[i];
346  sort(dw, iw, true);
347  }
348  }
349  if(i<0) i = nw-1;
350  if(i>=(int)nw) i = 0;
351  }
352 
353 // cout << __FILE__ << ":" << __LINE__ << ": "
354 // << "weights after bias correction: ";
355 // for(unsigned i=0; i<weights.size(); ++i){
356 // cout << "\t" << W[i] << "(" << decodeWeight(W[i]) << ", dw = "
357 // << (decodeWeight(W[i])-weights[i]) << ")";
358 // }
359 // cout << "\n";
360 
361  //copy result
362  if(encodedWeights!=nullptr) encodedWeights->resize(nw);
363  for(unsigned i = 0; i < nw; ++i){
364  weights[i] = decodeWeight(W[i]);
365  if(encodedWeights) (*encodedWeights)[i] = W[i];
366  }
367 }
void sort(const std::vector< T > &a, std::vector< int > &s, bool decreasingOrder=false)
void EcalDccWeightBuilder::writeWeightToAsciiFile ( )
private

Definition at line 396 of file EcalDccWeightBuilder.cc.

References asciiOutputFileName_, comment, dbId(), dbTag_, dbVersion_, dcc1stSample_, tablePrinter::delim, ecalDccFedIdMax, ecalDccFedIdMin, encodedWeights_, Exception, l1t::stage2::layer2::fedId, FrontierConditions_GlobalTag_cff::file, mps_fire::i, genParticles_cff::map, DetId::rawId(), sqlMode_, and create_public_lumi_plots::weights.

Referenced by analyze(), and ~EcalDccWeightBuilder().

396  {
397  string fName = !asciiOutputFileName_.empty()?
398  asciiOutputFileName_.c_str()
399  :"dccWeights.txt";
400  ofstream file(fName.c_str());
401  if(!file.good()){
402  throw cms::Exception("Output")
403  << "Failed to open file '"
404  << fName
405  << "'for writing DCC weights\n";
406  }
407 
408  const char* comment = sqlMode_?"-- ":"# ";
409 
410  file << comment << "List of weights for amplitude estimation to be used in DCC for\n"
411  << comment << "zero suppresssion.\n\n";
412  if(!sqlMode_){
413  file << comment << "Note: RU: trigger tower in EB, supercrystal in EE\n"
414  << comment << " xtl: crystal electronic channel id in RU, from 1 to 25\n\n"
415  << comment << " DetId SM FED RU xtl weights[0..5]...\n";
416  }
417 
418  if(sqlMode_){
419  file << "variable recid number;\n"
420  "exec select COND2CONF_INFO_SQ.NextVal into :recid from DUAL;\n"
421  "insert into weights_info (rec_id,tag,version) values (:recid,'"
422  << dbTag_ << "'," << dbVersion_ << ");\n";
423  file << "\n" << comment
424  << "index of first sample used in the weighting sum\n"
425  "begin\n"
426  " for fedid in " << ecalDccFedIdMin << ".." << ecalDccFedIdMax
427  << " loop\n"
428  " insert into dcc_weightsample_dat (rec_id, logic_id, sample_id, \n"
429  " weight_number)\n"
430  " values(:recid,fedid," << dcc1stSample_ << ",1);\n"
431  " end loop;\n"
432  "end;\n"
433  "/\n";
434  } else{
435  file << "1st DCC sample: " << dcc1stSample_ << "\n";
436  }
437 
438  file << "\n" << comment << "list of weights per crystal channel\n";
439 
440  for(map<DetId, std::vector<int32_t> >::const_iterator it
441  = encodedWeights_.begin();
442  it != encodedWeights_.end();
443  ++it){
444  const DetId& detId = it->first;
445 
446  int fedId;
447  int smId;
448  int ruId;
449  int xtalId;
450 
451  //detId -> fedId, smId, ruId, xtalId
452  dbId(detId, fedId, smId, ruId, xtalId);
453 
454  char delim = sqlMode_?',':' ';
455 
456  if(sqlMode_) file << "-- detId " << detId.rawId() << "\n"
457  << "insert into dcc_weights_dat(rec_id,sm_id,fed_id,"
458  "tt_id, cry_id,\n"
459  "weight_0,weight_1,weight_2,weight_3,weight_4,weight_5) \n"
460  "values ("
461  ":recid";
462 
463  const vector<int>& weights = it->second;
464  if(!sqlMode_) file << setw(10) << detId.rawId();
465  file << delim << setw(2) << smId;
466  file << delim << setw(3) << fedId;
467  file << delim << setw(2) << ruId;
468  file << delim << setw(2) << xtalId;
469 
470  for(unsigned i=0; i<weights.size(); ++i){
471  file << delim << setw(5) << weights[i];
472  }
473  if(sqlMode_) file << ");";
474  file << "\n";
475  }
476  if(!file.good()){
477  throw cms::Exception("Output") << "Error while writing DCC weights to '"
478  << fName << "' file.";
479  }
480 }
std::map< DetId, std::vector< int > > encodedWeights_
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:47
void dbId(const DetId &detId, int &fedId, int &smId, int &ruId, int &xtalId) const
Definition: DetId.h:18
static const int ecalDccFedIdMax
static const int ecalDccFedIdMin
#define comment(par)
Definition: vmac.h:163
void EcalDccWeightBuilder::writeWeightToDB ( )
private

Definition at line 544 of file EcalDccWeightBuilder.cc.

References MessageLogger_cfi::cerr, gather_cfg::cout, dbId(), dbPassword_, dbSid_, dbTag_, dbUser_, dbVersion_, dcc1stSample_, MillePedeFileConverter_cfg::e, ecalDccFedIdMax, ecalDccFedIdMin, encodedWeights_, cmsRelvalreport::exit, l1t::stage2::layer2::fedId, MillePedeFileConverter_cfg::fileName, ODFEWeightsInfo::getId(), mps_fire::i, EcalCondDBInterface::insertConfigDataArraySet(), EcalCondDBInterface::insertConfigSet(), genParticles_cff::map, nDccs, PasswordReader::readPassword(), IODConfig::setConfigTag(), ODWeightsDat::setCrystalId(), ODWeightsDat::setFedId(), ODWeightsDat::setId(), ODWeightsDat::setSMId(), ODWeightsDat::setTTId(), ODFEWeightsInfo::setVersion(), ODWeightsDat::setWeight0(), ODWeightsDat::setWeight1(), ODWeightsDat::setWeight2(), ODWeightsDat::setWeight3(), ODWeightsDat::setWeight4(), ODWeightsDat::setWeight5(), AlCaHLTBitMon_QueryRunRegistry::string, w, and create_public_lumi_plots::weights.

Referenced by analyze(), writeWeightToRootFile(), and ~EcalDccWeightBuilder().

544  {
545  cout << "going to write to the online DB "<<dbSid_<<" user "<<dbUser_<<endl;;
546  EcalCondDBInterface* econn;
547 
548  try {
549  cout << "Making connection..." << flush;
550  const string& filePrefix = string("file:");
551  if(dbPassword_.find(filePrefix)==0){ //password must be read for a file
552  string fileName = dbPassword_.substr(filePrefix.size());
553  //substitute dbPassword_ value by the password read from the file
555  pr.readPassword(fileName, dbUser_, dbPassword_);
556  }
557 
558  // cout << __FILE__ << ":" << __LINE__ << ": "
559  // << "Password: " << dbPassword_ << "\n";
560 
562  cout << "Done." << endl;
563  } catch (runtime_error &e) {
564  cerr << e.what() << endl;
565  exit(-1);
566  }
567 
568  ODFEWeightsInfo weight_info;
569  weight_info.setConfigTag(dbTag_);
570  weight_info.setVersion(dbVersion_);
571  cout << "Inserting in DB..." << endl;
572 
573  econn->insertConfigSet(&weight_info);
574 
575  int weight_id=weight_info.getId();
576  cout << "WeightInfo inserted with ID "<< weight_id<< endl;
577 
578  vector<ODWeightsDat> datadel;
579  datadel.reserve(encodedWeights_.size());
580 
581  vector<ODWeightsSamplesDat> dcc1stSampleConfig(nDccs);
582  for(int i = ecalDccFedIdMin; i <= ecalDccFedIdMax; ++i){
583  dcc1stSampleConfig[i].setId(weight_id);
584  dcc1stSampleConfig[i].setFedId(601+i);
585  dcc1stSampleConfig[i].setSampleId(dcc1stSample_);
586  dcc1stSampleConfig[i].setWeightNumber(-1); //not used.
587  }
588  econn->insertConfigDataArraySet(dcc1stSampleConfig, &weight_info);
589 
590  for(map<DetId, std::vector<int32_t> >::const_iterator it
591  = encodedWeights_.begin();
592  it != encodedWeights_.end();
593  ++it){
594  const DetId& detId = it->first;
595  const unsigned nWeights = 6;
596  vector<int> weights(nWeights);
597 
598  for(unsigned i=0; i<weights.size(); ++i){
599  //completing the weight vector with zeros in case it has
600  //less than 6 elements:
601  const vector<int>& w = it->second;
602  weights[i] = i<w.size()?w[i]:0;
603  }
604 
605  ODWeightsDat one_dat;
606  one_dat.setId(weight_id);
607 
608  int fedId;
609  int smId;
610  int ruId;
611  int xtalId;
612 
613  //detId -> fedId, smId, ruId, xtalId
614  dbId(detId, fedId, smId, ruId, xtalId);
615 
616  one_dat.setSMId(smId);
617  one_dat.setFedId(fedId);
618  one_dat.setTTId(ruId);
619  one_dat.setCrystalId(xtalId);
620 
621  one_dat.setWeight0(weights[0]);
622  one_dat.setWeight1(weights[1]);
623  one_dat.setWeight2(weights[2]);
624  one_dat.setWeight3(weights[3]);
625  one_dat.setWeight4(weights[4]);
626  one_dat.setWeight5(weights[5]);
627 
628  datadel.push_back(one_dat);
629  }
630  econn->insertConfigDataArraySet(datadel,&weight_info);
631  std::cout<< " .. done insertion in DB "<< endl;
632  delete econn;
633  cout<< "closed DB connection ... done" << endl;
634 }
void setId(int dac)
Definition: ODWeightsDat.h:21
void setWeight3(float x)
Definition: ODWeightsDat.h:39
void setWeight2(float x)
Definition: ODWeightsDat.h:38
const double w
Definition: UKUtility.cc:23
std::map< DetId, std::vector< int > > encodedWeights_
void setSMId(int dac)
Definition: ODWeightsDat.h:24
void dbId(const DetId &detId, int &fedId, int &smId, int &ruId, int &xtalId) const
void setWeight4(float x)
Definition: ODWeightsDat.h:40
void setVersion(int id)
void setWeight1(float x)
Definition: ODWeightsDat.h:37
void insertConfigDataArraySet(const std::vector< DATT > &data, ICONF *iconf) noexcept(false)
void setTTId(int dac)
Definition: ODWeightsDat.h:30
void insertConfigSet(ICONF *iconf) noexcept(false)
void setWeight0(float x)
Definition: ODWeightsDat.h:36
void setCrystalId(int dac)
Definition: ODWeightsDat.h:33
Definition: DetId.h:18
void readPassword(const std::string &fileName, const std::string &user, std::string &password)
int getId() const
void setConfigTag(std::string x)
Definition: IODConfig.h:31
void setWeight5(float x)
Definition: ODWeightsDat.h:41
static const int ecalDccFedIdMax
void setFedId(int dac)
Definition: ODWeightsDat.h:27
static const int ecalDccFedIdMin
void EcalDccWeightBuilder::writeWeightToRootFile ( )
private

Definition at line 481 of file EcalDccWeightBuilder.cc.

References popcon2dropbox::copy(), dbId(), encodedWeights_, Exception, l1t::stage2::layer2::fedId, FrontierConditions_GlobalTag_cff::file, genParticles_cff::map, rootOutputFileName_, lumiQTWidget::t, create_public_lumi_plots::weights, and writeWeightToDB().

Referenced by analyze(), and ~EcalDccWeightBuilder().

481  {
482  string fName = !rootOutputFileName_.empty()?
483  rootOutputFileName_.c_str()
484  :"dccWeights.root";
485  TFile file(fName.c_str(), "RECREATE");
486  if(file.IsZombie()){
487  throw cms::Exception("Output")
488  << "Failed to open file '"
489  << fName
490  << "'for writing DCC weights\n";
491  }
492  TTree t("dccWeights", "Weights for DCC ZS filter");
493  const int nWeightMax = 20; //normally n_weights = 6. A different might be used
494  // used for test purposes.
495  struct {
496  Int_t detId;
497  Int_t fedId;
498  Int_t smId;
499  Int_t ruId;
500  Int_t xtalId;
501  Int_t n_weights;
502  Int_t weights[nWeightMax];
503  } buf;
504  t.Branch("weights", &buf,
505  "rawDetId/I:"
506  "feId/I:"
507  "smSlotId/I:"
508  "ruId/I:"
509  "xtalInRuId/I:"
510  "n_weights/I:"
511  "weights[n_weights]/I");
512  for(map<DetId, std::vector<int32_t> >::const_iterator it
513  = encodedWeights_.begin();
514  it != encodedWeights_.end();
515  ++it){
516  buf.detId = it->first.rawId();
517  buf.n_weights = it->second.size();
518 
519  //detId -> fedId, smId, ruId, xtalId
520  dbId(buf.detId, buf.fedId, buf.smId, buf.ruId, buf.xtalId);
521 
522  if(buf.n_weights>nWeightMax){
523  throw cms::Exception("EcalDccWeight")
524  << "Number of weights (" << buf.n_weights
525  << ") for DetId " << buf.detId
526  << " exceeded maximum limit (" << nWeightMax
527  << ") of root output format. ";
528  }
529  copy(it->second.begin(), it->second.end(), buf.weights);
530  t.Fill();
531  }
532  t.Write();
533  file.Close();
534 }
std::map< DetId, std::vector< int > > encodedWeights_
def copy(args, dbName)
void dbId(const DetId &detId, int &fedId, int &smId, int &ruId, int &xtalId) const
Definition: DetId.h:18

Member Data Documentation

std::string EcalDccWeightBuilder::asciiOutputFileName_
private

Definition at line 122 of file EcalDccWeightBuilder.h.

Referenced by writeWeightToAsciiFile().

EcalIntercalibConstantMap& EcalDccWeightBuilder::calibMap_
private

Definition at line 133 of file EcalDccWeightBuilder.h.

Referenced by analyze(), and intercalib().

std::string EcalDccWeightBuilder::dbPassword_
private

Definition at line 126 of file EcalDccWeightBuilder.h.

Referenced by writeWeightToDB().

std::string EcalDccWeightBuilder::dbSid_
private

Definition at line 124 of file EcalDccWeightBuilder.h.

Referenced by writeWeightToDB().

std::string EcalDccWeightBuilder::dbTag_
private

Definition at line 127 of file EcalDccWeightBuilder.h.

Referenced by writeWeightToAsciiFile(), and writeWeightToDB().

std::string EcalDccWeightBuilder::dbUser_
private

Definition at line 125 of file EcalDccWeightBuilder.h.

Referenced by writeWeightToDB().

int EcalDccWeightBuilder::dbVersion_
private

Definition at line 128 of file EcalDccWeightBuilder.h.

Referenced by writeWeightToAsciiFile(), and writeWeightToDB().

int EcalDccWeightBuilder::dcc1stSample_
private
bool EcalDccWeightBuilder::dccWeightsWithIntercalib_
private

Definition at line 118 of file EcalDccWeightBuilder.h.

Referenced by analyze().

const int EcalDccWeightBuilder::ecalDccFedIdMax = 654
staticprivate

Definition at line 141 of file EcalDccWeightBuilder.h.

Referenced by writeWeightToAsciiFile(), and writeWeightToDB().

const int EcalDccWeightBuilder::ecalDccFedIdMin = 601
staticprivate

Definition at line 140 of file EcalDccWeightBuilder.h.

Referenced by writeWeightToAsciiFile(), and writeWeightToDB().

const EcalElectronicsMapping* EcalDccWeightBuilder::ecalElectronicsMap_
private

Definition at line 138 of file EcalDccWeightBuilder.h.

Referenced by analyze(), and dbId().

EcalIntercalibConstantMap EcalDccWeightBuilder::emptyCalibMap_
private

Definition at line 134 of file EcalDccWeightBuilder.h.

std::map<DetId, std::vector<int> > EcalDccWeightBuilder::encodedWeights_
private
edm::ESHandle<CaloGeometry> EcalDccWeightBuilder::geom_
private

Definition at line 131 of file EcalDccWeightBuilder.h.

Referenced by analyze(), and computeAllWeights().

mode_t EcalDccWeightBuilder::imode_
private

Definition at line 117 of file EcalDccWeightBuilder.h.

Referenced by computeAllWeights(), and EcalDccWeightBuilder().

std::vector<double> EcalDccWeightBuilder::inputWeights_
private

weights used in weightFromConfig mode.

Definition at line 115 of file EcalDccWeightBuilder.h.

Referenced by computeAllWeights(), and EcalDccWeightBuilder().

std::string EcalDccWeightBuilder::mode_
private

Definition at line 116 of file EcalDccWeightBuilder.h.

Referenced by EcalDccWeightBuilder().

const int EcalDccWeightBuilder::nDccs = ecalDccFedIdMax-ecalDccFedIdMin+1
staticprivate

Definition at line 142 of file EcalDccWeightBuilder.h.

Referenced by writeWeightToDB().

int EcalDccWeightBuilder::nDccWeights_
private

Definition at line 112 of file EcalDccWeightBuilder.h.

Referenced by computeAllWeights(), and EcalDccWeightBuilder().

std::string EcalDccWeightBuilder::rootOutputFileName_
private

Definition at line 123 of file EcalDccWeightBuilder.h.

Referenced by writeWeightToRootFile().

int EcalDccWeightBuilder::sampleToSkip_
private

Definition at line 111 of file EcalDccWeightBuilder.h.

Referenced by computeAllWeights().

bool EcalDccWeightBuilder::sqlMode_
private

Definition at line 129 of file EcalDccWeightBuilder.h.

Referenced by writeWeightToAsciiFile().

const double EcalDccWeightBuilder::weightScale_ = 1024.
staticprivate

Definition at line 137 of file EcalDccWeightBuilder.h.

Referenced by decodeWeight(), and encodeWeight().

bool EcalDccWeightBuilder::writeToAsciiFile_
private

Definition at line 120 of file EcalDccWeightBuilder.h.

Referenced by analyze().

bool EcalDccWeightBuilder::writeToDB_
private

Definition at line 119 of file EcalDccWeightBuilder.h.

Referenced by analyze().

bool EcalDccWeightBuilder::writeToRootFile_
private

Definition at line 121 of file EcalDccWeightBuilder.h.

Referenced by analyze().