BesEmcConstruction Class Reference

#include <BesEmcConstruction.hh>

Inheritance diagram for BesEmcConstruction:

BesSubdetector List of all members.

Public Member Functions

 BesEmcConstruction ()
 ~BesEmcConstruction ()
void SetVerboseLevel (G4int val)
void SetCrystalMaterial (G4String)
void SetCasingMaterial (G4String)
void SetCasingThickness (G4ThreeVector)
void SetBSCRmin (G4double)
void SetBSCNbPhi (G4int)
void SetBSCNbTheta (G4int)
void SetStartIDTheta (G4int)
void SetBSCCrystalLength (G4double)
void SetBSCYFront0 (G4double)
void SetBSCYFront (G4double)
void SetBSCPosition0 (G4double)
void SetBSCPosition1 (G4double)
void SetMagField (G4double)
void Construct (G4LogicalVolume *)
void UpdateGeometry ()
void ThreeVectorTrans (G4ThreeVector fPnt[8], double x[8], double y[8], double z[8])
void TransformToArb8 (const G4ThreeVector fPnt[8], G4ThreeVector newfPnt[8], G4ThreeVector &center, G4ThreeVector &rotAngle)
Hep3Vector RotAngleFromNewZ (Hep3Vector newZ)
void PrintEMCParameters ()
G4int GetVerboseLevel ()
G4double GetMagField ()
G4int GetStartIDTheta ()
G4Material * GetCrystalMaterial ()
G4Material * GetCasingMaterial ()
const G4VPhysicalVolume * GetEMC ()
const G4VPhysicalVolume * GetBSCPhi ()
const G4VPhysicalVolume * GetBSCTheta ()
const G4VPhysicalVolume * GetBSCCrystal ()
const G4VPVParameterisation * GetCrystalParam ()
void ConstructSPFrame (G4LogicalVolume *, BesEmcGeometry *)
void ConstructEndGeometry (G4LogicalVolume *)
void GetLogicalVolume ()
void SetVisAndSD ()
G4int ComputeEndCopyNb (G4int)
G4LogicalVolume * FindLogicalVolume (const G4String &vn)

Static Public Member Functions

static BesEmcConstructionGetBesEmcConstruction ()

Protected Attributes

SAXProcessor m_sxp
ProcessingConfigurator m_config

Private Member Functions

void DefineMaterials ()
void ComputeEMCParameters ()

Private Attributes

G4int verboseLevel
G4double fmagField
G4Material * fCrystalMaterial
G4int phiNbCrystals
G4int thetaNbCrystals
G4int startID
G4Material * fCasingMaterial
G4Material * defaultMaterial
G4Tubs * solidBSC
G4Cons * solidESC
G4UnionSolid * solidEMC
G4LogicalVolume * logicEMC
G4VPhysicalVolume * physiEMC
G4SubtractionSolid * solidBSCWorld
G4LogicalVolume * logicBSCWorld
G4VPhysicalVolume * physiBSCWorld
G4Tubs * solidBSCPhiTub
G4Cons * solidConsPhi
G4SubtractionSolid * solidBSCPhi1
G4SubtractionSolid * solidBSCPhi
G4LogicalVolume * logicBSCPhi
G4VPhysicalVolume * physiBSCPhi
G4Trap * solidBSCTheta
G4LogicalVolume * logicBSCTheta
G4VPhysicalVolume * physiBSCTheta
G4Trap * solidBSCCrystal
G4LogicalVolume * logicBSCCrystal
G4VPhysicalVolume * physiBSCCrystal
G4UniformMagField * magField
BesEmcDetectorMessengerdetectorMessenger
BesEmcSDbesEMCSD
BesEmcGeometrybesEMCGeometry
BesEmcEndGeometryemcEnd
G4VPVParameterisation * crystalParam
G4Cons * solidEnd
G4LogicalVolume * logicEnd
G4VPhysicalVolume * physiEnd
G4Cons * solidEndPhi
G4LogicalVolume * logicEndPhi
G4VPhysicalVolume * physiEndPhi
G4IrregBox * solidEndCasing
G4LogicalVolume * logicEndCasing
G4VPhysicalVolume * physiEndCasing
G4IrregBox * solidEndCrystal
G4LogicalVolume * logicEndCrystal
G4VPhysicalVolume * physiEndCrystal
G4Box * solidRear
G4LogicalVolume * logicRear
G4VPhysicalVolume * physiRear
G4Box * solidCasingBox
G4Box * solidAirHole
G4SubtractionSolid * solidRearCasing
G4LogicalVolume * logicRearCasing
G4VPhysicalVolume * physiRearCasing
G4Box * solidOrgGlass
G4LogicalVolume * logicOrgGlass
G4VPhysicalVolume * physiOrgGlass
G4Box * solidPD
G4LogicalVolume * logicPD
G4VPhysicalVolume * physiPD
G4Box * solidAlBox
G4SubtractionSolid * solidAlPlate
G4LogicalVolume * logicAlPlate
G4VPhysicalVolume * physiAlPlate
G4Box * solidPreAmpBox
G4LogicalVolume * logicPreAmpBox
G4VPhysicalVolume * physiPreAmpBox
G4Box * solidAirInPABox
G4LogicalVolume * logicAirInPABox
G4VPhysicalVolume * physiAirInPABox
G4Box * solidHangingPlate
G4LogicalVolume * logicHangingPlate
G4VPhysicalVolume * physiHangingPlate
G4Cons * solidOCGirder
G4LogicalVolume * logicOCGirder
G4VPhysicalVolume * physiOCGirder
G4Tubs * solidCable
G4LogicalVolume * logicCable
G4VPhysicalVolume * physiCable
G4Tubs * solidWaterPipe
G4LogicalVolume * logicWaterPipe
G4VPhysicalVolume * physiWaterPipe
G4Tubs * solidSupportBar
G4LogicalVolume * logicSupportBar
G4VPhysicalVolume * physiSupportBar
G4Tubs * solidSupportBar1
G4LogicalVolume * logicSupportBar1
G4VPhysicalVolume * physiSupportBar1
G4Tubs * solidEndRing
G4LogicalVolume * logicEndRing
G4VPhysicalVolume * physiEndRing
G4Tubs * solidGear
G4LogicalVolume * logicGear
G4VPhysicalVolume * physiGear
G4Tubs * solidTaperRing1
G4LogicalVolume * logicTaperRing1
G4VPhysicalVolume * physiTaperRing1
G4Cons * solidTaperRing2
G4LogicalVolume * logicTaperRing2
G4VPhysicalVolume * physiTaperRing2
G4Cons * solidTaperRing3
G4LogicalVolume * logicTaperRing3
G4VPhysicalVolume * physiTaperRing3
G4Material * rearCasingMaterial
G4Material * organicGlass
G4Material * stainlessSteel
G4Material * cable
G4Material * waterPipe

Static Private Attributes

static BesEmcConstructionfBesEmcConstruction = 0

Detailed Description

Definition at line 52 of file BesEmcConstruction.hh.


Constructor & Destructor Documentation

BesEmcConstruction::BesEmcConstruction (  ) 

Definition at line 57 of file BesEmcConstruction.cc.

References besEMCGeometry, emcEnd, fBesEmcConstruction, phiNbCrystals, startID, and thetaNbCrystals.

00058   :verboseLevel(0),
00059    solidEMC(0),logicEMC(0),physiEMC(0),logicBSCWorld(0),
00060    solidBSCPhi(0),logicBSCPhi(0),physiBSCPhi(0),
00061    solidBSCTheta(0),logicBSCTheta(0),physiBSCTheta(0),
00062    solidBSCCrystal(0),logicBSCCrystal(0),physiBSCCrystal(0),
00063    magField(0),detectorMessenger(0),besEMCSD(0),crystalParam(0),
00064    logicEnd(0),logicEndPhi(0),logicEndCasing(0),logicEndCrystal(0),
00065    logicRear(0),logicRearCasing(0),logicOrgGlass(0),logicPD(0),
00066    logicAlPlate(0),logicPreAmpBox(0),logicAirInPABox(0),
00067    logicHangingPlate(0),logicOCGirder(0),logicCable(0),logicWaterPipe(0),
00068    logicSupportBar(0),logicSupportBar1(0),logicEndRing(0),logicGear(0),
00069    logicTaperRing1(0),logicTaperRing2(0),logicTaperRing3(0)
00070 {
00071   if(fBesEmcConstruction)
00072     { G4Exception("BesEmcConstruction constructed twice."); }
00073   fBesEmcConstruction=this;
00074   //for debug
00075   //  G4Exception("BesEmcConstruction::BesEmcConstruction() starting........");
00076   startID           = 1;
00077   phiNbCrystals     = 0;
00078   thetaNbCrystals   = 0;
00079   besEMCGeometry = new BesEmcGeometry();
00080   emcEnd = new BesEmcEndGeometry();
00081 }

BesEmcConstruction::~BesEmcConstruction (  ) 

Definition at line 83 of file BesEmcConstruction.cc.

References besEMCGeometry, crystalParam, detectorMessenger, emcEnd, and BesEmcParameter::Kill().

00084 {
00085   if(detectorMessenger) delete detectorMessenger;
00086   if(crystalParam) delete crystalParam;
00087   if(besEMCGeometry) delete besEMCGeometry;
00088   if(emcEnd) delete emcEnd;
00089   
00090   BesEmcParameter::Kill();
00091 }


Member Function Documentation

void BesEmcConstruction::ComputeEMCParameters (  )  [private]

G4int BesEmcConstruction::ComputeEndCopyNb ( G4int   ) 

Definition at line 1230 of file BesEmcConstruction.cc.

01231 {
01232   G4int copyNb;
01233   switch(num){
01234     case 30:
01235       copyNb = 5;
01236       break;
01237     case 31:
01238       copyNb = 6;
01239       break;
01240     case 32:
01241       copyNb = 14;
01242       break;
01243     case 33:
01244       copyNb = 15;
01245       break;
01246     case 34:
01247       copyNb = 16;
01248       break;
01249     default:
01250       copyNb = num;
01251       break;
01252   }
01253   return copyNb;
01254 }

void BesEmcConstruction::Construct ( G4LogicalVolume *   )  [virtual]

Implements BesSubdetector.

Definition at line 93 of file BesEmcConstruction.cc.

References besEMCGeometry, besEMCSD, cable, BesEmcGeometry::ComputeEMCParameters(), BesEmcEndGeometry::ComputeParameters(), cos(), crystalParam, DefineMaterials(), detectorMessenger, emcEnd, fCasingMaterial, fCrystalMaterial, ReadBoostRoot::GetEmc(), GetLogicalVolume(), SubDetectorG4Geo::GetTopVolume(), genRecEmupikp::i, EmcG4Geo::Instance(), ganga-rec::j, logicAirInPABox, logicAlPlate, logicBSCCrystal, logicBSCPhi, logicBSCTheta, logicBSCWorld, logicCable, logicEMC, logicHangingPlate, logicOCGirder, logicOrgGlass, logicPD, logicPreAmpBox, logicRear, logicRearCasing, logicWaterPipe, BesEmcGeometry::ModifyForCasing(), organicGlass, phiNbCrystals, physiAirInPABox, physiAlPlate, physiBSCCrystal, physiBSCPhi, physiBSCTheta, physiBSCWorld, physiCable, physiEMC, physiHangingPlate, physiOCGirder, physiOrgGlass, physiPD, physiPreAmpBox, physiRear, physiRearCasing, physiWaterPipe, rearCasingMaterial, SetVisAndSD(), sin(), solidAirHole, solidAirInPABox, solidAlBox, solidAlPlate, solidBSC, solidBSCCrystal, solidBSCPhi, solidBSCPhi1, solidBSCPhiTub, solidBSCTheta, solidBSCWorld, solidCable, solidCasingBox, solidConsPhi, solidEMC, solidESC, solidHangingPlate, solidOCGirder, solidOrgGlass, solidPD, solidPreAmpBox, solidRear, solidRearCasing, solidWaterPipe, stainlessSteel, startID, tan(), thetaNbCrystals, verboseLevel, and waterPipe.

Referenced by BesDetectorConstruction::Construct().

