CMS 3D CMS Logo

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

#include <HGCalDDDConstants.h>

Public Types

typedef std::array< std::vector< int32_t >, 2 > simrecovecs
 

Public Member Functions

std::pair< int, int > assignCell (float x, float y, int lay, int subSec, bool reco) const
 
std::pair< int, int > assignCellHexagon (float x, float y) const
 
std::pair< int, int > assignCellSquare (float x, float y, float h, float bl, float tl, float alpha, float cellSize) const
 
double cellSizeHex (int type) const
 
std::pair< int, int > findCell (int cell, int lay, int subSec, bool reco) const
 
std::pair< int, int > findCellSquare (int cell, float h, float bl, float tl, float alpha, float cellSize) const
 
HGCalGeometryMode::GeometryMode geomMode () const
 
std::pair< int, float > getIndex (int lay, bool reco) const
 
HGCalParameters::hgtrap getModule (unsigned int k, bool hexType, bool reco) const
 
std::vector< HGCalParameters::hgtrapgetModules () const
 
HGCalParameters::hgtrform getTrForm (unsigned int k) const
 
unsigned int getTrFormN () const
 
std::vector< HGCalParameters::hgtrformgetTrForms () const
 
 HGCalDDDConstants (const HGCalParameters *hp, const std::string name)
 
bool isHalfCell (int waferType, int cell) const
 
bool isValid (int lay, int mod, int cell, bool reco) const
 
bool isValidCell (int layindex, int wafer, int cell) const
 
unsigned int layers (bool reco) const
 
unsigned int layersInit (bool reco) const
 
int levelTop () const
 
std::pair< float, float > locateCell (int cell, int lay, int type, bool reco) const
 
std::pair< float, float > locateCellHex (int cell, int wafer, bool reco) const
 
int maxCells (bool reco) const
 
int maxCells (int lay, bool reco) const
 
int maxCellsSquare (float h, float bl, float tl, float alpha, float cellSize) const
 
int maxModules () const
 
int maxRows (int lay, bool reco) const
 
double minSlope () const
 
int modules (int lay, bool reco) const
 
int modulesInit (int lay, bool reco) const
 
std::pair< int, int > newCell (int cell, int layer, int sector, int subsector, int incrx, int incry, bool half) const
 
std::pair< int, int > newCell (int cell, int layer, int subsector, int incrz, bool half) const
 
int newCell (int kx, int ky, int lay, int subSec) const
 
std::vector< int > numberCells (int lay, bool reco) const
 
int numberCellsHexagon (int wafer) const
 
std::vector< int > numberCellsSquare (float h, float bl, float tl, float alpha, float cellSize) const
 
std::pair< int, int > rowColumnWafer (const int wafer) const
 
int sectors () const
 
std::pair< int, int > simToReco (int cell, int layer, int mod, bool half) const
 
unsigned int volumes () const
 
int waferFromCopy (int copy) const
 
void waferFromPosition (const double x, const double y, int &wafer, int &icell, int &celltyp) const
 
bool waferInLayer (int wafer, int lay, bool reco) const
 
std::pair< double, double > waferPosition (int wafer, bool reco=true) const
 
int wafers () const
 
int waferToCopy (int wafer) const
 
int waferTypeL (int wafer) const
 
int waferTypeT (int wafer) const
 
double waferZ (int layer, bool reco) const
 
 ~HGCalDDDConstants ()
 

Private Member Functions

int cellHex (double xx, double yy, const double &cellR, const std::vector< double > &posX, const std::vector< double > &posY) const
 
void getParameterSquare (int lay, int subSec, bool reco, float &h, float &bl, float &tl, float &alpha) const
 
bool waferInLayer (int wafer, int lay) const
 

Private Attributes

double hexside_
 
const HGCalParametershgpar_
 
simrecovecs max_modules_layer_
 
HGCalGeometryMode::GeometryMode mode_
 
int32_t modHalf_
 
double rmax_
 
std::array< uint32_t, 2 > tot_layers_
 
int32_t tot_wafers_
 

Static Private Attributes

static double tan30deg_ = 0.5773502693
 

Detailed Description

this class reads the constant section of the numbering xml-files of the high granulairy calorimeter

Date
2014/03/20 00:06:50
Author
Sunanda Banerjee, SINP sunan.nosp@m.da.b.nosp@m.anerj.nosp@m.ee@c.nosp@m.ern.c.nosp@m.h

Definition at line 23 of file HGCalDDDConstants.h.

Member Typedef Documentation

typedef std::array<std::vector<int32_t>, 2> HGCalDDDConstants::simrecovecs

Definition at line 27 of file HGCalDDDConstants.h.

Constructor & Destructor Documentation

HGCalDDDConstants::HGCalDDDConstants ( const HGCalParameters hp,
const std::string  name 
)

Definition at line 15 of file HGCalDDDConstants.cc.

References HGCalParameters::cellSize_, funct::cos(), gather_cfg::cout, hexside_, hgpar_, k_ScaleFromDDD, layers(), layersInit(), max_modules_layer_, maxCells(), mode_, HGCalParameters::mode_, modHalf_, modulesInit(), rmax_, sectors(), HGCalGeometryMode::Square, tan30deg_, tot_layers_, tot_wafers_, HGCalParameters::waferR_, and wafers().

16  : hgpar_(hp) {
17  mode_ = hgpar_->mode_;
19  rmax_ = 0;
20  modHalf_ = sectors()*layers(true);
21  for (int simreco = 0; simreco < 2; ++simreco ) {
22  tot_layers_[simreco] = layersInit((bool)simreco);
23  }
24 
25  edm::LogInfo("HGCalGeom") << "HGCalDDDConstants initialized for " << name
26  << " with " << layers(false) << ":"
27  << layers(true) << " layers, " << sectors()
28  << " sectors " << 2*modHalf_ << " modules and "
29  << "maximum of " << maxCells(false) << ":"
30  << maxCells(true) << " cells";
31 #ifdef EDM_ML_DEBUG
32  std::cout << "HGCalDDDConstants initialized for " << name << " with "
33  << layers(false) << ":" << layers(true) << " layers, "
34  << sectors() << " sectors and maximum of " << maxCells(false)
35  << ":" << maxCells(true) << " cells" << std::endl;
36 #endif
37  } else {
38  rmax_ = k_ScaleFromDDD * (hgpar_->waferR_) * std::cos(30.0*CLHEP::deg);
39  hexside_ = 2.0 * rmax_ * tan30deg_;
40 #ifdef EDM_ML_DEBUG
41  std::cout << "rmax_ " << rmax_ << ":" << hexside_ << " CellSize "
42  << 0.5*k_ScaleFromDDD*hgpar_->cellSize_[0] << ":"
43  << 0.5*k_ScaleFromDDD*hgpar_->cellSize_[1] << std::endl;
44 #endif
45  // init maps and constants
46  modHalf_ = 0;
47  for (int simreco = 0; simreco < 2; ++simreco) {
48  tot_layers_[simreco] = layersInit((bool)simreco);
49  max_modules_layer_[simreco].resize(tot_layers_[simreco]+1);
50  for (unsigned int layer=1; layer <= tot_layers_[simreco]; ++layer) {
51  max_modules_layer_[simreco][layer] = modulesInit(layer,(bool)simreco);
52  if (simreco == 1) {
53  modHalf_ += max_modules_layer_[simreco][layer];
54 #ifdef EDM_ML_DEBUG
55  std::cout << "Layer " << layer << " with " << max_modules_layer_[simreco][layer] << ":" << modHalf_ << " modules\n";
56 #endif
57  }
58  }
59  }
60  tot_wafers_ = wafers();
61 
62  edm::LogInfo("HGCalGeom") << "HGCalDDDConstants initialized for " << name
63  << " with " << layers(false) << ":"
64  << layers(true) << " layers, " << wafers()
65  << " wafers, " << 2*modHalf_ << " wafers and "
66  << "maximum of " << maxCells(false) << ":"
67  << maxCells(true) << " cells";
68 
69 #ifdef EDM_ML_DEBUG
70  std::cout << "HGCalDDDConstants initialized for " << name << " with "
71  << layers(false) << ":" << layers(true) << " layers, "
72  << wafers() << " wafers and " << "maximum of " << maxCells(false)
73  << ":" << maxCells(true) << " cells" << std::endl;
74 #endif
75 
76  }
77 
78 }
std::array< uint32_t, 2 > tot_layers_
unsigned int layersInit(bool reco) const
int modulesInit(int lay, bool reco) const
HGCalGeometryMode::GeometryMode mode_
HGCalGeometryMode::GeometryMode mode_
unsigned int layers(bool reco) const
std::vector< double > cellSize_
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
int sectors() const
simrecovecs max_modules_layer_
double k_ScaleFromDDD
const HGCalParameters * hgpar_
int maxCells(bool reco) const
static double tan30deg_
HGCalDDDConstants::~HGCalDDDConstants ( )

