ATLAS Offline Software
Loading...
Searching...
No Matches
EMBAccordionDetails::Clockwork Class Reference
Collaboration diagram for EMBAccordionDetails::Clockwork:

Public Member Functions

int phiGap (double radius, double xhit, double yhit) const
 compute number (0 to 1023) of closest electrode according to nominal accordion geometry
void getRPhi ()
 initialization routine
double phi0 (double radius) const
 phi of first absorber as function of radius for nominal accordion geometry (before sagging).
double Distance_Ele (const double &x, const double &y, const int &PhiC, int &Num_Straight, const int &Num_Coude, double &xl)
 Compute the distance to the electrode.
double Distance_Abs (const double &x, const double &y, const int &nabs, const int &Num_Straight, const int &Num_Coude)
 Compute the distance to the absorber.

Public Attributes

double gam0
double Rmin
double Rmax
double dR
double Rphi [5000]
int NRphi
int Nbrt
int Nbrt1
double rint_eleFib
double delta [15]
double rc [15]
double phic [15]
double xc [15]
double yc [15]
double rMinAccordion
double rMaxAccordion
double zMinBarrel
double zMaxBarrel
double etaMaxBarrel
int NCellTot
int NCellMax
const GeoStraightAccSectionelectrodeStraightSection
const GeoStraightAccSectionabsorberStraightSection
ServiceHandle< StoreGateSvcdetStore {"DetectorStore","DetectorStore"}

Detailed Description

Definition at line 19 of file EMBAccordionDetails.cxx.

Member Function Documentation

◆ Distance_Abs()

double EMBAccordionDetails::Clockwork::Distance_Abs ( const double & x,
const double & y,
const int & nabs,
const int & Num_Straight,
const int & Num_Coude )

Compute the distance to the absorber.

◆ Distance_Ele()

double EMBAccordionDetails::Clockwork::Distance_Ele ( const double & x,
const double & y,
const int & PhiC,
int & Num_Straight,
const int & Num_Coude,
double & xl )

Compute the distance to the electrode.

◆ getRPhi()

void EMBAccordionDetails::Clockwork::getRPhi ( )

initialization routine

Definition at line 77 of file EMBAccordionDetails.cxx.

78{
79 const double dl=0.001;
80 const double inv_dl = 1 / dl;
81 double cenx[15],ceny[15];
82 std::vector<double> sum1(5000);
83 std::vector<double> sumx(5000);
84 NRphi=5000;
85 Rmin=1500.;
86 dR=0.10;
87 Rmax=0.;
88
89 const double rint= rint_eleFib;
90 const double inv_rint = 1. / rint;
91 const double dt=dl * inv_rint;
92 const double inv_dt = 1. / dt;
93
94 for (int i=0;i<NRphi;i++) {
95 sum1[i]=0.;
96 sumx[i]=0.;
97 }
98 for (int i=0;i<15;i++) {
99 cenx[i]=rc[i]*cos(phic[i]);
100 ceny[i]=rc[i]*sin(phic[i]);
101 }
102
103 for (int i=0; i<15; i++) {
104
105// fold
106 double phi0,phi1;
107 if (i==0) {
108 phi0=-M_PI/2.;
109 phi1=-M_PI/2.+delta[0];
110 }
111 else if (i==14) {
112 phi0=-M_PI+delta[13];
113 phi1=-M_PI/2.;
114 }
115 else {
116 if (i%2==1) {
117 phi0=delta[i];
118 phi1=M_PI-delta[i-1];
119 }
120 else {
121 phi0=-M_PI+delta[i-1];
122 phi1=-delta[i];
123 }
124 }
125 int nstep=int((phi1-phi0) * inv_dt)+1;
126 for (int ii=0;ii<nstep;ii++) {
127 double phi=phi0+dt*((double)ii);
128 double x=cenx[i]+rint*cos(phi);
129 double y=ceny[i]+rint*sin(phi);
130 double radius=sqrt(x*x+y*y);
131 if (radius>Rmax) Rmax=radius;
132 double phid=atan(y/x);
133 int ir=((int) ((radius-Rmin)/dR) );
134 if (ir>=0 && ir < NRphi) {
135 sum1[ir]+=1.;
136 sumx[ir]+=phid;
137 }
138 }
139
140// straight section
141 if (i<14) {
142 double dx=cenx[i+1]-cenx[i];
143 double dy=ceny[i+1]-ceny[i];
144 double along=dx*dx+dy*dy-4.*rint*rint;
145 along=sqrt(along);
146 double x0=0.5*(cenx[i+1]+cenx[i]);
147 double y0=0.5*(ceny[i+1]+ceny[i]);
148 double phi;
149 if (i%2==0) phi=M_PI/2-delta[i];
150 else phi=-M_PI/2.+delta[i];
151 double x1=x0-0.5*along*cos(phi);
152 double y1=y0-0.5*along*sin(phi);
153 int nstep=int(along * inv_dl)+1;
154 for (int ii=0;ii<nstep;ii++) {
155 double x=x1+dl*((double)ii)*cos(phi);
156 double y=y1+dl*((double)ii)*sin(phi);
157 double radius=sqrt(x*x+y*y);
158 if (radius>Rmax) Rmax=radius;
159 double phid=atan(y/x);
160 int ir=((int) ((radius-Rmin)/dR) );
161 if (ir>=0 && ir < NRphi) {
162 sum1[ir]+=1.;
163 sumx[ir]+=phid;
164 }
165 }
166 }
167 }
168 for (int i=0; i<NRphi; i++) {
169 if (sum1[i]>0) {
170 Rphi[i]=sumx[i]/sum1[i];
171 }
172 else Rphi[i]=0.;
173 }
174}
#define M_PI
Scalar phi() const
phi method
#define y
#define x
double phi0(double radius) const
phi of first absorber as function of radius for nominal accordion geometry (before sagging).
int ir
counter of the current depth
Definition fastadd.cxx:49

