EmcRecBarrelGeo Class Reference

#include <EmcRecBarrelGeo.h>

List of all members.

Public Member Functions

 EmcRecBarrelGeo ()
 ~EmcRecBarrelGeo ()
EmcRecCrystal GetCrystal (const Identifier &id) const
HepPoint3D GetCCenter (const Identifier &id) const
HepPoint3D GetCFrontCenter (const Identifier &id) const
double GetBarrelR () const
double GetBarrelOffset1 () const
double GetBarrelOffset2 () const
double GetBarrelh1 () const
double GetBarrelh2 () const
double GetBarrelh3 () const
double GetBarrelL () const
int GetBarrelNPhiMax () const
int GetBarrelNThetaMax () const

Private Member Functions

void ParameterInitialize ()
void CalculateStandardCrystal ()
void Transform2Column1 ()
void FillCCenterVector ()

Private Attributes

double fBarrelR
double fBarrelOffset1
double fBarrelOffset2
double fBarrelh1
double fBarrelh2
double fBarrelh3
double fBarrelL
double fBarrelL2
double fBarrelAlpha
int fBarrelNPhiMax
int fBarrelNThetaMax
vector< EmcRecCrystalfStandard
vector< HepPoint3DfCCenter
vector< HepPoint3DfCFrontCenter


Detailed Description

Definition at line 25 of file EmcRecBarrelGeo.h.


Constructor & Destructor Documentation

EmcRecBarrelGeo::EmcRecBarrelGeo (  ) 

Definition at line 11 of file EmcRecBarrelGeo.cxx.

References CalculateStandardCrystal(), FillCCenterVector(), ParameterInitialize(), and Transform2Column1().

00012 {
00013    ParameterInitialize();
00014    CalculateStandardCrystal();
00015    Transform2Column1();
00016    FillCCenterVector();
00017 }

EmcRecBarrelGeo::~EmcRecBarrelGeo (  ) 

Definition at line 19 of file EmcRecBarrelGeo.cxx.

References fCCenter, fCFrontCenter, and fStandard.

00020 {
00021    fStandard.clear();
00022    fCCenter.clear();
00023    fCFrontCenter.clear();
00024 }


Member Function Documentation

void EmcRecBarrelGeo::CalculateStandardCrystal (  )  [private]

Definition at line 63 of file EmcRecBarrelGeo.cxx.

References cos(), fBarrelAlpha, fBarrelh1, fBarrelh2, fBarrelh3, fBarrelL, fBarrelL2, fBarrelNThetaMax, fBarrelOffset1, fBarrelOffset2, fBarrelR, fStandard, EmcRecCrystal::Get(), genRecEmupikp::i, EmcRecCrystal::Set(), EmcRecCrystal::SetX(), EmcRecCrystal::SetY(), EmcRecCrystal::SetZ(), sin(), and tan().

Referenced by EmcRecBarrelGeo().

