Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Phase2-hgx107 Change the basic geometry of HGCal from FlatTrd to FlatHexagon #22917

Merged
merged 3 commits into from Apr 19, 2018
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
68 changes: 41 additions & 27 deletions CondTools/Geometry/plugins/calowriters.cc
Expand Up @@ -401,42 +401,56 @@ CaloGeometryDBEP<HGCalGeometry, CaloGeometryDBWriter>::produceAligned( const typ
++dsrc ;
}

std::vector<GlobalPoint> corners( 8 );
std::vector<GlobalPoint> corners( FlatHexagon::ncorner_ );

FlatTrd::createCorners( dims, tr, corners );
FlatHexagon::createCorners( dims, tr, corners );

const CCGFloat* myParm( CaloCellGeometry::getParmPtr( dims,
ptr->parMgr(),
ptr->parVecVec()));
GlobalPoint front ( 0.25*( corners[0].x() +
corners[1].x() +
corners[2].x() +
corners[3].x()),
0.25*( corners[0].y() +
corners[1].y() +
corners[2].y() +
corners[3].y()),
0.25*( corners[0].z() +
corners[1].z() +
corners[2].z() +
corners[3].z()));
GlobalPoint front ( FlatHexagon::oneBySix_*( corners[0].x() +
corners[1].x() +
corners[2].x() +
corners[3].x() +
corners[4].x() +
corners[5].x()),
FlatHexagon::oneBySix_*( corners[0].y() +
corners[1].y() +
corners[2].y() +
corners[3].y() +
corners[4].y() +
corners[5].y()),
FlatHexagon::oneBySix_*( corners[0].z() +
corners[1].z() +
corners[2].z() +
corners[3].z() +
corners[4].z() +
corners[5].z()));

GlobalPoint back ( 0.25*( corners[4].x() +
corners[5].x() +
corners[6].x() +
corners[7].x()),
0.25*( corners[4].y() +
corners[5].y() +
corners[6].y() +
corners[7].y()),
0.25*( corners[4].z() +
corners[5].z() +
corners[6].z() +
corners[7].z()));
GlobalPoint back ( FlatHexagon::oneBySix_*( corners[6].x() +
corners[7].x() +
corners[8].x() +
corners[9].x() +
corners[10].x()+
corners[11].x()),
FlatHexagon::oneBySix_*( corners[6].y() +
corners[7].y() +
corners[8].y() +
corners[9].y() +
corners[10].y()+
corners[11].y()),
FlatHexagon::oneBySix_*( corners[6].z() +
corners[7].z() +
corners[8].z() +
corners[9].z() +
corners[10].z() +
corners[11].z()));

if (front.mag2() > back.mag2()) { // front should always point to the center, so swap front and back
std::swap (front, back);
std::swap_ranges (corners.begin(), corners.begin()+4, corners.begin()+4);
std::swap_ranges (corners.begin(),
corners.begin()+FlatHexagon::ncornerBy2_,
corners.begin()+FlatHexagon::ncornerBy2_);
}

