CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
EcalEleCalibLooper Class Reference

ECAL TB 2006 calibration with matrix inversion technique. More...

#include <EcalEleCalibLooper.h>

Inheritance diagram for EcalEleCalibLooper:
edm::EDLooper edm::EDLooperBase

Public Member Functions

void beginOfJob () override
 BeginOfJob. More...
 
Status duringLoop (const edm::Event &, const edm::EventSetup &) override
 
 EcalEleCalibLooper (const edm::ParameterSet &)
 ctor More...
 
void endOfJob () override
 
Status endOfLoop (const edm::EventSetup &, unsigned int iCounter) override
 
void startingNewLoop (unsigned int) override
 
 ~EcalEleCalibLooper () override
 dtor More...
 
- Public Member Functions inherited from edm::EDLooper
 EDLooper ()
 
 EDLooper (EDLooper const &)=delete
 
EDLooperoperator= (EDLooper const &)=delete
 
 ~EDLooper () override
 
- Public Member Functions inherited from edm::EDLooperBase
virtual void attachTo (ActivityRegistry &)
 Override this method if you need to monitor the state of the processing. More...
 
void beginOfJob (EventSetupImpl const &)
 
virtual void beginOfJob (EventSetup const &)
 
void copyInfo (ScheduleInfo const &)
 
void doBeginLuminosityBlock (LuminosityBlockPrincipal &, EventSetupImpl const &, ProcessContext *)
 
void doBeginRun (RunPrincipal &, EventSetupImpl const &, ProcessContext *)
 
Status doDuringLoop (EventPrincipal &eventPrincipal, EventSetupImpl const &es, ProcessingController &, StreamContext *)
 
void doEndLuminosityBlock (LuminosityBlockPrincipal &, EventSetupImpl const &, ProcessContext *)
 
Status doEndOfLoop (EventSetupImpl const &es)
 
void doEndRun (RunPrincipal &, EventSetupImpl const &, ProcessContext *)
 
void doStartingNewLoop ()
 
 EDLooperBase ()
 
 EDLooperBase (EDLooperBase const &)=delete
 
virtual std::set< eventsetup::EventSetupRecordKeymodifyingRecords () const
 
EDLooperBaseoperator= (EDLooperBase const &)=delete
 
void prepareForNextLoop (eventsetup::EventSetupProvider *esp)
 
void setActionTable (ExceptionToActionTable const *actionTable)
 
void setModuleChanger (ModuleChanger *)
 
virtual ~EDLooperBase () noexcept(false)
 

Private Member Functions

int EBregionCheck (const int eta, const int phi) const
 Tells if you are in the region to be calibrated. More...
 
void EBRegionDefinition ()
 DS EB Region Definition. More...
 
int EBRegionId (const int, const int) const
 Reg Id generator EB --— for the barrel. More...
 
int EBregionsNum () const
 DS number of regions in EB. More...
 
int EEregionCheck (const int, const int) const
 returns zero if the coordinates are in the right place. More...
 
void EERegionDefinition ()
 
int EERegionId (const int, const int) const
 Gives the id of the region. More...
 
int EEregionsNum () const
 DS Number of regions in EE. More...
 
int etaShifter (const int) const
 LP Change the coordinate system. More...
 
double giveLimit (int)
 copes with the infinitives of the tangent More...
 

Private Attributes

bool isfirstcall_
 
edm::InputTag m_barrelAlCa
 EcalBarrel Input Collection name. More...
 
std::vector< DetIdm_barrelCells
 
EcalIntercalibConstantMap m_barrelMap
 the maps of recalib coeffs More...
 
std::vector< VEcalCalibBlock * > m_EcalCalibBlocks
 single blocks calibrators More...
 
edm::InputTag m_ElectronLabel
 To take the electrons. More...
 
edm::InputTag m_endcapAlCa
 EcalEndcap Input Collection name. More...
 
std::vector< DetIdm_endcapCells
 
EcalIntercalibConstantMap m_endcapMap
 
int m_etaEnd
 eta end of the region of interest More...
 
int m_etaStart
 phi size of the additive border to the sub-matrix More...
 
int m_etaWidth
 eta size of the sub-matrix More...
 
unsigned int m_loops
 DS sets the number of loops to do. More...
 
VFillMapm_MapFiller
 
double m_maxCoeff
 maximum coefficient accepted (RAW) More...
 
double m_maxEnergyPerCrystal
 maximum energy per crystal cut More...
 
int m_maxSelectedNumPerXtal
 maximum number of events per crystal More...
 
double m_minCoeff
 minimum coefficient accepted (RAW) More...
 
double m_minEnergyPerCrystal
 minimum energy per crystal cut More...
 
int m_phiEndEB
 phi end of the region of interest More...
 
int m_phiEndEE
 
int m_phiStartEB
 phi start of the region of interest More...
 
int m_phiStartEE
 
int m_phiWidthEB
 eta size of the additive border to the sub-matrix More...
 
int m_phiWidthEE
 
int m_radEnd
 
int m_radStart
 DS For the EE. More...
 
int m_radWidth
 
int m_recoWindowSidex
 reconstruction window size More...
 
int m_recoWindowSidey
 
std::vector< int > m_regions
 
int m_usingBlockSolver
 to exclude the blocksolver More...
 
std::map< int, int > m_xtalNumOfHits
 
std::map< int, int > m_xtalPositionInRegion
 
std::map< int, int > m_xtalRegionId
 

Additional Inherited Members

- Public Types inherited from edm::EDLooperBase
enum  Status { kContinue, kStop }
 
- Protected Member Functions inherited from edm::EDLooperBase
ModuleChangermoduleChanger ()
 This only returns a non-zero value during the call to endOfLoop. More...
 
ScheduleInfo const * scheduleInfo () const
 This returns a non-zero value after the constructor has been called. More...
 

Detailed Description

ECAL TB 2006 calibration with matrix inversion technique.

Author

Definition at line 32 of file EcalEleCalibLooper.h.

Constructor & Destructor Documentation