00064 {
00065    double R1,R2,a;
00066    EmcRecCrystal pre,now;
00067    double dx,dy,dz;
00068    HepPoint3D t1,t2;
00069    double L,h;
00070    
00071    HepPoint3D O1(0,0,0);
00072    HepPoint3D O2(0,0,fBarrelOffset1);
00073    HepPoint3D O3(0,0,fBarrelOffset2);
00074 
00075    R1=2*fBarrelR*sin(fBarrelAlpha/2)/sin(fBarrelAlpha);
00076    R2=2*fBarrelR*sin(fBarrelAlpha/2)*(tan(fBarrelAlpha)+1/tan(fBarrelAlpha));
00077    a=2*fBarrelR*sin(fBarrelAlpha/2)/cos(fBarrelAlpha);
00078    
00079    HepPoint3D M4(0,R1,0);
00080    HepPoint3D A1(a,R1,0);
00081    
00082 //   cout<<O1<<", "<<O2<<", "<<O3<<endl;
00083 //   cout<<M4<<", "<<A1<<endl;
00084 //   cout<<R1<<", "<<R2<<endl;
00085    
00086    // No. 1  theta: 21; phi: 30
00087    EmcRecCrystal Crystal1;
00088 
00089    Crystal1.Set(0,M4);
00090    Crystal1.Set(1,A1);
00091    Crystal1.Set(2,A1);   Crystal1.SetZ(2,A1.z()+fBarrelh1);
00092    Crystal1.Set(3,M4);   Crystal1.SetZ(3,M4.z()+fBarrelh1);
00093    
00094    Crystal1.Set(4,M4);   Crystal1.SetY(4,M4.y()+fBarrelL);
00095    dx=a*(R1+fBarrelL)/R1;
00096    Crystal1.Set(5,Crystal1.Get(4));   Crystal1.SetX(5,dx);
00097    dz=fBarrelOffset1+(fBarrelh1-fBarrelOffset1)*(R1+fBarrelL)/R1;
00098    Crystal1.Set(6,Crystal1.Get(5));   Crystal1.SetZ(6,Crystal1.Get(5).z()+dz);
00099    Crystal1.Set(7,Crystal1.Get(4));   Crystal1.SetZ(7,Crystal1.Get(4).z()+dz);
00100    
00101    fStandard.push_back(Crystal1);
00102    pre=fStandard[0];
00103    
00104    // No. 2  theta: 20; phi: 30
00105    EmcRecCrystal Crystal2; 
00106    double sin_gamma,cos_gamma,tan_gamma;
00107    
00108    tan_gamma=R1/(fBarrelh1-fBarrelOffset1);
00109    sin_gamma=tan_gamma/(sqrt(1+tan_gamma*tan_gamma));
00110    cos_gamma=1/(sqrt(1+tan_gamma*tan_gamma));
00111    
00112    double aa,bb,Rp;
00113    aa=fBarrelh1/sin_gamma;
00114    bb=fBarrelh1/tan_gamma; 
00115    
00116    Crystal2.Set(0,pre.Get(3));   Crystal2.SetZ(0,pre.Get(3).z()+bb*cos_gamma);
00117                                  Crystal2.SetY(0,pre.Get(3).y()+bb*sin_gamma);
00118    Rp=R1/sin_gamma;
00119    dx=a*(Rp+bb)/Rp;
00120    Crystal2.Set(1,Crystal2.Get(0));   Crystal2.SetX(1,dx);   
00121    Crystal2.Set(3,pre.Get(3));        Crystal2.SetZ(3,pre.Get(3).z()+aa);
00122    Crystal2.Set(2,Crystal2.Get(3));   Crystal2.SetX(2,a);
00123    
00124    dz=(fBarrelL+bb)*cos_gamma;
00125    dy=(fBarrelL+bb)*sin_gamma;
00126    Crystal2.Set(4,pre.Get(3));   Crystal2.SetZ(4,pre.Get(3).z()+dz);
00127                                  Crystal2.SetY(4,pre.Get(3).y()+dy); 
00128    dx=a*(Rp+bb+fBarrelL)/Rp; 
00129    Crystal2.Set(5,Crystal2.Get(4));     Crystal2.SetX(5,dx);
00130    double gam2,gam3,Lp,Rpp;
00131    t1=pre.Get(3)-Crystal2.Get(3);
00132    t2=O3-Crystal2.Get(3);
00133    gam2=acos(t1*t2/(t1.mag()*t2.mag()));
00134    gam3=acos(cos_gamma)-gam2;
00135    Lp=fBarrelL/cos(gam3);
00136    dz=Lp*cos(gam2);
00137    dy=Lp*sin(gam2);
00138    Crystal2.Set(7,Crystal2.Get(3));     Crystal2.SetZ(7,Crystal2.Get(3).z()+dz);
00139                                         Crystal2.SetY(7,Crystal2.Get(3).y()+dy);
00140    Rpp=R1/sin(gam2);
00141    dx=a*(Rpp+Lp)/Rpp;
00142    Crystal2.Set(6,Crystal2.Get(7));     Crystal2.SetX(6,dx);
00143    
00144    fStandard.push_back(Crystal2);
00145 
00146    // No. 3 -- No. 22  theta: 19-0; phi: 30
00147    for(int i=3; i<=fBarrelNThetaMax; i++) {
00148       pre=fStandard[i-2];
00149       
00150       if(i<fBarrelNThetaMax) {
00151          L=fBarrelL;
00152          h=fBarrelh2;
00153       }
00154       else {
00155          L=fBarrelL2;
00156          h=fBarrelh3;
00157       }
00158       
00159       tan_gamma=R1/(pre.Get(3).z()-fBarrelOffset2);
00160       sin_gamma=tan_gamma/(sqrt(1+tan_gamma*tan_gamma));
00161       cos_gamma=1/(sqrt(1+tan_gamma*tan_gamma));
00162 
00163       aa=h/sin_gamma;
00164       bb=h/tan_gamma;
00165       
00166       now.Set(3,pre.Get(3));   now.SetZ(3,pre.Get(3).z()+aa);
00167       now.Set(0,pre.Get(3));   now.SetZ(0,pre.Get(3).z()+bb*cos_gamma);
00168                                now.SetY(0,pre.Get(3).y()+bb*sin_gamma);
00169       
00170       now.Set(4,pre.Get(3));   now.SetZ(4,pre.Get(3).z()+(L+bb)*cos_gamma);
00171                                now.SetY(4,pre.Get(3).y()+(L+bb)*sin_gamma);
00172       
00173       gam2=atan(R1/(now.Get(3).z()-fBarrelOffset2));
00174       gam3=acos(cos_gamma)-gam2;
00175       
00176       Lp=L/cos(gam3);
00177       dz=Lp*cos(gam2);
00178       dy=Lp*sin(gam2);
00179    
00180       now.Set(7,now.Get(3));   now.SetZ(7,now.Get(3).z()+dz);
00181                                now.SetY(7,now.Get(3).y()+dy);
00182 
00183       Rp=R1/sin_gamma;
00184       dx=a*(Rp+bb)/Rp;
00185       now.Set(1,now.Get(0));   now.SetX(1,dx);
00186       dx=a*(Rp+bb+L)/Rp;
00187       now.Set(5,now.Get(4));   now.SetX(5,dx);
00188       
00189       now.Set(2,now.Get(3));   now.SetX(2,a);
00190       
00191       Rpp=R1/sin(gam2);
00192       dx=a*(Rpp+Lp)/Rpp;
00193       now.Set(6,now.Get(7));   now.SetX(6,dx);
00194       
00195       fStandard.push_back(now);
00196    }
00197    
00198 //   for(int i=1; i<=fBarrelNThetaMax; i++) {
00199 //      cout<<endl;
00200 //      cout<<"No. "<<i<<endl;
00201 //      now=fStandard[i-1];
00202 //      now.BarrelCheckout();
00203 //      now.Dump();
00204 //   }  
00205 }