Definition at line 80 of file HGCalDDDConstants.cc.

80 {}

Member Function Documentation

std::pair< int, int > HGCalDDDConstants::assignCell ( float  x,
float  y,
int  lay,
int  subSec,
bool  reco 
) const

Definition at line 82 of file HGCalDDDConstants.cc.

References alpha, assignCellHexagon(), assignCellSquare(), getIndex(), getParameterSquare(), h, mps_fire::i, diffTreeTool::index, k_ScaleFromDDD, mode_, trackingPlots::reco, HGCalGeometryMode::Square, geometryCSVtoXML::xx, and geometryCSVtoXML::yy.

Referenced by HGCNumberingScheme::assignCell(), HGCalGeometry::getClosestCell(), HGCNumberingScheme::getUnitID(), and newCell().

83  {
84  std::pair<int,float> index = getIndex(lay, reco);
85  std::pair<int,int> cellAssignment(-1,-1);
86  int i = index.first;
87  if (i < 0) return cellAssignment;
89  float alpha, h, bl, tl;
90  getParameterSquare(i,subSec,reco,h,bl,tl,alpha);
91  cellAssignment = assignCellSquare(x, y, h, bl, tl, alpha, index.second);
92  } else {
93  float xx = (reco) ? x : k_ScaleFromDDD*x;
94  float yy = (reco) ? y : k_ScaleFromDDD*y;
95  cellAssignment = assignCellHexagon(xx,yy);
96  }
97  return cellAssignment;
98 }
float alpha
Definition: AMPTWrapper.h:95
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
std::pair< int, int > assignCellSquare(float x, float y, float h, float bl, float tl, float alpha, float cellSize) const
HGCalGeometryMode::GeometryMode mode_
std::pair< int, int > assignCellHexagon(float x, float y) const
std::pair< int, float > getIndex(int lay, bool reco) const
void getParameterSquare(int lay, int subSec, bool reco, float &h, float &bl, float &tl, float &alpha) const
fixed size matrix
double k_ScaleFromDDD
std::pair< int, int > HGCalDDDConstants::assignCellHexagon ( float  x,
float  y 
) const

Definition at line 143 of file HGCalDDDConstants.cc.

References HGCalParameters::cellCoarseX_, HGCalParameters::cellCoarseY_, HGCalParameters::cellFineX_, HGCalParameters::cellFineY_, cellHex(), HGCalParameters::cellSize_, hgpar_, k_ScaleFromDDD, rmax_, HGCalParameters::waferPosX_, HGCalParameters::waferPosY_, HGCalParameters::waferTypeT_, geometryCSVtoXML::xx, and geometryCSVtoXML::yy.

Referenced by assignCell().

144  {
145  double xx(x), yy(y);
146  //First the wafer
147  int wafer = cellHex(xx, yy, rmax_, hgpar_->waferPosX_, hgpar_->waferPosY_);
148  // Now the cell
149  xx -= hgpar_->waferPosX_[wafer];
150  yy -= hgpar_->waferPosY_[wafer];
151  int cell(0);
152  if (hgpar_->waferTypeT_[wafer] == 1)
154  else
156  return std::pair<int,int>(wafer,cell);
157 }
std::vector< double > waferPosY_
std::vector< double > cellFineY_
int cellHex(double xx, double yy, const double &cellR, const std::vector< double > &posX, const std::vector< double > &posY) const
std::vector< double > cellCoarseX_
std::vector< double > cellSize_
std::vector< double > cellFineX_
double k_ScaleFromDDD
std::vector< int > waferTypeT_
std::vector< double > cellCoarseY_
const HGCalParameters * hgpar_
std::vector< double > waferPosX_
std::pair< int, int > HGCalDDDConstants::assignCellSquare ( float  x,
float  y,
float  h,
float  bl,
float  tl,
float  alpha,
float  cellSize 
) const

Definition at line 100 of file HGCalDDDConstants.cc.

References a, b, h, and k_horizontalShift.

Referenced by assignCell().

103  {
104 
105  float a = (alpha==0) ? (2*h/(tl-bl)) : (h/(tl-bl));
106  float b = 2*h*bl/(tl-bl);
107 
108  float x0(x);
109  int phiSector = (x0 > 0) ? 1 : 0;
110  if (alpha < 0) {x0 -= 0.5*(tl+bl); phiSector = 0;}
111  else if (alpha > 0) {x0 += 0.5*(tl+bl); phiSector = 1;}
112 
113  //determine the i-y
114  int ky = floor((y+h)/cellSize);
115  if (ky*cellSize> y+h) ky--;
116  if (ky<0) return std::pair<int,int>(-1,-1);
117  if ((ky+1)*cellSize < (y+h) ) ky++;
118  int max_ky_allowed=floor(2*h/cellSize);
119  if (ky>max_ky_allowed-1) return std::pair<int,int>(-1,-1);
120 
121  //determine the i-x
122  //notice we substitute y by the top of the candidate cell to reduce the dead zones
123  int kx = floor(fabs(x0)/cellSize);
124  if (kx*cellSize > fabs(x0) ) kx--;
125  if (kx<0) return std::pair<int,int>(-1,-1);
126  if ((kx+1)*cellSize < fabs(x0)) kx++;
127  int max_kx_allowed=floor( ((ky+1)*cellSize+b+k_horizontalShift*cellSize)/(a*cellSize) );
128  if (kx>max_kx_allowed-1) return std::pair<int,int>(-1,-1);
129 
130  //count cells summing in rows until required height
131  //notice the bottom of the cell must be used
132  int icell(0);
133  for (int iky=0; iky<ky; ++iky) {
134  int cellsInRow( floor( ((iky+1)*cellSize+b+k_horizontalShift*cellSize)/(a*cellSize) ) );
135  icell += cellsInRow;
136  }
137  icell += kx;
138 
139  //return result
140  return std::pair<int,int>(phiSector,icell);
141 }
double k_horizontalShift
float alpha
Definition: AMPTWrapper.h:95
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
double b
Definition: hdecay.h:120
double a
Definition: hdecay.h:121
int HGCalDDDConstants::cellHex ( double  xx,
double  yy,
const double &  cellR,
const std::vector< double > &  posX,
const std::vector< double > &  posY 
) const
private

Definition at line 721 of file HGCalDDDConstants.cc.

References funct::abs(), gen::k, pileupDistInMC::num, tan30deg_, and TrackerOfflineValidation_Dqm_cff::xmax.

Referenced by assignCellHexagon(), getTrForm(), and waferFromPosition().

724  {
725  int num(0);
726  const double tol(0.00001);
727  double cellY = 2.0*cellR*tan30deg_;
728  for (unsigned int k=0; k<posX.size(); ++k) {
729  double dx = std::abs(xx - posX[k]);
730  double dy = std::abs(yy - posY[k]);
731  if (dx <= (cellR+tol) && dy <= (cellY+tol)) {
732  double xmax = (dy<=0.5*cellY) ? cellR : (cellR-(dy-0.5*cellY)/tan30deg_);
733  if (dx <= (xmax+tol)) {
734  num = k;
735  break;
736  }
737  }
738  }
739  return num;
740 }
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
int k[5][pyjets_maxn]
static double tan30deg_
double HGCalDDDConstants::cellSizeHex ( int  type) const

Definition at line 159 of file HGCalDDDConstants.cc.

References HGCalParameters::cellSize_, hgpar_, and k_ScaleFromDDD.

Referenced by HGCalGeometryLoader::build(), and hgcal::RecHitTools::getRadiusToSide().

159  {
160  int indx = (type == 1) ? 0 : 1;
161  double cell = (0.5*k_ScaleFromDDD*hgpar_->cellSize_[indx]);
162  return cell;
163 }
type
Definition: HCALResponse.h:21
std::vector< double > cellSize_
double k_ScaleFromDDD
const HGCalParameters * hgpar_
std::pair< int, int > HGCalDDDConstants::findCell ( int  cell,
int  lay,
int  subSec,
bool  reco 
) const

Definition at line 173 of file HGCalDDDConstants.cc.

References alpha, findCellSquare(), getIndex(), getParameterSquare(), h, mps_fire::i, diffTreeTool::index, mode_, and HGCalGeometryMode::Square.

Referenced by locateCell(), and newCell().