EcalEleCalibLooper::EcalEleCalibLooper ( const edm::ParameterSet iConfig)
explicit

ctor

LP ctor.

Graphs to ckeck the region definition

End of Graphs

Definition at line 33 of file EcalEleCalibLooper.cc.

References qcdUeDQM_cfi::algorithm, EBRegionDefinition(), EBregionsNum(), EERegionDefinition(), EEregionsNum(), PVValHelper::eta, beamvalidation::exit(), edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), m_barrelMap, m_EcalCalibBlocks, m_endcapMap, m_etaEnd, m_etaStart, m_etaWidth, m_MapFiller, m_maxEnergyPerCrystal, m_minEnergyPerCrystal, m_radEnd, m_radStart, m_radWidth, m_recoWindowSidex, m_recoWindowSidey, m_regions, m_xtalPositionInRegion, m_xtalRegionId, MillePedeFileConverter_cfg::out, phi, HLT_2018_cff::region, AlCaHLTBitMon_QueryRunRegistry::string, EBDetId::unhashIndex(), EEDetId::validDetId(), x, and y.

34  : m_barrelAlCa(iConfig.getParameter<edm::InputTag>("alcaBarrelHitCollection")),
35  m_endcapAlCa(iConfig.getParameter<edm::InputTag>("alcaEndcapHitCollection")),
36  m_recoWindowSidex(iConfig.getParameter<int>("recoWindowSidex")),
37  m_recoWindowSidey(iConfig.getParameter<int>("recoWindowSidey")),
38  m_etaWidth(iConfig.getParameter<int>("etaWidth")),
39  m_phiWidthEB(iConfig.getParameter<int>("phiWidthEB")),
40  m_etaStart(etaShifter(iConfig.getParameter<int>("etaStart"))),
41  m_etaEnd(etaShifter(iConfig.getParameter<int>("etaEnd"))),
42  m_phiStartEB(iConfig.getParameter<int>("phiStartEB")),
43  m_phiEndEB(iConfig.getParameter<int>("phiEndEB")),
44  m_radStart(iConfig.getParameter<int>("radStart")),
45  m_radEnd(iConfig.getParameter<int>("radEnd")),
46  m_radWidth(iConfig.getParameter<int>("radWidth")),
47  m_phiStartEE(iConfig.getParameter<int>("phiStartEE")),
48  m_phiEndEE(iConfig.getParameter<int>("phiEndEE")),
49  m_phiWidthEE(iConfig.getParameter<int>("phiWidthEE")),
50  m_maxSelectedNumPerXtal(iConfig.getParameter<int>("maxSelectedNumPerCrystal")),
51  m_minEnergyPerCrystal(iConfig.getParameter<double>("minEnergyPerCrystal")),
52  m_maxEnergyPerCrystal(iConfig.getParameter<double>("maxEnergyPerCrystal")),
53  m_minCoeff(iConfig.getParameter<double>("minCoeff")),
54  m_maxCoeff(iConfig.getParameter<double>("maxCoeff")),
55  m_usingBlockSolver(iConfig.getParameter<int>("usingBlockSolver")),
56  m_loops(iConfig.getParameter<int>("loops")),
57  m_ElectronLabel(iConfig.getParameter<edm::InputTag>("electronLabel")) {
58  edm::LogInfo("IML") << "[EcalEleCalibLooper][ctor] asserts";
59  assert(!((m_etaEnd - m_etaStart) % m_etaWidth));
60 
61  assert(m_etaStart >= 0 && m_etaStart <= 171);
62  assert(m_etaEnd >= m_etaStart && m_etaEnd <= 171);
63  assert((m_radEnd - m_radStart) % m_radWidth == 0);
64  assert(m_radStart >= 0 && m_radStart <= 50);
65  assert(m_radEnd >= m_radStart && m_radEnd <= 50);
66  edm::LogInfo("IML") << "[EcalEleCalibLooper][ctor] entering ";
67  edm::LogInfo("IML") << "[EcalEleCalibLooper][ctor] region definition";
71  TH2F* EBRegion = new TH2F("EBRegion", "EBRegion", 170, 0, 170, 360, 0, 360);
72  for (int eta = 0; eta < 170; ++eta)
73  for (int phi = 0; phi < 360; ++phi) {
74  EBRegion->Fill(eta, phi, m_xtalRegionId[EBDetId::unhashIndex(eta * 360 + phi).rawId()]);
75  }
76  TH2F* EERegion = new TH2F("EERegion", "EERegion", 100, 0, 100, 100, 0, 100);
77  for (int x = 0; x < 100; ++x)
78  for (int y = 0; y < 100; ++y) {
79  if (EEDetId::validDetId(x + 1, y + 1, 1))
80  EERegion->Fill(x, y, m_xtalRegionId[EEDetId(x + 1, y + 1, -1).rawId()]);
81  }
82 
83  TFile out("EBZone.root", "recreate");
84  EBRegion->Write();
85  EERegion->Write();
86  out.Close();
87  delete EERegion;
88  delete EBRegion;
90 
91  //PG build the calibration algorithms for the regions
92  //PG ------------------------------------------------
93 
94  edm::LogInfo("IML") << "[EcalEleCalibLooper][ctor] Calib Block";
95  std::string algorithm = iConfig.getParameter<std::string>("algorithm");
96  int eventWeight = iConfig.getUntrackedParameter<int>("L3EventWeight", 1);
97 
98  //PG loop over the regions set
99  for (int region = 0; region < EBregionsNum() + 2 * EEregionsNum(); ++region) {
100  if (algorithm == "IMA")
101  m_EcalCalibBlocks.push_back(new IMACalibBlock(m_regions.at(region)));
102  else if (algorithm == "L3")
103  m_EcalCalibBlocks.push_back(new L3CalibBlock(m_regions.at(region), eventWeight));
104  else {
105  edm::LogError("building") << algorithm << " is not a valid calibration algorithm";
106  exit(1);
107  }
108  } //PG loop over the regions set
109  std::string mapFiller = iConfig.getParameter<std::string>("FillType");
110  if (mapFiller == "Cluster")
117  &m_barrelMap,
118  &m_endcapMap);
119  if (mapFiller == "Matrix")
126  &m_barrelMap,
127  &m_endcapMap);
128 } //end ctor
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
int EEregionsNum() const
DS Number of regions in EE.
std::vector< VEcalCalibBlock * > m_EcalCalibBlocks
single blocks calibrators
edm::InputTag m_endcapAlCa
EcalEndcap Input Collection name.
unsigned int m_loops
DS sets the number of loops to do.
int m_phiWidthEB
eta size of the additive border to the sub-matrix
int m_maxSelectedNumPerXtal
maximum number of events per crystal
double m_minEnergyPerCrystal
minimum energy per crystal cut
double m_maxCoeff
maximum coefficient accepted (RAW)
interface to the L3Univ class for testing
Definition: L3CalibBlock.h:24
int m_usingBlockSolver
to exclude the blocksolver
int m_radStart
DS For the EE.
edm::InputTag m_ElectronLabel
To take the electrons.
int m_etaStart
phi size of the additive border to the sub-matrix
EcalIntercalibConstantMap m_barrelMap
the maps of recalib coeffs
int m_recoWindowSidex
reconstruction window size
std::map< int, int > m_xtalRegionId
void EBRegionDefinition()
DS EB Region Definition.
double m_minCoeff
minimum coefficient accepted (RAW)
static bool validDetId(int crystal_ix, int crystal_iy, int iz)
Definition: EEDetId.h:248
int m_etaWidth
eta size of the sub-matrix
std::vector< int > m_regions
int etaShifter(const int) const
LP Change the coordinate system.
static EBDetId unhashIndex(int hi)
get a DetId from a compact index for arrays
Definition: EBDetId.h:110
int m_phiEndEB
phi end of the region of interest
std::map< int, int > m_xtalPositionInRegion
int m_phiStartEB
phi start of the region of interest
EcalIntercalibConstantMap m_endcapMap
edm::InputTag m_barrelAlCa
EcalBarrel Input Collection name.
int m_etaEnd
eta end of the region of interest
def exit(msg="")
int EBregionsNum() const
DS number of regions in EB.
double m_maxEnergyPerCrystal
maximum energy per crystal cut
EcalEleCalibLooper::~EcalEleCalibLooper ( )
override