00094 {
00095   besEMCGeometry->ComputeEMCParameters();
00096   detectorMessenger = new BesEmcDetectorMessenger(this,besEMCGeometry);
00097   emcEnd->ComputeParameters();
00098 
00099   G4SDManager* SDman = G4SDManager::GetSDMpointer();
00100   if (!besEMCSD) {
00101     besEMCSD = new BesEmcSD("CalorSD",this,besEMCGeometry);
00102     SDman->AddNewDetector( besEMCSD );
00103   }
00104 
00105   // Construction
00106   G4cout<<"--------ReadBoostRoot::GetEmc()="<<ReadBoostRoot::GetEmc()<<G4endl;
00107   if(ReadBoostRoot::GetEmc()==2)
00108   {
00109     logicEMC = EmcG4Geo::Instance()->GetTopVolume();
00110 
00111     if(logicEMC){
00112       physiEMC = new G4PVPlacement(0,
00113           G4ThreeVector(0.0 ,0.0 ,0.0),
00114           logicEMC, "physicalEMC",logicBes, false, 0);
00115       G4cout<<"logicEmc:  ===  "<<logicEMC<<"  physiEmc "<<physiEMC<<G4endl;
00116 
00117       GetLogicalVolume();
00118       SetVisAndSD();
00119     }
00120   }
00121   else {
00122     //for debug
00123     //  G4Exception("BesEmcConstruction::Construct() starting............");
00124     //
00125     DefineMaterials();
00126     phiNbCrystals     = (*besEMCGeometry).BSCNbPhi;
00127     thetaNbCrystals   = (*besEMCGeometry).BSCNbTheta*2;
00128 
00129     G4double da=0.001*deg;  //delta angle to avoid overlap
00130     
00131     //
00132     //BSC
00133     //
00134     solidBSC = new G4Tubs("solidBSC",
00135       (*besEMCGeometry).TaperRingRmin1,
00136       (*besEMCGeometry).BSCRmax+(*besEMCGeometry).SPBarThickness+(*besEMCGeometry).SPBarThickness1+2.1*mm,   //radius from 942mm to 940 mm
00137       (*besEMCGeometry).BSCDz+(*besEMCGeometry).TaperRingThickness3+(*besEMCGeometry).EndRingDz,
00138                         0.*deg,
00139                         360.*deg);
00140 
00141     solidESC = new G4Cons("solidESC",(*emcEnd).WorldRmin1,(*emcEnd).WorldRmax1,
00142         (*emcEnd).WorldRmin2,(*emcEnd).WorldRmax2,
00143         (*emcEnd).WorldDz/2,0.*deg,360.*deg);
00144 
00145     solidEMC = new G4UnionSolid("solidEMC0",
00146         solidBSC,
00147         solidESC,
00148         0,
00149         G4ThreeVector(0,0,(*emcEnd).WorldZPosition));
00150     
00151     G4RotationMatrix *rotateESC = new G4RotationMatrix();
00152     rotateESC->rotateY(180.*deg);
00153     
00154     solidEMC = new G4UnionSolid("solidEMC",
00155         solidEMC,
00156         solidESC,
00157         rotateESC,
00158         G4ThreeVector(0,0,-(*emcEnd).WorldZPosition));
00159     
00160     logicEMC = new G4LogicalVolume(solidEMC,
00161                          G4Material::GetMaterial("Air"),
00162                          "logicalEMC");
00163     
00164     physiEMC = new G4PVPlacement(0,
00165         0,
00166         logicEMC,
00167         "physicalEMC",
00168         logicBes,
00169         false,
00170         0);
00171 
00172     solidBSCWorld = new G4SubtractionSolid("solidBSCWorld0",
00173           solidBSC,
00174           solidESC,
00175           0,
00176           G4ThreeVector(0,0,(*emcEnd).WorldZPosition));
00177 
00178     solidBSCWorld = new G4SubtractionSolid("solidBSCWorld",
00179         solidBSCWorld,
00180         solidESC,
00181         rotateESC,
00182         G4ThreeVector(0,0,-(*emcEnd).WorldZPosition));
00183 
00184     logicBSCWorld = new G4LogicalVolume(solidBSCWorld,
00185         G4Material::GetMaterial("Air"),
00186         "logicalBSCWorld");
00187 
00188     G4RotationMatrix *rotBSC = new G4RotationMatrix();
00189     rotBSC->rotateY(180.*deg);
00190     physiBSCWorld = new G4PVPlacement(rotBSC,
00191         0,
00192         logicBSCWorld,
00193         "physicalBSCWorld",
00194         logicEMC,
00195         false,
00196         0);
00197     
00198     G4RotationMatrix *rotateMatrix[200];
00199     G4double oOp,ox,oy,oz; 
00200     G4double delta = 0*deg;
00201     G4ThreeVector axis = G4ThreeVector(0,0,0);
00202     oOp=(*besEMCGeometry).BSCRmin/sin(0.5*(*besEMCGeometry).BSCPhiDphi+90*deg)
00203       *sin((*besEMCGeometry).BSCAngleRotat);
00204     G4double ll=(*besEMCGeometry).BSCCryLength;
00205     G4double rr=(*besEMCGeometry).BSCRmin;
00206     G4double oj=sqrt(ll*ll+rr*rr-2*ll*rr*cos(180.*deg-(*besEMCGeometry).BSCAngleRotat));
00207     G4double oij=90.*deg-(*besEMCGeometry).BSCPhiDphi/2.-(*besEMCGeometry).BSCAngleRotat;
00208     G4double doj=asin(sin(180.*deg-(*besEMCGeometry).BSCAngleRotat)/oj*ll);
00209     G4double ioj=(*besEMCGeometry).BSCPhiDphi/2.+doj;
00210     G4double ij=oj/sin(oij)*sin(ioj);
00211     G4double dOp=rr/sin(90.*deg-(*besEMCGeometry).BSCPhiDphi/2.)
00212       *sin(90.*deg+(*besEMCGeometry).BSCPhiDphi/2.-(*besEMCGeometry).BSCAngleRotat);
00213     G4double cOp=rr/sin(90.*deg+(*besEMCGeometry).BSCPhiDphi/2.)
00214       *sin(90.*deg-(*besEMCGeometry).BSCPhiDphi/2.-(*besEMCGeometry).BSCAngleRotat);
00215     G4double ch=(dOp+ll)/cos((*besEMCGeometry).BSCPhiDphi)-cOp;
00216     G4double hi=(dOp+ll)*tan((*besEMCGeometry).BSCPhiDphi)-ij;
00217     G4double oh=sqrt(ch*ch+rr*rr-2*ch*rr*cos(180*deg-(*besEMCGeometry).BSCAngleRotat));
00218     G4double hoi=asin(sin(180*deg-oij)/oh*hi);
00219     G4double dok=asin(sin(180*deg-(*besEMCGeometry).BSCAngleRotat)/oh*ch);
00220     if(verboseLevel>3)
00221       G4cout << "oj=" <<oj/cm<<G4endl
00222         << "oij="<<oij/deg<<G4endl
00223         << "doj="<<doj/deg<<G4endl
00224         << "ioj="<<ioj/deg<<G4endl
00225         << "ij="<<ij/cm<<G4endl
00226         << "dOp="<<dOp/cm<<G4endl
00227         << "cOp="<<cOp/cm<<G4endl
00228         << "ch="<<ch/cm<<G4endl
00229         << "hi="<<hi/cm<<G4endl
00230         << "oh="<<oh/cm<<G4endl
00231         << "hoi="<<hoi/deg<<G4endl
00232         << "dok="<<dok/deg<<G4endl;
00233 
00234     // Phi Cell
00235     solidBSCPhiTub = new G4Tubs(
00236         "solidBSCPhiTub",
00237         dOp,
00238         (*besEMCGeometry).BSCPhiRmax,
00239         (*besEMCGeometry).BSCDz,
00240         360.*deg-(*besEMCGeometry).BSCPhiDphi,
00241         (*besEMCGeometry).BSCPhiDphi);
00242     solidConsPhi = new G4Cons("consPhi1",
00243         (*besEMCGeometry).BSCRmin1,
00244         (*besEMCGeometry).BSCRmax1,
00245         (*besEMCGeometry).BSCRmin2,
00246         (*besEMCGeometry).BSCRmax2,
00247         (*besEMCGeometry).BSCDz1/2,
00248         0.*deg,
00249         360.*deg);
00250     solidBSCPhi1 = new G4SubtractionSolid("solidBSCPhi1",
00251         solidBSCPhiTub,
00252         solidConsPhi,
00253         0,
00254         G4ThreeVector(0,0,(*besEMCGeometry).BSCDz-(*besEMCGeometry).BSCDz1/2));
00255     solidConsPhi = new G4Cons("consPhi2",
00256         (*besEMCGeometry).BSCRmin2,
00257         (*besEMCGeometry).BSCRmax2,
00258         (*besEMCGeometry).BSCRmin1,
00259         (*besEMCGeometry).BSCRmax1,
00260         (*besEMCGeometry).BSCDz1/2,
00261         0.*deg,
00262         360.*deg);
00263     solidBSCPhi = new G4SubtractionSolid("solidBSCPhi",
00264         solidBSCPhi1,
00265         solidConsPhi,
00266         0,
00267         G4ThreeVector(0,0,(*besEMCGeometry).BSCDz1/2-(*besEMCGeometry).BSCDz));
00268 
00269     logicBSCPhi = new G4LogicalVolume(solidBSCPhi,
00270         G4Material::GetMaterial("Air"),
00271         "logicalBSCPhi");
00272 
00273     G4int i;
00274     for(G4int j=0;j<(*besEMCGeometry).BSCNbPhi;j++)  //=============
00275     {
00276       if(j<(*besEMCGeometry).BSCNbPhi/2) {  //0~59
00277         i=(*besEMCGeometry).BSCNbPhi/2-j-1;
00278       } else {  //60~119
00279         i=(*besEMCGeometry).BSCNbPhi*3/2-j-1;
00280       }
00281       rotateMatrix[i] = new G4RotationMatrix();
00282       rotateMatrix[i]->rotateZ(-i*(*besEMCGeometry).BSCPhiDphi
00283           -(*besEMCGeometry).BSCAngleRotat
00284           -(*besEMCGeometry).BSCPhiDphi/2.
00285           -hoi);
00286       rotateMatrix[i]->getAngleAxis(delta, axis);
00287       //G4cout << "The axis of crystals in the world system is: "
00288       //   << delta/deg << "(deg)(delta) "
00289       //<< axis  << "(Z axis)"<< G4endl;
00290       ox=oOp*cos(-90.*deg+(*besEMCGeometry).BSCAngleRotat+hoi
00291           +i*(*besEMCGeometry).BSCPhiDphi);
00292       oy=oOp*sin(-90.*deg+(*besEMCGeometry).BSCAngleRotat+hoi
00293           +i*(*besEMCGeometry).BSCPhiDphi);
00294       oz=0*cm;
00295 
00296       ostringstream strPhi;
00297       strPhi << "physicalBSCPhi"  << j;
00298 
00299       physiBSCPhi = new G4PVPlacement(rotateMatrix[i],
00300           G4ThreeVector(ox,oy,oz),
00301           logicBSCPhi,
00302           strPhi.str(),
00303           logicBSCWorld,
00304           false,
00305           j);
00306       //G4cout << G4ThreeVector(ox/cm,oy/cm,oz/cm) <<"(cm)" << G4endl
00307       //   << (-(*besEMCGeometry).BSCAngleRotat+(i-1)*(*besEMCGeometry).BSCPhiDphi)/deg <<"(degree)" << G4endl;
00308     }
00309 
00310     //
00311     //Crystals
00312     //
00313     G4double zHalfLength[50];
00314     G4double thetaAxis[50];
00315     G4double phiAxis[50];
00316     G4double yHalfLength1[50];
00317     G4double xHalfLength2[50];
00318     G4double xHalfLength1[50];
00319     G4double tanAlpha1[50];
00320     G4double yHalfLength2[50];
00321     G4double xHalfLength4[50];
00322     G4double xHalfLength3[50];
00323     G4double tanAlpha2[50];
00324     G4double xPosition[50];
00325     G4double yPosition[50];
00326     G4double zPosition[50];
00327     G4double thetaPosition[50];
00328     for(i=0;i<(*besEMCGeometry).BSCNbTheta;i++)
00329     {
00330       zHalfLength[i]  = (*besEMCGeometry).zHalfLength[i];
00331       thetaAxis[i]    = (*besEMCGeometry).thetaAxis[i];
00332       phiAxis[i]      = (*besEMCGeometry).phiAxis[i];
00333       yHalfLength1[i] = (*besEMCGeometry).yHalfLength1[i];
00334       xHalfLength2[i] = (*besEMCGeometry).xHalfLength2[i];
00335       xHalfLength1[i] = (*besEMCGeometry).xHalfLength1[i];
00336       tanAlpha1[i]    = (*besEMCGeometry).tanAlpha1[i];
00337       yHalfLength2[i] = (*besEMCGeometry).yHalfLength2[i];
00338       xHalfLength4[i] = (*besEMCGeometry).xHalfLength4[i];
00339       xHalfLength3[i] = (*besEMCGeometry).xHalfLength3[i];
00340       tanAlpha2[i]    = (*besEMCGeometry).tanAlpha2[i];
00341       xPosition[i]    = (*besEMCGeometry).xPosition[i];
00342       yPosition[i]    = (*besEMCGeometry).yPosition[i];
00343       zPosition[i]    = (*besEMCGeometry).zPosition[i];
00344       thetaPosition[i]= (*besEMCGeometry).thetaPosition[i];
00345       if(verboseLevel>4)        
00346         G4cout << "The sizes of the "<<i+1<<" crystal are:" << G4endl
00347           <<"zHalfLength ="<<zHalfLength[i]/cm<< "(cm)," << G4endl
00348           << "thetaAxis  ="<<thetaAxis[i]/deg << "(deg),"<< G4endl
00349           << "phiAxis    ="<< phiAxis[i]/deg  << "(deg),"<< G4endl
00350           << "yHalfLength1="<<yHalfLength1[i]/cm<<"(cm),"<< G4endl
00351           << "xHalfLength1="<<xHalfLength1[i]/cm<<"(cm),"<< G4endl
00352           << "xHalfLength2="<<xHalfLength2[i]/cm<<"(cm),"<< G4endl
00353           << "tanAlpha1   ="<< tanAlpha1[i]              << G4endl
00354           << "yHalfLength2="<<yHalfLength2[i]/cm<<"(cm),"<< G4endl
00355           << "xHalfLength3="<<xHalfLength3[i]/cm<<"(cm),"<< G4endl
00356           << "xHalfLength4="<<xHalfLength4[i]/cm<<"(cm),"<< G4endl
00357           << "tanAlpha2   =" << tanAlpha2[i]    << "."   << G4endl;
00358     }
00359     besEMCGeometry->ModifyForCasing();
00360 
00361     solidBSCCrystal = new G4Trap("solidCrystal",
00362         100*cm, 100*deg, 100*deg,
00363         100*cm, 100*cm,  100*cm,  100*deg,
00364         100*cm, 100*cm,  100*cm,  100*deg);
00365 
00366     logicBSCCrystal = new G4LogicalVolume(solidBSCCrystal,
00367         fCrystalMaterial,
00368         "logicalCrystal");
00369 
00370     crystalParam = new BesCrystalParameterisation
00371       (startID,
00372        thetaNbCrystals,
00373        (*besEMCGeometry).BSCNbTheta*2,
00374        besEMCGeometry,
00375        verboseLevel);
00376 
00377     //---------------------------------------------------------------------------------
00378     //rear substance
00379     solidRear = new G4Box("solidRearBox",
00380         (*besEMCGeometry).rearBoxLength/2,
00381         (*besEMCGeometry).rearBoxLength/2,
00382         (*besEMCGeometry).rearBoxDz/2);
00383 
00384     logicRear = new G4LogicalVolume(solidRear,
00385         G4Material::GetMaterial("Air"),
00386         "logicalRearBox");
00387 
00388     //organic glass
00389     solidOrgGlass = new G4Box("solidOrganicGlass",
00390         (*besEMCGeometry).orgGlassLengthX/2,
00391         (*besEMCGeometry).orgGlassLengthY/2,
00392         (*besEMCGeometry).orgGlassLengthZ/2);
00393 
00394     logicOrgGlass = new G4LogicalVolume(solidOrgGlass,
00395         organicGlass,
00396         "logicalOrganicGlass");
00397 
00398     physiOrgGlass = new G4PVPlacement(0,
00399         G4ThreeVector(0,0,-((*besEMCGeometry).rearBoxDz-(*besEMCGeometry).orgGlassLengthZ)/2),
00400         logicOrgGlass,
00401         "physicalOrganicGlass",
00402         logicRear,
00403         false,
00404         0);
00405 
00406     //casing
00407     solidCasingBox = new G4Box("solidCasingBox",
00408         (*besEMCGeometry).rearBoxLength/2,
00409         (*besEMCGeometry).rearBoxLength/2,
00410         (*besEMCGeometry).rearCasingThickness/2);
00411 
00412     solidAirHole = new G4Box("solidAirHole",
00413         (*besEMCGeometry).orgGlassLengthX/2,
00414         (*besEMCGeometry).orgGlassLengthY/2,
00415         (*besEMCGeometry).rearBoxDz/2);      //any value more than casing thickness
00416 
00417     solidRearCasing = new G4SubtractionSolid("solidRearCasing",
00418         solidCasingBox,
00419         solidAirHole,
00420         0,
00421         0);
00422 
00423     logicRearCasing = new G4LogicalVolume(solidRearCasing,
00424         rearCasingMaterial,
00425         "logicalRearCasing");
00426 
00427     physiRearCasing = new G4PVPlacement(0,
00428         G4ThreeVector(0,0,-((*besEMCGeometry).rearBoxDz-(*besEMCGeometry).rearCasingThickness)/2),
00429         logicRearCasing,
00430         "physicalRearCasing",
00431         logicRear,
00432         false,
00433         0);
00434 
00435     //Al Plate
00436     solidAlBox = new G4Box("solidAlBox",
00437         (*besEMCGeometry).rearBoxLength/2,
00438         (*besEMCGeometry).rearBoxLength/2,
00439         (*besEMCGeometry).AlPlateDz/2);
00440 
00441     solidAlPlate = new G4SubtractionSolid("solidAlPlate",
00442         solidAlBox,
00443         solidAirHole,
00444         0,
00445         0);
00446 
00447     logicAlPlate = new G4LogicalVolume(solidAlPlate,
00448         G4Material::GetMaterial("Aluminium"),
00449         "logicalAlPlate");
00450 
00451     physiAlPlate = new G4PVPlacement(0,
00452         G4ThreeVector(0,0,-((*besEMCGeometry).rearBoxDz/2
00453             -(*besEMCGeometry).rearCasingThickness
00454             -(*besEMCGeometry).AlPlateDz/2)),
00455         logicAlPlate,
00456         "physicalAlPlate",
00457         logicRear,
00458         false,
00459         0);
00460 
00461     //photodiode
00462     solidPD = new G4Box("solidPD",
00463         (*besEMCGeometry).PDLengthX,     //two PD
00464         (*besEMCGeometry).PDLengthY/2,
00465         (*besEMCGeometry).PDLengthZ/2);
00466 
00467     logicPD = new G4LogicalVolume(solidPD,
00468         G4Material::GetMaterial("M_Silicon"),
00469         "logicalPD");
00470 
00471     physiPD = new G4PVPlacement(0,
00472         G4ThreeVector(0,0,-((*besEMCGeometry).rearBoxDz/2
00473             -(*besEMCGeometry).orgGlassLengthZ
00474             -(*besEMCGeometry).PDLengthZ/2)),
00475         logicPD,
00476         "physicalPD",
00477         logicRear,
00478         false,
00479         0);
00480 
00481     //preamplifier box
00482     solidPreAmpBox = new G4Box("solidPreAmpBox",
00483         (*besEMCGeometry).rearBoxLength/2,
00484         (*besEMCGeometry).rearBoxLength/2,
00485         (*besEMCGeometry).PABoxDz/2);
00486 
00487     logicPreAmpBox = new G4LogicalVolume(solidPreAmpBox,
00488         G4Material::GetMaterial("Aluminium"),
00489         "logicalPreAmpBox");
00490 
00491     physiPreAmpBox = new G4PVPlacement(0,
00492         G4ThreeVector(0,0,-((*besEMCGeometry).rearBoxDz/2
00493             -(*besEMCGeometry).rearCasingThickness
00494             -(*besEMCGeometry).AlPlateDz
00495             -(*besEMCGeometry).PABoxDz/2)),
00496         logicPreAmpBox,
00497         "physicalPreAmpBox",
00498         logicRear,
00499         false,
00500         0);
00501 
00502     //air in preamplifier box
00503     solidAirInPABox = new G4Box("solidAirInPABox",
00504         (*besEMCGeometry).rearBoxLength/2-(*besEMCGeometry).PABoxThickness,
00505         (*besEMCGeometry).rearBoxLength/2-(*besEMCGeometry).PABoxThickness,
00506         (*besEMCGeometry).PABoxDz/2-(*besEMCGeometry).PABoxThickness);
00507 
00508     logicAirInPABox = new G4LogicalVolume(solidAirInPABox,
00509         G4Material::GetMaterial("Air"),
00510         "logicalAirInPABox");
00511 
00512     physiAirInPABox = new G4PVPlacement(0,
00513         0,
00514         logicAirInPABox,
00515         "physicalAirInPABox",
00516         logicPreAmpBox,
00517         false,
00518         0);
00519 
00520     //stainless steel for hanging the crystal
00521     solidHangingPlate = new G4Box("solidHangingPlate",
00522         (*besEMCGeometry).rearBoxLength/2,
00523         (*besEMCGeometry).rearBoxLength/2,
00524         (*besEMCGeometry).HangingPlateDz/2);
00525 
00526     logicHangingPlate = new G4LogicalVolume(solidHangingPlate,stainlessSteel,"logicalHangingPlate");
00527 
00528     physiHangingPlate = new G4PVPlacement(0,
00529         G4ThreeVector(0,0,-((*besEMCGeometry).rearBoxDz/2
00530             -(*besEMCGeometry).rearCasingThickness
00531             -(*besEMCGeometry).AlPlateDz
00532             -(*besEMCGeometry).PABoxDz
00533             -(*besEMCGeometry).HangingPlateDz/2)),
00534         logicHangingPlate,
00535         "physicalHangingPlate",
00536         logicRear,
00537         false,
00538         0);
00539 
00540     //water pipe
00541     solidWaterPipe = new G4Tubs("solidWaterPipe",
00542         0,
00543         (*besEMCGeometry).waterPipeDr,
00544         (*besEMCGeometry).BSCDz,
00545         0.*deg,
00546         360.*deg);
00547 
00548     logicWaterPipe = new G4LogicalVolume(solidWaterPipe,waterPipe,"logicalWaterPipe");
00549 
00550     physiWaterPipe = new G4PVPlacement(0,
00551         G4ThreeVector((*besEMCGeometry).cablePosX[0]-2*(*besEMCGeometry).cableDr,
00552           (*besEMCGeometry).cablePosY[0]-(*besEMCGeometry).cableDr-(*besEMCGeometry).waterPipeDr,
00553           0),
00554         logicWaterPipe,
00555         "physicalWaterPipe",
00556         logicBSCPhi,
00557         false,
00558         0);
00559     //---------------------------------------------------------------------------------
00560 
00561 
00562     //
00563     //Theta Cell
00564     //
00565     G4String nameCrystalAndCasing="CrystalAndCasing";
00566 
00567     G4int id=0;     //ID of crystals after distinguishing left and right
00568     for(i=startID;i<=thetaNbCrystals;i++) //================
00569     {
00570       ostringstream strSolidCasing;
00571       strSolidCasing << "solidBSCCasing"  << i-1;
00572       ostringstream strVolumeCasing;
00573       strVolumeCasing << "logicalBSCCasing"  << i-1;
00574       ostringstream strPhysiCasing;
00575       strPhysiCasing << "physicalBSCCasing"  << i-1;
00576 
00577       if(i>(*besEMCGeometry).BSCNbTheta)
00578       {
00579         id=i-(*besEMCGeometry).BSCNbTheta-1;
00580         solidBSCTheta = new G4Trap(strSolidCasing.str(),
00581             zHalfLength[id],
00582             thetaAxis[id],
00583             -phiAxis[id],
00584             yHalfLength1[id],
00585             xHalfLength2[id],
00586             xHalfLength1[id],
00587             -tanAlpha1[id],
00588             yHalfLength2[id],
00589             xHalfLength4[id],
00590             xHalfLength3[id],
00591             -tanAlpha2[id]);
00592 
00593         //G4cout<<"in EmcConstr1: "<<strSolidCasing.str()<<" x1="<<xHalfLength1[id]<<" y1="<<yHalfLength1[id]<<" theta="<<thetaAxis[id]
00594         //<<" phi="<<-phiAxis[id]<<" a1="<<-tanAlpha1[id]<<G4endl;
00595 
00596         logicBSCTheta = new G4LogicalVolume(solidBSCTheta,
00597             fCasingMaterial,
00598             strVolumeCasing.str());
00599 
00600         rotateMatrix[(*besEMCGeometry).BSCNbPhi+i-1] = new G4RotationMatrix();
00601         rotateMatrix[(*besEMCGeometry).BSCNbPhi+i-1]->rotateZ(-90*deg);
00602         rotateMatrix[(*besEMCGeometry).BSCNbPhi+i-1]
00603           ->rotateX(-thetaPosition[id]);
00604 
00605 
00606         physiBSCTheta = 
00607           new G4PVPlacement(rotateMatrix[(*besEMCGeometry).BSCNbPhi+i-1],
00608               G4ThreeVector(xPosition[id],
00609                 yPosition[id],
00610                 zPosition[id]),
00611               strPhysiCasing.str(),
00612               logicBSCTheta,
00613               physiBSCPhi,
00614               false,
00615               i-1);
00616 
00617         if(logicBSCTheta)
00618         {
00619           G4VisAttributes* rightVisAtt= new G4VisAttributes(G4Colour(1.0,0.,0.));
00620           rightVisAtt->SetVisibility(true);
00621           logicBSCTheta->SetVisAttributes(rightVisAtt);
00622           logicBSCTheta->SetVisAttributes(G4VisAttributes::Invisible);
00623         }
00624 
00625         ostringstream strRear;
00626         strRear << "physicalRearBox_1_"  << i-1;
00627 
00628         physiRear = new G4PVPlacement(rotateMatrix[(*besEMCGeometry).BSCNbPhi+i-1],
00629             G4ThreeVector((*besEMCGeometry).rearBoxPosX[id],
00630               (*besEMCGeometry).rearBoxPosY[id],
00631               (*besEMCGeometry).rearBoxPosZ[id]),
00632             strRear.str(),
00633             logicRear,
00634             physiBSCPhi,
00635             false,
00636             i-1);
00637 
00638         ostringstream strGirder;
00639         strGirder << "solidOpenningCutGirder_1_"  << i-1;
00640         solidOCGirder = new G4Cons(strGirder.str(),
00641             (*besEMCGeometry).OCGirderRmin1[id],
00642             (*besEMCGeometry).BSCPhiRmax,
00643             (*besEMCGeometry).OCGirderRmin2[id],
00644             (*besEMCGeometry).BSCPhiRmax,
00645             (*besEMCGeometry).OCGirderDz[id]/2,
00646             360.*deg-(*besEMCGeometry).OCGirderAngle/2,
00647             (*besEMCGeometry).OCGirderAngle/2-da);
00648 
00649         ostringstream strVGirder;
00650         strVGirder << "logicalOpenningCutGirder_1_"  << i-1;
00651         logicOCGirder = new G4LogicalVolume(solidOCGirder,stainlessSteel,strVGirder.str());
00652         logicOCGirder->SetVisAttributes(G4VisAttributes::Invisible);
00653 
00654         ostringstream strPGirder;
00655         strPGirder << "physicalOpenningCutGirder_1_"  << i-1;
00656         physiOCGirder = new G4PVPlacement(0,
00657             G4ThreeVector(0,0,(*besEMCGeometry).OCGirderPosZ[id]),
00658             logicOCGirder,
00659             strPGirder.str(),
00660             logicBSCPhi,
00661             false,
00662             0);
00663 
00664         if(id<(*besEMCGeometry).BSCNbTheta-1)
00665         {
00666           G4double zLength = (*besEMCGeometry).OCGirderPosZ[id+1]
00667             -(*besEMCGeometry).OCGirderPosZ[id]
00668             -(*besEMCGeometry).OCGirderDz[id+1]/2-(*besEMCGeometry).OCGirderDz[id]/2;
00669           G4double zPosition = (*besEMCGeometry).OCGirderPosZ[id+1]
00670             -(*besEMCGeometry).OCGirderDz[id+1]/2-zLength/2;
00671 
00672           ostringstream strGirder2;
00673           strGirder2 << "solidOpenningCutGirder_2_"  << i-1;
00674           solidOCGirder = new G4Cons(strGirder2.str(),
00675               (*besEMCGeometry).OCGirderRmin2[id],
00676               (*besEMCGeometry).BSCPhiRmax,
00677               (*besEMCGeometry).OCGirderRmin1[id+1],
00678               (*besEMCGeometry).BSCPhiRmax,
00679               zLength/2,
00680               360.*deg-(*besEMCGeometry).OCGirderAngle/2,
00681               (*besEMCGeometry).OCGirderAngle/2-da);
00682 
00683           ostringstream strVGirder2;
00684           strVGirder2 << "logicalOpenningCutGirder_2_"  << i-1;
00685           logicOCGirder = new G4LogicalVolume(solidOCGirder,stainlessSteel,strVGirder2.str());
00686           logicOCGirder->SetVisAttributes(G4VisAttributes::Invisible);
00687 
00688           ostringstream strPGirder2;
00689           strPGirder2 << "physicalOpenningCutGirder_2_"  << i-1;
00690           physiOCGirder = new G4PVPlacement(0,
00691               G4ThreeVector(0,0,zPosition),
00692               logicOCGirder,
00693               strPGirder2.str(),
00694               logicBSCPhi,
00695               false,
00696               0);
00697         } 
00698 
00699         ostringstream strBSCCable;
00700         strBSCCable << "solidBSCCable_1_"  << i-1;
00701         solidCable = new G4Tubs(strBSCCable.str(),
00702             0,
00703             (*besEMCGeometry).cableDr,
00704             (*besEMCGeometry).cableLength[id]/2,
00705             0.*deg,
00706             360.*deg);
00707 
00708         ostringstream strVBSCCable;
00709         strVBSCCable << "logicalBSCCable_1_"  << i-1;
00710         logicCable = new G4LogicalVolume(solidCable,cable,strVBSCCable.str());
00711 
00712         ostringstream strPBSCCable;
00713         strPBSCCable << "physicalBSCCable_1_"  << i-1;
00714         physiCable = new G4PVPlacement(0,
00715             G4ThreeVector((*besEMCGeometry).cablePosX[id],
00716               (*besEMCGeometry).cablePosY[id],
00717               (*besEMCGeometry).cablePosZ[id]),
00718             logicCable,
00719             strPBSCCable.str(),
00720             logicBSCPhi,
00721             false,
00722             0);
00723         logicCable->SetVisAttributes(G4VisAttributes::Invisible);
00724       }
00725       else
00726       {
00727         id=(*besEMCGeometry).BSCNbTheta-i;
00728         solidBSCTheta = new G4Trap(strSolidCasing.str(),
00729             zHalfLength[id],
00730             thetaAxis[id],
00731             phiAxis[id],
00732             yHalfLength1[id],
00733             xHalfLength1[id],
00734             xHalfLength2[id],
00735             tanAlpha1[id],
00736             yHalfLength2[id],
00737             xHalfLength3[id],
00738             xHalfLength4[id],
00739             tanAlpha2[id]);
00740 
00741         //          G4cout<<"in EmcConstr2: "<<strSolidCasing.str()<<" x1="<<xHalfLength1[id]<<" y1="<<yHalfLength1[id]<<" theta="<<thetaAxis[id]
00742         //                <<" phi="<<phiAxis[id]<<" a1="<<tanAlpha1[id]<<G4endl;
00743 
00744         logicBSCTheta = new G4LogicalVolume(solidBSCTheta,
00745             fCasingMaterial,
00746             strVolumeCasing.str());
00747 
00748         rotateMatrix[(*besEMCGeometry).BSCNbPhi+i-1] = new G4RotationMatrix();
00749         rotateMatrix[(*besEMCGeometry).BSCNbPhi+i-1]->rotateZ(-90*deg);
00750         rotateMatrix[(*besEMCGeometry).BSCNbPhi+i-1]
00751           ->rotateX(-180*deg+thetaPosition[id]);
00752         physiBSCTheta = 
00753           new G4PVPlacement(rotateMatrix[(*besEMCGeometry).BSCNbPhi+i-1],
00754               G4ThreeVector(xPosition[id],
00755                 yPosition[id],
00756                 -zPosition[id]),
00757               strPhysiCasing.str(),
00758               logicBSCTheta,
00759               physiBSCPhi,
00760               false,
00761               i-1);
00762         if(logicBSCTheta)
00763         {
00764           G4VisAttributes* rightVisAtt= new G4VisAttributes(G4Colour(1.0,0.,0.));
00765           rightVisAtt->SetVisibility(true);
00766           logicBSCTheta->SetVisAttributes(rightVisAtt);
00767           logicBSCTheta->SetVisAttributes(G4VisAttributes::Invisible);
00768         }
00769 
00770         ostringstream strRear;
00771         strRear << "physicalRearBox_2_"  << i-1;
00772 
00773         physiRear = new G4PVPlacement(rotateMatrix[(*besEMCGeometry).BSCNbPhi+i-1],
00774             G4ThreeVector((*besEMCGeometry).rearBoxPosX[id],
00775               (*besEMCGeometry).rearBoxPosY[id],
00776               -(*besEMCGeometry).rearBoxPosZ[id]),
00777             strRear.str(),
00778             logicRear,
00779             physiBSCPhi,
00780             false,
00781             i-1);
00782 
00783         ostringstream strGirder;
00784         strGirder << "solidOpenningCutGirder_3_"  << i-1;
00785         solidOCGirder = new G4Cons(strGirder.str(),
00786             (*besEMCGeometry).OCGirderRmin2[id],
00787             (*besEMCGeometry).BSCPhiRmax,
00788             (*besEMCGeometry).OCGirderRmin1[id],
00789             (*besEMCGeometry).BSCPhiRmax,
00790             (*besEMCGeometry).OCGirderDz[id]/2,
00791             360.*deg-(*besEMCGeometry).OCGirderAngle/2,
00792             (*besEMCGeometry).OCGirderAngle/2-da);
00793 
00794         ostringstream strVGirder;
00795         strVGirder << "logicalOpenningCutGirder_3_"  << i-1;
00796         logicOCGirder = new G4LogicalVolume(solidOCGirder,stainlessSteel,strVGirder.str());
00797         logicOCGirder->SetVisAttributes(G4VisAttributes::Invisible);
00798 
00799         ostringstream strPGirder;
00800         strPGirder << "physicalOpenningCutGirder_3_"  << i-1;
00801         physiOCGirder = new G4PVPlacement(0,
00802             G4ThreeVector(0,0,-(*besEMCGeometry).OCGirderPosZ[id]),
00803             logicOCGirder,
00804             strPGirder.str(),
00805             logicBSCPhi,
00806             false,
00807             0);
00808 
00809         if(id<(*besEMCGeometry).BSCNbTheta-1)
00810         {
00811           G4double zLength = (*besEMCGeometry).OCGirderPosZ[id+1]-(*besEMCGeometry).OCGirderPosZ[id]
00812             -(*besEMCGeometry).OCGirderDz[id+1]/2-(*besEMCGeometry).OCGirderDz[id]/2;
00813           G4double zPosition = (*besEMCGeometry).OCGirderPosZ[id+1]-(*besEMCGeometry).OCGirderDz[id+1]/2-zLength/2;
00814 
00815           ostringstream strGirder2;
00816           strGirder2 << "solidOpenningCutGirder_4_"  << i-1;
00817           solidOCGirder = new G4Cons(strGirder2.str(),
00818               (*besEMCGeometry).OCGirderRmin1[id+1],
00819               (*besEMCGeometry).BSCPhiRmax,
00820               (*besEMCGeometry).OCGirderRmin2[id],
00821               (*besEMCGeometry).BSCPhiRmax,
00822               zLength/2,
00823               360.*deg-(*besEMCGeometry).OCGirderAngle/2,
00824               (*besEMCGeometry).OCGirderAngle/2-da);
00825 
00826           ostringstream strVGirder2;
00827           strVGirder2 << "logicalOpenningCutGirder_4_"  << i-1;
00828           logicOCGirder 
00829             = new G4LogicalVolume(solidOCGirder,stainlessSteel,strVGirder2.str());
00830           logicOCGirder->SetVisAttributes(G4VisAttributes::Invisible);
00831 
00832           ostringstream strPGirder2;
00833           strPGirder2 << "physicalOpenningCutGirder_4_"  << i-1;
00834           physiOCGirder = new G4PVPlacement(0,
00835               G4ThreeVector(0,0,-zPosition),
00836               logicOCGirder,
00837               strPGirder2.str(),
00838               logicBSCPhi,
00839               false,
00840               0);
00841         }
00842 
00843         ostringstream strBSCCable;
00844         strBSCCable << "solidBSCCable_2_"  << i-1;
00845         solidCable = new G4Tubs(strBSCCable.str(),
00846             0,
00847             (*besEMCGeometry).cableDr,
00848             (*besEMCGeometry).cableLength[id]/2,
00849             0.*deg,
00850             360.*deg);
00851 
00852         ostringstream strVBSCCable;
00853         strVBSCCable << "logicalBSCCable_2_"  << i-1;
00854         logicCable = new G4LogicalVolume(solidCable,cable,strVBSCCable.str());
00855 
00856         ostringstream strPBSCCable;
00857         strPBSCCable << "physicalBSCCable_2_"  << i-1;
00858         physiCable = new G4PVPlacement(0,
00859             G4ThreeVector((*besEMCGeometry).cablePosX[id],
00860               (*besEMCGeometry).cablePosY[id],
00861               -(*besEMCGeometry).cablePosZ[id]),
00862             logicCable,
00863             strPBSCCable.str(),
00864             logicBSCPhi,
00865             false,
00866             0);
00867         logicCable->SetVisAttributes(G4VisAttributes::Invisible);
00868 
00869       }
00870 
00871       ostringstream strCrystal;
00872       strCrystal << "physicalCrystal"  << i-1;
00873       physiBSCCrystal = new G4PVParameterised(
00874           strCrystal.str(),
00875           logicBSCCrystal,
00876           physiBSCTheta,
00877           kZAxis,
00878           1,//for this method,it must be 1.
00879           crystalParam);
00880       (*besEMCGeometry).physiBSCCrystal[i]=physiBSCCrystal;
00881       //G4cout << (*besEMCGeometry).physiBSCCrystal[i] << G4endl;
00882       physiBSCCrystal->SetCopyNo(i);
00883 
00884 
00885       if(verboseLevel>4)
00886         G4cout << "BesEmcConstruction*****************************"<< G4endl
00887           << "point of crystal =" <<physiBSCCrystal << G4endl
00888           //           << "point of mother  =" <<physiBSCCrystal->GetMotherPhysical() << G4endl
00889           << "point of excepted=" <<physiBSCTheta << G4endl;
00890       //G4Exception("BesEMCConstruction::Construct() starting............");
00891     }
00892 
00893     //
00894     //always return the physical World
00895     //
00896     if(verboseLevel>0)PrintEMCParameters();
00897     //  return physiBSC;
00898 
00899     ConstructSPFrame(logicBSCWorld,besEMCGeometry);
00900     ConstructEndGeometry(logicEMC);
00901   }
00902 
00903   //Set vis attributes and sensitive detector 
00904   SetVisAndSD();
00905 
00906   //list geo tree
00907   if(logicEMC&&physiEMC&&verboseLevel>4){
00908     G4cout<<"logicEmc "<<logicEMC<<"  physiEmc "<<physiEMC<<G4endl;
00909     G4cout<<"list geo tree"<<G4endl;
00910 
00911     int NdaughterofEMC = logicEMC->GetNoDaughters();
00912 
00913     for(int i = 0; i < NdaughterofEMC; i++)
00914     {
00915       G4LogicalVolume *daughterofEmc = logicEMC->GetDaughter(i)->GetLogicalVolume();
00916       G4cout<<i<<"/"<<NdaughterofEMC<<" name: "<<daughterofEmc->GetName()<<" "<<daughterofEmc<<" shape: "<<daughterofEmc->GetSolid()->GetName()<<G4endl;
00917       int NdaughterofEmc_2 = daughterofEmc->GetNoDaughters();
00918       for(int j = 0; j < NdaughterofEmc_2; j++)
00919       {
00920         G4LogicalVolume *daughterofEmc_2 = daughterofEmc->GetDaughter(j)->GetLogicalVolume();
00921         G4cout<<"     --> "<<j<<"/"<<NdaughterofEmc_2<<" name: "<<daughterofEmc_2->GetName()<<" "<<daughterofEmc_2<<" shape: "<<daughterofEmc_2->GetSolid()->GetName()<<G4endl;
00922         int NdaughterofEmc_3 = daughterofEmc_2->GetNoDaughters();
00923         for(int k = 0; k < NdaughterofEmc_3; k++)
00924         {
00925           G4LogicalVolume *daughterofEmc_3 = daughterofEmc_2->GetDaughter(k)->GetLogicalVolume();
00926           G4cout<<"          --> "<<k<<"/"<<NdaughterofEmc_3<<" name: "<<daughterofEmc_3->GetName()<<" "<<daughterofEmc_3<<" shape: "<<daughterofEmc_3->GetSolid()->GetName()<<G4endl;
00927           int NdaughterofEmc_4 = daughterofEmc_3->GetNoDaughters();
00928           for(int m = 0; m < NdaughterofEmc_4; m++)
00929           {
00930             G4LogicalVolume *daughterofEmc_4 = daughterofEmc_3->GetDaughter(m)->GetLogicalVolume();
00931             G4cout<<"               --> "<<m<<"/"<<NdaughterofEmc_4<<" name: "<<daughterofEmc_4->GetName()<<" "<<daughterofEmc_4<<" shape: "<<daughterofEmc_4->GetSolid()->GetName()<<G4endl; 
00932             if(daughterofEmc_3->GetSolid()->GetName().contains("solidBSCCasing"))
00933             {
00934               G4Trap *Crystal = (G4Trap *)daughterofEmc_3->GetSolid();
00935               double hz = Crystal->GetZHalfLength();
00936               double hx1 = Crystal->GetXHalfLength1();
00937               double hx2 = Crystal->GetXHalfLength2();
00938               double hx3 = Crystal->GetXHalfLength3();
00939               double hx4 = Crystal->GetXHalfLength4();
00940               double hy1 = Crystal->GetYHalfLength1();
00941               double hy2 = Crystal->GetYHalfLength2();
00942               double tanalpha1 = Crystal->GetTanAlpha1();
00943               double tanalpha2 = Crystal->GetTanAlpha2();
00944               G4cout<<"                   --> "<<hx1<<" "<<hx2<<" "<<hx3<<" "<<hx4<<" "<<hy1<<" "<<hy2<<" "<<hz<<" "<<tanalpha1<<" "<<tanalpha2<<G4endl;
00945 
00946             }//if(SolidCrystal)
00947           }//4
00948         }//3
00949       }//2
00950     }//1
00951   }
00952 
00953 
00954 }