174  {
175 
176  std::pair<int,float> index = getIndex(lay, reco);
177  int i = index.first;
178  if (i < 0) return std::pair<int,int>(-1,-1);
180  return std::pair<int,int>(-1,-1);
181  } else {
182  float alpha, h, bl, tl;
183  getParameterSquare(i,subSec,reco,h,bl,tl,alpha);
184  return findCellSquare(cell, h, bl, tl, alpha, index.second);
185  }
186 }
float alpha
Definition: AMPTWrapper.h:95
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
std::pair< int, int > findCellSquare(int cell, float h, float bl, float tl, float alpha, float cellSize) const
HGCalGeometryMode::GeometryMode mode_
std::pair< int, float > getIndex(int lay, bool reco) const
void getParameterSquare(int lay, int subSec, bool reco, float &h, float &bl, float &tl, float &alpha) const
fixed size matrix
std::pair< int, int > HGCalDDDConstants::findCellSquare ( int  cell,
float  h,
float  bl,
float  tl,
float  alpha,
float  cellSize 
) const

Definition at line 188 of file HGCalDDDConstants.cc.

References a, b, and k_horizontalShift.

Referenced by findCell(), and simToReco().

191  {
192 
193  //check if cell number is meaningful
194  if(cell<0) return std::pair<int,int>(-1,-1);
195 
196  //parameterization of the boundary of the trapezoid
197  float a = (alpha==0) ? (2*h/(tl-bl)) : (h/(tl-bl));
198  float b = 2*h*bl/(tl-bl);
199  int kx(cell), ky(0);
200  int kymax( floor((2*h)/cellSize) );
201  int testCell(0);
202  for (int iky=0; iky<kymax; ++iky) {
203 
204  //check if adding all the cells in this row is above the required cell
205  //notice the top of the cell is used to maximize space
206  int cellsInRow(floor(((iky+1)*cellSize+b+k_horizontalShift*cellSize)/(a*cellSize)));
207  if (testCell+cellsInRow > cell) break;
208  testCell += cellsInRow;
209  ky++;
210  kx -= cellsInRow;
211  }
212 
213  return std::pair<int,int>(kx,ky);
214 }
double k_horizontalShift
float alpha
Definition: AMPTWrapper.h:95
double b
Definition: hdecay.h:120
double a
Definition: hdecay.h:121
HGCalGeometryMode::GeometryMode HGCalDDDConstants::geomMode ( ) const
inline
std::pair< int, float > HGCalDDDConstants::getIndex ( int  lay,
bool  reco 
) const

Definition at line 742 of file HGCalDDDConstants.cc.

References HGCalParameters::depthIndex_, HGCalParameters::depthLayerF_, hgpar_, HGCalParameters::layerIndex_, mode_, HGCalParameters::moduleCellR_, HGCalParameters::moduleCellS_, and HGCalGeometryMode::Square.

Referenced by assignCell(), findCell(), getTrForm(), locateCell(), maxCells(), maxRows(), modules(), modulesInit(), newCell(), numberCells(), simToReco(), waferInLayer(), and waferZ().

742  {
743 
744  if (lay<1 || lay>(int)(hgpar_->layerIndex_.size())) return std::pair<int,float>(-1,0);
745  if (reco && lay>(int)(hgpar_->depthIndex_.size())) return std::pair<int,float>(-1,0);
746  int indx(0);
747  float cell(0);
749  indx = (reco ? hgpar_->depthIndex_[lay-1] : hgpar_->layerIndex_[lay-1]);
750  cell = (reco ? hgpar_->moduleCellR_[indx] : hgpar_->moduleCellS_[indx]);
751  } else {
752  indx = (reco ? hgpar_->depthLayerF_[lay-1] : hgpar_->layerIndex_[lay-1]);
753  cell = (reco ? hgpar_->moduleCellR_[0] : hgpar_->moduleCellS_[0]);
754  }
755  return std::pair<int,float>(indx,cell);
756 }
std::vector< int > depthLayerF_
std::vector< double > moduleCellR_
HGCalGeometryMode::GeometryMode mode_
std::vector< int > layerIndex_
std::vector< double > moduleCellS_
fixed size matrix
std::vector< int > depthIndex_
const HGCalParameters * hgpar_
HGCalParameters::hgtrap HGCalDDDConstants::getModule ( unsigned int  k,
bool  hexType,
bool  reco 
) const

Definition at line 216 of file HGCalDDDConstants.cc.

References HGCalParameters::getModule(), hgpar_, reco::if(), and HGCalParameters::waferTypeL_.

Referenced by HGCalGeometryLoader::build(), and HGCalGeometry::getSummary().

218  {
219 
221  if (hexType) {
222  unsigned int type = (indx < hgpar_->waferTypeL_.size()) ?
223  hgpar_->waferTypeL_[indx] : 3;
224  if (type > 0) --type;
225  mytr = hgpar_->getModule(type, true);
226  } else {
227  if (reco) mytr = hgpar_->getModule(indx,true);
228  else mytr = hgpar_->getModule(indx,false);
229  }
230  return mytr;
231 }
type
Definition: HCALResponse.h:21
hgtrap getModule(unsigned int k, bool reco) const
fixed size matrix
if(dp >Float(M_PI)) dp-
const HGCalParameters * hgpar_
std::vector< int > waferTypeL_
std::vector< HGCalParameters::hgtrap > HGCalDDDConstants::getModules ( ) const

Definition at line 233 of file HGCalDDDConstants.cc.

References HGCalParameters::getModule(), hgpar_, gen::k, and HGCalParameters::moduleLayR_.

233  {
234 
235  std::vector<HGCalParameters::hgtrap> mytrs;
236  for (unsigned int k=0; k<hgpar_->moduleLayR_.size(); ++k)
237  mytrs.push_back(hgpar_->getModule(k,true));
238  return mytrs;
239 }
std::vector< int > moduleLayR_
hgtrap getModule(unsigned int k, bool reco) const
int k[5][pyjets_maxn]
const HGCalParameters * hgpar_
void HGCalDDDConstants::getParameterSquare ( int  lay,
int  subSec,
bool  reco,
float &  h,
float &  bl,
float &  tl,
float &  alpha 
) const
private

Definition at line 758 of file HGCalDDDConstants.cc.

References alpha, hgpar_, HGCalParameters::moduleAlphaR_, HGCalParameters::moduleAlphaS_, HGCalParameters::moduleBlR_, HGCalParameters::moduleBlS_, HGCalParameters::moduleHR_, HGCalParameters::moduleHS_, HGCalParameters::moduleTlR_, and HGCalParameters::moduleTlS_.

Referenced by assignCell(), findCell(), getTrForm(), locateCell(), maxCells(), and numberCells().

760  {
761  if (reco) {
762  h = hgpar_->moduleHR_[lay];
763  bl = hgpar_->moduleBlR_[lay];
764  tl = hgpar_->moduleTlR_[lay];
765  alpha= hgpar_->moduleAlphaR_[lay];
766  if ((subSec>0 && alpha<0) || (subSec<=0 && alpha>0)) alpha = -alpha;
767  } else {
768  h = hgpar_->moduleHS_[lay];
769  bl = hgpar_->moduleBlS_[lay];
770  tl = hgpar_->moduleTlS_[lay];
771  alpha= hgpar_->moduleAlphaS_[lay];
772  }
773 }
float alpha
Definition: AMPTWrapper.h:95
std::vector< double > moduleHR_
std::vector< double > moduleHS_
std::vector< double > moduleAlphaR_
std::vector< double > moduleBlR_
std::vector< double > moduleTlS_
std::vector< double > moduleAlphaS_
fixed size matrix
std::vector< double > moduleBlS_
const HGCalParameters * hgpar_
std::vector< double > moduleTlR_
HGCalParameters::hgtrform HGCalDDDConstants::getTrForm ( unsigned int  k) const
inline
unsigned int HGCalDDDConstants::getTrFormN ( ) const
inline

Definition at line 91 of file HGCalDDDConstants.h.

References hgpar_, and HGCalParameters::trformIndex_.

Referenced by HGCalGeometryLoader::build(), and HGCalGeometry::getSummary().

91 {return hgpar_->trformIndex_.size();}
std::vector< uint32_t > trformIndex_
const HGCalParameters * hgpar_
std::vector< HGCalParameters::hgtrform > HGCalDDDConstants::getTrForms ( ) const

Definition at line 241 of file HGCalDDDConstants.cc.

References HGCalParameters::getTrForm(), hgpar_, gen::k, and HGCalParameters::trformIndex_.

Referenced by HGCalTrackCollectionProducer::beginLuminosityBlock(), and getTrForm().

241  {
242 
243  std::vector<HGCalParameters::hgtrform> mytrs;
244  for (unsigned int k=0; k<hgpar_->trformIndex_.size(); ++k)
245  mytrs.push_back(hgpar_->getTrForm(k));
246  return mytrs;
247 }
std::vector< uint32_t > trformIndex_
hgtrform getTrForm(unsigned int k) const
int k[5][pyjets_maxn]
const HGCalParameters * hgpar_
bool HGCalDDDConstants::isHalfCell ( int  waferType,
int  cell 
) const