void EmcRecBarrelGeo::FillCCenterVector (  )  [private]

Definition at line 232 of file EmcRecBarrelGeo.cxx.

References EmcRecCrystal::Center(), EmcID::crystal_id(), fBarrelNPhiMax, fBarrelNThetaMax, fCCenter, fCFrontCenter, EmcRecCrystal::FrontCenter(), EmcID::getBARREL(), and GetCrystal().

Referenced by EmcRecBarrelGeo().

00233 {
00234    int phi,theta;
00235    EmcRecCrystal aCry;
00236    HepPoint3D aCenter;
00237    HepPoint3D aFrontCenter;
00238    
00239    for(theta=0;theta<2*fBarrelNThetaMax;++theta) {
00240       for(phi=0;phi<fBarrelNPhiMax;++phi) {
00241          aCry=GetCrystal(EmcID::crystal_id(EmcID::getBARREL(),theta,phi));
00242          aCenter=aCry.Center();
00243    aFrontCenter=aCry.FrontCenter();
00244          fCCenter.push_back(aCenter);
00245    fCFrontCenter.push_back(aFrontCenter);
00246 //       aCry.Dump();
00247 //       cout<<"("<<theta<<","<<phi<<")  ";
00248 //       cout<<aCenter<<endl;
00249       }
00250    }
00251 }

double EmcRecBarrelGeo::GetBarrelh1 (  )  const [inline]

Definition at line 57 of file EmcRecBarrelGeo.h.

References fBarrelh1.

Referenced by EmcRecGeoSvc::GetBarrelh1().

00057 { return fBarrelh1; }

double EmcRecBarrelGeo::GetBarrelh2 (  )  const [inline]

Definition at line 58 of file EmcRecBarrelGeo.h.

References fBarrelh2.

Referenced by EmcRecGeoSvc::GetBarrelh2().

00058 { return fBarrelh2; }

double EmcRecBarrelGeo::GetBarrelh3 (  )  const [inline]

Definition at line 59 of file EmcRecBarrelGeo.h.

References fBarrelh3.

Referenced by EmcRecGeoSvc::GetBarrelh3().

00059 { return fBarrelh3; }

double EmcRecBarrelGeo::GetBarrelL (  )  const [inline]

Definition at line 60 of file EmcRecBarrelGeo.h.

References fBarrelL.

Referenced by EmcRecGeoSvc::GetBarrelL().

00060 { return fBarrelL; }

int EmcRecBarrelGeo::GetBarrelNPhiMax (  )  const [inline]

Definition at line 61 of file EmcRecBarrelGeo.h.

References fBarrelNPhiMax.

Referenced by EmcRecGeoSvc::GetBarrelNPhiMax().

00061 { return fBarrelNPhiMax; }

int EmcRecBarrelGeo::GetBarrelNThetaMax (  )  const [inline]

Definition at line 62 of file EmcRecBarrelGeo.h.

References fBarrelNThetaMax.

Referenced by EmcRecGeoSvc::GetBarrelNThetaMax().

00062 { return fBarrelNThetaMax; }

double EmcRecBarrelGeo::GetBarrelOffset1 (  )  const [inline]

Definition at line 55 of file EmcRecBarrelGeo.h.

References fBarrelOffset1.

Referenced by EmcRecGeoSvc::GetBarrelOffset1().

00055 { return fBarrelOffset1; }

double EmcRecBarrelGeo::GetBarrelOffset2 (  )  const [inline]

Definition at line 56 of file EmcRecBarrelGeo.h.

References fBarrelOffset2.

Referenced by EmcRecGeoSvc::GetBarrelOffset2().

00056 { return fBarrelOffset2; }

double EmcRecBarrelGeo::GetBarrelR (  )  const [inline]

Definition at line 54 of file EmcRecBarrelGeo.h.

References fBarrelR.

Referenced by EmcRecGeoSvc::GetBarrelR().

00054 { return fBarrelR; }

HepPoint3D EmcRecBarrelGeo::GetCCenter ( const Identifier id  )  const

Definition at line 282 of file EmcRecBarrelGeo.cxx.

References fBarrelNPhiMax, fCCenter, EmcID::phi_module(), and EmcID::theta_module().

Referenced by EmcRecGeoSvc::GetCCenter(), and main().

00283 {
00284    unsigned int theta=EmcID::theta_module(id);
00285    unsigned int phi=EmcID::phi_module(id);
00286    
00287    return fCCenter[theta*fBarrelNPhiMax+phi];
00288 }

HepPoint3D EmcRecBarrelGeo::GetCFrontCenter ( const Identifier id  )  const

Definition at line 290 of file EmcRecBarrelGeo.cxx.

References fBarrelNPhiMax, fCFrontCenter, EmcID::phi_module(), and EmcID::theta_module().

Referenced by EmcRecGeoSvc::GetCFrontCenter(), and main().

00291 {
00292   unsigned int theta=EmcID::theta_module(id);
00293   unsigned int phi=EmcID::phi_module(id);
00294 
00295   return fCFrontCenter[theta*fBarrelNPhiMax+phi];
00296 }

EmcRecCrystal EmcRecBarrelGeo::GetCrystal ( const Identifier id  )  const

Definition at line 255 of file EmcRecBarrelGeo.cxx.

References fBarrelAlpha, fBarrelNThetaMax, fStandard, EmcRecCrystal::Get(), EmcID::phi_module(), EmcRecCrystal::Set(), EmcRecCrystal::SetZ(), and EmcID::theta_module().

Referenced by FillCCenterVector(), EmcRecGeoSvc::GetCrystal(), EmcRecGeoSvc::GetCrystalPoint(), and main().

00256 {
00257    EmcRecCrystal cry;
00258    unsigned int theta=EmcID::theta_module(id);
00259    unsigned int phi=EmcID::phi_module(id);
00260    
00261    double dphi=phi*fBarrelAlpha;
00262    
00263    if((int)theta>=fBarrelNThetaMax) {
00264       cry=fStandard[theta-fBarrelNThetaMax];
00265       for(int m=0;m<8;++m)
00266         {
00267            cry.SetZ(m,-cry.Get(m).z());
00268         }
00269    }
00270    else {
00271       cry=fStandard[fBarrelNThetaMax-theta-1];
00272    }
00273    
00274    for(int m=0;m<8;++m)
00275      {
00276         cry.Set(m,cry.Get(m).rotateZ(dphi));
00277      }
00278    
00279    return cry;
00280 }

void EmcRecBarrelGeo::ParameterInitialize (  )  [private]

Definition at line 26 of file EmcRecBarrelGeo.cxx.

References fBarrelAlpha, fBarrelh1, fBarrelh2, fBarrelh3, fBarrelL, fBarrelL2, fBarrelNPhiMax, fBarrelNThetaMax, fBarrelOffset1, fBarrelOffset2, fBarrelR, fCCenter, fCFrontCenter, and fStandard.

Referenced by EmcRecBarrelGeo().

00027 {
00028    /*
00029    DB2BesGeoEMC obj1;
00030    vector<BesGeoEMC> VecA;
00031    
00032    obj1.Get_BesGeoEMC(VecA);
00033    fBarrelR=VecA[0].Get_BarrelR();
00034    fBarrelOffset1=VecA[0].Get_BarrelOffset1();
00035    fBarrelOffset2=VecA[0].Get_BarrelOffset2();
00036    fBarrelh1=VecA[0].Get_Barrelh1();
00037    fBarrelh2=VecA[0].Get_Barrelh2();
00038    fBarrelh3=VecA[0].Get_Barrelh3();
00039    fBarrelL=VecA[0].Get_BarrelL();
00040    fBarrelL2=VecA[0].Get_BarrelL2();
00041    fBarrelNPhiMax=(int)VecA[0].Get_BarrelNPhiMax();
00042    fBarrelNThetaMax=(int)VecA[0].Get_BarrelNThetaMax();
00043    */
00044     
00045    fBarrelR=942;
00046    fBarrelOffset1=25;
00047    fBarrelOffset2=50;
00048    fBarrelh1=51;
00049    fBarrelh2=52;
00050    fBarrelh3=52.466;
00051    fBarrelL=280;
00052    fBarrelL2=240; 
00053    fBarrelNPhiMax=120;
00054    fBarrelNThetaMax=22;
00055    
00056    fBarrelAlpha=twopi/fBarrelNPhiMax;
00057 
00058    fStandard.clear();
00059    fCCenter.clear();
00060    fCFrontCenter.clear();
00061 }

void EmcRecBarrelGeo::Transform2Column1 (  )  [private]

Definition at line 207 of file EmcRecBarrelGeo.cxx.

References cos(), fBarrelAlpha, fBarrelNThetaMax, fBarrelR, fStandard, genRecEmupikp::i, rb::R(), sin(), EmcRecCrystal::SixPlane(), and tan().

Referenced by EmcRecBarrelGeo().

00207                                                     : 21-0; phi: 0
00208 {
00209    HepPoint3D O1(fBarrelR*sin(fBarrelAlpha/2),
00210                  fBarrelR*cos(fBarrelAlpha/2)-2*fBarrelR*sin(fBarrelAlpha/2)/tan(fBarrelAlpha),
00211                  0);
00212    
00213    HepPoint3D R=fStandard[0].Get(5);
00214    double phi=(R.rotateZ(fBarrelAlpha)+O1).phi();
00215 
00216    for(int i=1; i<=fBarrelNThetaMax; i++) {
00217       for(int m=0;m<8;m++)
00218         {
00219            fStandard[i-1].Type(EmcRecCrystal::SixPlane());
00220            fStandard[i-1].Set(m,fStandard[i-1].Get(m).rotateZ(fBarrelAlpha));
00221            fStandard[i-1].Set(m,fStandard[i-1].Get(m)+O1);
00222            fStandard[i-1].Set(m,fStandard[i-1].Get(m).rotateZ(-phi));
00223         }
00224 
00225 //      cout<<endl;
00226 //      cout<<"No. "<<i<<endl;
00227 //      fStandard[i-1].BarrelCheckout();
00228 //      fStandard[i-1].Dump();
00229    }
00230 }


Member Data Documentation

double EmcRecBarrelGeo::fBarrelAlpha [private]

Definition at line 75 of file EmcRecBarrelGeo.h.

Referenced by CalculateStandardCrystal(), GetCrystal(), ParameterInitialize(), and Transform2Column1().

double EmcRecBarrelGeo::fBarrelh1 [private]

Definition at line 70 of file EmcRecBarrelGeo.h.

Referenced by CalculateStandardCrystal(), GetBarrelh1(), and ParameterInitialize().

double EmcRecBarrelGeo::fBarrelh2 [private]

Definition at line 71 of file EmcRecBarrelGeo.h.

Referenced by CalculateStandardCrystal(), GetBarrelh2(), and ParameterInitialize().

double EmcRecBarrelGeo::fBarrelh3 [private]

Definition at line 72 of file EmcRecBarrelGeo.h.

Referenced by CalculateStandardCrystal(), GetBarrelh3(), and ParameterInitialize().

double EmcRecBarrelGeo::fBarrelL [private]

Definition at line 73 of file EmcRecBarrelGeo.h.

Referenced by CalculateStandardCrystal(), GetBarrelL(), and ParameterInitialize().

double EmcRecBarrelGeo::fBarrelL2 [private]

Definition at line 74 of file EmcRecBarrelGeo.h.

Referenced by CalculateStandardCrystal(), and ParameterInitialize().

int EmcRecBarrelGeo::fBarrelNPhiMax [private]

Definition at line 76 of file EmcRecBarrelGeo.h.

Referenced by FillCCenterVector(), GetBarrelNPhiMax(), GetCCenter(), GetCFrontCenter(), and ParameterInitialize().

int EmcRecBarrelGeo::fBarrelNThetaMax [private]

Definition at line 77 of file EmcRecBarrelGeo.h.

Referenced by CalculateStandardCrystal(), FillCCenterVector(), GetBarrelNThetaMax(), GetCrystal(), ParameterInitialize(), and Transform2Column1().

double EmcRecBarrelGeo::fBarrelOffset1 [private]

Definition at line 68 of file EmcRecBarrelGeo.h.

Referenced by CalculateStandardCrystal(), GetBarrelOffset1(), and ParameterInitialize().

double EmcRecBarrelGeo::fBarrelOffset2 [private]

Definition at line 69 of file EmcRecBarrelGeo.h.

Referenced by CalculateStandardCrystal(), GetBarrelOffset2(), and ParameterInitialize().

double EmcRecBarrelGeo::fBarrelR [private]

Definition at line 67 of file EmcRecBarrelGeo.h.

Referenced by CalculateStandardCrystal(), GetBarrelR(), ParameterInitialize(), and Transform2Column1().

vector<HepPoint3D> EmcRecBarrelGeo::fCCenter [private]

Definition at line 82 of file EmcRecBarrelGeo.h.

Referenced by FillCCenterVector(), GetCCenter(), ParameterInitialize(), and ~EmcRecBarrelGeo().

vector<HepPoint3D> EmcRecBarrelGeo::fCFrontCenter [private]

Definition at line 83 of file EmcRecBarrelGeo.h.

Referenced by FillCCenterVector(), GetCFrontCenter(), ParameterInitialize(), and ~EmcRecBarrelGeo().

vector<EmcRecCrystal> EmcRecBarrelGeo::fStandard [private]

Definition at line 80 of file EmcRecBarrelGeo.h.

Referenced by CalculateStandardCrystal(), GetCrystal(), ParameterInitialize(), Transform2Column1(), and ~EmcRecBarrelGeo().


Generated on Tue Nov 29 23:18:43 2016 for BOSS_7.0.2 by  doxygen 1.4.7