void BesEmcConstruction::ConstructEndGeometry ( G4LogicalVolume *   ) 

Definition at line 956 of file BesEmcConstruction.cc.

References besEMCSD, emcEnd, fCasingMaterial, fCrystalMaterial, genRecEmupikp::i, ganga-rec::j, logicEnd, logicEndCasing, logicEndCrystal, logicEndPhi, BesEmcEndGeometry::ModifyForCasing(), physiEnd, physiEndCasing, physiEndCrystal, physiEndPhi, solidEnd, solidEndCasing, solidEndCrystal, solidEndPhi, TransformToArb8(), and BesEmcEndGeometry::Zoom().

00957 {
00958   G4Material* fCrystalMaterial = G4Material::GetMaterial("Cesiumiodide");
00959   G4VisAttributes* crystalVisAtt= new G4VisAttributes(G4Colour(0.5,0,1.0));
00960   crystalVisAtt->SetVisibility(false);
00961   G4VisAttributes* endPhiVisAtt= new G4VisAttributes(G4Colour(0,1.0,0));
00962   endPhiVisAtt->SetVisibility(false);
00963   const G4double zoomConst = 0.995;
00964   const G4double da=0.001*deg;
00965 
00966   //world volume of endcap
00967   //east end
00968   solidEnd = new G4Cons("solidEndWorld",(*emcEnd).WorldRmin1,(*emcEnd).WorldRmax1,
00969       (*emcEnd).WorldRmin2,(*emcEnd).WorldRmax2,
00970       (*emcEnd).WorldDz/2,0.*deg,360.*deg);
00971   logicEnd = new G4LogicalVolume(solidEnd, G4Material::GetMaterial("Aluminium"), "logicalEndWorld", 0, 0, 0);
00972   physiEnd = new G4PVPlacement(0,               // no rotation
00973       G4ThreeVector(0,0,(*emcEnd).WorldZPosition),
00974       logicEnd,               // its logical volume
00975       "physicalEndWorld0",             // its name
00976       logicEMC,               // its mother  volume
00977       false,                  // no boolean operations
00978       0);                     // no field specific to volume
00979   if(logicEnd)
00980     logicEnd->SetVisAttributes(G4VisAttributes::Invisible);
00981 
00982 
00983   //west end
00984   G4RotationMatrix *rotateEnd = new G4RotationMatrix();
00985   rotateEnd->rotateY(180.*deg);
00986   physiEnd = new G4PVPlacement(rotateEnd,
00987       G4ThreeVector(0,0,-(*emcEnd).WorldZPosition),
00988       logicEnd,
00989       "physicalEndWorld2",
00990       logicEMC,
00991       false,
00992       2);
00993 
00995   // emc endcap sectors (east)                                            //
00997   //                                    20mm gap                          // 
00998   //                                      ||                              //
00999   //                                \   7 || 6   /                        //
01000   //                           -   8 \    ||    / 5   -                   //
01001   //                             -    \   ||   /    -                     //
01002   //                        _  9   -   \  ||  /   -   4  _                //
01003   //                          - _    -  \ || /  -    _ -                  //
01004   //                              - _  - \||/ -  _ -                      //
01005   //                         10        - -||- -         3                 //
01006   //                      ----------------||----------------              //
01007   //                         11        - -||- -         2                 //
01008   //                              _ -  - /||\ -  - _                      //
01009   //                          _ -    -  / || \  -    - _                  //
01010   //                        -  12  -   /  ||  \   -   1  -                //
01011   //                             -    /   ||   \    -                     //
01012   //                           -  13 /    ||    \  0  -                   //
01013   //                                /  14 || 15  \                        //
01014   //                                      ||                              //
01016 
01017   // 1/16 of endcap world,which has some symmetry
01018   // sector 0-6,8-14
01019   solidEndPhi = new G4Cons("solidEndPhi0",
01020       (*emcEnd).SectorRmin1,(*emcEnd).SectorRmax1,(*emcEnd).SectorRmin2,(*emcEnd).SectorRmax2,
01021       (*emcEnd).SectorDz/2,0.*deg,22.5*deg-da);
01022   logicEndPhi = new G4LogicalVolume(solidEndPhi, G4Material::GetMaterial("Air"), "logicalEndPhi0", 0, 0, 0);
01023   for(G4int i=0;i<14;i++)
01024   {
01025     if((i!=6)&&(i!=7))
01026     {
01027       G4RotationMatrix *rotatePhi = new G4RotationMatrix();
01028       rotatePhi->rotateZ(-i*22.5*deg+67.5*deg);
01029       ostringstream strEndPhi;
01030       strEndPhi << "physicalEndPhi"  << i;
01031       physiEndPhi = new G4PVPlacement(rotatePhi,//0,logicEndPhi,strEndPhi.str(),logicEnd,false,i);
01032           G4ThreeVector(0,0,(*emcEnd).SectorZPosition),logicEndPhi,strEndPhi.str(),logicEnd,false,i);
01033     }
01034   }
01035   if(logicEndPhi)
01036     logicEndPhi->SetVisAttributes(endPhiVisAtt);
01037 
01038   for(G4int i=0;i<35;i++)
01039   {
01040     ostringstream strEndCasing;
01041     strEndCasing << "solidEndCasing_0_"  << i;
01042 
01043     //-************tranform to new coodinate!    liangyt 2007.5.7  *******
01044     G4ThreeVector newfPnt[8];
01045     G4ThreeVector center(0.0, 0.0, 0.0);
01046     G4ThreeVector rotAngle(0.0, 0.0, 0.0);
01047 
01048     TransformToArb8( (*emcEnd).fPnt[i], newfPnt, center, rotAngle );
01049 
01050     emcEnd->Zoom(newfPnt,zoomConst);    //change emcEnd.fPnt[i] to newfPnt
01051 
01052     G4RotationMatrix *rotatePhiIrregBox = new G4RotationMatrix();
01053     rotatePhiIrregBox->rotateX(rotAngle.x());
01054     rotatePhiIrregBox->rotateY(rotAngle.y());
01055     rotatePhiIrregBox->rotateZ(rotAngle.z());
01056     //-*******************************************************************
01057 
01058     solidEndCasing = new G4IrregBox(strEndCasing.str(),(*emcEnd).zoomPoint);   //liangyt
01059 
01060     ostringstream strVEndCasing;
01061     strVEndCasing << "logicalEndCasing_0_"  << i;
01062     logicEndCasing = new G4LogicalVolume(solidEndCasing,fCasingMaterial,strVEndCasing.str());
01063 
01064     ostringstream strPEndCasing;
01065     strPEndCasing << "physicalEndCasing_0_"  << i;
01066     physiEndCasing = new G4PVPlacement(rotatePhiIrregBox,center,
01067         logicEndCasing,strPEndCasing.str(),logicEndPhi,false,i);  //change with rot and pos now!
01068 
01069     ostringstream strEndCrystal;
01070     strEndCrystal << "solidEndCrystal_0_"  << i;
01071 
01072     emcEnd->ModifyForCasing((*emcEnd).zoomPoint,i);
01073     solidEndCrystal = new G4IrregBox(strEndCrystal.str(),(*emcEnd).cryPoint);
01074 
01075     ostringstream strVEndCrystal;
01076     strVEndCrystal << "logicalEndCrystal_0_"  << i;
01077     logicEndCrystal = new G4LogicalVolume(solidEndCrystal,fCrystalMaterial,strVEndCrystal.str());
01078 
01079     ostringstream strPEndCrystal;
01080     strPEndCrystal << "physicalEndCrystal_0_"  << i;
01081     physiEndCrystal = new G4PVPlacement(0,0,logicEndCrystal,strPEndCrystal.str(),logicEndCasing,false,i);
01082 
01083     logicEndCasing->SetVisAttributes(G4VisAttributes::Invisible);
01084     logicEndCrystal->SetVisAttributes(crystalVisAtt);
01085     logicEndCrystal->SetSensitiveDetector(besEMCSD);
01086   }
01087 
01088   // the top area which has 20 mm gap
01089   // sector 6,14
01090   solidEndPhi = new G4Cons("solidEndPhi1",
01091       (*emcEnd).WorldRmin1,(*emcEnd).WorldRmax1,(*emcEnd).WorldRmin2,(*emcEnd).WorldRmax2,  
01092       (*emcEnd).WorldDz/2,67.5*deg,22.5*deg-da);
01093   logicEndPhi = new G4LogicalVolume(solidEndPhi, G4Material::GetMaterial("Air"), "logicalEndPhi1", 0, 0, 0);
01094   for(G4int i=0;i<2;i++)
01095   {
01096     G4RotationMatrix *rotatePhi = new G4RotationMatrix();
01097     rotatePhi->rotateZ(-i*180.*deg);
01098     ostringstream strEndPhi;
01099     strEndPhi << "physicalEndPhi"  << i*8+6;
01100     physiEndPhi = new G4PVPlacement(rotatePhi,G4ThreeVector(0,0,(*emcEnd).SectorZPosition),
01101         logicEndPhi,strEndPhi.str(),logicEnd,false,i*8+6);
01102   }
01103   if(logicEndPhi)
01104     logicEndPhi->SetVisAttributes(endPhiVisAtt);
01105 
01106   for(G4int i=0;i<35;i++)
01107   {
01108     ostringstream strEndCasing;
01109     strEndCasing << "solidEndCasing_1_"  << i;
01110 
01111     //-************tranform to new coodinate!    liangyt 2007.5.7  *******
01112     G4ThreeVector newfPnt[8];
01113     G4ThreeVector center(0.0, 0.0, 0.0);
01114     G4ThreeVector rotAngle(0.0, 0.0, 0.0);
01115 
01116     TransformToArb8( (*emcEnd).fPnt1[i], newfPnt, center, rotAngle );
01117 
01118     emcEnd->Zoom(newfPnt,zoomConst);    //change emcEnd.fPnt[i] to newfPnt
01119 
01120     G4RotationMatrix *rotatePhiIrregBox = new G4RotationMatrix();
01121     rotatePhiIrregBox->rotateX(rotAngle.x());
01122     rotatePhiIrregBox->rotateY(rotAngle.y());
01123     rotatePhiIrregBox->rotateZ(rotAngle.z());
01124     //-*******************************************************************
01125 
01126     solidEndCasing = new G4IrregBox(strEndCasing.str(),(*emcEnd).zoomPoint);
01127 
01128     ostringstream strVEndCasing;
01129     strVEndCasing << "logicalEndCasing_1_"  << i;
01130     logicEndCasing = new G4LogicalVolume(solidEndCasing,fCasingMaterial,strVEndCasing.str());
01131 
01132     ostringstream strPEndCasing;
01133     strPEndCasing << "physicalEndCasing_1_"  << i;
01134     physiEndCasing = new G4PVPlacement(rotatePhiIrregBox,center,
01135         logicEndCasing,strPEndCasing.str(),logicEndPhi,false,i);  //change with rot and pos now!
01136 
01137     ostringstream strEndCrystal;
01138     strEndCrystal << "solidEndCrystal_1_"  << i;
01139 
01140     emcEnd->ModifyForCasing((*emcEnd).zoomPoint,i);
01141     solidEndCrystal = new G4IrregBox(strEndCrystal.str(),(*emcEnd).cryPoint);
01142 
01143     ostringstream strVEndCrystal;
01144     strVEndCrystal << "logicalEndCrystal_1_"  << i;
01145     logicEndCrystal = new G4LogicalVolume(solidEndCrystal,fCrystalMaterial,strVEndCrystal.str());
01146 
01147     ostringstream strPEndCrystal;
01148     strPEndCrystal << "physicalEndCrystal_1_"  << i;
01149     physiEndCrystal = new G4PVPlacement(0,0,logicEndCrystal,strPEndCrystal.str(),logicEndCasing,false,i);
01150 
01151     logicEndCasing->SetVisAttributes(G4VisAttributes::Invisible);
01152     logicEndCrystal->SetVisAttributes(crystalVisAtt);
01153     logicEndCrystal->SetSensitiveDetector(besEMCSD);
01154   }
01155 
01156   (*emcEnd).ReflectX();
01157 
01158   // sector 7,15
01159   for(G4int i=0;i<35;i++)
01160     for (G4int j=0;j<8;j++)
01161       (*emcEnd).fPnt1[i][j].rotateZ(-90.*deg);
01162 
01163   solidEndPhi = new G4Cons("solidEndPhi2",
01164       (*emcEnd).WorldRmin1,(*emcEnd).WorldRmax1,(*emcEnd).WorldRmin2,(*emcEnd).WorldRmax2,
01165       (*emcEnd).WorldDz/2,0*deg,22.5*deg-da);
01166   logicEndPhi = new G4LogicalVolume(solidEndPhi, G4Material::GetMaterial("Air"), "logicalEndPhi2", 0, 0, 0);
01167   for(G4int i=0;i<2;i++)
01168   {
01169     G4RotationMatrix *rotatePhi = new G4RotationMatrix();
01170     rotatePhi->rotateZ(-i*180.*deg-90.*deg);
01171     ostringstream strEndPhi;
01172     strEndPhi << "physicalEndPhi"  << i*8+7;
01173     physiEndPhi = new G4PVPlacement(rotatePhi,G4ThreeVector(0,0,(*emcEnd).SectorZPosition),
01174         logicEndPhi,strEndPhi.str(),logicEnd,false,i*8+7);
01175   }
01176   if(logicEndPhi)
01177     logicEndPhi->SetVisAttributes(endPhiVisAtt);
01178 
01179   for(G4int i=0;i<35;i++)
01180   {
01181     ostringstream strEndCasing;
01182     strEndCasing << "solidEndCasing_2_"  << i;
01183 
01184     //-************tranform to new coodinate!    liangyt 2007.5.7  *******
01185     G4ThreeVector newfPnt[8];
01186     G4ThreeVector center(0.0, 0.0, 0.0);
01187     G4ThreeVector rotAngle(0.0, 0.0, 0.0);
01188 
01189     TransformToArb8( (*emcEnd).fPnt1[i], newfPnt, center, rotAngle );
01190 
01191     emcEnd->Zoom(newfPnt,zoomConst);    //change emcEnd.fPnt[i] to newfPnt
01192 
01193     G4RotationMatrix *rotatePhiIrregBox = new G4RotationMatrix();
01194     rotatePhiIrregBox->rotateX(rotAngle.x());
01195     rotatePhiIrregBox->rotateY(rotAngle.y());
01196     rotatePhiIrregBox->rotateZ(rotAngle.z());
01197     //-*******************************************************************
01198 
01199     solidEndCasing = new G4IrregBox(strEndCasing.str(),(*emcEnd).zoomPoint);
01200 
01201     ostringstream strVEndCasing;
01202     strVEndCasing << "logicalEndCasing_2_"  << i;
01203     logicEndCasing = new G4LogicalVolume(solidEndCasing,fCasingMaterial,strVEndCasing.str());
01204 
01205     ostringstream strPEndCasing;
01206     strPEndCasing << "physicalEndCasing_2_"  << i;
01207     physiEndCasing = new G4PVPlacement(rotatePhiIrregBox,center,
01208         logicEndCasing,strPEndCasing.str(),logicEndPhi,false,i);  //change with rot and pos now!
01209 
01210     ostringstream strEndCrystal;
01211     strEndCrystal << "solidEndCrystal_2_"  << i;
01212 
01213     emcEnd->ModifyForCasing((*emcEnd).zoomPoint,i);
01214     solidEndCrystal = new G4IrregBox(strEndCrystal.str(),(*emcEnd).cryPoint);
01215 
01216     ostringstream strVEndCrystal;
01217     strVEndCrystal << "logicalEndCrystal_2_"  << i;
01218     logicEndCrystal = new G4LogicalVolume(solidEndCrystal,fCrystalMaterial,strVEndCrystal.str());
01219 
01220     ostringstream strPEndCrystal;
01221     strPEndCrystal << "physicalEndCrystal_2_"  << i;
01222     physiEndCrystal = new G4PVPlacement(0,0,logicEndCrystal,strPEndCrystal.str(),logicEndCasing,false,i);
01223 
01224     logicEndCasing->SetVisAttributes(G4VisAttributes::Invisible);
01225     logicEndCrystal->SetVisAttributes(crystalVisAtt);
01226     logicEndCrystal->SetSensitiveDetector(besEMCSD);
01227   }
01228 }