dtor

LP destructor.

Definition at line 133 of file EcalEleCalibLooper.cc.

References m_EcalCalibBlocks.

133  {
134  edm::LogInfo("IML") << "[EcalEleCalibLooper][dtor]";
135  for (std::vector<VEcalCalibBlock*>::iterator calibBlock = m_EcalCalibBlocks.begin();
136  calibBlock != m_EcalCalibBlocks.end();
137  ++calibBlock)
138  delete (*calibBlock);
139 }
std::vector< VEcalCalibBlock * > m_EcalCalibBlocks
single blocks calibrators

Member Function Documentation

void EcalEleCalibLooper::beginOfJob ( )
overridevirtual

BeginOfJob.

Reimplemented from edm::EDLooperBase.

Definition at line 144 of file EcalEleCalibLooper.cc.

References isfirstcall_.

144 { isfirstcall_ = true; }
edm::EDLooper::Status EcalEleCalibLooper::duringLoop ( const edm::Event iEvent,
const edm::EventSetup iSetup 
)
overridevirtual

duringLoop return the status Kcontinue, fills the calibBlock with the recHits

Implements edm::EDLooper.

Definition at line 166 of file EcalEleCalibLooper.cc.

References funct::abs(), DetId::Ecal, EcalBarrel, EcalEndcap, HcalObjRepresent::Fill(), VFillMap::fillMap(), dqmdumpme::first, edm::EventSetup::get(), edm::Event::getByLabel(), CaloGeometry::getValidDetIds(), isfirstcall_, edm::HandleBase::isValid(), edm::EDLooperBase::kContinue, m_barrelAlCa, m_barrelCells, m_barrelMap, m_EcalCalibBlocks, m_ElectronLabel, m_endcapAlCa, m_endcapCells, m_endcapMap, m_MapFiller, m_maxSelectedNumPerXtal, m_xtalNumOfHits, m_xtalRegionId, Max(), and edm::Handle< T >::product().