Definition at line 716 of file HGCalDDDConstants.cc.

References HGCalParameters::cellCoarseHalf_, HGCalParameters::cellFineHalf_, and hgpar_.

Referenced by hgcal::RecHitTools::isHalfCell().

716  {
717  if( waferType < 1 || cell < 0) return false;
718  return waferType == 2 ? hgpar_->cellCoarseHalf_[cell] : hgpar_->cellFineHalf_[cell];
719 }
std::vector< bool > cellCoarseHalf_
std::vector< bool > cellFineHalf_
const HGCalParameters * hgpar_
bool HGCalDDDConstants::isValid ( int  lay,
int  mod,
int  cell,
bool  reco 
) const

Definition at line 249 of file HGCalDDDConstants.cc.

References HGCalParameters::cellCoarseX_, HGCalParameters::cellFineX_, HGCalParameters::copiesInLayers_, gather_cfg::cout, hgpar_, createfilelist::int, isValidCell(), layers(), maxCells(), mod(), mode_, modmax, convertSQLiteXML::ok, sectors(), HGCalGeometryMode::Square, HGCalParameters::waferCopy_, and HGCalParameters::waferTypeT_.

Referenced by ntupleDataFormat._Object::_checkIsValid(), geomMode(), HGCNumberingScheme::getUnitID(), core.AutoHandle.AutoHandle::ReallyLoad(), and HGCalTopology::valid().

249  {
250 
251  bool ok(false);
252  int cellmax(0), modmax(0);
254  cellmax = maxCells(lay,reco);
255  modmax = sectors();
256  ok = ((lay > 0 && lay <= (int)(layers(reco))) &&
257  (mod > 0 && mod <= modmax) &&
258  (cell >=0 && cell <= cellmax));
259  } else {
260  int32_t copyNumber = hgpar_->waferCopy_[mod];
261  ok = ((lay > 0 && lay <= (int)(layers(reco))));
262  if (ok) {
263  const int32_t lay_idx = reco ? (lay-1)*3 + 1 : lay;
264  const auto& the_modules = hgpar_->copiesInLayers_[lay_idx];
265  auto moditr = the_modules.find(copyNumber);
266  ok = (moditr != the_modules.end());
267 #ifdef EDM_ML_DEBUG
268  if (!ok) std::cout << "HGCalDDDConstants: Layer " << lay << ":"
269  << lay_idx << " Copy " << copyNumber << ":" << mod
270  << " Flag " << ok << std::endl;
271 #endif
272  if (ok) {
273  if (moditr->second >= 0) {
274  cellmax = (hgpar_->waferTypeT_[mod]==1) ?
275  (int)(hgpar_->cellFineX_.size()) : (int)(hgpar_->cellCoarseX_.size());
276  ok = (cell >=0 && cell <= cellmax);
277  } else {
278  ok = isValidCell(lay_idx, mod, cell);
279  }
280  }
281  }
282  }
283 
284 #ifdef EDM_ML_DEBUG
285  if (!ok) std::cout << "HGCalDDDConstants: Layer " << lay << ":"
286  << (lay > 0 && (lay <= (int)(layers(reco)))) << " Module "
287  << mod << ":" << modmax << ":"
288  << (mod > 0 && mod <= modmax) << " Cell " << cell << ":"
289  << cellmax << ":" << (cell >=0 && cell <= cellmax)
290  << ":" << maxCells(reco) << std::endl;
291 #endif
292  return ok;
293 }
layer_map copiesInLayers_
static const int modmax
Definition: herwig.h:133
HGCalGeometryMode::GeometryMode mode_
std::vector< double > cellCoarseX_
unsigned int layers(bool reco) const
bool isValidCell(int layindex, int wafer, int cell) const
int sectors() const
std::vector< double > cellFineX_
fixed size matrix
std::vector< int > waferCopy_
std::vector< int > waferTypeT_
const HGCalParameters * hgpar_
int maxCells(bool reco) const
T mod(const T &a, const T &b)
Definition: ecalDccMap.h:4
bool HGCalDDDConstants::isValidCell ( int  layindex,
int  wafer,
int  cell 
) const

Definition at line 295 of file HGCalDDDConstants.cc.

References HGCalParameters::cellCoarseX_, HGCalParameters::cellCoarseY_, HGCalParameters::cellFineX_, HGCalParameters::cellFineY_, gather_cfg::cout, hgpar_, convertSQLiteXML::ok, HGCalParameters::rMaxLayHex_, HGCalParameters::rMinLayHex_, findQualityFiles::rr, mathSSE::sqrt(), HGCalParameters::waferPosX_, HGCalParameters::waferPosY_, HGCalParameters::waferTypeT_, x, and y.

Referenced by geomMode(), and isValid().

295  {
296 
297  // Calculate the position of the cell
298  double x = hgpar_->waferPosX_[wafer];
299  double y = hgpar_->waferPosY_[wafer];
300  if (hgpar_->waferTypeT_[wafer] == 1) {
301  x += hgpar_->cellFineX_[cell];
302  y += hgpar_->cellFineY_[cell];
303  } else {
304  x += hgpar_->cellCoarseX_[cell];
305  y += hgpar_->cellCoarseY_[cell];
306  }
307  double rr = sqrt(x*x+y*y);
308  bool ok = ((rr >= hgpar_->rMinLayHex_[lay-1]) &
309  (rr <= hgpar_->rMaxLayHex_[lay-1]));
310 #ifdef EDM_ML_DEBUG
311  if (!ok)
312  std::cout << "Input " << lay << ":" << wafer << ":" << cell << " Position "
313  << x << ":" << y << ":" << rr << " Compare Limits "
314  << hgpar_->rMinLayHex_[lay-1] << ":" <<hgpar_->rMaxLayHex_[lay-1]
315  << " Flag " << ok << std::endl;
316 #endif
317  return ok;
318 }
std::vector< double > waferPosY_
std::vector< double > cellFineY_
std::vector< double > cellCoarseX_
T sqrt(T t)
Definition: SSEVec.h:18
std::vector< double > rMinLayHex_
std::vector< double > rMaxLayHex_
std::vector< double > cellFineX_
std::vector< int > waferTypeT_
std::vector< double > cellCoarseY_
const HGCalParameters * hgpar_
std::vector< double > waferPosX_
unsigned int HGCalDDDConstants::layers ( bool  reco) const
unsigned int HGCalDDDConstants::layersInit ( bool  reco) const

Definition at line 169 of file HGCalDDDConstants.cc.

References HGCalParameters::depthIndex_, hgpar_, and HGCalParameters::layerIndex_.

Referenced by geomMode(), and HGCalDDDConstants().

169  {
170  return (reco ? hgpar_->depthIndex_.size() : hgpar_->layerIndex_.size());
171 }
std::vector< int > layerIndex_
fixed size matrix
std::vector< int > depthIndex_
const HGCalParameters * hgpar_
int HGCalDDDConstants::levelTop ( ) const
inline

Definition at line 50 of file HGCalDDDConstants.h.

References alpha, hgpar_, HGCalParameters::levelT_, maxCells(), and maxCellsSquare().

Referenced by HGCSD::update().

50 {return hgpar_->levelT_;}
const HGCalParameters * hgpar_
std::pair< float, float > HGCalDDDConstants::locateCell ( int  cell,
int  lay,
int  type,
bool  reco 
) const

Definition at line 320 of file HGCalDDDConstants.cc.

References alpha, HGCalParameters::cellCoarseX_, HGCalParameters::cellCoarseY_, HGCalParameters::cellFineX_, HGCalParameters::cellFineY_, findCell(), getIndex(), getParameterSquare(), h, hgpar_, mps_fire::i, diffTreeTool::index, k_ScaleFromDDD, mode_, HGCalGeometryMode::Square, HGCalParameters::waferPosX_, HGCalParameters::waferPosY_, HGCalParameters::waferTypeT_, x, and y.

Referenced by HGCalSimHitValidation::analyzeHits(), HGCalTBAnalyzer::analyzeSimHits(), geomMode(), HGCalGeometry::getCorners(), HGCNumberingScheme::getLocalCoords(), HGCalGeometry::getPosition(), and newCell().