void BesEmcConstruction::ConstructSPFrame ( G4LogicalVolume *  ,
BesEmcGeometry  
)

Definition at line 1256 of file BesEmcConstruction.cc.

References genRecEmupikp::i, ganga-rec::j, logicEndRing, logicGear, logicSupportBar, logicSupportBar1, logicTaperRing1, logicTaperRing2, logicTaperRing3, physiEndRing, physiGear, physiSupportBar, physiSupportBar1, physiTaperRing1, physiTaperRing2, physiTaperRing3, solidEndRing, solidGear, solidSupportBar, solidSupportBar1, solidTaperRing1, solidTaperRing2, solidTaperRing3, and stainlessSteel.

01257 {
01258   G4double rmax=(*besEMCGeometry).BSCRmax+2.*mm;  //radius from 942mm to 940mm
01259   solidSupportBar = new G4Tubs("solidSupportBar0",
01260       rmax+(*besEMCGeometry).SPBarThickness1,
01261       rmax+(*besEMCGeometry).SPBarThickness+(*besEMCGeometry).SPBarThickness1,
01262       (*besEMCGeometry).BSCDz
01263       +(*besEMCGeometry).TaperRingThickness3+(*besEMCGeometry).EndRingDz,
01264       0.*deg,
01265       360.*deg);
01266 
01267   logicSupportBar = new G4LogicalVolume(solidSupportBar,stainlessSteel,"logicalSupportBar0");
01268 
01269   physiSupportBar = new G4PVPlacement(0,0,logicSupportBar,"physicalSupportBar0",logicEMC,false,0);
01270 
01271   solidSupportBar1 = new G4Tubs("solidSupportBar1",
01272       rmax,
01273       rmax+(*besEMCGeometry).SPBarThickness1,
01274       (*besEMCGeometry).BSCDz+(*besEMCGeometry).TaperRingThickness3,
01275       (*besEMCGeometry).BSCPhiDphi-(*besEMCGeometry).SPBarDphi/2,
01276       (*besEMCGeometry).SPBarDphi);
01277 
01278   logicSupportBar1 = new G4LogicalVolume(solidSupportBar1,stainlessSteel,"logicalSupportBar1");
01279 
01280   for(G4int i=0;i<(*besEMCGeometry).BSCNbPhi/2;i++)
01281   {
01282     G4RotationMatrix *rotateSPBar = new G4RotationMatrix();
01283     rotateSPBar->rotateZ((*besEMCGeometry).BSCPhiDphi-i*2*(*besEMCGeometry).BSCPhiDphi);
01284     ostringstream strSupportBar1;
01285     strSupportBar1 << "physicalSupportBar1_"  << i;
01286     physiSupportBar1 = new G4PVPlacement(rotateSPBar,0,
01287         logicSupportBar1,strSupportBar1.str(),logicEMC,false,0);
01288   }
01289 
01290   //end ring
01291   solidEndRing = new G4Tubs("solidEndRing",
01292       (*besEMCGeometry).EndRingRmin,
01293       (*besEMCGeometry).EndRingRmin+(*besEMCGeometry).EndRingDr/2,
01294       (*besEMCGeometry).EndRingDz/2,
01295       0.*deg,
01296       360.*deg);
01297 
01298   solidGear = new G4Tubs("solidGear",
01299       (*besEMCGeometry).EndRingRmin+(*besEMCGeometry).EndRingDr/2,
01300       (*besEMCGeometry).EndRingRmin+(*besEMCGeometry).EndRingDr,
01301       (*besEMCGeometry).EndRingDz/2,
01302       0.*deg,
01303       (*besEMCGeometry).BSCPhiDphi);
01304 
01305   //taper ring
01306   solidTaperRing1 = new G4Tubs("solidTaperRing1",
01307       (*besEMCGeometry).TaperRingRmin1,
01308       (*besEMCGeometry).TaperRingRmin1+(*besEMCGeometry).TaperRingThickness1,
01309       (*besEMCGeometry).TaperRingInnerLength/2,
01310       0.*deg,
01311       360.*deg);
01312 
01313   solidTaperRing2 = new G4Cons("solidTaperRing2",
01314       (*besEMCGeometry).TaperRingRmin1,
01315       (*besEMCGeometry).TaperRingRmin1+(*besEMCGeometry).TaperRingDr,
01316       (*besEMCGeometry).TaperRingRmin2,
01317       (*besEMCGeometry).TaperRingRmin2+(*besEMCGeometry).TaperRingDr,
01318       (*besEMCGeometry).TaperRingDz/2,
01319       0.*deg,
01320       360.*deg);
01321 
01322   solidTaperRing3 = new G4Cons("solidTaperRing3",
01323       (*besEMCGeometry).BSCRmax2,
01324       (*besEMCGeometry).BSCRmax2+(*besEMCGeometry).TaperRingOuterLength1,
01325       (*besEMCGeometry).TaperRingRmin2+(*besEMCGeometry).TaperRingDr,
01326       (*besEMCGeometry).TaperRingRmin2+(*besEMCGeometry).TaperRingDr+(*besEMCGeometry).TaperRingOuterLength,
01327       (*besEMCGeometry).TaperRingThickness3/2,
01328       0.*deg,
01329       360.*deg);
01330 
01331   logicEndRing = new G4LogicalVolume(solidEndRing,stainlessSteel,"logicalEndRing");
01332   logicGear = new G4LogicalVolume(solidGear,stainlessSteel,"logicalGear");
01333   logicTaperRing1 = new G4LogicalVolume(solidTaperRing1,stainlessSteel,"logicalTaperRing1");
01334   logicTaperRing2 = new G4LogicalVolume(solidTaperRing2,stainlessSteel,"logicalTaperRing2");
01335   logicTaperRing3 = new G4LogicalVolume(solidTaperRing3,stainlessSteel,"logicalTaperRing3");
01336 
01337   for(G4int i=0;i<2;i++)
01338   {
01339     G4RotationMatrix *rotateSPRing = new G4RotationMatrix();
01340     G4double zEndRing,z1,z2,z3;
01341     if(i==0)
01342     {
01343       zEndRing = (*besEMCGeometry).BSCDz+(*besEMCGeometry).TaperRingThickness3+(*besEMCGeometry).EndRingDz/2;
01344       z1 = (*besEMCGeometry).BSCDz+(*besEMCGeometry).TaperRingThickness3
01345         -(*besEMCGeometry).TaperRingDz-(*besEMCGeometry).TaperRingInnerLength/2;
01346       z2 = (*besEMCGeometry).BSCDz+(*besEMCGeometry).TaperRingThickness3-(*besEMCGeometry).TaperRingDz/2;
01347       z3 = (*besEMCGeometry).BSCDz+(*besEMCGeometry).TaperRingThickness3/2;
01348     }
01349     else
01350     {
01351       rotateSPRing->rotateY(180.*deg);
01352       zEndRing = -((*besEMCGeometry).BSCDz+(*besEMCGeometry).TaperRingThickness3+(*besEMCGeometry).EndRingDz/2);
01353       z1 = -((*besEMCGeometry).BSCDz+(*besEMCGeometry).TaperRingThickness3
01354           -(*besEMCGeometry).TaperRingDz-(*besEMCGeometry).TaperRingInnerLength/2);
01355       z2 = -((*besEMCGeometry).BSCDz+(*besEMCGeometry).TaperRingThickness3-(*besEMCGeometry).TaperRingDz/2);
01356       z3 = -((*besEMCGeometry).BSCDz+(*besEMCGeometry).TaperRingThickness3/2);
01357     }
01358 
01359     ostringstream strEndRing;
01360     strEndRing << "physicalEndRing_"  << i;
01361     physiEndRing = new G4PVPlacement(rotateSPRing,G4ThreeVector(0,0,zEndRing),
01362         logicEndRing,strEndRing.str(),logicEMC,false,0);
01363 
01364     for(G4int j=0;j<(*besEMCGeometry).BSCNbPhi/2;j++)
01365     {
01366       G4RotationMatrix *rotateGear = new G4RotationMatrix();
01367       rotateGear->rotateZ((*besEMCGeometry).BSCPhiDphi/2-j*2*(*besEMCGeometry).BSCPhiDphi);
01368 
01369       ostringstream strGear;
01370       strGear << "physicalGear_"  << i << "_" <<j;
01371       physiGear = new G4PVPlacement(rotateGear,G4ThreeVector(0,0,zEndRing),
01372           logicGear,strGear.str(),logicEMC,false,0);
01373     }
01374 
01375     ostringstream strTaperRing1;
01376     strTaperRing1 << "physicalTaperRing1_"  << i;
01377     physiTaperRing1 = new G4PVPlacement(rotateSPRing,G4ThreeVector(0,0,z1),
01378         logicTaperRing1,strTaperRing1.str(),logicEMC,false,0);
01379 
01380     ostringstream strTaperRing2;
01381     strTaperRing2 << "physicalTaperRing2_"  << i;
01382     physiTaperRing2 = new G4PVPlacement(rotateSPRing,G4ThreeVector(0,0,z2),
01383         logicTaperRing2,strTaperRing2.str(),logicEMC,false,0);
01384 
01385     ostringstream strTaperRing3;
01386     strTaperRing3 << "physicalTaperRing3_"  << i;
01387     physiTaperRing3 = new G4PVPlacement(rotateSPRing,G4ThreeVector(0,0,z3),
01388         logicTaperRing3,strTaperRing3.str(),logicEMC,false,0);
01389   }
01390 }

