//------------------------------------------------------------------------------ // revision history: // ----------------- // *0001 Feb 23 1997 P.Murat: add Used flag // *0002 Feb 27 1997 M.Shapiro, P.Murat: introduce detector set name // *0003 Mar 14 1997 P.Murat: new hangling of tracking medii // *0004 Mar 17 1997 P.Murat: `Used' flag defines level of geometry details // *0005 Apr 27 1997 M. Shapiro Add CEM, CHA and dead scintillator // *0006 Aug 04 1997 M. Shapiro Fix problem with dead scintillator // *0007 Oct 20 1997 J. Lamoureux: Changed Ccal to central_calorimeter // *0008 jan 13 1998 P.Murat: compile with KCC // *0009 Mar 20 1998 J.Lamoureux: Use Level hook // *0010 Feb 10 2000 J. Mayer: Finalize new GFLASH and detailed geometries. // Added crack chambers and CPR volumes. //------------------------------------------------------------------------------ #include #include "geant_i/TGeant3.h" #include "inc/misc.hh" #include "Calor/Central_calorimeter2.hh" #include "Calor/CcalGeometry2.hh" #include "Geometry/CdfGeometry.hh" #include "Geometry/TCdfGeometryManager.hh" // and now define the containment volume //------------------------------------------------------------------------------ // ********** class CENTRAL_CALORIMETER2 ********** //------------------------------------------------------------------------------ CENTRAL_CALORIMETER2::CENTRAL_CALORIMETER2() : POBJECT ("CCAL",_POBJECT_TYPE_DETECTOR_, 1){ Used = 1; } //------------------------------------------------------------------------------ // ********** class CENTRAL_CALORIMETER2 ********** //------------------------------------------------------------------------------ CENTRAL_CALORIMETER2::~CENTRAL_CALORIMETER2() { } //------------------------------------------------------------------------------ // global initialization routine //------------------------------------------------------------------------------ int CENTRAL_CALORIMETER2::init(int geomLevel) { // initialize CENTRAL geometry initGeometry(geomLevel); // initialize more if needed... return 1; } //------------------------------------------------------------------------------ // level = 0 or 1: parametrized simulation (define only containment volume) // = 2 : detailed geometry description //------------------------------------------------------------------------------ int CENTRAL_CALORIMETER2::initGeometry(int geomLevel) { 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; // The non-detailed version of the central geometry used mixtures of // materials for the simulation. Three mixtures need to be defined: // one for the CEM, one for the CHA, and one for the "crack" region // between the modules which fills the CMOD container volume. // CEM float acemmix[6] = { 207.20, 26.98, 14.61, 12.01, 1.0, 16.0 }; float zcemmix[6] = { 82.0, 13.0, 7.3, 6.0, 1.0, 8.0 }; float wcemmix[6] = { 0.8236, 0.0470, 2.2e-5, 0.1165, 0.0104, 0.0025 }; float dcem = 4.380; // Density fMaterialCem = gm->AddMaterial("CEM_Mix", acemmix, zcemmix, dcem, 6, wcemmix); // CHA float achamix[3] = { 55.85, 12.01, 1.0 }; float zchamix[3] = { 26.0, 6.0, 1.0 }; float wchamix[3] = { 0.9502, 0.0460, 0.0038 }; float dcha = 5.917; // Density fMaterialCha = gm->AddMaterial("CHA_Mix", achamix, zchamix, dcha, 3, wchamix); // CMOD float acmodmix[3] = { 55.85, 12.01, 1.0 }; float zcmodmix[3] = { 26.0, 6.0, 1.0 }; float wcmodmix[3] = { 0.851, 0.137, 0.012 }; float dcmod = 3.960; // Density fMaterialCmod = gm->AddMaterial("CMOD_Mix", acmodmix, zcmodmix, dcmod, 3, wcmodmix); //------------------------------------------------------------------------------- // ccal tracking media //------------------------------------------------------------------------------- precision = (BOUNDARY_PRECISION < 10.) ? BOUNDARY_PRECISION : 10.; gm->AddTrackingMedium(fTmedCcalAir, "Ccal Air", TGeant3::kAir, TGeant3::kSensitiveVolume, TGeant3::kNoMagneticField, CDF_MAG_FIELD, TGeant3::kAuto, TGeant3::kAuto, TGeant3::kAuto, precision, TGeant3::kAuto,par,np); gm->AddTrackingMedium(fTmedCem, "Cem_Stuff", fMaterialCem, TGeant3::kSensitiveVolume, TGeant3::kNoMagneticField, CDF_MAG_FIELD, TGeant3::kAuto, TGeant3::kAuto, TGeant3::kAuto, precision, TGeant3::kAuto,par,np); gm->AddTrackingMedium(fTmedCha, "Cha_Stuff", fMaterialCha, TGeant3::kSensitiveVolume, TGeant3::kNoMagneticField, CDF_MAG_FIELD, TGeant3::kAuto, TGeant3::kAuto, TGeant3::kAuto, precision, TGeant3::kAuto,par,np); gm->AddTrackingMedium(fTmedCmod, "Cmod_Stuff", fMaterialCmod, TGeant3::kSensitiveVolume, TGeant3::kNoMagneticField, CDF_MAG_FIELD, TGeant3::kAuto, TGeant3::kAuto, TGeant3::kAuto, precision, TGeant3::kAuto,par,np); // create materials used by the detailed Ccal geometry // MYLAR - polyethylene terephthlate - C5H4O2 float ccal_mylar_a[3] = { 12.01, 1.0, 16.0 }; float ccal_mylar_z[3] = { 6.0 , 1.0, 8.0 }; float ccal_mylar_w[3] = { 5.0 , 4.0, 2.0 }; fMaterialCcalMylar = gm->AddMaterial("Ccal Mylar Spacer", ccal_mylar_a, ccal_mylar_z, 1.390, -3, ccal_mylar_w); // Polystyrene plastic scintillator - C6H5CH=CH2 float ccal_scint_a[2] = { 12.01, 1.0 }; float ccal_scint_z[2] = { 6.0 , 1.0 }; float ccal_scint_w[2] = { 1.0 , 1.0 }; fMaterialCcalScint = gm->AddMaterial("Ccal Scintillator", ccal_scint_a, ccal_scint_z, 1.032, -2, ccal_scint_w); // Inactive spacer plastic float ccal_plast_a[2] = { 12.01, 1.0 }; float ccal_plast_z[2] = { 6.0 , 1.0 }; float ccal_plast_w[2] = { 1.0 , 1.0 }; fMaterialCcalPlast = gm->AddMaterial("Ccal Inactive Plastic", ccal_plast_a, ccal_plast_z, 1.032, -2, ccal_plast_w); // tracking media for the detailed Ccal // geometry precision = 0.05; gm->AddTrackingMedium(fTmedCcalLead, "Ccal Lead", TGeant3::kLead, TGeant3::kSensitiveVolume, TGeant3::kNoMagneticField, CDF_MAG_FIELD, TGeant3::kAuto, TGeant3::kAuto, TGeant3::kAuto, precision, TGeant3::kAuto,par,np); gm->AddTrackingMedium(fTmedCcalEMScint, "Ccal CEM Scintillator", fMaterialCcalScint, TGeant3::kSensitiveVolume, TGeant3::kNoMagneticField, CDF_MAG_FIELD, TGeant3::kAuto, TGeant3::kAuto, TGeant3::kAuto, precision, TGeant3::kAuto,par,np); gm->AddTrackingMedium(fTmedCcalHAScint, "Ccal CHA Scintillator", fMaterialCcalScint, TGeant3::kSensitiveVolume, TGeant3::kNoMagneticField, CDF_MAG_FIELD, TGeant3::kAuto, TGeant3::kAuto, TGeant3::kAuto, precision, TGeant3::kAuto,par,np); gm->AddTrackingMedium(fTmedCcalPlast, "Ccal Inactive Plastic", fMaterialCcalPlast, TGeant3::kSensitiveVolume, TGeant3::kNoMagneticField, CDF_MAG_FIELD, TGeant3::kAuto, TGeant3::kAuto, TGeant3::kAuto, precision, TGeant3::kAuto,par,np); gm->AddTrackingMedium(fTmedCcalAl, "Ccal Aluminum", TGeant3::kAluminum, TGeant3::kSensitiveVolume, TGeant3::kNoMagneticField, CDF_MAG_FIELD, TGeant3::kAuto, TGeant3::kAuto, TGeant3::kAuto, precision, TGeant3::kAuto,par,np); gm->AddTrackingMedium(fTmedCcalIron, "Ccal Iron", TGeant3::kIron, TGeant3::kSensitiveVolume, TGeant3::kNoMagneticField, CDF_MAG_FIELD, TGeant3::kAuto, TGeant3::kAuto, TGeant3::kAuto, precision, TGeant3::kAuto,par,np); gm->AddTrackingMedium(fTmedCcalMylar, "Ccal Mylar", fMaterialCcalMylar, TGeant3::kSensitiveVolume, TGeant3::kNoMagneticField, CDF_MAG_FIELD, TGeant3::kAuto, TGeant3::kAuto, TGeant3::kAuto, precision, TGeant3::kAuto,par,np); gm->AddTrackingMedium(fTmedCcalTungsten, "Ccal Tungsten", TGeant3::kTungsten, TGeant3::kSensitiveVolume, TGeant3::kNoMagneticField, CDF_MAG_FIELD, TGeant3::kAuto, TGeant3::kAuto, TGeant3::kAuto, precision, TGeant3::kAuto,par,np); // Define the volume which contains the entire central calorimeter. This // is a tube whose inner radius starts at the end of the coil and whose // outer radius extends to the back of the CHA. G3_TUBE::init("CCAL", TGeant3::kTube, fTmedCcalAir, CCAL_DIMENSIONS, CCAL_DETECTOR_TYPE, gCdfDetector.volume(), CCAL_POSITION, CCAL_ROTATION, "ONLY", CCAL_DETECTOR_SET); // The central calorimeter system is build out of 48 modules. Define the // container volume CMOD into which the details of the CEM and CHA will // be placed. If the non-detailed geometry is used, the CMOD container // is filled with a mixture of iron and scintillator. It is filled with // air for the detailed version. if ( geomLevel == 0 || geomLevel == 1) { CcalModule.init("CMOD", TGeant3::kTrap, fTmedCmod, CMOD_DIMENSIONS, CCAL_DETECTOR_TYPE); } else { CcalModule.init("CMOD", TGeant3::kTrap, fTmedCcalAir, CMOD_DIMENSIONS, CCAL_DETECTOR_TYPE); } // // Now start filling the CMOD container with component volumes // // Endplates (CEPL) CmodEndplate.init("CEPL", TGeant3::kTrap, fTmedCcalIron, CEPL_DIMENSIONS, CCAL_DETECTOR_TYPE); gnt -> Gspos("CEPL", 1, "CMOD", 0.0, 0.0, 123.23, 0, "ONLY"); gnt -> Gspos("CEPL", 2, "CMOD", 0.0, 0.0, -123.23, 0, "ONLY"); // Sideplates (CSP1 and CSP2) // Only put the sideplates in for the detailed geometry. For the non-detailed // geometry this region is filled with the CMOD mixture. if ( geomLevel == 2) { CmodSideplate.init("CSP1", TGeant3::kPara, fTmedCcalIron, CSP1_DIMENSIONS, CCAL_DETECTOR_TYPE); CmodSideplate.init("CSP2", TGeant3::kPara, fTmedCcalIron, CSP2_DIMENSIONS, CCAL_DETECTOR_TYPE); gnt -> Gspos("CSP1", 1, "CMOD", 32.527, -8.54, 0.0, 0, "ONLY"); gnt -> Gspos("CSP2", 1, "CMOD", -32.527, -8.54, 0.0, 0, "ONLY"); } // Frontplate CmodFrontplate.init("CFPL", TGeant3::kTrap, fTmedCcalAl, CFPL_DIMENSIONS, CCAL_DETECTOR_TYPE); gnt -> Gspos("CFPL", 1, "CMOD", 0.0, -83.44, 0.0, 0, "ONLY"); // Now define the CEM and CHA. A mother volume CEMM is the container volume // for the CEM, while CHAM is the container for the CHA. The contents of // these container volumes depends upon the level of simulation required. // For fast simulations, these volumes are filled with mixtures. For slow, // detailed simulations, the individual layers of the absorber stacks are // defined. // CEM if ( geomLevel == 0 || geomLevel == 1 ) { CmodCem.init("CEMM", TGeant3::kTrap, fTmedCem, CEMM_DIMENSIONS, CCAL_DETECTOR_TYPE); // Add the CES volume CmodCes.init("CESM", TGeant3::kTrap, fTmedCcalAir, CESM_DIMENSIONS, CCAL_DETECTOR_TYPE); gnt -> Gspos("CESM", 1, "CEMM", 0.0, -7.030, 0.0, 0, "ONLY"); // Acrylic dead region before and after the CES float RegionDims[11] = { 0.0 }; CmodPlast.init("CEMP", TGeant3::kTrap, fTmedCcalPlast, 0, CCAL_DETECTOR_TYPE); for (int Region = 0; Region <= 9; Region++){ RegionDims[0] = CEMP_HALFLENGTH[Region]; RegionDims[3] = CEMP_YWIDTH[Region]; RegionDims[4] = CEMP_X1WIDTH[Region]; RegionDims[5] = CEMP_X2WIDTH[Region]; RegionDims[7] = CEMP_YWIDTH[Region]; RegionDims[8] = CEMP_X1WIDTH[Region]; RegionDims[9] = CEMP_X2WIDTH[Region]; gnt -> Gsposp("CEMP", Region + 1, "CEMM", 0.0, CEMP_LAYERHEIGHT[Region], CEMP_ZPOSITION[Region], 0, "ONLY", RegionDims, 11); } } if ( geomLevel == 2 ) { CmodCem.init("CEMM", TGeant3::kTrap, fTmedCcalAir, CEMM_DIMENSIONS, CCAL_DETECTOR_TYPE); // Add the CES volume CmodCes.init("CESM", TGeant3::kTrap, fTmedCcalAir, CESM_DIMENSIONS, CCAL_DETECTOR_TYPE); gnt -> Gspos("CESM", 1, "CEMM", 0.0, -7.030, 0.0, 0, "ONLY"); // Create the individual layers in the CEM. This includes scintillator, // lead absorber, aluminum cladding, mylar spacer and dead plastic. CmodScint.init("CEMS", TGeant3::kBox, fTmedCcalEMScint, 0, CCAL_DETECTOR_TYPE); CmodLead.init( "CEMA", TGeant3::kBox, fTmedCcalLead, 0, CCAL_DETECTOR_TYPE); CmodAl.init( "CEMC", TGeant3::kBox, fTmedCcalAl, 0, CCAL_DETECTOR_TYPE); CmodMylar.init("CEMD", TGeant3::kBox, fTmedCcalMylar, 0, CCAL_DETECTOR_TYPE); CmodPlast.init("CEMP", TGeant3::kBox, fTmedCcalPlast, 0, CCAL_DETECTOR_TYPE); float LayerDims[3] = { 21.95, 0.5/2.0, 118.59 }; float LayerPosY = -16.0 + 0.258; gnt -> Gsposp("CEMS", 1, "CEMM", 0.0, LayerPosY, 0.0, 0, "ONLY", LayerDims, 3); LayerDims[1] = 0.025/2.0; gnt -> Gsposp("CEMD", 1, "CEMM", 0.0, LayerPosY+0.2705, 0.0, 0, "ONLY", LayerDims, 3); int DeadVolNum = 0; for (int LayerNum = 1; LayerNum <= 30; LayerNum++) { if ((LayerNum >= 1) && (LayerNum <= 8)) { LayerDims[0] = 21.94 + 0.541*tan(7.5*M_PI/180.0) + (LayerNum - 1)*0.935*tan(7.5*M_PI/180.0); LayerDims[2] = 118.59; LayerPosY = -16.0 + 0.738 + (LayerNum - 1)*0.935; } else { LayerDims[0] = 23.229 + (LayerNum - 9)*1.004*tan(7.5*M_PI/180.0); LayerDims[2] = 118.59; LayerPosY = -6.078 + 0.197 + (LayerNum - 9)*1.004; } // Place the Al cladding and Mylar layers down LayerDims[1] = 0.038/2.0; gnt -> Gsposp("CEMC", (2*LayerNum) - 1, "CEMM", 0.0, LayerPosY-0.178, 0.0, 0, "ONLY", LayerDims, 3); gnt -> Gsposp("CEMC", (2*LayerNum) , "CEMM", 0.0, LayerPosY+0.178, 0.0, 0, "ONLY", LayerDims, 3); LayerDims[1] = 0.025/2.0; gnt -> Gsposp("CEMD", LayerNum + 1 , "CEMM", 0.0, LayerPosY+0.7255, 0.0, 0, "ONLY", LayerDims, 3); // Lay down the Pb, Scintillator and dead Acrylic layers if ( LAYERSPLIT[LayerNum-1] == 0 ) { LayerDims[1] = 0.318/2.0; gnt -> Gsposp("CEMA", LayerNum + 1 , "CEMM", 0.0, LayerPosY, 0.0, 0, "ONLY", LayerDims, 3); LayerDims[1] = 0.5/2.0; gnt -> Gsposp("CEMS", LayerNum + 1 , "CEMM", 0.0, LayerPosY+0.455, 0.0, 0, "ONLY", LayerDims, 3); } else { float PseudoEta = TOWERETA[LAYERSPLIT[LayerNum-1]-1]; float Theta = (M_PI/2.0) - 2*atan(exp(-1*PseudoEta)); float Height = 172.72 + 2.54 + 16.0 + LayerPosY; float Offset = Height*tan(Theta) - 4.13; LayerDims[2] = Offset/2.0; float LayerPosZ = -118.59 + LayerDims[2]; LayerDims[1] = 0.318/2.0; gnt -> Gsposp("CEMA", LayerNum + 1 , "CEMM", 0.0, LayerPosY, LayerPosZ, 0, "ONLY", LayerDims, 3); LayerDims[1] = 0.5/2.0; gnt -> Gsposp("CEMS", LayerNum + 1 , "CEMM", 0.0, LayerPosY+0.455, LayerPosZ, 0, "ONLY", LayerDims, 3); LayerDims[2] = 121.92 - LayerDims[2]; LayerPosZ = 118.59 - LayerDims[2]; LayerDims[1] = 0.318/2.0; DeadVolNum = DeadVolNum + 1; gnt -> Gsposp("CEMP", DeadVolNum , "CEMM", 0.0, LayerPosY, LayerPosZ, 0, "ONLY", LayerDims, 3); LayerDims[1] = 0.5/2.0; DeadVolNum = DeadVolNum + 1; gnt -> Gsposp("CEMP", DeadVolNum , "CEMM", 0.0, LayerPosY+0.455, LayerPosZ, 0, "ONLY", LayerDims, 3); } } } gnt -> Gspos("CEMM", 1, "CMOD", 0.0, -66.16, 0.0, 0, "ONLY"); // CHA if ( geomLevel == 0 || geomLevel == 1 ) { CmodCha.init("CHAM", TGeant3::kTrap, fTmedCha, CHAM_DIMENSIONS, CCAL_DETECTOR_TYPE); } if ( geomLevel == 2 ) { CmodCha.init("CHAM", TGeant3::kTrap, fTmedCcalAir, CHAM_DIMENSIONS, CCAL_DETECTOR_TYPE); // Create the individual layers in the CHA. This includes scintillator // and iron plates. float LayerDims[3] = { 0.0, 0.0, 0.0 }; CmodScint.init("CHAS", TGeant3::kBox, fTmedCcalHAScint, 0, CCAL_DETECTOR_TYPE); CmodIron.init( "CHAA", TGeant3::kBox, fTmedCcalIron, 0, CCAL_DETECTOR_TYPE); for (int LayerNum = 1; LayerNum <= 32; LayerNum++) { LayerDims[0] = 26.93 + (LayerNum - 1)*3.5*tan(7.5*M_PI/180.0); LayerDims[1] = 2.5/2.0; LayerDims[2] = 121.9; float LayerPosY = -56.0 + (LayerNum -1)*3.5 + (2.5/2.0); gnt -> Gsposp("CHAA", LayerNum , "CHAM", 0.0, LayerPosY, 0.0, 0, "ONLY", LayerDims, 3); LayerDims[1] = 1.0/2.0; LayerPosY = -56.0 + (LayerNum - 1)*3.5 + (2.5 + (1.0/2.0)); gnt -> Gsposp("CHAS", LayerNum , "CHAM", 0.0, LayerPosY, 0.0, 0, "ONLY", LayerDims, 3); } } gnt -> Gspos("CHAM", 1, "CMOD", 0.0, 11.63, 0.0, 0, "ONLY"); // Now insert the "spring" volume between the CEM and the CHA. This isn't // really required for the detailed geometry, but for consistency it will // be added to both the non-detailed and detailed geometries. CmodSpringVol.init("CSPR", TGeant3::kTrap, fTmedCcalAir, CSPR_DIMENSIONS, CCAL_DETECTOR_TYPE); gnt -> Gspos("CSPR", 1, "CMOD", 0.0, -47.26, 0.0, 0, "ONLY"); // Build the entire CCAL from multiple copies of the CMOD container. Each // Needs to be rotated and put into position. int rotation[72]; for (int i = 1; i < 25; i++) { rotation[i-1] = CEM_ROTATION_NUMBER+(i-1); gnt -> Gsrotm(rotation[i-1], 90.0, 7.5+15.0*(i-1), 90.0, 90.0+7.5+15.0*(i-1), 0.0, 0.0); } for (int i = 25; i < 49; i++) { rotation[i-1] = CEM_ROTATION_NUMBER+(i-1); gnt -> Gsrotm(rotation[i-1], 90.0, 180.0+7.5+15.0*(i-25), 90.0, 90.0+7.5+15.0*(i-25), 180.0, 0.0); } for (int i = 1; i < 25; i++) { gnt -> Gspos("CMOD", i , "CCAL", -(172.72+CMOD_DIMENSIONS[3])*sin((7.5+15.0*(i-1))*M_PI/180.0), (172.72+CMOD_DIMENSIONS[3])*cos((7.5+15.0*(i-1))*M_PI/180.0), 124.46, rotation[i-1], "ONLY"); gnt -> Gspos("CMOD", i+24 , "CCAL", -(172.72+CMOD_DIMENSIONS[3])*sin((7.5+15.0*(i-1))*M_PI/180.0), (172.72+CMOD_DIMENSIONS[3])*cos((7.5+15.0*(i-1))*M_PI/180.0), -124.46, rotation[i+23], "ONLY"); } // Crack Chambers // The main component of the crack chamber is a tungsten bar of dimension // 3.5 cm x 3.0 cm (deep) and a chamber of 1/8" depth. // First define a set of rotation matrices for these bars for (int i = 49; i < 73; i++) { rotation[i-1] = CEM_ROTATION_NUMBER+(i-1); gnt -> Gsrotm(rotation[i-1], 90.0, 15.0*(i-49), 90.0, 90.0+15.0*(i-49), 0.0, 0.0); } CmodCrackBar.init("CCRB", TGeant3::kBox, fTmedCcalTungsten, CCRB_DIMENSIONS, CCAL_DETECTOR_TYPE); CmodCrackChamber.init("CCRC", TGeant3::kBox, fTmedCcalAir, CCRC_DIMENSIONS, CCAL_DETECTOR_TYPE); for (int i = 1; i < 25; i++) { gnt -> Gspos("CCRB", i, "CCAL", -(172.72-CCRB_DIMENSIONS[1])*sin((15.0*(i-1))*M_PI/180.0), (172.72-CCRB_DIMENSIONS[1])*cos((15.0*(i-1))*M_PI/180.0), 0.0, rotation[i+47], "ONLY"); gnt -> Gspos("CCRC", i, "CCAL", -(172.72+CCRC_DIMENSIONS[1])*sin((15.0*(i-1))*M_PI/180.0), (172.72+CCRC_DIMENSIONS[1])*cos((15.0*(i-1))*M_PI/180.0), 0.0, rotation[i+47], "ONLY"); } // Central Preradiator Chambers (CPR) CmodCprChamber.init("CCPR", TGeant3::kBox, fTmedCcalAir, CCPR_DIMENSIONS, CCAL_DETECTOR_TYPE); for (int i = 1; i < 25; i++) { gnt -> Gspos("CCPR", i, "CCAL", -(168.29+CCPR_DIMENSIONS[1])*sin((7.5+15.0*(i-1))*M_PI/180.0), (168.29+CCPR_DIMENSIONS[1])*cos((7.5+15.0*(i-1))*M_PI/180.0), (116.84 + 4.76), rotation[i-1], "ONLY"); gnt -> Gspos("CCPR", i+24, "CCAL", -(168.29+CCPR_DIMENSIONS[1])*sin((7.5+15.0*(i-1))*M_PI/180.0), (168.29+CCPR_DIMENSIONS[1])*cos((7.5+15.0*(i-1))*M_PI/180.0), -(116.84 + 4.76), rotation[i-1], "ONLY"); } G3_VOLUME::CallGeant = call_geant; // 0 means successfull return return 0; }