321  {
322  // type refers to subsector # for square cell and wafer # for hexagon cell
323  float x(999999.), y(999999.);
324  std::pair<int,float> index = getIndex(lay, reco);
325  int i = index.first;
326  if (i < 0) return std::pair<float,float>(x,y);
328  std::pair<int,int> kxy = findCell(cell, lay, type, reco);
329  float alpha, h, bl, tl;
330  getParameterSquare(i,type,reco,h,bl,tl,alpha);
331  float cellSize = index.second;
332  x = (kxy.first+0.5)*cellSize;
333  if (alpha < 0) x -= 0.5*(tl+bl);
334  else if (alpha > 0) x -= 0.5*(tl+bl);
335  if (type != 1) x = -x;
336  y = ((kxy.second+0.5)*cellSize-h);
337  } else {
338  x = hgpar_->waferPosX_[type];
339  y = hgpar_->waferPosY_[type];
340  if (hgpar_->waferTypeT_[type] == 1) {
341  x += hgpar_->cellFineX_[cell];
342  y += hgpar_->cellFineY_[cell];
343  } else {
344  x += hgpar_->cellCoarseX_[cell];
345  y += hgpar_->cellCoarseY_[cell];
346  }
347  if (!reco) {
348  x /= k_ScaleFromDDD;
349  y /= k_ScaleFromDDD;
350  }
351  }
352  return std::pair<float,float>(x,y);
353 }
std::vector< double > waferPosY_
type
Definition: HCALResponse.h:21
float alpha
Definition: AMPTWrapper.h:95
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
std::vector< double > cellFineY_
HGCalGeometryMode::GeometryMode mode_
std::vector< double > cellCoarseX_
std::pair< int, int > findCell(int cell, int lay, int subSec, bool reco) const
std::pair< int, float > getIndex(int lay, bool reco) const
void getParameterSquare(int lay, int subSec, bool reco, float &h, float &bl, float &tl, float &alpha) const
std::vector< double > cellFineX_
fixed size matrix
double k_ScaleFromDDD
std::vector< int > waferTypeT_
std::vector< double > cellCoarseY_
const HGCalParameters * hgpar_
std::vector< double > waferPosX_
std::pair< float, float > HGCalDDDConstants::locateCellHex ( int  cell,
int  wafer,
bool  reco 
) const

Definition at line 355 of file HGCalDDDConstants.cc.

References HGCalParameters::cellCoarseX_, HGCalParameters::cellCoarseY_, HGCalParameters::cellFineX_, HGCalParameters::cellFineY_, hgpar_, k_ScaleFromDDD, HGCalParameters::waferTypeT_, x, and y.

Referenced by geomMode(), HGCalGeometry::getCorners(), and HGCalGeometry::getPosition().

356  {
357  float x(0), y(0);
358  if (hgpar_->waferTypeT_[wafer] == 1) {
359  x = hgpar_->cellFineX_[cell];
360  y = hgpar_->cellFineY_[cell];
361  } else {
362  x = hgpar_->cellCoarseX_[cell];
363  y = hgpar_->cellCoarseY_[cell];
364  }
365  if (!reco) {
366  x /= k_ScaleFromDDD;
367  y /= k_ScaleFromDDD;
368  }
369  return std::pair<float,float>(x,y);
370 }
std::vector< double > cellFineY_
std::vector< double > cellCoarseX_
std::vector< double > cellFineX_
fixed size matrix
double k_ScaleFromDDD
std::vector< int > waferTypeT_
std::vector< double > cellCoarseY_
const HGCalParameters * hgpar_
int HGCalDDDConstants::maxCells ( bool  reco) const

Definition at line 372 of file HGCalDDDConstants.cc.

References HGCalParameters::depth_, hgpar_, mps_fire::i, HGCalParameters::layer_, and layers().

Referenced by HGCalDDDConstants(), HGCalTopology::HGCalTopology(), isValid(), levelTop(), HGCalGeometry::newCell(), and newCell().

372  {
373 
374  int cells(0);
375  for (unsigned int i = 0; i<layers(reco); ++i) {
376  int lay = reco ? hgpar_->depth_[i] : hgpar_->layer_[i];
377  if (cells < maxCells(lay, reco)) cells = maxCells(lay, reco);
378  }
379  return cells;
380 }
std::vector< int > layer_
std::vector< int > depth_
unsigned int layers(bool reco) const
fixed size matrix
const HGCalParameters * hgpar_
int maxCells(bool reco) const
int HGCalDDDConstants::maxCells ( int  lay,
bool  reco 
) const

Definition at line 382 of file HGCalDDDConstants.cc.

References alpha, HGCalParameters::cellCoarseX_, HGCalParameters::cellFineX_, getIndex(), getParameterSquare(), h, hgpar_, mps_fire::i, diffTreeTool::index, gen::k, maxCellsSquare(), mode_, HGCalGeometryMode::Square, waferInLayer(), and HGCalParameters::waferTypeT_.

382  {
383 
384  std::pair<int,float> index = getIndex(lay, reco);
385  int i = index.first;
386  if (i < 0) return 0;
388  float h, bl, tl, alpha;
389  getParameterSquare(i,0,reco,h,bl,tl,alpha);
390  return maxCellsSquare(h, bl, tl, alpha, index.second);
391  } else {
392  unsigned int cells(0);
393  for (unsigned int k=0; k<hgpar_->waferTypeT_.size(); ++k) {
394  if (waferInLayer(k,index.first)) {
395  unsigned int cell = (hgpar_->waferTypeT_[k]==1) ?
396  (hgpar_->cellFineX_.size()) : (hgpar_->cellCoarseX_.size());
397  if (cell > cells) cells = cell;
398  }
399  }
400  return (int)(cells);
401  }
402 }
float alpha
Definition: AMPTWrapper.h:95
int maxCellsSquare(float h, float bl, float tl, float alpha, float cellSize) const
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
HGCalGeometryMode::GeometryMode mode_
std::vector< double > cellCoarseX_
std::pair< int, float > getIndex(int lay, bool reco) const
int k[5][pyjets_maxn]
void getParameterSquare(int lay, int subSec, bool reco, float &h, float &bl, float &tl, float &alpha) const
std::vector< double > cellFineX_
fixed size matrix
std::vector< int > waferTypeT_
const HGCalParameters * hgpar_
bool waferInLayer(int wafer, int lay, bool reco) const
int HGCalDDDConstants::maxCellsSquare ( float  h,
float  bl,
float  tl,
float  alpha,
float  cellSize 
) const

Definition at line 404 of file HGCalDDDConstants.cc.

References a, b, and k_horizontalShift.

Referenced by levelTop(), and maxCells().

405  {
406 
407  float a = (alpha==0) ? (2*h/(tl-bl)) : (h/(tl-bl));
408  float b = 2*h*bl/(tl-bl);
409 
410  int ncells(0);
411  //always use the top of the cell to maximize space
412  int kymax = floor((2*h)/cellSize);
413  for (int iky=0; iky<kymax; ++iky) {
414  int cellsInRow=floor(((iky+1)*cellSize+b+k_horizontalShift*cellSize)/(a*cellSize));
415  ncells += cellsInRow;
416  }
417 
418  return ncells;
419 }
double k_horizontalShift
float alpha
Definition: AMPTWrapper.h:95
double b
Definition: hdecay.h:120
double a
Definition: hdecay.h:121
int HGCalDDDConstants::maxModules ( ) const
inline

Definition at line 55 of file HGCalDDDConstants.h.

References maxRows(), and modHalf_.

55 {return modHalf_;}
int HGCalDDDConstants::maxRows ( int  lay,
bool  reco 
) const

Definition at line 421 of file HGCalDDDConstants.cc.

References getIndex(), hgpar_, mps_fire::i, diffTreeTool::index, gen::k, mode_, HGCalParameters::moduleHR_, HGCalParameters::moduleHS_, trackingPlots::reco, HGCalGeometryMode::Square, HGCalParameters::waferCopy_, and waferInLayer().

Referenced by maxModules(), and newCell().

421  {
422 
423  int kymax(0);
424  std::pair<int,float> index = getIndex(lay, reco);
425  int i = index.first;
426  if (i < 0) return kymax;
428  float h = (reco) ? hgpar_->moduleHR_[i] : hgpar_->moduleHS_[i];
429  kymax = floor((2*h)/index.second);
430  } else {
431  for (unsigned int k=0; k<hgpar_->waferCopy_.size(); ++k) {
432  if (waferInLayer(k,i)) {
433  int ky = ((hgpar_->waferCopy_[k])/100)%100;
434  if (ky > kymax) kymax = ky;
435  }
436  }
437  }
438  return kymax;
439 }
std::vector< double > moduleHR_
std::vector< double > moduleHS_
HGCalGeometryMode::GeometryMode mode_
std::pair< int, float > getIndex(int lay, bool reco) const
int k[5][pyjets_maxn]
fixed size matrix
std::vector< int > waferCopy_
const HGCalParameters * hgpar_
bool waferInLayer(int wafer, int lay, bool reco) const
double HGCalDDDConstants::minSlope ( ) const
inline
int HGCalDDDConstants::modules ( int  lay,
bool  reco 
) const

