12#ifndef LARGEOENDCAP_EMECACCORDIONCONSTRUCTION_H
13#define LARGEOENDCAP_EMECACCORDIONCONSTRUCTION_H
18#include "GeoModelKernel/GeoDefinitions.h"
24class GeoXmlInpManager;
44 void setMaterial(
const std::string& name,
const GeoMaterial* material);
58 double& llip1,
double& ylip1,
59 double& llip2,
double& ylip2)
const;
61 double& llip1,
double& ylip1,
62 double& llip2,
double& ylip2)
const;
64 double rmin,
double rmax,
double zdel,
67 double zmax,
double rmax)
const;
69 double zmax,
double rmax,
76 double pz1,
double pr1min,
double pr1max,
77 double pz2,
double pr2min,
double pr2max)
const;
83 double innerLipLength2,
double innerLipPosition2);
85 double outerLipLength2,
double outerLipPosition2);
129 "01",
"02",
"03",
"04",
"05",
"06",
"07",
"08",
"09",
"10",
130 "11",
"12",
"13",
"14",
"15",
"16",
"17",
"18",
"19",
"20",
"21"
GeoTrf::Vector3D GeoThreeVector
GeoTrf::Vector2D GeoTwoVector
void constructInnerLips(double innerLipLength1, double innerLipPosition1, double innerLipLength2, double innerLipPosition2)
void constructInnerWheelStructure(bool makeSlices=true)
double m_innerElectrodeThickness
std::array< GeoPhysVol *, s_innerNoBlades > m_innerElectrode
GeoShape * constructBlade(int icase, const GeoThreeVector corners[8], double xscale, double pz1, double pr1min, double pr1max, double pz2, double pr2min, double pr2max) const
std::string m_nameInnerWheel
static constexpr int s_outerNoBlades
std::array< double, s_outerNoBlades+1 > m_outerWheelRmin
std::array< double, 3 > m_rMaxOuter
std::array< GeoPhysVol *, s_innerNoBlades > m_innerSector
double m_innerGlueThickness
EMECAccordionConstruction()=default
std::array< GeoPhysVol *, s_outerNoBlades > m_outerGlue
double m_innerSteelThickness
void getBladeCorners(double wmin, double wmax, double thickness, double rmin, double rmax, double zdel, GeoThreeVector corners[8]) const
const GeoMaterial * m_materialLead
std::array< double, s_innerNoBlades+1 > m_innerWheelRmax
double m_outerSteelThickness
double m_outerWaveZoneWidth
double m_innerAbsorberThickness
void constructOuterLips(double outerLipLength1, double outerLipPosition1, double outerLipLength2, double outerLipPosition2)
std::array< GeoThreeVector, s_outerNoBlades > m_outerAbsorberOffset
void getOuterAbsorberData(double &wmin, double &wmax, double &llip1, double &ylip1, double &llip2, double &ylip2) const
std::array< double, s_innerNoBlades+1 > m_innerWheelRmin
void placeOuterAccordion(int outerNoSectors, bool makeSlices, bool makeSectors)
double m_innerWheelRminIncrement
std::array< GeoThreeVector, s_innerNoBlades > m_innerAbsorberOffset
void placeInnerSlices(bool makeSlices)
GeoFullPhysVol * m_outerWheel
GeoFullPhysVol * m_innerWheel
GeoThreeVector IntersectionPoint(const GeoThreeVector &p1, const GeoThreeVector &p2, const CutPlane &plane) const
std::array< double, 2 > m_outerWheelRminIncrement
std::array< double, 2 > m_rMaxInner
void placeOuterSlices(bool makeSlices)
void constructOuterBlades(const GeoThreeVector outerCorners[8], const GeoThreeVector outerElectrodeCorners[8])
void setInnerWheelSlices()
std::array< GeoPhysVol *, s_innerNoBlades > m_innerSlice
std::array< GeoPhysVol *, s_innerNoBlades > m_innerGlue
const GeoMaterial * m_materialKapton
void getInnerAbsorberData(double &wmin, double &wmax, double &llip1, double &ylip1, double &llip2, double &ylip2) const
std::array< double, 2 > m_zWheelInner
std::array< double, s_outerNoBlades+1 > m_outerWheelZ
std::array< double, 3 > m_rMinOuter
std::array< GeoPhysVol *, s_outerNoBlades > m_outerSector
std::string m_nameSuffix[s_outerNoBlades]
std::array< GeoThreeVector, s_innerNoBlades > m_innerSliceOffset
void setInnerWheel(GeoFullPhysVol *innerWheel)
std::string m_nameOuterWheel
std::array< double, 2 > m_outerWheelRmaxIncrement
double m_outerQuaterWaveWidth
std::array< double, 2 > m_rMinInner
std::array< GeoThreeVector, s_innerNoBlades > m_innerElectrodeOffset
double m_outerLeadThickness
std::array< GeoPhysVol *, s_outerNoBlades > m_outerLead
void setOuterWheel(GeoFullPhysVol *outerWheel)
std::array< GeoPhysVol *, s_outerNoBlades > m_outerSlice
const GeoMaterial * m_materialGlue
void setOuterWheelSlices()
std::array< GeoPhysVol *, s_innerNoBlades > m_innerLead
double m_innerWaveZoneWidth
double m_innerQuaterWaveWidth
const GeoMaterial * m_materialSteel
std::array< GeoThreeVector, s_outerNoBlades > m_outerElectrodeOffset
void constructOuterSlices()
CutPlane getTopCutPlane(double zmin, double rmin, double zmax, double rmax, const GeoThreeVector corners[8]) const
std::array< GeoPhysVol *, s_outerNoBlades > m_outerAbsorber
std::array< GeoThreeVector, s_outerNoBlades > m_outerSliceOffset
std::array< GeoPhysVol *, s_innerNoBlades > m_innerAbsorber
double m_outerHalfWaveWidth
void placeInnerAccordion(int innerNoSectors, bool makeSlices, bool makeSectors)
std::string m_nameAbsorber
void setWheelParameters()
std::string m_nameElectrode
double m_outerAbsorberThickness
double m_outerElectrodeThickness
static constexpr int s_innerNoBlades
std::array< GeoPhysVol *, s_outerNoBlades > m_outerElectrode
double m_innerLeadThickness
~EMECAccordionConstruction()=default
void constructInnerSlices()
void setMaterial(const std::string &name, const GeoMaterial *material)
void constructOuterWheelStructure(bool makeSlices=true)
const GeoMaterial * m_materialLiquidArgon
void placeOuterGlueAndLead()
void constructInnerBlades(const GeoThreeVector innerCorners[8], const GeoThreeVector innerElectrodeCorners[8])
void placeInnerGlueAndLead()
double m_outerGlueThickness
CutPlane getBottomCutPlane(double zmin, double rmin, double zmax, double rmax) const
double m_innerWheelRmaxIncrement
double m_innerHalfWaveWidth
std::array< double, 3 > m_zWheelOuter
std::array< double, s_innerNoBlades+1 > m_innerWheelZ
std::array< double, s_outerNoBlades+1 > m_outerWheelRmax