50 G4VPhysicalVolume* physVol )
const {
55 if ( fVerboseLevel > 3 )
57 G4cout <<
"*BesCrystalParameterisation::ComputeTransformation()*" << G4endl;
58 G4cout <<
"copyNo(transfered)=" << copyNo << G4endl
59 <<
"copyNo(gotten) =" << physVol->GetCopyNo() << G4endl
60 <<
"fStartID =" << fStartID << G4endl
61 <<
"fCrystalID =" << fCrystalID << G4endl;
62 G4cout <<
"point of fBesEmcGeometry=" << fBesEmcGeometry << G4endl;
65 G4double xPosition = fBesEmcGeometry->GetXPosition( fCrystalID );
66 G4double yPosition = fBesEmcGeometry->GetYPosition( fCrystalID );
67 G4double zPosition = fBesEmcGeometry->GetZPosition( fCrystalID );
70 if ( fFlagLeft ) zPosition = -zPosition;
71 G4ThreeVector
origin( xPosition, yPosition, zPosition );
72 physVol->SetTranslation(
origin );
90 if ( fVerboseLevel > 5 )
92 G4cout <<
"The crystals are at the position:" << G4endl <<
origin / cm <<
"(cm)" << G4endl;
104 const G4VPhysicalVolume* physVol )
const {
109 G4double zHalfLength = fBesEmcGeometry->GetZHalfLength( fCrystalID );
110 G4double thetaAxis = fBesEmcGeometry->GetThetaAxis( fCrystalID );
111 G4double phiAxis = fBesEmcGeometry->GetPhiAxis( fCrystalID );
112 G4double yHalfLength1 = fBesEmcGeometry->GetYHalfLength1( fCrystalID );
113 G4double xHalfLength1 = fBesEmcGeometry->GetXHalfLength1( fCrystalID );
114 G4double xHalfLength2 = fBesEmcGeometry->GetXHalfLength2( fCrystalID );
115 G4double tanAlpha1 = fBesEmcGeometry->GetTanAlpha1( fCrystalID );
116 G4double yHalfLength2 = fBesEmcGeometry->GetYHalfLength2( fCrystalID );
117 G4double xHalfLength3 = fBesEmcGeometry->GetXHalfLength3( fCrystalID );
118 G4double xHalfLength4 = fBesEmcGeometry->GetXHalfLength4( fCrystalID );
119 G4double tanAlpha2 = fBesEmcGeometry->GetTanAlpha2( fCrystalID );
124 tanAlpha1 = -tanAlpha1;
125 tanAlpha2 = -tanAlpha2;
128 xHalfLength1 = xHalfLength2;
131 xHalfLength3 = xHalfLength4;
134 if ( fVerboseLevel > 5 )
135 G4cout <<
"The size of No." << copyNo <<
" crystal(placed) are:" << G4endl
136 <<
"zHalfLength =" << zHalfLength / cm <<
"(cm), " << G4endl
137 <<
"thetaAxis =" << thetaAxis / deg <<
"(degree), " << G4endl
138 <<
"phiAxis =" << phiAxis / deg <<
"(degree), " << G4endl
139 <<
"yHalfLength1=" << yHalfLength1 / cm <<
"(cm), " << G4endl
140 <<
"xHalfLength1=" << xHalfLength1 / cm <<
"(cm), " << G4endl
141 <<
"xHalfLength2=" << xHalfLength2 / cm <<
"(cm), " << G4endl
142 <<
"tanAlpha1 =" << tanAlpha1 <<
"(), " << G4endl
143 <<
"yHalfLength2=" << yHalfLength2 / cm <<
"(cm), " << G4endl
144 <<
"xHalfLength3=" << xHalfLength3 / cm <<
"(cm), " << G4endl
145 <<
"xHalfLength4=" << xHalfLength4 / cm <<
"(cm)." << G4endl
146 <<
"tanAlpha2 =" << tanAlpha2 <<
"(), " << G4endl <<
"(x4-x3)*y1/(x2-x1)/y2="
147 << ( xHalfLength4 - xHalfLength3 ) * yHalfLength1 /
148 ( xHalfLength2 - xHalfLength1 ) / yHalfLength2
149 << G4endl <<
"tanAlpha2/tanAlpha1=" << tanAlpha2 / tanAlpha1 << G4endl;
152 trackerChamber.SetAllParameters( zHalfLength, thetaAxis, phiAxis, yHalfLength1, xHalfLength1,
153 xHalfLength2, tanAlpha1, yHalfLength2, xHalfLength3,
154 xHalfLength4, tanAlpha2 );
184 G4int* pCrystalID =
const_cast<G4int*
>( &fCrystalID );
185 G4bool* pFlagLeft =
const_cast<G4bool*
>( &fFlagLeft );
186 G4int* pVerboseLevel =
const_cast<G4int*
>( &fVerboseLevel );
192 for ( G4int i = fStartID; i <= fAllCrystals; i++ )
196 if ( fBesEmcGeometry->GetPhysiBSCCrystal( i ) == pPhyVol ) { *pCrystalID = i; }
198 if ( *pCrystalID == -1 )
200 G4cout <<
"The point of PhysicCrystal error!!!!!!!!!!!" << G4endl;
212 if ( fCrystalID > fAllCrystals / 2 )
215 *pCrystalID = fCrystalID - fAllCrystals / 2;
220 *pCrystalID = fAllCrystals / 2 - fCrystalID + 1;
222 *pCrystalID = *pCrystalID - 1;