166  {
167  // this chunk used to belong to beginJob(isetup). Moved here
168  // with the beginJob without arguments migration
169 
170  if (isfirstcall_) {
171  edm::ESHandle<CaloGeometry> geoHandle;
172  iSetup.get<CaloGeometryRecord>().get(geoHandle);
173  const CaloGeometry& geometry = *geoHandle;
176  for (std::vector<DetId>::const_iterator barrelIt = m_barrelCells.begin(); barrelIt != m_barrelCells.end();
177  ++barrelIt) {
178  m_barrelMap[*barrelIt] = 1;
179  m_xtalNumOfHits[barrelIt->rawId()] = 0;
180  }
181  for (std::vector<DetId>::const_iterator endcapIt = m_endcapCells.begin(); endcapIt != m_endcapCells.end();
182  ++endcapIt) {
183  m_endcapMap[*endcapIt] = 1;
184  m_xtalNumOfHits[endcapIt->rawId()] = 0;
185  }
186 
187  isfirstcall_ = false;
188  }
189 
190  //take the collection of recHits in the barrel
191  const EBRecHitCollection* barrelHitsCollection = nullptr;
192  edm::Handle<EBRecHitCollection> barrelRecHitsHandle;
193  iEvent.getByLabel(m_barrelAlCa, barrelRecHitsHandle);
194  barrelHitsCollection = barrelRecHitsHandle.product();
195  if (!barrelRecHitsHandle.isValid()) {
196  edm::LogError("reading") << "[EcalEleCalibLooper] barrel rec hits not found";
197  return kContinue;
198  }
199 
200  //take the collection of rechis in the endcap
201  const EERecHitCollection* endcapHitsCollection = nullptr;
202  edm::Handle<EERecHitCollection> endcapRecHitsHandle;
203  iEvent.getByLabel(m_endcapAlCa, endcapRecHitsHandle);
204  endcapHitsCollection = endcapRecHitsHandle.product();
205  if (!endcapRecHitsHandle.isValid()) {
206  edm::LogError("reading") << "[EcalEleCalibLooper] endcap rec hits not found";
207  return kContinue;
208  }
209 
210  //Takes the electron collection of the pixel detector
212  iEvent.getByLabel(m_ElectronLabel, pElectrons);
213  if (!pElectrons.isValid()) {
214  edm::LogError("reading") << "[EcalEleCalibLooper] electrons not found";
215  return kContinue;
216  }
217 
218  //Start the loop over the electrons
219  for (reco::GsfElectronCollection::const_iterator eleIt = pElectrons->begin(); eleIt != pElectrons->end(); ++eleIt) {
220  double pSubtract = 0;
221  double pTk = 0;
222  std::map<int, double> xtlMap;
223  DetId Max = 0;
224  if (std::abs(eleIt->eta()) < 1.49)
225  Max = EcalClusterTools::getMaximum(eleIt->superCluster()->hitsAndFractions(), barrelHitsCollection).first;
226  else
227  Max = EcalClusterTools::getMaximum(eleIt->superCluster()->hitsAndFractions(), endcapHitsCollection).first;
228  if (Max.det() == 0)
229  continue;
231  eleIt->superCluster()->hitsAndFractions(), Max, barrelHitsCollection, endcapHitsCollection, xtlMap, pSubtract);
233  continue;
234  ++m_xtalNumOfHits[Max.rawId()];
235  if (m_xtalRegionId[Max.rawId()] == -1)
236  continue;
237  pTk = eleIt->trackMomentumAtVtx().R();
238  m_EcalCalibBlocks.at(m_xtalRegionId[Max.rawId()])->Fill(xtlMap.begin(), xtlMap.end(), pTk, pSubtract);
239  } //End of the loop over the electron collection
240 
241  return kContinue;
242 } //end of duringLoop
virtual void fillMap(const std::vector< std::pair< DetId, float > > &, const DetId, const EcalRecHitCollection *, const EcalRecHitCollection *, std::map< int, double > &xtlMap, double &)=0
The Map filler.
std::vector< DetId > m_barrelCells
std::vector< VEcalCalibBlock * > m_EcalCalibBlocks
single blocks calibrators
edm::InputTag m_endcapAlCa
EcalEndcap Input Collection name.
int m_maxSelectedNumPerXtal
maximum number of events per crystal
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
std::vector< DetId > m_endcapCells
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
edm::InputTag m_ElectronLabel
To take the electrons.
bool isValid() const
Definition: HandleBase.h:70
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:488
EcalIntercalibConstantMap m_barrelMap
the maps of recalib coeffs
T Max(T a, T b)
Definition: MathUtil.h:44
std::map< int, int > m_xtalRegionId
Definition: DetId.h:17
T const * product() const
Definition: Handle.h:69
std::map< int, int > m_xtalNumOfHits
std::vector< DetId > getValidDetIds() const
Get the list of all valid detector ids.
Definition: CaloGeometry.cc:75
T get() const
Definition: EventSetup.h:73
EcalIntercalibConstantMap m_endcapMap
edm::InputTag m_barrelAlCa
EcalBarrel Input Collection name.
int EcalEleCalibLooper::EBregionCheck ( const int  eta,
const int  phi 
) const
private

Tells if you are in the region to be calibrated.

Definition at line 344 of file EcalEleCalibLooper.cc.

References m_etaEnd, m_etaStart, m_phiEndEB, and m_phiStartEB.

Referenced by EBRegionId().

344  {
345  if (eta < m_etaStart)
346  return 1;
347  if (eta >= m_etaEnd)
348  return 2;
349  if (phi < m_phiStartEB)
350  return 3;
351  if (phi >= m_phiEndEB)
352  return 4;
353  return 0;
354 }
int m_etaStart
phi size of the additive border to the sub-matrix
int m_phiEndEB
phi end of the region of interest
int m_phiStartEB
phi start of the region of interest
int m_etaEnd
eta end of the region of interest
void EcalEleCalibLooper::EBRegionDefinition ( )
private

DS EB Region Definition.

Definition at line 448 of file EcalEleCalibLooper.cc.

References EBRegionId(), EBregionsNum(), PVValHelper::eta, m_regions, m_xtalPositionInRegion, m_xtalRegionId, phi, DetId::rawId(), and EBDetId::unhashIndex().

Referenced by EcalEleCalibLooper().

448  {
449  int reg = -1;
450  for (int it = 0; it < EBregionsNum(); ++it)
451  m_regions.push_back(0);
452  for (int eta = 0; eta < 170; ++eta)
453  for (int phi = 0; phi < 360; ++phi) {
454  reg = EBRegionId(eta, phi);
455  m_xtalRegionId[EBDetId::unhashIndex(eta * 360 + phi).rawId()] = reg;
456  if (reg == -1)
457  continue;
459  ++m_regions.at(reg);
460  }
461 }
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
std::map< int, int > m_xtalRegionId
std::vector< int > m_regions
static EBDetId unhashIndex(int hi)
get a DetId from a compact index for arrays
Definition: EBDetId.h:110
std::map< int, int > m_xtalPositionInRegion
int EBRegionId(const int, const int) const
Reg Id generator EB --— for the barrel.
int EBregionsNum() const
DS number of regions in EB.
int EcalEleCalibLooper::EBRegionId ( const int  etaXtl,
const int  phiXtl 
) const
private

Reg Id generator EB --— for the barrel.

Definition at line 390 of file EcalEleCalibLooper.cc.

References EBregionCheck(), m_etaStart, m_etaWidth, m_phiEndEB, m_phiStartEB, and m_phiWidthEB.

Referenced by EBRegionDefinition().