void BesEmcConstruction::DefineMaterials (  )  [private]

Definition at line 1582 of file BesEmcConstruction.cc.

References EvtCyclic3::C, cable, fCasingMaterial, fCrystalMaterial, H, organicGlass, rearCasingMaterial, stainlessSteel, and waterPipe.

Referenced by Construct().

01583 {
01584   G4String name, symbol;             //a=mass of a mole;
01585   G4double a, z, density;            //z=mean number of protons;  
01586   //  G4int iz, n;                       //iz=number of protons  in an isotope;
01587   // n=number of nucleons in an isotope;
01588 
01589   G4int ncomponents, natoms;
01590   G4double fractionmass;
01591   //G4double abundance, fractionmass;
01592   //  G4double temperature, pressure;
01593 
01594   //for debug
01595   //  G4Exception("BesEmcConstruction::DefineMaterials() starting...........");
01596   //
01597   // define Elements
01598   //
01599   G4Element* H=G4Element::GetElement("Hydrogen");
01600   if(!H)
01601   {
01602     a = 1.01*g/mole;
01603     H = new G4Element(name="Hydrogen",symbol="H" , z= 1., a);
01604   }
01605   G4Element* C=G4Element::GetElement("Carbon");
01606   if(!C)
01607   {
01608     a = 12.01*g/mole;
01609     C = new G4Element(name="Carbon"  ,symbol="C" , z= 6., a);
01610   }
01611   G4Element* O=G4Element::GetElement("Oxygen");
01612   if(!O)
01613   {
01614     a = 16.00*g/mole;
01615     O = new G4Element(name="Oxygen"  ,symbol="O" , z= 8., a);  
01616   }
01617 
01618   density = 0.344*g/cm3;
01619   G4Material* Tyvek = new G4Material(name="M_Polyethylene", density, ncomponents=2);
01620   Tyvek->AddElement(C, natoms=1);
01621   Tyvek->AddElement(H, natoms=2);
01622 
01623   density = 1.39*g/cm3;
01624   G4Material* Mylar = new G4Material(name="M_PolyethyleneTerephthlate", density, ncomponents=3);
01625   Mylar->AddElement(C, natoms=5);
01626   Mylar->AddElement(H, natoms=4);
01627   Mylar->AddElement(O, natoms=2);
01628 
01629   density = 1.18*g/cm3;
01630   organicGlass = new G4Material(name="M_OrganicGlass", density, ncomponents=3);
01631   organicGlass->AddElement(C, natoms=5);
01632   organicGlass->AddElement(H, natoms=7);
01633   organicGlass->AddElement(O, natoms=2);
01634 
01635   G4Material *Fe = new G4Material(name="M_Iron", z=26., a=55.85*g/mole, density=7.87*g/cm3);
01636   G4Material *Cr = new G4Material(name="M_Chromium", z=24., a=52.00*g/mole, density=8.72*g/cm3);
01637   G4Material *Ni = new G4Material(name="M_Nickel", z=28., a=58.69*g/mole, density=8.72*g/cm3);
01638 
01639   stainlessSteel = new G4Material(name="M_Cr18Ni9", density=7.85*g/cm3, ncomponents=3);
01640   stainlessSteel->AddMaterial(Fe, fractionmass=73.*perCent);
01641   stainlessSteel->AddMaterial(Cr, fractionmass=18.*perCent);
01642   stainlessSteel->AddMaterial(Ni, fractionmass=9.*perCent);
01643 
01644   G4Material *H2O = G4Material::GetMaterial("Water");
01645   G4Material *Cu = G4Material::GetMaterial("Copper");
01646   G4double dWater = 1.*g/cm3; //density
01647   G4double dCopper = 8.96*g/cm3;
01648   G4double aWater = ((*besEMCGeometry).waterPipeDr-(*besEMCGeometry).waterPipeThickness)
01649     *((*besEMCGeometry).waterPipeDr-(*besEMCGeometry).waterPipeThickness);    //area
01650   G4double aCopper = (*besEMCGeometry).waterPipeDr*(*besEMCGeometry).waterPipeDr-aWater;
01651   density = (dWater*aWater+dCopper*aCopper)/(aWater+aCopper);
01652 
01653   waterPipe = new G4Material(name="M_WaterPipe", density, ncomponents=2);
01654   fractionmass = dWater*aWater/(dWater*aWater+dCopper*aCopper);
01655   waterPipe->AddMaterial(H2O, fractionmass);
01656   fractionmass = dCopper*aCopper/(dWater*aWater+dCopper*aCopper);
01657   waterPipe->AddMaterial(Cu, fractionmass);
01658 
01659   cable  = new G4Material(name="M_Cable", density=4.*g/cm3, ncomponents=1);
01660   cable->AddMaterial(Cu,1);
01661 
01662   //for debug
01663   //G4Exception("BesEmcConstruction::DefineMaterials() running one.........");
01664   //
01665   // predigest the casing of crystals to a mixture
01666   //
01667 
01668   G4Material* Al=G4Material::GetMaterial("Aluminium");
01669   if(Al==NULL)
01670   {
01671     Al = new G4Material(name="Aluminium", z=13., a=26.98*g/mole, density=2.700*g/cm3);
01672   }
01673 
01674   G4Material *Si=G4Material::GetMaterial("M_Silicon");
01675   if(Si==NULL)
01676   {
01677     Si = new G4Material(name="M_Silicon", z=14., a=28.0855*g/mole, density=2.33*g/cm3);
01678   }
01679 
01680 
01681   //for debug
01682   G4double totalThickness=(*besEMCGeometry).fTyvekThickness
01683     +(*besEMCGeometry).fAlThickness+(*besEMCGeometry).fMylarThickness;
01684   density = (Tyvek->GetDensity()*(*besEMCGeometry).fTyvekThickness+
01685       Al->GetDensity()*(*besEMCGeometry).fAlThickness+
01686       Mylar->GetDensity()*(*besEMCGeometry).fMylarThickness)
01687     /totalThickness;
01688   G4Material* Casing = new G4Material(name="M_Casing", density, ncomponents=3);
01689   Casing->AddMaterial(
01690       Tyvek,
01691       fractionmass=Tyvek->GetDensity()/density
01692       *(*besEMCGeometry).fTyvekThickness
01693       /totalThickness);
01694   Casing->AddMaterial(
01695       Al,
01696       fractionmass=Al->GetDensity()/density
01697       *(*besEMCGeometry).fAlThickness
01698       /totalThickness);
01699   Casing->AddMaterial(
01700       Mylar,
01701       fractionmass=Mylar->GetDensity()/density
01702       *(*besEMCGeometry).fMylarThickness
01703       /totalThickness);
01704   fCasingMaterial = Casing;
01705   rearCasingMaterial = Tyvek;
01706   //for debug
01707   //  G4Exception("BesEmcConstruction::DefineMaterials() running two........");
01708   fCrystalMaterial = G4Material::GetMaterial("Cesiumiodide");
01709 
01710 }