ptr->newCell( front, back, corners[0], myParm, id );
Expand Down
6 changes: 5 additions & 1 deletion Geometry/CaloGeometry/interface/FlatHexagon.h
Expand Up @@ -73,7 +73,11 @@ class FlatHexagon : public CaloCellGeometry {
void getTransform( Tr3D& tr, Pt3DVec* lptr ) const override;

void setPosition ( const GlobalPoint& p ) { m_global = p; setRefPoint(p); }


static constexpr double oneBySix_ = 1.0/6.0;
static const unsigned int ncorner_ = 12;
static constexpr unsigned int ncornerBy2_ = ncorner_/2;

private:

void initCorners(CornersVec& ) override;
Expand Down
18 changes: 9 additions & 9 deletions Geometry/CaloGeometry/src/FlatHexagon.cc
Expand Up @@ -154,15 +154,15 @@ void FlatHexagon::createCorners( const std::vector<CCGFloat>& pv ,
std::vector<GlobalPoint>& co ) {

assert( 3 == pv.size() ) ;
assert( 12 == co.size() ) ;
assert( ncorner_ == co.size() ) ;

Pt3DVec ko ( 12, Pt3D(0,0,0) ) ;
Pt3DVec ko ( ncorner_, Pt3D(0,0,0) ) ;

Pt3D tmp ;
Pt3DVec to ( 12, Pt3D(0,0,0) ) ;
Pt3DVec to ( ncorner_, Pt3D(0,0,0) ) ;
localCorners( to, &pv.front(), tmp ) ;

for( unsigned int i ( 0 ) ; i != 12 ; ++i ) {
for( unsigned int i ( 0 ) ; i != ncorner_ ; ++i ) {
ko[i] = tr * to[i] ; // apply transformation
const Pt3D & p ( ko[i] ) ;
co[ i ] = GlobalPoint( p.x(), p.y(), p.z() ) ;
Expand All @@ -176,7 +176,7 @@ void FlatHexagon::localCorners( Pt3DVec& lc ,
const CCGFloat* pv ,
Pt3D& ref ) {
assert( nullptr != pv ) ;
assert( 12 == lc.size() ) ;
assert( ncorner_ == lc.size() ) ;

const CCGFloat dz ( pv[0] ) ;
const CCGFloat r ( pv[1] ) ;
Expand All @@ -195,7 +195,7 @@ void FlatHexagon::localCorners( Pt3DVec& lc ,
lc[10]= Pt3D ( r , R , dz ); // (+,+,+)
lc[11]= Pt3D ( r , - R , dz ); // (+,-,+)

ref = ( lc[0] + lc[1] + lc[2] + lc[3] + lc[4] + lc[5] ) / 6.0;
ref = oneBySix_ * ( lc[0] + lc[1] + lc[2] + lc[3] + lc[4] + lc[5] );
#ifdef EDM_ML_DEBUG
edm::LogVerbatim("CaloGeometry") << "Ref " << ref << " Local Corners "
<< lc[0] << "|" << lc[1] << "|" << lc[2]
Expand All @@ -213,7 +213,7 @@ void FlatHexagon::getTransform( Tr3D& tr, Pt3DVec* lptr ) const {

Pt3D lFront ;
assert( nullptr != param() ) ;
std::vector<Pt3D > lc( 12, Pt3D(0,0,0) ) ;
std::vector<Pt3D > lc( ncorner_, Pt3D(0,0,0) ) ;
localCorners( lc, param(), lFront ) ;

// figure out if reflction volume or not
Expand Down Expand Up @@ -259,7 +259,7 @@ void FlatHexagon::initCorners(CaloCellGeometry::CornersVec& co) {
Tr3D tr ;
getTransform( tr, &lc ) ;

for (unsigned int i ( 0 ) ; i != 12 ; ++i ) {
for (unsigned int i ( 0 ) ; i != ncorner_ ; ++i ) {
const Pt3D corn ( tr*lc[i] ) ;
corners[i] = GlobalPoint( corn.x(), corn.y(), corn.z() ) ;
}
Expand All @@ -271,7 +271,7 @@ GlobalVector FlatHexagon::makeAxis() {
}

GlobalPoint FlatHexagon::backCtr() const {
float dz = (getCorners()[6].z() > getCorners()[0].z()) ?
float dz = (getCorners()[ncornerBy2_].z() > getCorners()[0].z()) ?
param()[0] : -param()[0];
Pt3D local_b(m_local.x(),m_local.y(),m_local.z()+dz);
Pt3D global_b = m_tr*local_b;
Expand Down
10 changes: 5 additions & 5 deletions Geometry/HGCalGeometry/interface/HGCalGeometry.h
Expand Up @@ -15,20 +15,18 @@
#include "DataFormats/ForwardDetId/interface/HGCalDetId.h"
#include "DataFormats/GeometryVector/interface/GlobalPoint.h"
#include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h"
#include "Geometry/CaloGeometry/interface/FlatTrd.h"
#include "Geometry/CaloGeometry/interface/FlatHexagon.h"
#include "Geometry/Records/interface/IdealGeometryRecord.h"
#include "DetectorDescription/Core/interface/DDFilteredView.h"
#include "Geometry/CaloTopology/interface/HGCalTopology.h"
#include "Geometry/Records/interface/HGCalGeometryRecord.h"
#include <vector>

class FlatTrd;

class HGCalGeometry final: public CaloSubdetectorGeometry {

public:

typedef std::vector<FlatTrd> CellVec ;
typedef std::vector<FlatHexagon> CellVec ;

typedef CaloCellGeometry::CCGFloat CCGFloat ;
typedef CaloCellGeometry::Pt3D Pt3D ;
Expand All @@ -40,7 +38,8 @@ class HGCalGeometry final: public CaloSubdetectorGeometry {
typedef HGCalGeometryRecord AlignedRecord ; // NOTE: not aligned yet
typedef PHGCalRcd PGeometryRecord ;

enum { k_NumberOfParametersPerShape = 12 } ; // FlatTrd
//enum { k_NumberOfParametersPerShape = 12 } ; // FlatTrd
enum { k_NumberOfParametersPerShape = 3 } ; // FlatHexagon
enum { k_NumberOfShapes = 50 } ;

static std::string dbString() { return "PHGCalRcd" ; }
Expand Down Expand Up @@ -123,6 +122,7 @@ class HGCalGeometry final: public CaloSubdetectorGeometry {
std::vector<DetId> m_validGeomIds;
bool m_halfType;
ForwardSubdetector m_subdet;
const double twoBysqrt3_;
};

#endif
3 changes: 2 additions & 1 deletion Geometry/HGCalGeometry/interface/HGCalGeometryLoader.h
Expand Up @@ -2,7 +2,7 @@
#define GeometryHGCalGeometryHGCalGeometryLoader_h
#include "Geometry/HGCalGeometry/interface/HGCalGeometry.h"
#include "Geometry/CaloGeometry/interface/CaloCellGeometry.h"
#include "Geometry/CaloGeometry/interface/FlatTrd.h"
#include "Geometry/CaloGeometry/interface/FlatHexagon.h"

class HGCalTopology;
class HGCalGeometry;
Expand All @@ -22,6 +22,7 @@ class HGCalGeometryLoader {
void buildGeom(const ParmVec&, const HepGeom::Transform3D&, const DetId&,
HGCalGeometry*);

const double twoBysqrt3_;
};

#endif
69 changes: 41 additions & 28 deletions Geometry/HGCalGeometry/plugins/moduleDB.cc
Expand Up @@ -82,42 +82,56 @@ CaloGeometryDBEP<HGCalGeometry, CaloGeometryDBReader>::produceAligned( const typ
++dsrc ;
}

std::vector<GlobalPoint> corners( 8 );
std::vector<GlobalPoint> corners( FlatHexagon::ncorner_ );

FlatTrd::createCorners( dims, tr, corners );
FlatHexagon::createCorners( dims, tr, corners );

const CCGFloat* myParm( CaloCellGeometry::getParmPtr( dims,
ptr->parMgr(),
ptr->parVecVec()));
GlobalPoint front ( 0.25*( corners[0].x() +
corners[1].x() +
corners[2].x() +
corners[3].x()),
0.25*( corners[0].y() +
corners[1].y() +
corners[2].y() +
corners[3].y()),
0.25*( corners[0].z() +
corners[1].z() +
corners[2].z() +
corners[3].z()));
GlobalPoint front ( FlatHexagon::oneBySix_*( corners[0].x() +
corners[1].x() +
corners[2].x() +
corners[3].x() +
corners[4].x() +
corners[5].x()),
FlatHexagon::oneBySix_*( corners[0].y() +
corners[1].y() +
corners[2].y() +
corners[3].y() +
corners[4].y() +
corners[5].y()),
FlatHexagon::oneBySix_*( corners[0].z() +
corners[1].z() +
corners[2].z() +
corners[3].z() +
corners[4].z() +
corners[5].z()));

GlobalPoint back ( 0.25*( corners[4].x() +
corners[5].x() +
corners[6].x() +
corners[7].x()),
0.25*( corners[4].y() +
corners[5].y() +
corners[6].y() +
corners[7].y()),
0.25*( corners[4].z() +
corners[5].z() +
corners[6].z() +
corners[7].z()));
GlobalPoint back ( FlatHexagon::oneBySix_*( corners[6].x() +
corners[7].x() +
corners[8].x() +
corners[9].x() +
corners[10].x()+
corners[11].x()),
FlatHexagon::oneBySix_*( corners[6].y() +
corners[7].y() +
corners[8].y() +
corners[9].y() +
corners[10].y()+
corners[11].y()),
FlatHexagon::oneBySix_*( corners[6].z() +
corners[7].z() +
corners[8].z() +
corners[9].z() +
corners[10].z()+
corners[11].z()));

if (front.mag2() > back.mag2()) { // front should always point to the center, so swap front and back
std::swap (front, back);
std::swap_ranges (corners.begin(), corners.begin()+4, corners.begin()+4);
std::swap_ranges (corners.begin(),
corners.begin()+FlatHexagon::ncornerBy2_,
corners.begin()+FlatHexagon::ncornerBy2_);
}

ptr->newCell( front, back, corners[0], myParm, id );
Expand All @@ -134,4 +148,3 @@ typedef CaloGeometryDBEP< HGCalGeometry , CaloGeometryDBReader>
HGCalGeometryFromDBEP ;

DEFINE_FWK_EVENTSETUP_MODULE(HGCalGeometryFromDBEP);