390  {
391  if (EBregionCheck(etaXtl, phiXtl))
392  return -1;
393  int phifake = m_phiStartEB;
394  if (m_phiStartEB > m_phiEndEB)
395  phifake = m_phiStartEB - 360;
396  int Nphi = (m_phiEndEB - phifake) / m_phiWidthEB;
397  int etaI = (etaXtl - m_etaStart) / m_etaWidth;
398  int phiI = (phiXtl - m_phiStartEB) / m_phiWidthEB;
399  int regionNumEB = phiI + Nphi * etaI;
400  return (int)regionNumEB;
401 }
int EBregionCheck(const int eta, const int phi) const
Tells if you are in the region to be calibrated.
int m_phiWidthEB
eta size of the additive border to the sub-matrix
int m_etaStart
phi size of the additive border to the sub-matrix
int m_etaWidth
eta size of the sub-matrix
int m_phiEndEB
phi end of the region of interest
int m_phiStartEB
phi start of the region of interest
int EcalEleCalibLooper::EBregionsNum ( ) const
inlineprivate

DS number of regions in EB.

Definition at line 438 of file EcalEleCalibLooper.cc.

References m_etaEnd, m_etaStart, m_etaWidth, m_phiEndEB, m_phiStartEB, m_phiWidthEB, and phi.

Referenced by EBRegionDefinition(), EcalEleCalibLooper(), and EERegionDefinition().

438  {
439  int phi = m_phiStartEB;
440  if (m_phiStartEB > m_phiEndEB)
441  phi = m_phiStartEB - 360;
442  return ((m_etaEnd - m_etaStart) / m_etaWidth) * ((m_phiEndEB - phi) / m_phiWidthEB);
443 }
int m_phiWidthEB
eta size of the additive border to the sub-matrix
int m_etaStart
phi size of the additive border to the sub-matrix
int m_etaWidth
eta size of the sub-matrix
int m_phiEndEB
phi end of the region of interest
int m_phiStartEB
phi start of the region of interest
int m_etaEnd
eta end of the region of interest
int EcalEleCalibLooper::EEregionCheck ( const int  ics,
const int  ips 
) const
private

returns zero if the coordinates are in the right place.

Definition at line 503 of file EcalEleCalibLooper.cc.

References degrees(), m_phiEndEE, m_phiStartEE, m_radEnd, m_radStart, phi, x, and y.

Referenced by EERegionId().

503  {
504  int x = ics - 50;
505  int y = ips - 50;
506  double radius2 = x * x + y * y;
507  if (radius2 < 10 * 10)
508  return 1; //center of the donut
509  if (radius2 > 50 * 50)
510  return 1; //outer part of the donut
511  if (radius2 < m_radStart * m_radStart)
512  return 2;
513  if (radius2 >= m_radEnd * m_radEnd)
514  return 2;
515  double phi = atan2(static_cast<double>(y), static_cast<double>(x));
516  phi = degrees(phi);
517  if (phi < 0)
518  phi += 360;
519  if (m_phiStartEE < m_phiEndEE && phi > m_phiStartEE && phi < m_phiEndEE)
520  return 0;
521  if (m_phiStartEE > m_phiEndEE && (phi > m_phiStartEE || phi < m_phiEndEE))
522  return 0;
523  return 3;
524 }
double degrees(double radiants)
def degrees
int m_radStart
DS For the EE.
void EcalEleCalibLooper::EERegionDefinition ( )
private

Definition at line 466 of file EcalEleCalibLooper.cc.

References bsc_activity_cfg::EBnum, EBregionsNum(), bsc_activity_cfg::EEnum, EERegionId(), EEregionsNum(), Ecal07UnpackerData_cfi::ics, m_regions, m_xtalPositionInRegion, m_xtalRegionId, DetId::rawId(), and EEDetId::validDetId().

Referenced by EcalEleCalibLooper().

466  {
467  // reset
468  int EBnum = EBregionsNum();
469  int EEnum = EEregionsNum();
470  for (int it = 0; it < 2 * EEnum; ++it)
471  m_regions.push_back(0);
472  // loop sui xtl
473  int reg = -1;
474  for (int ics = 0; ics < 100; ++ics)
475  for (int ips = 0; ips < 100; ++ips) {
476  int ireg = EERegionId(ics, ips);
477  if (ireg == -1)
478  reg = -1;
479  else
480  reg = EBnum + ireg;
481  if (EEDetId::validDetId(ics + 1, ips + 1, 1)) {
482  m_xtalRegionId[EEDetId(ics + 1, ips + 1, 1).rawId()] = reg;
483  if (reg == -1)
484  continue;
485  m_xtalPositionInRegion[EEDetId(ics + 1, ips + 1, 1).rawId()] = m_regions.at(reg);
486  ++m_regions.at(reg);
487  }
488  if (reg != -1)
489  reg += EEnum;
490  if (EEDetId::validDetId(ics + 1, ips + 1, -1)) {
491  m_xtalRegionId[EEDetId(ics + 1, ips + 1, -1).rawId()] = reg;
492  if (reg == -1)
493  continue;
494  m_xtalPositionInRegion[EEDetId(ics + 1, ips + 1, -1).rawId()] = m_regions.at(reg);
495  ++m_regions.at(reg);
496  }
497  }
498 }
int EEregionsNum() const
DS Number of regions in EE.
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
std::map< int, int > m_xtalRegionId
int EERegionId(const int, const int) const
Gives the id of the region.
static bool validDetId(int crystal_ix, int crystal_iy, int iz)
Definition: EEDetId.h:248
std::vector< int > m_regions
std::map< int, int > m_xtalPositionInRegion
int EBregionsNum() const
DS number of regions in EB.
int EcalEleCalibLooper::EERegionId ( const int  ics,
const int  ips 
) const
private

Gives the id of the region.

Definition at line 406 of file EcalEleCalibLooper.cc.

References degrees(), EEregionCheck(), m_phiEndEE, m_phiStartEE, m_phiWidthEE, m_radStart, m_radWidth, phi, CosmicsPD_Skims::radius, and mathSSE::sqrt().

Referenced by EERegionDefinition().