G4LogicalVolume * BesSubdetector::FindLogicalVolume ( const G4String &  vn  )  [inline, inherited]

Definition at line 38 of file BesSubdetector.hh.

Referenced by BesTofConstruction::Construct(), BesMucConstruction::Construct(), and GetLogicalVolume().

00038                                                                        {
00039   return const_cast<G4LogicalVolume*>( GDMLProcessor::GetInstance()->GetLogicalVolume(vn) );
00040 }

BesEmcConstruction * BesEmcConstruction::GetBesEmcConstruction (  )  [static]

Definition at line 54 of file BesEmcConstruction.cc.

References fBesEmcConstruction.

Referenced by BesCrystalParameterisation::ComputeIDAndSide(), and BesCrystalParameterisation::ComputeMaterial().

00055 { return fBesEmcConstruction;}

const G4VPhysicalVolume* BesEmcConstruction::GetBSCCrystal (  )  [inline]

Definition at line 113 of file BesEmcConstruction.hh.

References physiBSCCrystal.

00113 {return physiBSCCrystal;};

const G4VPhysicalVolume* BesEmcConstruction::GetBSCPhi (  )  [inline]

Definition at line 111 of file BesEmcConstruction.hh.

References physiBSCPhi.

00111 {return physiBSCPhi;};

const G4VPhysicalVolume* BesEmcConstruction::GetBSCTheta (  )  [inline]

Definition at line 112 of file BesEmcConstruction.hh.

References physiBSCTheta.

00112 {return physiBSCTheta;};

G4Material* BesEmcConstruction::GetCasingMaterial (  )  [inline]

Definition at line 107 of file BesEmcConstruction.hh.

References fCasingMaterial.

Referenced by BesCrystalParameterisation::ComputeMaterial(), and BesEmcDetectorMessenger::GetCurrentValue().

00107 {return fCasingMaterial;};

G4Material* BesEmcConstruction::GetCrystalMaterial (  )  [inline]

Definition at line 106 of file BesEmcConstruction.hh.

References fCrystalMaterial.

Referenced by BesCrystalParameterisation::ComputeMaterial(), and BesEmcDetectorMessenger::GetCurrentValue().

00106 {return fCrystalMaterial;};     

const G4VPVParameterisation* BesEmcConstruction::GetCrystalParam (  )  [inline]

Definition at line 114 of file BesEmcConstruction.hh.

00114 {return crystalParam;};

const G4VPhysicalVolume* BesEmcConstruction::GetEMC (  )  [inline]

Definition at line 110 of file BesEmcConstruction.hh.

References physiEMC.

00110 {return physiEMC; }

void BesEmcConstruction::GetLogicalVolume (  ) 

Definition at line 1466 of file BesEmcConstruction.cc.

References besEMCSD, BesSubdetector::FindLogicalVolume(), genRecEmupikp::i, logicAirInPABox, logicAlPlate, logicBSCCrystal, logicBSCPhi, logicBSCTheta, logicBSCWorld, logicCable, logicEnd, logicEndCasing, logicEndCrystal, logicEndPhi, logicEndRing, logicGear, logicHangingPlate, logicOCGirder, logicOrgGlass, logicPD, logicPreAmpBox, logicRear, logicRearCasing, logicSupportBar, logicSupportBar1, logicTaperRing1, logicTaperRing2, logicTaperRing3, and logicWaterPipe.

Referenced by Construct().

01467 {
01468   //-------------------------------------------------------------
01469   //Barrel
01470   logicBSCWorld = FindLogicalVolume("logicalBSCWorld"); 
01471   logicBSCCrystal = FindLogicalVolume("logicalCrystal");
01472   logicBSCPhi = FindLogicalVolume("logicalBSCPhi");
01473   logicRear = FindLogicalVolume("logicalRearBox");
01474   logicOrgGlass = FindLogicalVolume("logicalOrganicGlass");
01475   logicRearCasing = FindLogicalVolume("logicalRearCasing");
01476   logicAlPlate = FindLogicalVolume("logicalAlPlate");
01477   logicPD = FindLogicalVolume("logicalPD");
01478   logicPreAmpBox = FindLogicalVolume("logicalPreAmpBox");
01479   logicAirInPABox = FindLogicalVolume("logicalAirInPABox");
01480   logicHangingPlate = FindLogicalVolume("logicalHangingPlate");
01481   logicWaterPipe = FindLogicalVolume("logicalWaterPipe");
01482 
01483   for(int i = 0; i < 44; i++){
01484     std::ostringstream osnameBSCCasing;
01485     osnameBSCCasing << "logicalBSCCasing"<<i;
01486     logicBSCTheta = FindLogicalVolume( osnameBSCCasing.str() );
01487     if(logicBSCTheta)
01488     {
01489       G4VisAttributes* rightVisAtt= new G4VisAttributes(G4Colour(1.0, 0.0,0.0));
01490       rightVisAtt->SetVisibility(false);
01491       logicBSCTheta->SetVisAttributes(rightVisAtt);
01492     }
01493 
01494     std::ostringstream osnameBSCCable1;
01495     osnameBSCCable1 << "logicalBSCCable_1_"<<i;
01496     logicCable = FindLogicalVolume( osnameBSCCable1.str() );
01497     if(logicCable)
01498       logicCable->SetVisAttributes(G4VisAttributes::Invisible);
01499 
01500     std::ostringstream osnameBSCCable2;
01501     osnameBSCCable2 << "logicalBSCCable_2_"<<i;
01502     logicCable = FindLogicalVolume( osnameBSCCable2.str() );
01503     if(logicCable)
01504       logicCable->SetVisAttributes(G4VisAttributes::Invisible);
01505 
01506     std::ostringstream osnameOCGirder1;
01507     osnameOCGirder1 <<"logicalOpenningCutGirder_1_"<<i;
01508     logicOCGirder = FindLogicalVolume( osnameOCGirder1.str() );
01509     if(logicOCGirder)
01510       logicOCGirder->SetVisAttributes(G4VisAttributes::Invisible);
01511 
01512     std::ostringstream osnameOCGirder2;
01513     osnameOCGirder2 <<"logicalOpenningCutGirder_2_"<<i;
01514     logicOCGirder = FindLogicalVolume( osnameOCGirder2.str() );
01515     if(logicOCGirder)
01516       logicOCGirder->SetVisAttributes(G4VisAttributes::Invisible);
01517 
01518     std::ostringstream osnameOCGirder3;
01519     osnameOCGirder3 <<"logicalOpenningCutGirder_3_"<<i;
01520     logicOCGirder = FindLogicalVolume( osnameOCGirder3.str() );
01521     if(logicOCGirder)
01522       logicOCGirder->SetVisAttributes(G4VisAttributes::Invisible);
01523 
01524     std::ostringstream osnameOCGirder4;
01525     osnameOCGirder4 <<"logicalOpenningCutGirder_4_"<<i;
01526     logicOCGirder = FindLogicalVolume( osnameOCGirder4.str() );
01527     if(logicOCGirder)
01528       logicOCGirder->SetVisAttributes(G4VisAttributes::Invisible);
01529   }
01530 
01531   //-------------------------------------------------------------
01532   //Support system
01533   logicSupportBar = FindLogicalVolume("logicalSupportBar0");
01534   logicSupportBar1 = FindLogicalVolume("logicalSupportBar1");
01535   logicEndRing = FindLogicalVolume("logicalEndRing");
01536   logicGear = FindLogicalVolume("logicalGear");
01537   logicTaperRing1 = FindLogicalVolume("logicalTaperRing1");
01538   logicTaperRing2 = FindLogicalVolume("logicalTaperRing2");
01539   logicTaperRing3 = FindLogicalVolume("logicalTaperRing3");
01540 
01541   //-------------------------------------------------------------
01542   //Endcap
01543   logicEnd = FindLogicalVolume("logicalEndWorld");
01544 
01545   for(G4int sector=0;sector<3;sector++) {
01546     std::ostringstream osnameEndPhi;
01547     osnameEndPhi<<"logicalEndPhi"<<sector;
01548     logicEndPhi = FindLogicalVolume(osnameEndPhi.str());
01549     if(logicEndPhi) {
01550       logicEndPhi->SetVisAttributes(G4VisAttributes::Invisible);
01551     } else {
01552       G4cout<<"Can't find logicEndPhi!"<<G4endl;
01553     }
01554 
01555     for(G4int cryNb=0;cryNb<35;cryNb++) {
01556 
01557       std::ostringstream osnameEndCrystal;
01558       osnameEndCrystal<<"logicalEndCrystal_"<<sector<<"_"<<cryNb;
01559       logicEndCrystal = FindLogicalVolume( osnameEndCrystal.str() );
01560       if(logicEndCrystal) {
01561         logicEndCrystal->SetSensitiveDetector(besEMCSD);
01562         G4VisAttributes* crystalVisAtt
01563           = new G4VisAttributes(G4Colour(0.5,0,1.0));
01564         crystalVisAtt->SetVisibility(false);
01565         logicEndCrystal->SetVisAttributes(crystalVisAtt);
01566       } else {
01567         G4cout<<"Can't find: "<<osnameEndCrystal.str()<<G4endl;
01568       }
01569 
01570       std::ostringstream osnameEndCasing;
01571       osnameEndCasing<<"logicalEndCasing_"<<sector<<"_"<<cryNb;
01572       logicEndCasing = FindLogicalVolume( osnameEndCasing.str() );
01573       if(logicEndCasing) {
01574         logicEndCasing->SetVisAttributes(G4VisAttributes::Invisible);
01575       } else {
01576         G4cout<<"Can't find: "<<osnameEndCasing.str()<<G4endl;
01577       }
01578     }
01579   }
01580 }

G4double BesEmcConstruction::GetMagField (  )  [inline]

Definition at line 102 of file BesEmcConstruction.hh.

References fmagField.

Referenced by BesEmcDetectorMessenger::BesEmcDetectorMessenger().

00102 {return fmagField;};

G4int BesEmcConstruction::GetStartIDTheta (  )  [inline]

Definition at line 104 of file BesEmcConstruction.hh.

References startID.

00104 {return startID;};

G4int BesEmcConstruction::GetVerboseLevel (  )  [inline]

Definition at line 101 of file BesEmcConstruction.hh.

References verboseLevel.

Referenced by BesCrystalParameterisation::ComputeIDAndSide(), and BesEmcDetectorMessenger::GetCurrentValue().

00101 {return verboseLevel;};

void BesEmcConstruction::PrintEMCParameters (  ) 

Definition at line 1713 of file BesEmcConstruction.cc.

References fCrystalMaterial, phiNbCrystals, and thetaNbCrystals.

Referenced by SetCasingMaterial(), and SetCrystalMaterial().

01714 {
01715   G4cout << "-------------------------------------------------------"<< G4endl
01716     << "---> There are "
01717     << phiNbCrystals << "(max=" << (*besEMCGeometry).BSCNbPhi
01718     << ") crystals along phi direction and "
01719     << thetaNbCrystals << "(max=" << (*besEMCGeometry).BSCNbTheta
01720     << ") crystals along theta direction."<< G4endl
01721     << "The crystals have sizes of "
01722     << (*besEMCGeometry).BSCCryLength/cm << "cm(L) and "
01723     << (*besEMCGeometry).BSCYFront/cm << "cm(Y) with " 
01724     << fCrystalMaterial->GetName() <<"."<< G4endl
01725     << "The casing is layer of "
01726     << (*besEMCGeometry).fTyvekThickness/mm << "mm tyvek,"
01727     << (*besEMCGeometry).fAlThickness/mm << "mm aluminum and"
01728     << (*besEMCGeometry).fMylarThickness/mm << "mm mylar."<< G4endl
01729     << "-------------------------------------------------------"<< G4endl;
01730   G4cout << G4Material::GetMaterial("PolyethyleneTerephthlate") << G4endl
01731     << G4Material::GetMaterial("Casing") << G4endl
01732     << G4Material::GetMaterial("Polyethylene") << G4endl
01733     << "-------------------------------------------------------"<< G4endl;
01734 }

Hep3Vector BesEmcConstruction::RotAngleFromNewZ ( Hep3Vector  newZ  ) 

Definition at line 1908 of file BesEmcConstruction.cc.