Definition at line 441 of file HGCalDDDConstants.cc.

References plotBeamSpotDB::first, getIndex(), createfilelist::int, and max_modules_layer_.

Referenced by minSlope(), and wafers().

441  {
442  if( getIndex(lay,reco).first < 0 ) return 0;
443  return max_modules_layer_[(int)reco][lay];
444 }
std::pair< int, float > getIndex(int lay, bool reco) const
simrecovecs max_modules_layer_
fixed size matrix
int HGCalDDDConstants::modulesInit ( int  lay,
bool  reco 
) const

Definition at line 446 of file HGCalDDDConstants.cc.

References getIndex(), hgpar_, diffTreeTool::index, gen::k, waferInLayer(), and HGCalParameters::waferPosX_.

Referenced by HGCalDDDConstants(), and minSlope().

446  {
447  int nmod(0);
448  std::pair<int,float> index = getIndex(lay, reco);
449  if (index.first < 0) return nmod;
450  for (unsigned int k=0; k<hgpar_->waferPosX_.size(); ++k) {
451  if (waferInLayer(k,index.first)) ++nmod;
452  }
453  return nmod;
454 }
std::pair< int, float > getIndex(int lay, bool reco) const
int k[5][pyjets_maxn]
fixed size matrix
const HGCalParameters * hgpar_
std::vector< double > waferPosX_
bool waferInLayer(int wafer, int lay, bool reco) const
std::pair< int, int > HGCalDDDConstants::newCell ( int  cell,
int  layer,
int  sector,
int  subsector,
int  incrx,
int  incry,
bool  half 
) const

Definition at line 456 of file HGCalDDDConstants.cc.

References findCell(), hgpar_, maxCells(), maxRows(), and HGCalParameters::nSectors_.

Referenced by HGCalTopology::changeXY(), HGCalTopology::changeZ(), and minSlope().

458  {
459 
460  int subSec = half ? subsector : 0;
461  std::pair<int,int> kxy = findCell(cell, layer, subSec, true);
462  int kx = kxy.first + incrx;
463  int ky = kxy.second + incry;
464  if (ky < 0 || ky > maxRows(layer, true)) {
465  cell = maxCells(true);
466  return std::pair<int,int>(cell,sector*subsector);
467  } else if (kx < 0) {
468  kx =-kx;
469  subsector =-subsector;
470  } else if (kx > maxCells(layer, true)) {
471  kx -= maxCells(layer, true);
472  sector += subsector;
473  subsector =-subsector;
474  if (sector < 1) sector = hgpar_->nSectors_;
475  else if (sector > hgpar_->nSectors_) sector = 1;
476  }
477  cell = newCell(kx, ky, layer, subSec);
478  return std::pair<int,int>(cell,sector*subsector);
479 }
int maxRows(int lay, bool reco) const
std::pair< int, int > findCell(int cell, int lay, int subSec, bool reco) const
std::pair< int, int > newCell(int cell, int layer, int sector, int subsector, int incrx, int incry, bool half) const
const HGCalParameters * hgpar_
int maxCells(bool reco) const
std::pair< int, int > HGCalDDDConstants::newCell ( int  cell,
int  layer,
int  subsector,
int  incrz,
bool  half 
) const

Definition at line 481 of file HGCalDDDConstants.cc.

References assignCell(), layers(), locateCell(), and geometryCSVtoXML::xy.

482  {
483 
484  int layer = lay + incrz;
485  if (layer <= 0 || layer > (int)(layers(true))) return std::pair<int,int>(cell,0);
486  int subSec = half ? subsector : 0;
487  std::pair<float,float> xy = locateCell(cell, lay, subSec, true);
488  std::pair<int,int> kcell = assignCell(xy.first, xy.second, layer, subSec,
489  true);
490  return std::pair<int,int>(kcell.second,layer);
491 }
std::pair< float, float > locateCell(int cell, int lay, int type, bool reco) const
unsigned int layers(bool reco) const
std::pair< int, int > assignCell(float x, float y, int lay, int subSec, bool reco) const
int HGCalDDDConstants::newCell ( int  kx,
int  ky,
int  lay,
int  subSec 
) const

Definition at line 493 of file HGCalDDDConstants.cc.

References a, alpha, b, getIndex(), hgpar_, mps_fire::i, diffTreeTool::index, k_horizontalShift, maxCells(), HGCalParameters::moduleAlphaS_, HGCalParameters::moduleBlR_, HGCalParameters::moduleHR_, and HGCalParameters::moduleTlR_.

493  {
494 
495  std::pair<int,float> index = getIndex(lay, true);
496  int i = index.first;
497  if (i < 0) return maxCells(true);
498  float alpha = (subSec == 0) ? hgpar_->moduleAlphaS_[i] : subSec;
499  float cellSize = index.second;
500  float a = (alpha==0) ?
503  float b = 2*hgpar_->moduleHR_[i]*hgpar_->moduleBlR_[i]/
505  int icell(kx);
506  for (int iky=0; iky<ky; ++iky)
507  icell += floor(((iky+1)*cellSize+b+k_horizontalShift*cellSize)/(a*cellSize));
508  return icell;
509 }
double k_horizontalShift
float alpha
Definition: AMPTWrapper.h:95
std::vector< double > moduleHR_
std::pair< int, float > getIndex(int lay, bool reco) const
std::vector< double > moduleBlR_
double b
Definition: hdecay.h:120
std::vector< double > moduleAlphaS_
double a
Definition: hdecay.h:121
const HGCalParameters * hgpar_
int maxCells(bool reco) const
std::vector< double > moduleTlR_
std::vector< int > HGCalDDDConstants::numberCells ( int  lay,
bool  reco 
) const

Definition at line 511 of file HGCalDDDConstants.cc.

References alpha, HGCalParameters::cellCoarseX_, HGCalParameters::cellFineX_, getIndex(), getParameterSquare(), h, hgpar_, mps_fire::i, diffTreeTool::index, gen::k, mode_, numberCellsSquare(), HGCalGeometryMode::Square, waferInLayer(), and HGCalParameters::waferTypeT_.

Referenced by minSlope().

511  {
512 
513  std::pair<int,float> index = getIndex(lay, reco);
514  int i = index.first;
515  std::vector<int> ncell;
516  if (i >= 0) {
518  float h, bl, tl, alpha;
519  getParameterSquare(i,0,reco,h,bl,tl,alpha);
520  return numberCellsSquare(h, bl, tl, alpha, index.second);
521  } else {
522  for (unsigned int k=0; k<hgpar_->waferTypeT_.size(); ++k) {
523  if (waferInLayer(k,i)) {
524  unsigned int cell = (hgpar_->waferTypeT_[k]==1) ?
525  (hgpar_->cellFineX_.size()) : (hgpar_->cellCoarseX_.size());
526  ncell.push_back((int)(cell));
527  }
528  }
529  }
530  }
531  return ncell;
532 }
float alpha
Definition: AMPTWrapper.h:95
std::vector< int > numberCellsSquare(float h, float bl, float tl, float alpha, float cellSize) const
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
HGCalGeometryMode::GeometryMode mode_
std::vector< double > cellCoarseX_
std::pair< int, float > getIndex(int lay, bool reco) const
int k[5][pyjets_maxn]
void getParameterSquare(int lay, int subSec, bool reco, float &h, float &bl, float &tl, float &alpha) const
std::vector< double > cellFineX_
fixed size matrix
std::vector< int > waferTypeT_
const HGCalParameters * hgpar_
bool waferInLayer(int wafer, int lay, bool reco) const
int HGCalDDDConstants::numberCellsHexagon ( int  wafer) const

Definition at line 547 of file HGCalDDDConstants.cc.

References HGCalParameters::cellCoarseX_, HGCalParameters::cellFineX_, hgpar_, createfilelist::int, and HGCalParameters::waferTypeT_.

Referenced by HGCalTriggerGeometryHexImp1::fillMaps(), minSlope(), and HGCalGeometry::newCell().

547  {
548 
549  int ncell(0);
550  if (wafer >= 0 && wafer < (int)(hgpar_->waferTypeT_.size())) {
551  if (hgpar_->waferTypeT_[wafer]==1)
552  ncell = (int)(hgpar_->cellFineX_.size());
553  else
554  ncell = (int)(hgpar_->cellCoarseX_.size());
555  }
556  return ncell;
557 }
std::vector< double > cellCoarseX_
std::vector< double > cellFineX_
std::vector< int > waferTypeT_
const HGCalParameters * hgpar_
std::vector< int > HGCalDDDConstants::numberCellsSquare ( float  h,
float  bl,
float  tl,
float  alpha,
float  cellSize 
) const