406  {
407  if (EEregionCheck(ics, ips))
408  return -1;
409  int phifake = m_phiStartEE;
410  if (m_phiStartEE > m_phiEndEE)
411  phifake = m_phiStartEE - 360;
412  double radius = (ics - 50) * (ics - 50) + (ips - 50) * (ips - 50);
413  radius = sqrt(radius);
414  int Nphi = (m_phiEndEE - phifake) / m_phiWidthEE;
415  double phi = atan2(static_cast<double>(ips - 50), static_cast<double>(ics - 50));
416  phi = degrees(phi);
417  if (phi < 0)
418  phi += 360;
419  int radI = static_cast<int>((radius - m_radStart) / m_radWidth);
420  int phiI = static_cast<int>((m_phiEndEE - phi) / m_phiWidthEE);
421  int regionNumEE = phiI + Nphi * radI;
422  return regionNumEE;
423 }
double degrees(double radiants)
def degrees
T sqrt(T t)
Definition: SSEVec.h:19
int m_radStart
DS For the EE.
int EEregionCheck(const int, const int) const
returns zero if the coordinates are in the right place.
int EcalEleCalibLooper::EEregionsNum ( ) const
inlineprivate

DS Number of regions in EE.

Definition at line 428 of file EcalEleCalibLooper.cc.

References m_phiEndEE, m_phiStartEE, m_phiWidthEE, m_radEnd, m_radStart, and m_radWidth.

Referenced by EcalEleCalibLooper(), and EERegionDefinition().

428  {
429  int phifake = m_phiStartEE;
430  if (m_phiStartEE > m_phiEndEE)
431  phifake = m_phiStartEE - 360;
432  return ((m_radEnd - m_radStart) / m_radWidth) * ((m_phiEndEE - phifake) / m_phiWidthEE);
433 }
int m_radStart
DS For the EE.
void EcalEleCalibLooper::endOfJob ( )
overridevirtual

LP endOfJob writes the coefficients in the xml format and exits

Reimplemented from edm::EDLooperBase.

Definition at line 320 of file EcalEleCalibLooper.cc.

References EcalBarrel, EcalEndcap, m_barrelCells, m_barrelMap, m_endcapCells, m_endcapMap, and calibXMLwriter::writeLine().

320  {
321  edm::LogInfo("IML") << "[InvMatrixCalibLooper][endOfJob] saving calib coeffs";
322 
323  //Writes the coeffs
324  calibXMLwriter barrelWriter(EcalBarrel);
325  calibXMLwriter endcapWriter(EcalEndcap);
326  for (std::vector<DetId>::const_iterator barrelIt = m_barrelCells.begin(); barrelIt != m_barrelCells.end();
327  ++barrelIt) {
328  EBDetId eb(*barrelIt);
329  barrelWriter.writeLine(eb, m_barrelMap[*barrelIt]);
330  }
331  for (std::vector<DetId>::const_iterator endcapIt = m_endcapCells.begin(); endcapIt != m_endcapCells.end();
332  ++endcapIt) {
333  EEDetId ee(*endcapIt);
334  endcapWriter.writeLine(ee, m_endcapMap[*endcapIt]);
335  }
336  edm::LogInfo("IML") << "[InvMatrixCalibLooper][endOfJob] Exiting";
337 }
std::vector< DetId > m_barrelCells
std::vector< DetId > m_endcapCells
EcalIntercalibConstantMap m_barrelMap
the maps of recalib coeffs
EcalIntercalibConstantMap m_endcapMap
edm::EDLooper::Status EcalEleCalibLooper::endOfLoop ( const edm::EventSetup dumb,
unsigned int  iCounter 
)
override

EndOfLoop Return kContinue if there's still another loop to be done; otherwise stops returnig kStop; Takes the coefficients solving the calibBlock;

Definition at line 249 of file EcalEleCalibLooper.cc.

References corrVsCorr::filename, EBDetId::ieta(), EBDetId::iphi(), EEDetId::ix(), EEDetId::iy(), edm::EDLooperBase::kContinue, edm::EDLooperBase::kStop, m_barrelCells, m_barrelMap, m_EcalCalibBlocks, m_endcapCells, m_endcapMap, m_loops, m_maxCoeff, m_minCoeff, m_usingBlockSolver, m_xtalPositionInRegion, m_xtalRegionId, and EEDetId::zside().