References cos(), sin(), and v.

Referenced by TransformToArb8().

01909 {
01910   newZ.setMag(1.0);
01911   Hep3Vector x0(1, 0, 0), y0(0, 1, 0), z0(0, 0, 1);
01912   double dx, dy, dz = 0.0; 
01913 
01914   Hep3Vector a(0.0, newZ.y(), newZ.z());
01915   // three rotated angles, rotate dx angles(rad) by X axis,
01916   // then rotate dy by new Y axis, then dz by new Z axis;
01917   // all rotate in left hand system;
01918 
01919   // a, project of final newZ on original YZ plane, 0 <= theta < pi;
01920   if(a.mag() != 0.0) a.setMag(1.0);
01921   else cout << "newZ on X axis, a=(0,0,0)" << endl;
01922   dx = acos(a.dot(z0));
01923   if(a.dot(z0) == -1.0) dx = 0.0;
01924 
01925   // b, rotate dx angle of z0 around original X axis(x0), 
01926   Hep3Vector b(0, sin(dx), cos(dx));
01927   dy = acos(b.dot(newZ));
01928   if(newZ.x() > 0.0) dy = -dy;
01929 
01930   Hep3Vector v(dx, dy, dz);
01931   return v;
01932 }

void BesEmcConstruction::SetBSCCrystalLength ( G4double   ) 

Definition at line 1801 of file BesEmcConstruction.cc.

Referenced by BesEmcDetectorMessenger::SetNewValue().

01802 {
01803   (*besEMCGeometry).BSCCryLength = val;
01804 }

void BesEmcConstruction::SetBSCNbPhi ( G4int   ) 

Definition at line 1781 of file BesEmcConstruction.cc.

Referenced by BesEmcDetectorMessenger::SetNewValue().

01782 {
01783   (*besEMCGeometry).BSCNbPhi = val;
01784 }

void BesEmcConstruction::SetBSCNbTheta ( G4int   ) 

Definition at line 1788 of file BesEmcConstruction.cc.

Referenced by BesEmcDetectorMessenger::SetNewValue().

01789 {
01790   (*besEMCGeometry).BSCNbTheta = val;
01791 }

void BesEmcConstruction::SetBSCPosition0 ( G4double   ) 

Definition at line 1822 of file BesEmcConstruction.cc.

01823 {
01824   (*besEMCGeometry).BSCPosition0 = val;
01825 }

void BesEmcConstruction::SetBSCPosition1 ( G4double   ) 

Definition at line 1829 of file BesEmcConstruction.cc.

01830 {
01831   (*besEMCGeometry).BSCPosition1 = val;
01832 }

void BesEmcConstruction::SetBSCRmin ( G4double   ) 

Definition at line 1774 of file BesEmcConstruction.cc.

Referenced by BesEmcDetectorMessenger::SetNewValue().

01775 {
01776   (*besEMCGeometry).BSCRmin = val;
01777 }

void BesEmcConstruction::SetBSCYFront ( G4double   ) 

Definition at line 1815 of file BesEmcConstruction.cc.

01816 {
01817   (*besEMCGeometry).BSCYFront = val;
01818 }

void BesEmcConstruction::SetBSCYFront0 ( G4double   ) 

Definition at line 1808 of file BesEmcConstruction.cc.

01809 {
01810   (*besEMCGeometry).BSCYFront0 = val;
01811 }

void BesEmcConstruction::SetCasingMaterial ( G4String   ) 

Definition at line 1751 of file BesEmcConstruction.cc.

References fCasingMaterial, logicBSCTheta, and PrintEMCParameters().

Referenced by BesEmcDetectorMessenger::SetNewValue().

01752 {
01753   // search the material by its name 
01754   G4Material* pttoMaterial = G4Material::GetMaterial(materialChoice);  
01755   if (pttoMaterial)
01756   {fCasingMaterial = pttoMaterial;
01757     logicBSCTheta->SetMaterial(pttoMaterial);
01758     PrintEMCParameters();
01759   }             
01760 }

void BesEmcConstruction::SetCasingThickness ( G4ThreeVector   ) 

Definition at line 1764 of file BesEmcConstruction.cc.

Referenced by BesEmcDetectorMessenger::SetNewValue().

01765 {
01766   // change Gap thickness and recompute the calorimeter parameters
01767   (*besEMCGeometry).fTyvekThickness = val('X');
01768   (*besEMCGeometry).fAlThickness    = val('Y');
01769   (*besEMCGeometry).fMylarThickness = val('Z');
01770 }  

void BesEmcConstruction::SetCrystalMaterial ( G4String   ) 

Definition at line 1738 of file BesEmcConstruction.cc.

References fCrystalMaterial, logicBSCCrystal, and PrintEMCParameters().

Referenced by BesEmcDetectorMessenger::SetNewValue().

01739 {
01740   // search the material by its name   
01741   G4Material* pttoMaterial = G4Material::GetMaterial(materialChoice);     
01742   if (pttoMaterial)
01743   {fCrystalMaterial = pttoMaterial;
01744     logicBSCCrystal->SetMaterial(pttoMaterial); 
01745     PrintEMCParameters();
01746   }             
01747 }

void BesEmcConstruction::SetMagField ( G4double   ) 

Definition at line 1837 of file BesEmcConstruction.cc.

References fmagField, and magField.

Referenced by BesEmcDetectorMessenger::SetNewValue().

01838 {
01839   //apply a global uniform magnetic field along Z axis
01840   G4FieldManager* fieldMgr 
01841     = G4TransportationManager::GetTransportationManager()->GetFieldManager();
01842 
01843   if(magField) delete magField;         //delete the existing magn field
01844 
01845   if(fieldValue!=0.)                    // create a new one if non nul
01846   { magField = new G4UniformMagField(G4ThreeVector(0.,0.,fieldValue));        
01847     fieldMgr->SetDetectorField(magField);
01848     fieldMgr->CreateChordFinder(magField);
01849     fmagField=fieldValue;
01850   } else {
01851     magField = 0;
01852     fieldMgr->SetDetectorField(magField);
01853     fmagField=0.;
01854   }
01855 }

void BesEmcConstruction::SetStartIDTheta ( G4int   ) 

Definition at line 1793 of file BesEmcConstruction.cc.

References startID.

Referenced by BesEmcDetectorMessenger::SetNewValue().

01794 {
01795   startID = val;
01796 }

void BesEmcConstruction::SetVerboseLevel ( G4int  val  )  [inline]

Definition at line 69 of file BesEmcConstruction.hh.

References verboseLevel.

Referenced by BesEmcDetectorMessenger::SetNewValue().

00069 { verboseLevel=val;}

void BesEmcConstruction::SetVisAndSD (  ) 

Definition at line 1393 of file BesEmcConstruction.cc.

References besEMCSD, logicAirInPABox, logicAlPlate, logicBSCCrystal, logicBSCPhi, logicBSCWorld, logicEMC, logicEnd, logicEndRing, logicGear, logicHangingPlate, logicOrgGlass, logicPD, logicPreAmpBox, logicRear, logicRearCasing, logicSupportBar, logicSupportBar1, logicTaperRing1, logicTaperRing2, logicTaperRing3, and logicWaterPipe.

Referenced by Construct().

01394 {
01395   //-------------------------------------------------------------
01396   //Barrel
01397   G4VisAttributes* bscVisAtt= new G4VisAttributes(G4Colour(0.5,0.5,0.5));
01398   bscVisAtt->SetVisibility(false);
01399   logicEMC->SetVisAttributes(bscVisAtt);
01400   if(logicBSCWorld)
01401     logicBSCWorld->SetVisAttributes(G4VisAttributes::Invisible);
01402 
01403   if (logicBSCCrystal) {
01404     //G4cout<<"find BSCCrystal "<<G4endl;
01405     G4VisAttributes* crystalVisAtt= new G4VisAttributes(G4Colour(0,0,1.0));
01406     crystalVisAtt->SetVisibility(true);
01407     logicBSCCrystal->SetVisAttributes(crystalVisAtt);
01408     logicBSCCrystal->SetSensitiveDetector(besEMCSD);
01409   }
01410 
01411   if(logicBSCPhi) {
01412     G4VisAttributes* rightVisAtt= new G4VisAttributes(G4Colour(1.0,0.,1.0));
01413     rightVisAtt->SetVisibility(false);
01414     logicBSCPhi->SetVisAttributes(rightVisAtt);
01415   }
01416 
01417   if(logicRear)
01418     logicRear->SetVisAttributes(G4VisAttributes::Invisible);
01419   if(logicOrgGlass)
01420     logicOrgGlass->SetVisAttributes(G4VisAttributes::Invisible);
01421   if(logicRearCasing)
01422     logicRearCasing->SetVisAttributes(G4VisAttributes::Invisible);
01423   if(logicAlPlate) 
01424     logicAlPlate->SetVisAttributes(G4VisAttributes::Invisible);
01425   if(logicPD) {
01426     logicPD->SetVisAttributes(G4VisAttributes::Invisible);
01427     logicPD->SetSensitiveDetector(besEMCSD);
01428   }
01429   if(logicPreAmpBox)
01430     logicPreAmpBox->SetVisAttributes(G4VisAttributes::Invisible);
01431   if(logicAirInPABox)
01432     logicAirInPABox->SetVisAttributes(G4VisAttributes::Invisible);
01433   if(logicHangingPlate)
01434     logicHangingPlate->SetVisAttributes(G4VisAttributes::Invisible);
01435   if(logicWaterPipe)
01436     logicWaterPipe->SetVisAttributes(G4VisAttributes::Invisible);
01437 
01438   //-------------------------------------------------------------
01439   //Support system
01440   G4VisAttributes* ringVisAtt= new G4VisAttributes(G4Colour(0.5,0.25,0.));
01441   ringVisAtt->SetVisibility(false);
01442   if(logicSupportBar)
01443     logicSupportBar->SetVisAttributes(ringVisAtt);
01444   if(logicSupportBar1)
01445     logicSupportBar1->SetVisAttributes(ringVisAtt);
01446   if(logicEndRing)
01447     logicEndRing->SetVisAttributes(ringVisAtt);
01448   if(logicGear)
01449     logicGear->SetVisAttributes(ringVisAtt);
01450   if(logicTaperRing1)
01451     logicTaperRing1->SetVisAttributes(ringVisAtt);
01452   if(logicTaperRing2)
01453     logicTaperRing2->SetVisAttributes(ringVisAtt);
01454   if(logicTaperRing3)
01455     logicTaperRing3->SetVisAttributes(ringVisAtt);
01456 
01457   //-------------------------------------------------------------
01458   //Endcap
01459   G4VisAttributes* endPhiVisAtt= new G4VisAttributes(G4Colour(0,1.0,0));
01460   endPhiVisAtt->SetVisibility(false);
01461   if(logicEnd)
01462     logicEnd->SetVisAttributes(endPhiVisAtt);
01463 }

void BesEmcConstruction::ThreeVectorTrans ( G4ThreeVector  fPnt[8],
double  x[8],
double  y[8],
double  z[8] 
)

Definition at line 1897 of file BesEmcConstruction.cc.

References genRecEmupikp::i, and x.

01898 {
01899   for (int i = 0; i < 8; i++) {
01900     x[i] = fPnt[i].x();
01901     y[i] = fPnt[i].y();
01902     z[i] = fPnt[i].z();
01903   }
01904 }

void BesEmcConstruction::TransformToArb8 ( const G4ThreeVector  fPnt[8],
G4ThreeVector  newfPnt[8],
G4ThreeVector &  center,
G4ThreeVector &  rotAngle 
)

Definition at line 1867 of file BesEmcConstruction.cc.

References genRecEmupikp::i, RotAngleFromNewZ(), and x.

Referenced by ConstructEndGeometry().

01868 {
01869   HepPoint3D point[8];
01870   center = G4ThreeVector(0.0, 0.0, 0.0);
01871   for (int i = 0; i < 8; i++) {
01872     point[i] = HepPoint3D( fPnt[i].x(), fPnt[i].y(), fPnt[i].z() );
01873     center += point[i];
01874   }
01875   center /= 8.0;
01876 
01877   HepPlane3D bottomPlane( point[4], point[5], point[6] );
01878   HepPoint3D centerProject = bottomPlane.point( center );
01879   Hep3Vector newZ = center - centerProject;
01880 
01881   rotAngle = RotAngleFromNewZ( newZ );
01882   G4RotationMatrix *g4Rot = new G4RotationMatrix();
01883   g4Rot->rotateX( rotAngle.x() );
01884   g4Rot->rotateY( rotAngle.y() );
01885 
01886   G4AffineTransform *transform = new G4AffineTransform( g4Rot, center );
01887   transform->Invert();
01888   for (int i = 0; i < 8; i++) {
01889     newfPnt[i] = transform->TransformPoint(fPnt[i]);
01890   }
01891   delete g4Rot;
01892   delete transform;
01893 }

void BesEmcConstruction::UpdateGeometry (  ) 

Definition at line 1859 of file BesEmcConstruction.cc.

Referenced by BesEmcDetectorMessenger::SetNewValue().

01860 {
01861   ;//G4RunManager::GetRunManager()->DefineWorldVolume(BesDetectorConstruction::Construct());
01862 }


Member Data Documentation

BesEmcGeometry* BesEmcConstruction::besEMCGeometry [private]

Definition at line 160 of file BesEmcConstruction.hh.

Referenced by BesEmcConstruction(), Construct(), and ~BesEmcConstruction().

BesEmcSD* BesEmcConstruction::besEMCSD [private]

Definition at line 159 of file BesEmcConstruction.hh.

Referenced by Construct(), ConstructEndGeometry(), GetLogicalVolume(), and SetVisAndSD().

G4Material* BesEmcConstruction::cable [private]

Definition at line 267 of file BesEmcConstruction.hh.

Referenced by Construct(), and DefineMaterials().

G4VPVParameterisation* BesEmcConstruction::crystalParam [private]

Definition at line 162 of file BesEmcConstruction.hh.

Referenced by Construct(), and ~BesEmcConstruction().

G4Material* BesEmcConstruction::defaultMaterial [private]

Definition at line 129 of file BesEmcConstruction.hh.

BesEmcDetectorMessenger* BesEmcConstruction::detectorMessenger [private]

Definition at line 158 of file BesEmcConstruction.hh.

Referenced by Construct(), and ~BesEmcConstruction().

BesEmcEndGeometry* BesEmcConstruction::emcEnd [private]

Definition at line 161 of file BesEmcConstruction.hh.

Referenced by BesEmcConstruction(), Construct(), ConstructEndGeometry(), and ~BesEmcConstruction().

BesEmcConstruction * BesEmcConstruction::fBesEmcConstruction = 0 [static, private]

Definition at line 60 of file BesEmcConstruction.hh.

Referenced by BesEmcConstruction(), and GetBesEmcConstruction().

G4Material* BesEmcConstruction::fCasingMaterial [private]

Definition at line 127 of file BesEmcConstruction.hh.

Referenced by Construct(), ConstructEndGeometry(), DefineMaterials(), GetCasingMaterial(), and SetCasingMaterial().

G4Material* BesEmcConstruction::fCrystalMaterial [private]

Definition at line 121 of file BesEmcConstruction.hh.

Referenced by Construct(), ConstructEndGeometry(), DefineMaterials(), GetCrystalMaterial(), PrintEMCParameters(), and SetCrystalMaterial().

G4double BesEmcConstruction::fmagField [private]

Definition at line 119 of file BesEmcConstruction.hh.

Referenced by GetMagField(), and SetMagField().

G4LogicalVolume* BesEmcConstruction::logicAirInPABox [private]

Definition at line 214 of file BesEmcConstruction.hh.

Referenced by Construct(), GetLogicalVolume(), and SetVisAndSD().

G4LogicalVolume* BesEmcConstruction::logicAlPlate [private]

Definition at line 206 of file BesEmcConstruction.hh.

Referenced by Construct(), GetLogicalVolume(), and SetVisAndSD().

G4LogicalVolume* BesEmcConstruction::logicBSCCrystal [private]

Definition at line 153 of file BesEmcConstruction.hh.

Referenced by Construct(), GetLogicalVolume(), SetCrystalMaterial(), and SetVisAndSD().

G4LogicalVolume* BesEmcConstruction::logicBSCPhi [private]

Definition at line 145 of file BesEmcConstruction.hh.

Referenced by Construct(), GetLogicalVolume(), and SetVisAndSD().

G4LogicalVolume* BesEmcConstruction::logicBSCTheta [private]

Definition at line 149 of file BesEmcConstruction.hh.

Referenced by Construct(), GetLogicalVolume(), and SetCasingMaterial().

G4LogicalVolume* BesEmcConstruction::logicBSCWorld [private]

Definition at line 138 of file BesEmcConstruction.hh.