Definition at line 534 of file HGCalDDDConstants.cc.

References a, b, and k_horizontalShift.

Referenced by minSlope(), and numberCells().

536  {
537 
538  float a = (alpha==0) ? (2*h/(tl-bl)) : (h/(tl-bl));
539  float b = 2*h*bl/(tl-bl);
540  int kymax = floor((2*h)/cellSize);
541  std::vector<int> ncell;
542  for (int iky=0; iky<kymax; ++iky)
543  ncell.push_back(floor(((iky+1)*cellSize+b+k_horizontalShift*cellSize)/(a*cellSize)));
544  return ncell;
545 }
double k_horizontalShift
float alpha
Definition: AMPTWrapper.h:95
double b
Definition: hdecay.h:120
double a
Definition: hdecay.h:121
std::pair< int, int > HGCalDDDConstants::rowColumnWafer ( const int  wafer) const

Definition at line 559 of file HGCalDDDConstants.cc.

References cuy::col, popcon2dropbox::copy(), hgpar_, and HGCalParameters::waferCopy_.

Referenced by minSlope().

559  {
560  int row(0), col(0);
561  if (wafer < (int)(hgpar_->waferCopy_.size())) {
562  int copy = hgpar_->waferCopy_[wafer];
563  col = copy%100;
564  if ((copy/10000)%10 != 0) col = -col;
565  row = (copy/100)%100;
566  if ((copy/100000)%10 != 0) row = -row;
567  }
568  return std::pair<int,int>(row,col);
569 }
std::vector< int > waferCopy_
col
Definition: cuy.py:1008
const HGCalParameters * hgpar_
int HGCalDDDConstants::sectors ( ) const
inline
std::pair< int, int > HGCalDDDConstants::simToReco ( int  cell,
int  layer,
int  mod,
bool  half 
) const

Definition at line 571 of file HGCalDDDConstants.cc.

References a, b, HGCalParameters::cellFactor_, gather_cfg::cout, particleFlowClusterECALTimeSelected_cfi::depth, findCellSquare(), getIndex(), hgpar_, mps_fire::i, diffTreeTool::index, k_horizontalShift, HGCalParameters::layerGroup_, HGCalParameters::layerGroupM_, HGCalParameters::layerGroupO_, mod(), mode_, HGCalParameters::moduleAlphaS_, HGCalParameters::moduleBlS_, HGCalParameters::moduleHS_, HGCalParameters::moduleTlS_, HGCalGeometryMode::Square, and HGCalParameters::waferTypeL_.

Referenced by HGCalTBAnalyzer::analyzeSimHits(), CaloTruthAccumulator::fillSimHits(), HGCalTriggerBackend::HGCalTriggerSimCluster< FECODEC, DATA >::run(), sectors(), and HGCalTriggerNtupleHGCDigis::simhits().

572  {
573 
574  std::pair<int,float> index = getIndex(lay, false);
575  int i = index.first;
576  if (i < 0) {
577  return std::pair<int,int>(-1,-1);
578  }
579  int kx(-1), depth(-1);
581  float h = hgpar_->moduleHS_[i];
582  float bl = hgpar_->moduleBlS_[i];
583  float tl = hgpar_->moduleTlS_[i];
584  float cellSize = hgpar_->cellFactor_[i]*index.second;
585 
586  std::pair<int,int> kxy = findCellSquare(cell, h, bl, tl, hgpar_->moduleAlphaS_[i], index.second);
588  if (depth<0) return std::pair<int,int>(-1,-1);
589  kx = kxy.first/hgpar_->cellFactor_[i];
590  int ky = kxy.second/hgpar_->cellFactor_[i];
591 
592  float a = (half) ? (h/(tl-bl)) : (2*h/(tl-bl));
593  float b = 2*h*bl/(tl-bl);
594  for (int iky=0; iky<ky; ++iky)
595  kx += floor(((iky+1)*cellSize+b+k_horizontalShift*cellSize)/(a*cellSize));
596 #ifdef EDM_ML_DEBUG
597  std::cout << "simToReco: input " << cell << ":" << lay << ":" << half
598  << " kxy " << kxy.first << ":" << kxy.second << " output "
599  << kx << ":" << depth << " cell factor="
600  << hgpar_->cellFactor_[i] << std::endl;
601 #endif
602  } else {
603  kx = cell;
604  int type = hgpar_->waferTypeL_[mod];
605  if (type == 1) {
607  } else if (type == 2) {
609  } else {
611  }
612  }
613  return std::pair<int,int>(kx,depth);
614 }
type
Definition: HCALResponse.h:21
double k_horizontalShift
std::vector< double > moduleHS_
std::pair< int, int > findCellSquare(int cell, float h, float bl, float tl, float alpha, float cellSize) const
std::vector< int > layerGroupM_
HGCalGeometryMode::GeometryMode mode_
std::vector< int > cellFactor_
std::pair< int, float > getIndex(int lay, bool reco) const
std::vector< double > moduleTlS_
std::vector< int > layerGroup_
double b
Definition: hdecay.h:120
std::vector< double > moduleAlphaS_
std::vector< int > layerGroupO_
std::vector< double > moduleBlS_
double a
Definition: hdecay.h:121
const HGCalParameters * hgpar_
T mod(const T &a, const T &b)
Definition: ecalDccMap.h:4
std::vector< int > waferTypeL_
unsigned int HGCalDDDConstants::volumes ( ) const
inline
int HGCalDDDConstants::waferFromCopy ( int  copy) const

Definition at line 616 of file HGCalDDDConstants.cc.

References gather_cfg::cout, hgpar_, gen::k, convertSQLiteXML::ok, and HGCalParameters::waferCopy_.

Referenced by HGCNumberingScheme::getUnitID(), and volumes().

616  {
617  const int ncopies = hgpar_->waferCopy_.size();
618  int wafer(ncopies);
619 #ifdef EDM_ML_DEBUG
620  bool ok(false);
621 #endif
622  for (int k=0; k<ncopies; ++k) {
623  if (copy == hgpar_->waferCopy_[k]) {
624  wafer = k;
625 #ifdef EDM_ML_DEBUG
626  ok = true;
627 #endif
628  break;
629  }
630  }
631 #ifdef EDM_ML_DEBUG
632  if (!ok) {
633  std::cout << "Cannot find " << copy << " in a list of " << ncopies << "\n";
634  for (int k=0; k<ncopies; ++k) std::cout << " " << hgpar_->waferCopy_[k];
635  std::cout << std::endl;
636  }
637 #endif
638  return wafer;
639 }
int k[5][pyjets_maxn]
std::vector< int > waferCopy_
const HGCalParameters * hgpar_
void HGCalDDDConstants::waferFromPosition ( const double  x,
const double  y,
int &  wafer,
int &  icell,
int &  celltyp 
) const

Definition at line 641 of file HGCalDDDConstants.cc.

References funct::abs(), HGCalParameters::cellCoarseX_, HGCalParameters::cellCoarseY_, HGCalParameters::cellFineX_, HGCalParameters::cellFineY_, cellHex(), HGCalParameters::cellSize_, gather_cfg::cout, hexside_, hgpar_, createfilelist::int, gen::k, k_ScaleFromDDD, rmax_, tan30deg_, HGCalParameters::waferCopy_, HGCalParameters::waferPosX_, HGCalParameters::waferPosY_, HGCalParameters::waferTypeT_, geometryCSVtoXML::xx, and geometryCSVtoXML::yy.

Referenced by HGCNumberingScheme::getUnitID(), and volumes().