249  {
250  edm::LogInfo("IML") << "[InvMatrixCalibLooper][endOfLoop] entering...";
251  for (std::vector<VEcalCalibBlock*>::iterator calibBlock = m_EcalCalibBlocks.begin();
252  calibBlock != m_EcalCalibBlocks.end();
253  ++calibBlock)
254  (*calibBlock)->solve(m_usingBlockSolver, m_minCoeff, m_maxCoeff);
255 
256  TH1F* EBcoeffEnd = new TH1F("EBRegion", "EBRegion", 100, 0.5, 2.1);
257  TH2F* EBcoeffMap = new TH2F("EBcoeff", "EBcoeff", 171, -85, 85, 360, 1, 361);
258  TH1F* EEPcoeffEnd = new TH1F("EEPRegion", "EEPRegion", 100, 0.5, 2.1);
259  TH1F* EEMcoeffEnd = new TH1F("EEMRegion", "EEMRegion", 100, 0.5, 2.1);
260  TH2F* EEPcoeffMap = new TH2F("EEPcoeffMap", "EEPcoeffMap", 101, 1, 101, 101, 0, 101);
261  TH2F* EEMcoeffMap = new TH2F("EEMcoeffMap", "EEMcoeffMap", 101, 1, 101, 101, 0, 101);
262  //loop over the barrel xtals to get the coeffs
263  for (std::vector<DetId>::const_iterator barrelIt = m_barrelCells.begin(); barrelIt != m_barrelCells.end();
264  ++barrelIt) {
265  EBDetId ee(*barrelIt);
266  int index = barrelIt->rawId();
267  if (m_xtalRegionId[index] == -1)
268  continue;
269  m_barrelMap[*barrelIt] *= m_EcalCalibBlocks.at(m_xtalRegionId[index])->at(m_xtalPositionInRegion[index]);
270  EBcoeffEnd->Fill(m_barrelMap[*barrelIt]);
271  EBcoeffMap->Fill(ee.ieta(), ee.iphi(), m_barrelMap[*barrelIt]);
272  } //PG loop over phi
273 
274  // loop over the EndCap to get the recalib coefficients
275  for (std::vector<DetId>::const_iterator endcapIt = m_endcapCells.begin(); endcapIt != m_endcapCells.end();
276  ++endcapIt) {
277  EEDetId ee(*endcapIt);
278  int index = endcapIt->rawId();
279  if (ee.zside() > 0) {
280  if (m_xtalRegionId[index] == -1)
281  continue;
282  m_endcapMap[*endcapIt] *= m_EcalCalibBlocks.at(m_xtalRegionId[index])->at(m_xtalPositionInRegion[index]);
283  EEPcoeffEnd->Fill(m_endcapMap[*endcapIt]);
284  EEPcoeffMap->Fill(ee.ix(), ee.iy(), m_endcapMap[*endcapIt]);
285  } else {
286  m_endcapMap[*endcapIt] *= m_EcalCalibBlocks.at(m_xtalRegionId[index])->at(m_xtalPositionInRegion[index]);
287  EEMcoeffEnd->Fill(m_endcapMap[*endcapIt]);
288  EEMcoeffMap->Fill(ee.ix(), ee.iy(), m_endcapMap[*endcapIt]);
289  }
290  } // loop over the EndCap to get the recalib coefficients
291 
292  edm::LogInfo("IML") << "[InvMatrixCalibLooper][endOfLoop] End of endOfLoop";
293 
294  char filename[80];
295  sprintf(filename, "coeffs%d.root", iCounter);
296  TFile zout(filename, "recreate");
297  EBcoeffEnd->Write();
298  EBcoeffMap->Write();
299  EEPcoeffEnd->Write();
300  EEPcoeffMap->Write();
301  EEMcoeffEnd->Write();
302  EEMcoeffMap->Write();
303  zout.Close();
304  delete EBcoeffEnd;
305  delete EBcoeffMap;
306  delete EEPcoeffEnd;
307  delete EEMcoeffEnd;
308  delete EEPcoeffMap;
309  delete EEMcoeffMap;
310  if (iCounter < m_loops - 1)
311  return kContinue;
312  else
313  return kStop;
314 }
std::vector< DetId > m_barrelCells
std::vector< VEcalCalibBlock * > m_EcalCalibBlocks
single blocks calibrators
unsigned int m_loops
DS sets the number of loops to do.
double m_maxCoeff
maximum coefficient accepted (RAW)
std::vector< DetId > m_endcapCells
int m_usingBlockSolver
to exclude the blocksolver
EcalIntercalibConstantMap m_barrelMap
the maps of recalib coeffs
std::map< int, int > m_xtalRegionId
double m_minCoeff
minimum coefficient accepted (RAW)
std::map< int, int > m_xtalPositionInRegion
EcalIntercalibConstantMap m_endcapMap
int EcalEleCalibLooper::etaShifter ( const int  etaOld) const
private

LP Change the coordinate system.

Definition at line 529 of file EcalEleCalibLooper.cc.

529  {
530  if (etaOld < 0)
531  return etaOld + 85;
532  else if (etaOld > 0)
533  return etaOld + 84;
534  assert(0 != etaOld); // etaOld = 0, apparently not a foreseen value, so fail
535  return 999; // dummy statement to silence compiler warning
536 }
double EcalEleCalibLooper::giveLimit ( int  degrees)
private

copes with the infinitives of the tangent

Definition at line 369 of file EcalEleCalibLooper.cc.

References radiants(), and funct::tan().

369  {
370  //PG 200 > atan (50/0.5)
371  if (degrees == 90)
372  return 90;
373  return tan(radiants(degrees));
374 }
double degrees(double radiants)
def degrees
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
double radiants(int degrees)
DS def radiants.
void EcalEleCalibLooper::startingNewLoop ( unsigned int  ciclo)
overridevirtual

startingNewLoop empties the map of the calibBlock so that it can be filled

Implements edm::EDLooperBase.

Definition at line 150 of file EcalEleCalibLooper.cc.

References m_EcalCalibBlocks, and m_xtalNumOfHits.

150  {
151  edm::LogInfo("IML") << "[InvMatrixCalibLooper][Start] entering loop " << ciclo;
152 
153  for (std::vector<VEcalCalibBlock*>::iterator calibBlock = m_EcalCalibBlocks.begin();
154  calibBlock != m_EcalCalibBlocks.end();
155  ++calibBlock)
156  (*calibBlock)->reset();
157  for (std::map<int, int>::iterator it = m_xtalNumOfHits.begin(); it != m_xtalNumOfHits.end(); ++it)
158  it->second = 0;
159  return;
160 }
std::vector< VEcalCalibBlock * > m_EcalCalibBlocks
single blocks calibrators
std::map< int, int > m_xtalNumOfHits

Member Data Documentation

bool EcalEleCalibLooper::isfirstcall_
private

Definition at line 138 of file EcalEleCalibLooper.h.

Referenced by beginOfJob(), and duringLoop().

edm::InputTag EcalEleCalibLooper::m_barrelAlCa
private

EcalBarrel Input Collection name.

Definition at line 63 of file EcalEleCalibLooper.h.

Referenced by duringLoop().

std::vector<DetId> EcalEleCalibLooper::m_barrelCells
private

Definition at line 131 of file EcalEleCalibLooper.h.

Referenced by duringLoop(), endOfJob(), and endOfLoop().

EcalIntercalibConstantMap EcalEleCalibLooper::m_barrelMap
private

the maps of recalib coeffs

Definition at line 114 of file EcalEleCalibLooper.h.

Referenced by duringLoop(), EcalEleCalibLooper(), endOfJob(), and endOfLoop().

std::vector<VEcalCalibBlock *> EcalEleCalibLooper::m_EcalCalibBlocks
private

single blocks calibrators

Definition at line 101 of file EcalEleCalibLooper.h.

