//------------------------------------------------------------------------------ // revision history: // ----------------- // *0001 Feb 23 1997 P.Murat: add Used flag to WHA class // *0002 Feb 27 1997 M.Shapiro, P.Murat: introduce detector set name // *0003 Mar 14 1997 P.Murat: new hangling of tracking medii // *0004 Oct 20 1997 J. Lamourex: change the WCAL to WALL_CALORIMETER2 class // *0005 Jan 13 1998 P.Murat: compile with KCC // *0006 Mar 20 1998 J.Lamoureux: Use Level hook //------------------------------------------------------------------------------ #include #include "geant_i/TGeant3.h" #include "inc/misc.hh" #include "Calor/Wall_calorimeter2.hh" // ...and a few include files // for the containment volume #include "Geometry/CdfGeometry.hh" #include "Geometry/TCdfGeometryManager.hh" //------------------------------------------------------------------------------ // ********** class WALL_CALORIMETER2 ********** //------------------------------------------------------------------------------ WALL_CALORIMETER2::WALL_CALORIMETER2() : POBJECT ("WHA",_POBJECT_TYPE_DETECTOR_, 1){ Used = 1; } WALL_CALORIMETER2::~WALL_CALORIMETER2(){ } //_____________________________________________________________________________ int WALL_CALORIMETER2::init(int geomLevel) { initGeometry(geomLevel); return 1; } //_____________________________________________________________________________ int WALL_CALORIMETER2::initGeometry(int geomLevel) { Used = 1; if (! this->Used) return 0; int call_geant = G3_VOLUME::CallGeant; if (! Used) { G3_VOLUME::CallGeant = 0; } TCdfGeometryManager* gm = TCdfGeometryManager::Instance(); TGeant3* gnt = TGeant3::Instance(); float par[10]; float precision; int np; np = 0; precision = (BOUNDARY_PRECISION < 10.) ? BOUNDARY_PRECISION : 10.; float awhamix[3] = { 55.85, 12.01, 1.0 }; float zwhamix[3] = { 26.0, 6.0, 1.0 }; float wwhamix[3] = { 0.9744, 0.0236, 0.0020 }; fMaterialWha = gm->AddMaterial("WHA_Mix", awhamix, zwhamix, 4.9, 3, wwhamix); gm->AddTrackingMedium(fTmedWha, "Wha_Stuff", fMaterialWha, TGeant3::kSensitiveVolume, TGeant3::kNoMagneticField, CDF_MAG_FIELD, TGeant3::kAuto, TGeant3::kAuto,TGeant3::kAuto, precision, TGeant3::kAuto, par, np); // Polystyrene plastic scintillator - C6H5CH=CH2 float wha_scint_a[2] = { 12.01, 1.0 }; float wha_scint_z[2] = { 6.0 , 1.0 }; float wha_scint_w[2] = { 1.0 , 1.0 }; fMaterialWhaScint = gm->AddMaterial("Wha Scintillator", wha_scint_a, wha_scint_z, 1.032, -2, wha_scint_w); // tracking media for the detailed Wha // geometry precision = 0.05; gm->AddTrackingMedium(fTmedWhaScint, "Wha Scintillator", fMaterialWhaScint, TGeant3::kSensitiveVolume, TGeant3::kNoMagneticField, CDF_MAG_FIELD, TGeant3::kAuto, TGeant3::kAuto, TGeant3::kAuto, precision, TGeant3::kAuto,par,np); gm->AddTrackingMedium(fTmedWhaIron, "Wha Iron", TGeant3::kIron, TGeant3::kSensitiveVolume, TGeant3::kNoMagneticField, CDF_MAG_FIELD, TGeant3::kAuto, TGeant3::kAuto, TGeant3::kAuto, precision, TGeant3::kAuto,par,np); gm->AddTrackingMedium(fTmedWhaAir, "Wha Air", TGeant3::kAir, TGeant3::kSensitiveVolume, TGeant3::kNoMagneticField, CDF_MAG_FIELD, TGeant3::kAuto, TGeant3::kAuto, TGeant3::kAuto, precision, TGeant3::kAuto,par,np); float const WHA_CONE_DIMENSIONS[] = { 54.92, 147.38, 150.26, 210.87, 213.60 }; float const WHA_FRONT_DIMENSIONS[] = { 1.27, 150.26, 316.23, 151.73, 316.23 }; float const WHA_TUBE_DIMENSIONS[] = { 316.23, 318.70, 54.92 }; if ( (this->Used == 1) && ( geomLevel == 0 || geomLevel == 1 )) { WhaContainer.init("WHAS", TGeant3::kCone, fTmedWha, WHA_DIMENSIONS, WHA_DETECTOR_TYPE); gnt -> Gspos("WHAS", 1, gCdfDetector.name(), 0.0, 0.0, 307.0625, 0, "ONLY"); gnt -> Gspos("WHAS", 2, gCdfDetector.name(), 0.0, 0.0, -307.0625, ROTATION_Y180, "ONLY"); } if ( (this->Used == 1) && (geomLevel == 2) ) { WhaContainer.init("WHAS", TGeant3::kCone, fTmedWhaAir, WHA_DIMENSIONS, WHA_DETECTOR_TYPE); gnt -> Gspos("WHAS", 1, gCdfDetector.name(), 0.0, 0.0, 307.0625, 0, "ONLY"); gnt -> Gspos("WHAS", 2, gCdfDetector.name(), 0.0, 0.0, -307.0625, ROTATION_Y180, "ONLY"); WhaScint.init("WHAP", TGeant3::kCone, fTmedWhaScint, 0, WHA_DETECTOR_TYPE); WhaIron.init("WHAA", TGeant3::kCone, fTmedWhaIron, 0, WHA_DETECTOR_TYPE); float LayerDims[5] = {0.0, 0.0, 0.0, 0.0, 0.0}; for (int LayerNum = 1; LayerNum <=15; LayerNum++) { float LayerPosZ = 14.525 + (LayerNum-1)*6.985; LayerDims[0] = 5.08/2.0; LayerDims[1] = (143.7603+2.9) + (LayerPosZ-(5.08/2.0))*tan(30.0*M_PI/180.0); LayerDims[2] = 318.77 - 2.54; LayerDims[3] = (143.7603+2.9) + (LayerPosZ+(5.08/2.0))*tan(30.0*M_PI/180.0); LayerDims[4] = 318.77 - 2.54; gnt -> Gsposp("WHAA", LayerNum, "WHAS", 0.0, 0.0, -58.0625+LayerPosZ, 0, "ONLY", LayerDims, 5); LayerPosZ = 11.0325 + (LayerNum-1)*6.985; LayerDims[0] = 1.0/2.0; LayerDims[1] = (143.7603+2.9) + (LayerPosZ-(1.0/2.0))*tan(30.0*M_PI/180.0); LayerDims[2] = 318.77 - 2.54; LayerDims[3] = (143.7603+2.9) + (LayerPosZ+(1.0/2.0))*tan(30.0*M_PI/180.0); LayerDims[4] = 318.77 - 2.54; gnt -> Gsposp("WHAP", LayerNum, "WHAS", 0.0, 0.0, -58.0625+LayerPosZ, 0, "ONLY", LayerDims, 5); } WhaInnerCone.init("WHAC", TGeant3::kCone, fTmedWhaIron, WHA_CONE_DIMENSIONS, WHA_DETECTOR_TYPE); gnt -> Gspos("WHAC", 1, "WHAS", 0.0, 0.0, 3.135, 0, "ONLY"); WhaFrontplate.init("WHAF", TGeant3::kCone, fTmedWhaIron, WHA_FRONT_DIMENSIONS, WHA_DETECTOR_TYPE); gnt -> Gspos("WHAF", 1, "WHAS", 0.0, 0.0, -58.0625+7.54, 0, "ONLY"); WhaOuterTube.init("WHAT", TGeant3::kTube, fTmedWhaIron, WHA_TUBE_DIMENSIONS, WHA_DETECTOR_TYPE); gnt -> Gspos("WHAT", 1, "WHAS", 0.0, 0.0, 3.135, 0, "ONLY"); } // restore CallGeant flag on exit G3_VOLUME::CallGeant = call_geant; // 0 means successfull return return 0; }