File indexing completed on 2024-04-06 12:32:12
0001
0002
0003
0004
0005
0006
0007
0008 #include "Validation/EventGenerator/interface/CaloCellManager.h"
0009
0010 #include "CLHEP/Units/defs.h"
0011 #include "CLHEP/Units/SystemOfUnits.h"
0012
0013 #include <iomanip>
0014
0015 CaloCellManager::CaloCellManager(const unsigned int theVerbosity) : verbosity(theVerbosity) {
0016
0017
0018 init();
0019
0020
0021
0022 builder();
0023 }
0024
0025 CaloCellManager::~CaloCellManager() {
0026 for (unsigned int i = 0; i < theCellCollection.size(); i++) {
0027 delete theCellCollection[i];
0028 }
0029 }
0030
0031 void CaloCellManager::init() {
0032 etaLim.reserve(nBarrelEta + nEndcapEta + nForwardEta + 1);
0033 phiLimBar.reserve(nBarrelEta + 1);
0034 phiLimEnd.reserve(nEndcapEta + 1);
0035 phiLimFor.reserve(nForwardEta + 1);
0036
0037
0038
0039 double firstEta = 0.;
0040 double etaBarrelBin = 0.087;
0041 for (unsigned int ietabin = 0; ietabin <= nBarrelEta; ietabin++) {
0042 etaLim.push_back(firstEta + ietabin * etaBarrelBin);
0043 }
0044
0045 double firstPhi = -180.;
0046 double phiBarrelBin = (double)360 / nBarrelPhi;
0047 for (unsigned int iphibin = 0; iphibin <= nBarrelPhi; iphibin++) {
0048 phiLimBar.push_back((firstPhi + iphibin * phiBarrelBin) * CLHEP::degree);
0049 }
0050
0051
0052
0053 firstEta = etaBarrelBin * nBarrelEta;
0054 double etaEndcapBin = 0.131;
0055 for (unsigned int ietabin = 1; ietabin <= nEndcapEta; ietabin++) {
0056 etaLim.push_back(firstEta + ietabin * etaEndcapBin);
0057 }
0058 double phiEndcapBin = (double)360 / nEndcapPhi;
0059 for (unsigned int iphibin = 0; iphibin <= nEndcapPhi; iphibin++) {
0060 phiLimEnd.push_back((firstPhi + iphibin * phiEndcapBin) * CLHEP::degree);
0061 }
0062
0063
0064
0065 etaLim.push_back(3.139);
0066 etaLim.push_back(3.314);
0067 etaLim.push_back(3.489);
0068 etaLim.push_back(3.664);
0069 etaLim.push_back(3.839);
0070 etaLim.push_back(4.013);
0071 etaLim.push_back(4.191);
0072 etaLim.push_back(4.363);
0073 etaLim.push_back(4.538);
0074 etaLim.push_back(4.716);
0075 etaLim.push_back(4.889);
0076 etaLim.push_back(5.191);
0077
0078 double phiForwardBin = (double)360 / nForwardPhi;
0079 for (unsigned int iphibin = 0; iphibin <= nForwardPhi; iphibin++) {
0080 phiLimFor.push_back((firstPhi + iphibin * phiForwardBin) * CLHEP::degree);
0081 }
0082
0083 if (verbosity > 0) {
0084 std::cout << "Number of eta ranges = " << nBarrelEta + nEndcapEta + nForwardEta << std::endl;
0085 for (unsigned int i = 0; i < etaLim.size(); i++) {
0086 std::cout << "Eta range limit # " << i << " = " << etaLim[i] << std::endl;
0087 }
0088 for (unsigned int i = 0; i < phiLimBar.size(); i++) {
0089 std::cout << "Phi barrel range limit # " << i << " = " << phiLimBar[i] << std::endl;
0090 }
0091 for (unsigned int i = 0; i < phiLimEnd.size(); i++) {
0092 std::cout << "Phi endcap range limit # " << i << " = " << phiLimEnd[i] << std::endl;
0093 }
0094 for (unsigned int i = 0; i < phiLimFor.size(); i++) {
0095 std::cout << "Phi forward range limit # " << i << " = " << phiLimFor[i] << std::endl;
0096 }
0097 }
0098 }
0099
0100 void CaloCellManager::builder() {
0101 theCellCollection.reserve(nCaloCell);
0102
0103
0104
0105 CaloCellId::System theSys = CaloCellId::Barrel;
0106
0107 for (unsigned int iphi = 0; iphi < nBarrelPhi; iphi++) {
0108 for (unsigned int ieta = 0; ieta < nBarrelEta; ieta++) {
0109 CaloCellId* thisCell =
0110 new CaloCellId(etaLim[ieta], etaLim[ieta + 1], phiLimBar[iphi], phiLimBar[iphi + 1], theSys);
0111 theCellCollection.push_back(thisCell);
0112 }
0113 for (unsigned int ieta = 0; ieta < nBarrelEta; ieta++) {
0114 CaloCellId* thisCell =
0115 new CaloCellId(-1. * etaLim[ieta + 1], -1. * etaLim[ieta], phiLimBar[iphi], phiLimBar[iphi + 1], theSys);
0116 theCellCollection.push_back(thisCell);
0117 }
0118 }
0119
0120
0121
0122 theSys = CaloCellId::Endcap;
0123
0124 for (unsigned int iphi = 0; iphi < nEndcapPhi; iphi++) {
0125 for (unsigned int ieta = nBarrelEta; ieta < nBarrelEta + nEndcapEta; ieta++) {
0126 CaloCellId* thisCell =
0127 new CaloCellId(etaLim[ieta], etaLim[ieta + 1], phiLimEnd[iphi], phiLimEnd[iphi + 1], theSys);
0128 theCellCollection.push_back(thisCell);
0129 }
0130 for (unsigned int ieta = nBarrelEta; ieta < nBarrelEta + nEndcapEta; ieta++) {
0131 CaloCellId* thisCell =
0132 new CaloCellId(-1. * etaLim[ieta + 1], -1. * etaLim[ieta], phiLimEnd[iphi], phiLimEnd[iphi + 1], theSys);
0133 theCellCollection.push_back(thisCell);
0134 }
0135 }
0136
0137
0138
0139 theSys = CaloCellId::Forward;
0140
0141 for (unsigned int iphi = 0; iphi < nForwardPhi; iphi++) {
0142 for (unsigned int ieta = nBarrelEta + nEndcapEta; ieta < nBarrelEta + nEndcapEta + nForwardEta; ieta++) {
0143 CaloCellId* thisCell =
0144 new CaloCellId(etaLim[ieta], etaLim[ieta + 1], phiLimFor[iphi], phiLimFor[iphi + 1], theSys);
0145 theCellCollection.push_back(thisCell);
0146 }
0147 for (unsigned int ieta = nBarrelEta + nEndcapEta; ieta < nBarrelEta + nEndcapEta + nForwardEta; ieta++) {
0148 CaloCellId* thisCell =
0149 new CaloCellId(-1. * etaLim[ieta + 1], -1. * etaLim[ieta], phiLimFor[iphi], phiLimFor[iphi + 1], theSys);
0150 theCellCollection.push_back(thisCell);
0151 }
0152 }
0153
0154 if (verbosity > 0) {
0155 std::cout << "Number of cells = " << nCaloCell << std::endl;
0156 for (unsigned int i = 0; i < theCellCollection.size(); i++) {
0157 std::cout << "Cell # " << std::setfill(' ') << std::setw(4) << i << " = " << *(theCellCollection[i]) << std::endl;
0158 }
0159 }
0160 }
0161
0162 unsigned int CaloCellManager::getCellIndexFromAngle(double eta, double phi) {
0163 unsigned int theIndex = 1000000;
0164 for (unsigned int i = 0; i < theCellCollection.size(); i++) {
0165 if (theCellCollection[i]->isInCell(eta, phi)) {
0166 theIndex = i;
0167 continue;
0168 }
0169 }
0170 return theIndex;
0171 }
0172
0173 CaloCellId* CaloCellManager::getCellFromIndex(unsigned int id) {
0174 if (id < theCellCollection.size()) {
0175 return theCellCollection[id];
0176 }
0177 return nullptr;
0178 }
0179
0180 std::vector<double> CaloCellManager::getEtaRanges() {
0181 std::vector<double> theEtaRanges(etaLim);
0182 return theEtaRanges;
0183 }