Referenced by duringLoop(), EcalEleCalibLooper(), endOfLoop(), startingNewLoop(), and ~EcalEleCalibLooper().

edm::InputTag EcalEleCalibLooper::m_ElectronLabel
private

To take the electrons.

Definition at line 120 of file EcalEleCalibLooper.h.

Referenced by duringLoop().

edm::InputTag EcalEleCalibLooper::m_endcapAlCa
private

EcalEndcap Input Collection name.

Definition at line 65 of file EcalEleCalibLooper.h.

Referenced by duringLoop().

std::vector<DetId> EcalEleCalibLooper::m_endcapCells
private

Definition at line 132 of file EcalEleCalibLooper.h.

Referenced by duringLoop(), endOfJob(), and endOfLoop().

EcalIntercalibConstantMap EcalEleCalibLooper::m_endcapMap
private

Definition at line 115 of file EcalEleCalibLooper.h.

Referenced by duringLoop(), EcalEleCalibLooper(), endOfJob(), and endOfLoop().

int EcalEleCalibLooper::m_etaEnd
private

eta end of the region of interest

Definition at line 83 of file EcalEleCalibLooper.h.

Referenced by EBregionCheck(), EBregionsNum(), and EcalEleCalibLooper().

int EcalEleCalibLooper::m_etaStart
private

phi size of the additive border to the sub-matrix

eta start of the region of interest

Definition at line 81 of file EcalEleCalibLooper.h.

Referenced by EBregionCheck(), EBRegionId(), EBregionsNum(), and EcalEleCalibLooper().

int EcalEleCalibLooper::m_etaWidth
private

eta size of the sub-matrix

Definition at line 72 of file EcalEleCalibLooper.h.

Referenced by EBRegionId(), EBregionsNum(), and EcalEleCalibLooper().

unsigned int EcalEleCalibLooper::m_loops
private

DS sets the number of loops to do.

Definition at line 118 of file EcalEleCalibLooper.h.

Referenced by endOfLoop().

VFillMap* EcalEleCalibLooper::m_MapFiller
private

Definition at line 122 of file EcalEleCalibLooper.h.

Referenced by duringLoop(), and EcalEleCalibLooper().

double EcalEleCalibLooper::m_maxCoeff
private

maximum coefficient accepted (RAW)

Definition at line 109 of file EcalEleCalibLooper.h.

Referenced by endOfLoop().

double EcalEleCalibLooper::m_maxEnergyPerCrystal
private

maximum energy per crystal cut

Definition at line 105 of file EcalEleCalibLooper.h.

Referenced by EcalEleCalibLooper().

int EcalEleCalibLooper::m_maxSelectedNumPerXtal
private

maximum number of events per crystal

Definition at line 98 of file EcalEleCalibLooper.h.

Referenced by duringLoop().

double EcalEleCalibLooper::m_minCoeff
private

minimum coefficient accepted (RAW)

Definition at line 107 of file EcalEleCalibLooper.h.

Referenced by endOfLoop().

double EcalEleCalibLooper::m_minEnergyPerCrystal
private

minimum energy per crystal cut

Definition at line 103 of file EcalEleCalibLooper.h.

Referenced by EcalEleCalibLooper().

int EcalEleCalibLooper::m_phiEndEB
private

phi end of the region of interest

Definition at line 87 of file EcalEleCalibLooper.h.

Referenced by EBregionCheck(), EBRegionId(), and EBregionsNum().

int EcalEleCalibLooper::m_phiEndEE
private

Definition at line 94 of file EcalEleCalibLooper.h.

Referenced by EEregionCheck(), EERegionId(), and EEregionsNum().

int EcalEleCalibLooper::m_phiStartEB
private

phi start of the region of interest

Definition at line 85 of file EcalEleCalibLooper.h.

Referenced by EBregionCheck(), EBRegionId(), and EBregionsNum().

int EcalEleCalibLooper::m_phiStartEE
private

Definition at line 93 of file EcalEleCalibLooper.h.

Referenced by EEregionCheck(), EERegionId(), and EEregionsNum().

int EcalEleCalibLooper::m_phiWidthEB
private

eta size of the additive border to the sub-matrix

phi size of the sub-matrix

Definition at line 76 of file EcalEleCalibLooper.h.

Referenced by EBRegionId(), and EBregionsNum().

int EcalEleCalibLooper::m_phiWidthEE
private

Definition at line 95 of file EcalEleCalibLooper.h.

Referenced by EERegionId(), and EEregionsNum().

int EcalEleCalibLooper::m_radEnd
private

Definition at line 90 of file EcalEleCalibLooper.h.

Referenced by EcalEleCalibLooper(), EEregionCheck(), and EEregionsNum().

int EcalEleCalibLooper::m_radStart
private

DS For the EE.

Definition at line 89 of file EcalEleCalibLooper.h.

Referenced by EcalEleCalibLooper(), EEregionCheck(), EERegionId(), and EEregionsNum().

int EcalEleCalibLooper::m_radWidth
private

Definition at line 91 of file EcalEleCalibLooper.h.

Referenced by EcalEleCalibLooper(), EERegionId(), and EEregionsNum().

int EcalEleCalibLooper::m_recoWindowSidex
private

reconstruction window size

Definition at line 68 of file EcalEleCalibLooper.h.

Referenced by EcalEleCalibLooper().

int EcalEleCalibLooper::m_recoWindowSidey
private

Definition at line 69 of file EcalEleCalibLooper.h.

Referenced by EcalEleCalibLooper().

std::vector<int> EcalEleCalibLooper::m_regions
private
int EcalEleCalibLooper::m_usingBlockSolver
private

to exclude the blocksolver

Definition at line 111 of file EcalEleCalibLooper.h.

Referenced by endOfLoop().

std::map<int, int> EcalEleCalibLooper::m_xtalNumOfHits
private

Definition at line 136 of file EcalEleCalibLooper.h.

Referenced by duringLoop(), and startingNewLoop().

std::map<int, int> EcalEleCalibLooper::m_xtalPositionInRegion
private
std::map<int, int> EcalEleCalibLooper::m_xtalRegionId
private