643  {
644 
645  double xx(k_ScaleFromDDD*x), yy(k_ScaleFromDDD*y);
646  int size_ = (int)(hgpar_->waferCopy_.size());
647  wafer = size_;
648  for (int k=0; k<size_; ++k) {
649  double dx = std::abs(xx-hgpar_->waferPosX_[k]);
650  double dy = std::abs(yy-hgpar_->waferPosY_[k]);
651  if (dx <= rmax_ && dy <= hexside_) {
652  if ((dy <= 0.5*hexside_) || (dx <= (2.*rmax_-dy/tan30deg_))) {
653  wafer = k;
654  celltyp = hgpar_->waferTypeT_[k];
655  xx -= hgpar_->waferPosX_[k];
656  yy -= hgpar_->waferPosY_[k];
657  break;
658  }
659  }
660  }
661  if (wafer < size_) {
662  if (celltyp == 1)
663  icell = cellHex(xx, yy, 0.5*k_ScaleFromDDD*hgpar_->cellSize_[0],
665  else
666  icell = cellHex(xx, yy, 0.5*k_ScaleFromDDD*hgpar_->cellSize_[1],
668  }
669 #ifdef EDM_ML_DEBUG
670  std::cout << "Position " << x << ":" << y << " Wafer " << wafer << ":"
671  << size_ << " XX " << xx << ":" << yy << " Cell " << icell
672  << " Type " << celltyp << std::endl;
673 #endif
674 }
std::vector< double > waferPosY_
std::vector< double > cellFineY_
int cellHex(double xx, double yy, const double &cellR, const std::vector< double > &posX, const std::vector< double > &posY) const
std::vector< double > cellCoarseX_
std::vector< double > cellSize_
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
int k[5][pyjets_maxn]
std::vector< double > cellFineX_
std::vector< int > waferCopy_
double k_ScaleFromDDD
std::vector< int > waferTypeT_
std::vector< double > cellCoarseY_
const HGCalParameters * hgpar_
std::vector< double > waferPosX_
static double tan30deg_
bool HGCalDDDConstants::waferInLayer ( int  wafer,
int  lay,
bool  reco 
) const

Definition at line 676 of file HGCalDDDConstants.cc.

References getIndex().

Referenced by HGCalGeometryLoader::build(), HGCalGeometry::getSummary(), getTrForm(), maxCells(), maxRows(), modulesInit(), numberCells(), and volumes().

676  {
677 
678  std::pair<int,float> indx = getIndex(lay, reco);
679  if (indx.first < 0) return false;
680  return waferInLayer(wafer,indx.first);
681 }
std::pair< int, float > getIndex(int lay, bool reco) const
fixed size matrix
bool waferInLayer(int wafer, int lay, bool reco) const
bool HGCalDDDConstants::waferInLayer ( int  wafer,
int  lay 
) const
private

Definition at line 775 of file HGCalDDDConstants.cc.

References HGCalGeometryMode::Hexagon, HGCalGeometryMode::HexagonFull, hgpar_, recoMuon::in, gen::k, HGCalParameters::mode_, rmax_, HGCalParameters::rMinLayHex_, findQualityFiles::rr, mathSSE::sqrt(), tan30deg_, HGCalParameters::waferPosX_, and HGCalParameters::waferPosY_.

775  {
776 
777  const double rr = 2*rmax_*tan30deg_;
778  const double waferX = hgpar_->waferPosX_[wafer];
779  const double waferY = hgpar_->waferPosY_[wafer];
780  double xc[6], yc[6];
781  xc[0] = waferX+rmax_; yc[0] = waferY-0.5*rr;
782  xc[1] = waferX+rmax_; yc[1] = waferY+0.5*rr;
783  xc[2] = waferX; yc[2] = waferY+rr;
784  xc[3] = waferX-rmax_; yc[3] = waferY+0.5*rr;
785  xc[4] = waferX+rmax_; yc[4] = waferY-0.5*rr;
786  xc[5] = waferX; yc[5] = waferY-rr;
787  bool cornerOne(false), cornerAll(true);
788  for (int k=0; k<6; ++k) {
789  double rpos = std::sqrt(xc[k]*xc[k]+yc[k]*yc[k]);
790  if ((rpos >= hgpar_->rMinLayHex_[lay]) &&
791  (rpos <= hgpar_->rMaxLayHex_[lay])) cornerOne = true;
792  else cornerAll = false;
793  }
794  bool in(false);
796  in = cornerAll;
798  in = cornerOne;
799  return in;
800 }
std::vector< double > waferPosY_
HGCalGeometryMode::GeometryMode mode_
T sqrt(T t)
Definition: SSEVec.h:18
std::vector< double > rMinLayHex_
int k[5][pyjets_maxn]
const HGCalParameters * hgpar_
std::vector< double > waferPosX_
static double tan30deg_
std::pair< double, double > HGCalDDDConstants::waferPosition ( int  wafer,
bool  reco = true 
) const

Definition at line 683 of file HGCalDDDConstants.cc.

References hgpar_, k_ScaleFromDDD, HGCalParameters::waferPosX_, HGCalParameters::waferPosY_, geometryCSVtoXML::xx, geometryCSVtoXML::xy, and geometryCSVtoXML::yy.

Referenced by HGCalGeometryLoader::build(), HGCMouseBite::exclude(), and volumes().

684  {
685 
686  double xx(0), yy(0);
687  if (wafer >= 0 && wafer < (int)(hgpar_->waferPosX_.size())) {
688  xx = hgpar_->waferPosX_[wafer];
689  yy = hgpar_->waferPosY_[wafer];
690  }
691  if (!reco) {
692  xx /= k_ScaleFromDDD;
693  yy /= k_ScaleFromDDD;
694  }
695  std::pair<double,double> xy(xx,yy);
696  return xy;
697 }
std::vector< double > waferPosY_
fixed size matrix
double k_ScaleFromDDD
const HGCalParameters * hgpar_
std::vector< double > waferPosX_
int HGCalDDDConstants::wafers ( ) const

Definition at line 706 of file HGCalDDDConstants.cc.

References HGCalParameters::depth_, hgpar_, mps_fire::i, layers(), and modules().

Referenced by HGCalTopology::allGeomModules(), HGCalDDDConstants(), and volumes().

706  {
707 
708  int wafer(0);
709  for (unsigned int i = 0; i<layers(true); ++i) {
710  int lay = hgpar_->depth_[i];
711  wafer += modules(lay, true);
712  }
713  return wafer;
714 }
std::vector< int > depth_
int modules(int lay, bool reco) const
unsigned int layers(bool reco) const
const HGCalParameters * hgpar_
int HGCalDDDConstants::waferToCopy ( int  wafer) const
inline

Definition at line 80 of file HGCalDDDConstants.h.

References hgpar_, and HGCalParameters::waferCopy_.

80 {return ((wafer>=0)&&(wafer< (int)(hgpar_->waferCopy_.size()))) ? hgpar_->waferCopy_[wafer] : (int)(hgpar_->waferCopy_.size());}
std::vector< int > waferCopy_
const HGCalParameters * hgpar_
int HGCalDDDConstants::waferTypeL ( int  wafer) const
inline

Definition at line 84 of file HGCalDDDConstants.h.

References hgpar_, and HGCalParameters::waferTypeL_.

Referenced by hgcal::RecHitTools::getSiThickness(), and HGCalUncalibRecHitRecWeightsAlgo< HGCDataFrame >::makeRecHit().

84 {return ((wafer>=0)&&(wafer<(int)(hgpar_->waferTypeL_.size()))) ? hgpar_->waferTypeL_[wafer] : 0;}
const HGCalParameters * hgpar_
std::vector< int > waferTypeL_
int HGCalDDDConstants::waferTypeT ( int  wafer) const
inline
double HGCalDDDConstants::waferZ ( int  layer,
bool  reco 
) const

Definition at line 699 of file HGCalDDDConstants.cc.

References getIndex(), hgpar_, mps_fire::i, diffTreeTool::index, and HGCalParameters::zLayerHex_.

Referenced by HGCalSimHitValidation::analyzeHits(), HGCalTBAnalyzer::analyzeRecHits(), HGCalTBAnalyzer::analyzeSimHits(), and CaloTruthAccumulator::beginLuminosityBlock().

699  {
700  std::pair<int,float> index = getIndex(lay, reco);
701  int i = index.first;
702  if (i < 0) return 0;
703  else return hgpar_->zLayerHex_[i];
704 }
std::pair< int, float > getIndex(int lay, bool reco) const
std::vector< double > zLayerHex_
fixed size matrix
const HGCalParameters * hgpar_

Member Data Documentation

double HGCalDDDConstants::hexside_
private

Definition at line 107 of file HGCalDDDConstants.h.

Referenced by HGCalDDDConstants(), and waferFromPosition().

const HGCalParameters* HGCalDDDConstants::hgpar_
private
simrecovecs HGCalDDDConstants::max_modules_layer_
private

Definition at line 111 of file HGCalDDDConstants.h.

Referenced by HGCalDDDConstants(), and modules().

HGCalGeometryMode::GeometryMode HGCalDDDConstants::mode_
private
int32_t HGCalDDDConstants::modHalf_
private

Definition at line 109 of file HGCalDDDConstants.h.

Referenced by HGCalDDDConstants(), and maxModules().

double HGCalDDDConstants::rmax_
private
double HGCalDDDConstants::tan30deg_ = 0.5773502693
staticprivate

Definition at line 106 of file HGCalDDDConstants.h.

Referenced by cellHex(), HGCalDDDConstants(), waferFromPosition(), and waferInLayer().

std::array<uint32_t,2> HGCalDDDConstants::tot_layers_
private

Definition at line 110 of file HGCalDDDConstants.h.

Referenced by HGCalDDDConstants(), and layers().

int32_t HGCalDDDConstants::tot_wafers_
private

Definition at line 109 of file HGCalDDDConstants.h.

Referenced by HGCalDDDConstants().