Referenced by Construct(), GetLogicalVolume(), and SetVisAndSD().

G4LogicalVolume* BesEmcConstruction::logicCable [private]

Definition at line 226 of file BesEmcConstruction.hh.

Referenced by Construct(), and GetLogicalVolume().

G4LogicalVolume* BesEmcConstruction::logicEMC [private]

Definition at line 134 of file BesEmcConstruction.hh.

Referenced by Construct(), and SetVisAndSD().

G4LogicalVolume* BesEmcConstruction::logicEnd [private]

Definition at line 168 of file BesEmcConstruction.hh.

Referenced by ConstructEndGeometry(), GetLogicalVolume(), and SetVisAndSD().

G4LogicalVolume* BesEmcConstruction::logicEndCasing [private]

Definition at line 176 of file BesEmcConstruction.hh.

Referenced by ConstructEndGeometry(), and GetLogicalVolume().

G4LogicalVolume* BesEmcConstruction::logicEndCrystal [private]

Definition at line 180 of file BesEmcConstruction.hh.

Referenced by ConstructEndGeometry(), and GetLogicalVolume().

G4LogicalVolume* BesEmcConstruction::logicEndPhi [private]

Definition at line 172 of file BesEmcConstruction.hh.

Referenced by ConstructEndGeometry(), and GetLogicalVolume().

G4LogicalVolume* BesEmcConstruction::logicEndRing [private]

Definition at line 244 of file BesEmcConstruction.hh.

Referenced by ConstructSPFrame(), GetLogicalVolume(), and SetVisAndSD().

G4LogicalVolume* BesEmcConstruction::logicGear [private]

Definition at line 248 of file BesEmcConstruction.hh.

Referenced by ConstructSPFrame(), GetLogicalVolume(), and SetVisAndSD().

G4LogicalVolume* BesEmcConstruction::logicHangingPlate [private]

Definition at line 218 of file BesEmcConstruction.hh.

Referenced by Construct(), GetLogicalVolume(), and SetVisAndSD().

G4LogicalVolume* BesEmcConstruction::logicOCGirder [private]

Definition at line 222 of file BesEmcConstruction.hh.

Referenced by Construct(), and GetLogicalVolume().

G4LogicalVolume* BesEmcConstruction::logicOrgGlass [private]

Definition at line 197 of file BesEmcConstruction.hh.

Referenced by Construct(), GetLogicalVolume(), and SetVisAndSD().

G4LogicalVolume* BesEmcConstruction::logicPD [private]

Definition at line 201 of file BesEmcConstruction.hh.

Referenced by Construct(), GetLogicalVolume(), and SetVisAndSD().

G4LogicalVolume* BesEmcConstruction::logicPreAmpBox [private]

Definition at line 210 of file BesEmcConstruction.hh.

Referenced by Construct(), GetLogicalVolume(), and SetVisAndSD().

G4LogicalVolume* BesEmcConstruction::logicRear [private]

Definition at line 187 of file BesEmcConstruction.hh.

Referenced by Construct(), GetLogicalVolume(), and SetVisAndSD().

G4LogicalVolume* BesEmcConstruction::logicRearCasing [private]

Definition at line 193 of file BesEmcConstruction.hh.

Referenced by Construct(), GetLogicalVolume(), and SetVisAndSD().

G4LogicalVolume* BesEmcConstruction::logicSupportBar [private]

Definition at line 236 of file BesEmcConstruction.hh.

Referenced by ConstructSPFrame(), GetLogicalVolume(), and SetVisAndSD().

G4LogicalVolume* BesEmcConstruction::logicSupportBar1 [private]

Definition at line 240 of file BesEmcConstruction.hh.

Referenced by ConstructSPFrame(), GetLogicalVolume(), and SetVisAndSD().

G4LogicalVolume* BesEmcConstruction::logicTaperRing1 [private]

Definition at line 252 of file BesEmcConstruction.hh.

Referenced by ConstructSPFrame(), GetLogicalVolume(), and SetVisAndSD().

G4LogicalVolume* BesEmcConstruction::logicTaperRing2 [private]

Definition at line 256 of file BesEmcConstruction.hh.

Referenced by ConstructSPFrame(), GetLogicalVolume(), and SetVisAndSD().

G4LogicalVolume* BesEmcConstruction::logicTaperRing3 [private]

Definition at line 260 of file BesEmcConstruction.hh.

Referenced by ConstructSPFrame(), GetLogicalVolume(), and SetVisAndSD().

G4LogicalVolume* BesEmcConstruction::logicWaterPipe [private]

Definition at line 230 of file BesEmcConstruction.hh.

Referenced by Construct(), GetLogicalVolume(), and SetVisAndSD().

ProcessingConfigurator BesSubdetector::m_config [protected, inherited]

Definition at line 33 of file BesSubdetector.hh.

SAXProcessor BesSubdetector::m_sxp [protected, inherited]

Definition at line 32 of file BesSubdetector.hh.

G4UniformMagField* BesEmcConstruction::magField [private]

Definition at line 156 of file BesEmcConstruction.hh.

Referenced by SetMagField().

G4Material* BesEmcConstruction::organicGlass [private]

Definition at line 265 of file BesEmcConstruction.hh.

Referenced by Construct(), and DefineMaterials().

G4int BesEmcConstruction::phiNbCrystals [private]

Definition at line 123 of file BesEmcConstruction.hh.

Referenced by BesEmcConstruction(), Construct(), and PrintEMCParameters().

G4VPhysicalVolume* BesEmcConstruction::physiAirInPABox [private]

Definition at line 215 of file BesEmcConstruction.hh.

Referenced by Construct().

G4VPhysicalVolume* BesEmcConstruction::physiAlPlate [private]

Definition at line 207 of file BesEmcConstruction.hh.

Referenced by Construct().

G4VPhysicalVolume* BesEmcConstruction::physiBSCCrystal [private]

Definition at line 154 of file BesEmcConstruction.hh.

Referenced by Construct(), and GetBSCCrystal().

G4VPhysicalVolume* BesEmcConstruction::physiBSCPhi [private]

Definition at line 146 of file BesEmcConstruction.hh.

Referenced by Construct(), and GetBSCPhi().

G4VPhysicalVolume* BesEmcConstruction::physiBSCTheta [private]

Definition at line 150 of file BesEmcConstruction.hh.

Referenced by Construct(), and GetBSCTheta().

G4VPhysicalVolume* BesEmcConstruction::physiBSCWorld [private]

Definition at line 139 of file BesEmcConstruction.hh.

Referenced by Construct().

G4VPhysicalVolume* BesEmcConstruction::physiCable [private]

Definition at line 227 of file BesEmcConstruction.hh.

Referenced by Construct().

G4VPhysicalVolume* BesEmcConstruction::physiEMC [private]

Definition at line 135 of file BesEmcConstruction.hh.

Referenced by Construct(), and GetEMC().

G4VPhysicalVolume* BesEmcConstruction::physiEnd [private]

Definition at line 169 of file BesEmcConstruction.hh.

Referenced by ConstructEndGeometry().

G4VPhysicalVolume* BesEmcConstruction::physiEndCasing [private]

Definition at line 177 of file BesEmcConstruction.hh.

Referenced by ConstructEndGeometry().

G4VPhysicalVolume* BesEmcConstruction::physiEndCrystal [private]

Definition at line 181 of file BesEmcConstruction.hh.

Referenced by ConstructEndGeometry().

G4VPhysicalVolume* BesEmcConstruction::physiEndPhi [private]

Definition at line 173 of file BesEmcConstruction.hh.

Referenced by ConstructEndGeometry().

G4VPhysicalVolume* BesEmcConstruction::physiEndRing [private]

Definition at line 245 of file BesEmcConstruction.hh.

Referenced by ConstructSPFrame().

G4VPhysicalVolume* BesEmcConstruction::physiGear [private]

Definition at line 249 of file BesEmcConstruction.hh.

Referenced by ConstructSPFrame().

G4VPhysicalVolume* BesEmcConstruction::physiHangingPlate [private]

Definition at line 219 of file BesEmcConstruction.hh.

Referenced by Construct().

G4VPhysicalVolume* BesEmcConstruction::physiOCGirder [private]

Definition at line 223 of file BesEmcConstruction.hh.

Referenced by Construct().

G4VPhysicalVolume* BesEmcConstruction::physiOrgGlass [private]

Definition at line 198 of file BesEmcConstruction.hh.

Referenced by Construct().

G4VPhysicalVolume* BesEmcConstruction::physiPD [private]

Definition at line 202 of file BesEmcConstruction.hh.

Referenced by Construct().

G4VPhysicalVolume* BesEmcConstruction::physiPreAmpBox [private]

Definition at line 211 of file BesEmcConstruction.hh.

Referenced by Construct().

G4VPhysicalVolume* BesEmcConstruction::physiRear [private]

Definition at line 188 of file BesEmcConstruction.hh.

Referenced by Construct().

G4VPhysicalVolume* BesEmcConstruction::physiRearCasing [private]

Definition at line 194 of file BesEmcConstruction.hh.

Referenced by Construct().

G4VPhysicalVolume* BesEmcConstruction::physiSupportBar [private]

Definition at line 237 of file BesEmcConstruction.hh.

Referenced by ConstructSPFrame().

G4VPhysicalVolume* BesEmcConstruction::physiSupportBar1 [private]

Definition at line 241 of file BesEmcConstruction.hh.

Referenced by ConstructSPFrame().

G4VPhysicalVolume* BesEmcConstruction::physiTaperRing1 [private]

Definition at line 253 of file BesEmcConstruction.hh.

Referenced by ConstructSPFrame().

G4VPhysicalVolume* BesEmcConstruction::physiTaperRing2 [private]

Definition at line 257 of file BesEmcConstruction.hh.

Referenced by ConstructSPFrame().

G4VPhysicalVolume* BesEmcConstruction::physiTaperRing3 [private]

Definition at line 261 of file BesEmcConstruction.hh.

Referenced by ConstructSPFrame().

G4VPhysicalVolume* BesEmcConstruction::physiWaterPipe [private]

Definition at line 231 of file BesEmcConstruction.hh.

Referenced by Construct().

G4Material* BesEmcConstruction::rearCasingMaterial [private]

Definition at line 264 of file BesEmcConstruction.hh.

Referenced by Construct(), and DefineMaterials().

G4Box* BesEmcConstruction::solidAirHole [private]

Definition at line 191 of file BesEmcConstruction.hh.

Referenced by Construct().

G4Box* BesEmcConstruction::solidAirInPABox [private]

Definition at line 213 of file BesEmcConstruction.hh.

Referenced by Construct().

G4Box* BesEmcConstruction::solidAlBox [private]

Definition at line 204 of file BesEmcConstruction.hh.

Referenced by Construct().

G4SubtractionSolid* BesEmcConstruction::solidAlPlate [private]

Definition at line 205 of file BesEmcConstruction.hh.

Referenced by Construct().

G4Tubs* BesEmcConstruction::solidBSC [private]

Definition at line 131 of file BesEmcConstruction.hh.

Referenced by Construct().

G4Trap* BesEmcConstruction::solidBSCCrystal [private]

Definition at line 152 of file BesEmcConstruction.hh.

Referenced by Construct().

G4SubtractionSolid* BesEmcConstruction::solidBSCPhi [private]

Definition at line 144 of file BesEmcConstruction.hh.

Referenced by Construct().

G4SubtractionSolid* BesEmcConstruction::solidBSCPhi1 [private]

Definition at line 143 of file BesEmcConstruction.hh.

Referenced by Construct().

G4Tubs* BesEmcConstruction::solidBSCPhiTub [private]

Definition at line 141 of file BesEmcConstruction.hh.

Referenced by Construct().

G4Trap* BesEmcConstruction::solidBSCTheta [private]

Definition at line 148 of file BesEmcConstruction.hh.

Referenced by Construct().

G4SubtractionSolid* BesEmcConstruction::solidBSCWorld [private]

Definition at line 137 of file BesEmcConstruction.hh.

Referenced by Construct().

G4Tubs* BesEmcConstruction::solidCable [private]

Definition at line 225 of file BesEmcConstruction.hh.

Referenced by Construct().

G4Box* BesEmcConstruction::solidCasingBox [private]

Definition at line 190 of file BesEmcConstruction.hh.

Referenced by Construct().

G4Cons* BesEmcConstruction::solidConsPhi [private]

Definition at line 142 of file BesEmcConstruction.hh.

Referenced by Construct().

G4UnionSolid* BesEmcConstruction::solidEMC [private]

Definition at line 133 of file BesEmcConstruction.hh.

Referenced by Construct().

G4Cons* BesEmcConstruction::solidEnd [private]

Definition at line 167 of file BesEmcConstruction.hh.

Referenced by ConstructEndGeometry().

G4IrregBox* BesEmcConstruction::solidEndCasing [private]

Definition at line 175 of file BesEmcConstruction.hh.

Referenced by ConstructEndGeometry().

G4IrregBox* BesEmcConstruction::solidEndCrystal [private]

Definition at line 179 of file BesEmcConstruction.hh.

Referenced by ConstructEndGeometry().

G4Cons* BesEmcConstruction::solidEndPhi [private]

Definition at line 171 of file BesEmcConstruction.hh.

Referenced by ConstructEndGeometry().

G4Tubs* BesEmcConstruction::solidEndRing [private]

Definition at line 243 of file BesEmcConstruction.hh.

Referenced by ConstructSPFrame().

G4Cons* BesEmcConstruction::solidESC [private]

Definition at line 132 of file BesEmcConstruction.hh.

Referenced by Construct().

G4Tubs* BesEmcConstruction::solidGear [private]

Definition at line 247 of file BesEmcConstruction.hh.

Referenced by ConstructSPFrame().

G4Box* BesEmcConstruction::solidHangingPlate [private]

Definition at line 217 of file BesEmcConstruction.hh.

Referenced by Construct().

G4Cons* BesEmcConstruction::solidOCGirder [private]

Definition at line 221 of file BesEmcConstruction.hh.

Referenced by Construct().

G4Box* BesEmcConstruction::solidOrgGlass [private]

Definition at line 196 of file BesEmcConstruction.hh.

Referenced by Construct().

G4Box* BesEmcConstruction::solidPD [private]

Definition at line 200 of file BesEmcConstruction.hh.

Referenced by Construct().

G4Box* BesEmcConstruction::solidPreAmpBox [private]

Definition at line 209 of file BesEmcConstruction.hh.

Referenced by Construct().

G4Box* BesEmcConstruction::solidRear [private]

Definition at line 186 of file BesEmcConstruction.hh.

Referenced by Construct().

G4SubtractionSolid* BesEmcConstruction::solidRearCasing [private]

Definition at line 192 of file BesEmcConstruction.hh.

Referenced by Construct().

G4Tubs* BesEmcConstruction::solidSupportBar [private]

Definition at line 235 of file BesEmcConstruction.hh.

Referenced by ConstructSPFrame().

G4Tubs* BesEmcConstruction::solidSupportBar1 [private]

Definition at line 239 of file BesEmcConstruction.hh.

Referenced by ConstructSPFrame().

G4Tubs* BesEmcConstruction::solidTaperRing1 [private]

Definition at line 251 of file BesEmcConstruction.hh.

Referenced by ConstructSPFrame().

G4Cons* BesEmcConstruction::solidTaperRing2 [private]

Definition at line 255 of file BesEmcConstruction.hh.

Referenced by ConstructSPFrame().

G4Cons* BesEmcConstruction::solidTaperRing3 [private]

Definition at line 259 of file BesEmcConstruction.hh.

Referenced by ConstructSPFrame().

G4Tubs* BesEmcConstruction::solidWaterPipe [private]

Definition at line 229 of file BesEmcConstruction.hh.

Referenced by Construct().

G4Material* BesEmcConstruction::stainlessSteel [private]

Definition at line 266 of file BesEmcConstruction.hh.

Referenced by Construct(), ConstructSPFrame(), and DefineMaterials().

G4int BesEmcConstruction::startID [private]

Definition at line 125 of file BesEmcConstruction.hh.

Referenced by BesEmcConstruction(), Construct(), GetStartIDTheta(), and SetStartIDTheta().

G4int BesEmcConstruction::thetaNbCrystals [private]

Definition at line 124 of file BesEmcConstruction.hh.

Referenced by BesEmcConstruction(), Construct(), and PrintEMCParameters().

G4int BesEmcConstruction::verboseLevel [private]

Definition at line 114 of file BesEmcConstruction.hh.

Referenced by Construct(), GetVerboseLevel(), and SetVerboseLevel().

G4Material* BesEmcConstruction::waterPipe [private]

Definition at line 268 of file BesEmcConstruction.hh.

Referenced by Construct(), and DefineMaterials().


Generated on Tue Nov 29 23:17:30 2016 for BOSS_7.0.2 by  doxygen 1.4.7