◆ phi0()

double EMBAccordionDetails::Clockwork::phi0 ( double radius) const

phi of first absorber as function of radius for nominal accordion geometry (before sagging).

Definition at line 280 of file EMBAccordionDetails.cxx.

281{
282 int ir;
283 if (radius < Rmin) ir=0;
284 else {
285 if (radius > Rmax) radius=Rmax-0.0001;
286 ir=((int) ((radius-Rmin)/dR) );
287 }
288 return Rphi[ir];
289}

◆ phiGap()

int EMBAccordionDetails::Clockwork::phiGap ( double radius,
double xhit,
double yhit ) const

compute number (0 to 1023) of closest electrode according to nominal accordion geometry

Definition at line 180 of file EMBAccordionDetails.cxx.

181{
182 const double m2pi = 2.0*Gaudi::Units::pi;
183 double phi_0=phi0(radius)+gam0; // from -M_PI to M_PI
184 double phi_hit=atan2(yhit,xhit); // from -M_PI to M_PI
185 double dphi=phi_hit-phi_0;
186// bring back to 0-2pi
187 if (dphi<0) dphi=dphi+m2pi;
188 if (dphi>=m2pi) dphi=dphi-m2pi;
189 dphi=dphi*(1024/m2pi);
190 int ngap=((int) dphi);
191 return ngap;
192}

Member Data Documentation

◆ absorberStraightSection

const GeoStraightAccSection* EMBAccordionDetails::Clockwork::absorberStraightSection

Definition at line 72 of file EMBAccordionDetails.cxx.

◆ delta

double EMBAccordionDetails::Clockwork::delta[15]

Definition at line 58 of file EMBAccordionDetails.cxx.

◆ detStore

ServiceHandle<StoreGateSvc> EMBAccordionDetails::Clockwork::detStore {"DetectorStore","DetectorStore"}

Definition at line 74 of file EMBAccordionDetails.cxx.

74{"DetectorStore","DetectorStore"};

◆ dR

double EMBAccordionDetails::Clockwork::dR

Definition at line 52 of file EMBAccordionDetails.cxx.

◆ electrodeStraightSection

const GeoStraightAccSection* EMBAccordionDetails::Clockwork::electrodeStraightSection

Definition at line 71 of file EMBAccordionDetails.cxx.

◆ etaMaxBarrel

double EMBAccordionDetails::Clockwork::etaMaxBarrel

Definition at line 67 of file EMBAccordionDetails.cxx.

◆ gam0

double EMBAccordionDetails::Clockwork::gam0

Definition at line 49 of file EMBAccordionDetails.cxx.

◆ Nbrt

int EMBAccordionDetails::Clockwork::Nbrt

Definition at line 55 of file EMBAccordionDetails.cxx.

◆ Nbrt1

int EMBAccordionDetails::Clockwork::Nbrt1

Definition at line 56 of file EMBAccordionDetails.cxx.

◆ NCellMax

int EMBAccordionDetails::Clockwork::NCellMax

Definition at line 69 of file EMBAccordionDetails.cxx.

◆ NCellTot

int EMBAccordionDetails::Clockwork::NCellTot

Definition at line 68 of file EMBAccordionDetails.cxx.

◆ NRphi

int EMBAccordionDetails::Clockwork::NRphi

Definition at line 54 of file EMBAccordionDetails.cxx.

◆ phic

double EMBAccordionDetails::Clockwork::phic[15]

Definition at line 60 of file EMBAccordionDetails.cxx.

◆ rc

double EMBAccordionDetails::Clockwork::rc[15]

Definition at line 59 of file EMBAccordionDetails.cxx.

◆ rint_eleFib

double EMBAccordionDetails::Clockwork::rint_eleFib

Definition at line 57 of file EMBAccordionDetails.cxx.

◆ Rmax

double EMBAccordionDetails::Clockwork::Rmax

Definition at line 51 of file EMBAccordionDetails.cxx.

◆ rMaxAccordion

double EMBAccordionDetails::Clockwork::rMaxAccordion

Definition at line 64 of file EMBAccordionDetails.cxx.

◆ Rmin

double EMBAccordionDetails::Clockwork::Rmin

Definition at line 50 of file EMBAccordionDetails.cxx.

◆ rMinAccordion

double EMBAccordionDetails::Clockwork::rMinAccordion

Definition at line 63 of file EMBAccordionDetails.cxx.

◆ Rphi

double EMBAccordionDetails::Clockwork::Rphi[5000]

Definition at line 53 of file EMBAccordionDetails.cxx.

◆ xc

double EMBAccordionDetails::Clockwork::xc[15]

Definition at line 61 of file EMBAccordionDetails.cxx.

◆ yc

double EMBAccordionDetails::Clockwork::yc[15]

Definition at line 62 of file EMBAccordionDetails.cxx.

◆ zMaxBarrel

double EMBAccordionDetails::Clockwork::zMaxBarrel

Definition at line 66 of file EMBAccordionDetails.cxx.

◆ zMinBarrel

double EMBAccordionDetails::Clockwork::zMinBarrel

Definition at line 65 of file EMBAccordionDetails.cxx.


The documentation for this class was generated from the following file: