BOSS 7.1.3
BESIII Offline Software System
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ExtBesCrystalParameterisation Class Reference

#include <ExtBesCrystalParameterisation.h>

+ Inheritance diagram for ExtBesCrystalParameterisation:

Public Member Functions

 ExtBesCrystalParameterisation (const G4int, const G4int, const G4int, ExtBesEmcGeometry *, const G4int)
 
virtual ~ExtBesCrystalParameterisation ()
 
void ComputeTransformation (const G4int, G4VPhysicalVolume *) const
 
void ComputeDimensions (G4Trap &, const G4int, const G4VPhysicalVolume *) const
 
G4Material * ComputeMaterial (const G4int, G4VPhysicalVolume *)
 
G4VSolid * ComputeSolid (const G4int, G4VPhysicalVolume *)
 
void ComputeIDAndSide (const G4VPhysicalVolume *) const
 
void SetVerboseLevel (G4int val)
 

Detailed Description

Definition at line 23 of file ExtBesCrystalParameterisation.h.

Constructor & Destructor Documentation

◆ ExtBesCrystalParameterisation()

ExtBesCrystalParameterisation::ExtBesCrystalParameterisation ( const G4int startID,
const G4int endID,
const G4int thetaAllCrystals,
ExtBesEmcGeometry * besEMCGeometry,
const G4int verboseLevel )

Definition at line 24 of file ExtBesCrystalParameterisation.cxx.

30 :fVerboseLevel(0)
31{
32 //for debug
33 //G4Exception("ExtBesCrystalParameterisation::ExtBesCrystalParameterisation() starting........");
34 fBesEmcGeometry = besEMCGeometry;
35 fVerboseLevel = verboseLevel; //if need to debug this class,open it
36 fStartID = startID;
37 fAllCrystals = thetaAllCrystals;
38 fCrystalID = 0;
39 fFlagLeft = true;
40 if (startID>endID||endID>thetaAllCrystals||startID<1)
41 {
42 G4cout<<"ExtBesCrystalParameterisation construction: ID of crystal>No avaible!"<<G4endl; exit(-1);
43 }
44
45}

◆ ~ExtBesCrystalParameterisation()

ExtBesCrystalParameterisation::~ExtBesCrystalParameterisation ( )
virtual

Definition at line 49 of file ExtBesCrystalParameterisation.cxx.

50{}

Member Function Documentation

◆ ComputeDimensions()

void ExtBesCrystalParameterisation::ComputeDimensions ( G4Trap & trackerChamber,
const G4int copyNo,
const G4VPhysicalVolume * physVol ) const

Definition at line 111 of file ExtBesCrystalParameterisation.cxx.

114{
115 //for debug
116 //G4Exception("ExtBesCrystalParameterisation::ComputeDimensions() starting........");
117 ComputeIDAndSide(physVol);
118
119 G4double zHalfLength = fBesEmcGeometry->GetZHalfLength(fCrystalID);
120 G4double thetaAxis = fBesEmcGeometry->GetThetaAxis(fCrystalID);
121 G4double phiAxis = fBesEmcGeometry->GetPhiAxis(fCrystalID);
122 G4double yHalfLength1 = fBesEmcGeometry->GetYHalfLength1(fCrystalID);
123 G4double xHalfLength1 = fBesEmcGeometry->GetXHalfLength1(fCrystalID);
124 G4double xHalfLength2 = fBesEmcGeometry->GetXHalfLength2(fCrystalID);
125 G4double tanAlpha1 = fBesEmcGeometry->GetTanAlpha1(fCrystalID);
126 G4double yHalfLength2 = fBesEmcGeometry->GetYHalfLength2(fCrystalID);
127 G4double xHalfLength3 = fBesEmcGeometry->GetXHalfLength3(fCrystalID);
128 G4double xHalfLength4 = fBesEmcGeometry->GetXHalfLength4(fCrystalID);
129 G4double tanAlpha2 = fBesEmcGeometry->GetTanAlpha2(fCrystalID);
130
131 if(!fFlagLeft)
132 {
133 phiAxis=-phiAxis;
134 tanAlpha1=-tanAlpha1;
135 tanAlpha2=-tanAlpha2;
136 G4double tmp;
137 tmp=xHalfLength1;
138 xHalfLength1=xHalfLength2;
139 xHalfLength2=tmp;
140 tmp=xHalfLength3;
141 xHalfLength3=xHalfLength4;
142 xHalfLength4=tmp;
143 }
144 if(fVerboseLevel>5)
145 G4cout << "The size of No." << copyNo << " crystal(placed) are:" << G4endl
146 << "zHalfLength =" << zHalfLength/cm << "(cm), " << G4endl
147 << "thetaAxis =" << thetaAxis/deg << "(degree), " << G4endl
148 << "phiAxis =" << phiAxis/deg << "(degree), " << G4endl
149 << "yHalfLength1=" << yHalfLength1/cm << "(cm), " << G4endl
150 << "xHalfLength1=" << xHalfLength1/cm << "(cm), " << G4endl
151 << "xHalfLength2=" << xHalfLength2/cm << "(cm), " << G4endl
152 << "tanAlpha1 =" << tanAlpha1 << "(), " << G4endl
153 << "yHalfLength2=" << yHalfLength2/cm << "(cm), " << G4endl
154 << "xHalfLength3=" << xHalfLength3/cm << "(cm), " << G4endl
155 << "xHalfLength4=" << xHalfLength4/cm << "(cm)." << G4endl
156 << "tanAlpha2 =" << tanAlpha2 << "(), " << G4endl
157 << "(x4-x3)*y1/(x2-x1)/y2="
158 << (xHalfLength4-xHalfLength3)*yHalfLength1/(xHalfLength2-xHalfLength1)/yHalfLength2 << G4endl
159 << "tanAlpha2/tanAlpha1=" << tanAlpha2/tanAlpha1 <<G4endl;
160 //G4cout << fStartID << "-->This is an output sentence for debug." << G4endl;
161
162 trackerChamber.SetAllParameters(
163 zHalfLength,
164 thetaAxis,
165 phiAxis,
166 yHalfLength1,
167 xHalfLength1,
168 xHalfLength2,
169 tanAlpha1,
170 yHalfLength2,
171 xHalfLength3,
172 xHalfLength4,
173 tanAlpha2);
174
175}
void ComputeIDAndSide(const G4VPhysicalVolume *) const

◆ ComputeIDAndSide()

void ExtBesCrystalParameterisation::ComputeIDAndSide ( const G4VPhysicalVolume * pPhyVol) const

Definition at line 201 of file ExtBesCrystalParameterisation.cxx.

203{
204 //for debug
205 //G4Exception("ExtBesCrystalParameterisation::ComputeIDAndSide() starting......");
206 G4int* pCrystalID=const_cast<G4int*>(&fCrystalID);
207 G4bool* pFlagLeft=const_cast<G4bool*>(&fFlagLeft);
208 G4int* pVerboseLevel=const_cast<G4int*>(&fVerboseLevel);
209
210 *pVerboseLevel=
212
213 //*pCrystalID=pPhyVol->GetMotherPhysical()->GetCopyNo();
214 *pCrystalID=-1;
215 for(G4int i=fStartID;i<=fAllCrystals;i++)
216 {
217 //G4cout << fBesEmcGeometry->GetPhysiBSCCrystal(i) << ".vs."
218 // << pPhyVol << G4endl;
219 if(fBesEmcGeometry->GetPhysiBSCCrystal(i)==pPhyVol)
220 {
221 *pCrystalID=i;
222 }
223 }
224 if(*pCrystalID==-1)
225 {
226 G4cout<<"The point of PhysicCrystal error!!!!!!!!!!!"<<G4endl;
227 exit(-1);
228 }
229
230 //*pCrystalID=pPhyVol->GetCopyNo();
231 //if(fVerboseLevel>6)
232 //G4cout<<"******ExtBesCrystalParameterisation::ComputeIDAndSide******"<<G4endl
233 // <<"point of pPhyVol =" << pPhyVol << G4endl
234 // <<"point of mother =" << pPhyVol->GetMother() << G4endl
235 // <<"CopyNo of pPhyVol=" << pPhyVol->GetCopyNo() << G4endl
236 // <<"CopyNo of mother =" << pPhyVol->GetMother()->GetCopyNo() << G4endl
237 // <<"********************************************************"<<G4endl;
238
239 if(fCrystalID>fAllCrystals/2)
240 {
241 *pFlagLeft=false;
242 *pCrystalID=fCrystalID-fAllCrystals/2;
243 }
244 else
245 {
246 *pFlagLeft=true;
247 *pCrystalID=fAllCrystals/2-fCrystalID+1;
248 }
249 *pCrystalID=*pCrystalID-1;
250}
static ExtBesEmcConstruction * GetBesEmcConstruction()

Referenced by ComputeDimensions(), ComputeMaterial(), ComputeSolid(), and ComputeTransformation().

◆ ComputeMaterial()

G4Material * ExtBesCrystalParameterisation::ComputeMaterial ( const G4int copyNo,
G4VPhysicalVolume * pPhysicalVol )

Definition at line 185 of file ExtBesCrystalParameterisation.cxx.

187{
188 ComputeIDAndSide(pPhysicalVol);
189 G4int nBSCTheta=fBesEmcGeometry->GetBSCNbTheta();
190 //if(fVerboseLevel>5)
191 //G4cout <<"******ExtBesCrystalParameterisation::ComputeMaterial******"<<G4endl
192 // <<"Number of all crystals=" << nBSCTheta << G4endl
193 // <<"No of current crystal =" << pPhysicalVol->GetCopyNo() << G4endl
194 // <<"*******************************************************"<<G4endl;
195 if(pPhysicalVol->GetCopyNo()>2*nBSCTheta)
197 else
199}

◆ ComputeSolid()

G4VSolid * ExtBesCrystalParameterisation::ComputeSolid ( const G4int copyNo,
G4VPhysicalVolume * pPhysicalVol )

Definition at line 178 of file ExtBesCrystalParameterisation.cxx.

180{
181 ComputeIDAndSide(pPhysicalVol);
182 return pPhysicalVol->GetLogicalVolume()->GetSolid();
183}

◆ ComputeTransformation()

void ExtBesCrystalParameterisation::ComputeTransformation ( const G4int copyNo,
G4VPhysicalVolume * physVol ) const

Definition at line 54 of file ExtBesCrystalParameterisation.cxx.

56{
57 //for debug
58 //G4Exception("ExtBesCrystalParameterisation::ComputeTransformation() starting........");
59 ComputeIDAndSide(physVol);
60
61 if(fVerboseLevel>3)
62 {
63 G4cout<<"*ExtBesCrystalParameterisation::ComputeTransformation()*"<<G4endl;
64 G4cout << "copyNo(transfered)=" << copyNo << G4endl
65 << "copyNo(gotten) =" << physVol->GetCopyNo() << G4endl
66 << "fStartID =" << fStartID << G4endl
67 << "fCrystalID =" << fCrystalID << G4endl;
68 G4cout << "point of fBesEmcGeometry=" << fBesEmcGeometry << G4endl;
69 }
70
71 G4double xPosition= fBesEmcGeometry->GetXPosition(fCrystalID);
72 G4double yPosition= fBesEmcGeometry->GetYPosition(fCrystalID);
73 G4double zPosition= fBesEmcGeometry->GetZPosition(fCrystalID);
74 //G4Exception("ExtBesCrystalParameterisation::ComputeTransformation() running........");
75 //G4double xPosition=0,yPosition=0,zPosition=0;
76 if(fFlagLeft) zPosition=-zPosition;
77 G4ThreeVector origin(xPosition,yPosition,zPosition);
78 physVol->SetTranslation(origin);
79
80 //G4double thetaPosition=fBesEmcGeometry->GetThetaPosition(fCrystalID);
81 //G4RotationMatrix *rotateMatrix;
82 //rotateMatrix = new G4RotationMatrix();
83 //if(fFlagLeft)
84 // {
85 // rotateMatrix->rotateZ(-90*deg);
86 // rotateMatrix->rotateX(-180*deg+thetaPosition);
87 // }
88 //else
89 // {
90 // rotateMatrix->rotateZ(-90*deg);
91 // rotateMatrix->rotateX(-thetaPosition);
92 // }
93 //G4double delta = 0*deg;
94 //G4ThreeVector axis = G4ThreeVector(0,0,0);
95 //rotateMatrix->getAngleAxis(delta, axis);
96 if(fVerboseLevel>5)
97 {
98 G4cout << "The crystals are at the position:" << G4endl
99 << origin/cm <<"(cm)" << G4endl;
100 //G4cout << thetaPosition/deg <<"(deg)." << G4endl
101 //<< "The axis of crystals in the world system is: " << G4endl
102 //<< delta/deg << "(deg)(delta) " << G4endl
103 //<< axis << "(Z axis)" << G4endl;
104 }
105 //physVol->SetRotation(rotateMatrix);
106
107}
const DifPoint origin

◆ SetVerboseLevel()

void ExtBesCrystalParameterisation::SetVerboseLevel ( G4int val)
inline

Definition at line 41 of file ExtBesCrystalParameterisation.h.

41{fVerboseLevel=val;};

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