/* This file is part of MAUS: http://micewww.pp.rl.ac.uk:8080/projects/maus * * MAUS is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * MAUS is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with MAUS. If not, see . * */ #include #include "Geant4/G4VPhysicalVolume.hh" #include "Geant4/G4VSolid.hh" #include "Geant4/G4Material.hh" #include "Geant4/G4Element.hh" #include "Geant4/G4LogicalVolume.hh" #include "Geant4/G4ThreeVector.hh" #include "Geant4/G4PVPlacement.hh" #include "Geant4/globals.hh" #include "Geant4/G4SDManager.hh" #include "Geant4/G4UserLimits.hh" #include "Geant4/G4Tubs.hh" #include "Geant4/G4PVParameterised.hh" #include "gtest/gtest.h" #include "CLHEP/Random/Random.h" #include "src/legacy/Config/MiceModule.hh" #include "src/common_cpp/DetModel/SciFi/SciFiPlane.hh" namespace { class SciFiPlaneTest : public ::testing::Test { protected: SciFiPlaneTest() { G4double innerRadiusOfTheTube = 0.*cm; G4double outerRadiusOfTheTube = 30.*cm; G4double hightOfTheTube = 1.*m; G4double startAngleOfTheTube = 0.*deg; G4double spanningAngleOfTheTube = 360.*deg; G4Tubs* tracker_tube = new G4Tubs("tracker_tube", innerRadiusOfTheTube, outerRadiusOfTheTube, hightOfTheTube, startAngleOfTheTube, spanningAngleOfTheTube); G4LogicalVolume* tracker_log = new G4LogicalVolume(tracker_tube, mat, "tracker_log"); tracker = new G4PVPlacement(0, G4ThreeVector(), "name", tracker_log, 0, false, 0, false); } virtual ~SciFiPlaneTest() {} virtual void SetUp() {} virtual void TearDown() {} G4PVPlacement* tracker; G4Material* mat; }; TEST_F(SciFiPlaneTest, Test_num_fibres_in_all_planes) { std::string filename; filename = "Stage6.dat"; std::vector modules; MiceModule* _module; _module = new MiceModule(filename); modules = _module->findModulesByPropertyString("SensitiveDetector", "SciFi"); for ( int trackerNo = 0; trackerNo < 2; trackerNo++ ) { for ( int stationNo = 1; stationNo < 6; stationNo++ ) { for ( int planeNo = 0; planeNo < 3; planeNo++ ) { // get the SciFi Modules const MiceModule* this_plane = NULL; for ( unsigned int j = 0; !this_plane && j < modules.size(); ++j ) { // find the module corresponding to this plane if ( modules[j]->propertyExists("Tracker", "int") && modules[j]->propertyExists("Station", "int") && modules[j]->propertyExists("Plane", "int") && modules[j]->propertyInt("Tracker") == trackerNo && modules[j]->propertyInt("Station") == stationNo && modules[j]->propertyInt("Plane") == planeNo ) // save the module this_plane = modules[j]; } assert(this_plane != NULL); // arguments are the plane module, material and mother physical volume MiceModule* aplane = const_cast < MiceModule* > (this_plane); SciFiPlane plane(aplane, mat, tracker); int number_fibres = plane.get_numb_fibres(); // plane 0 (view v), plane 1 (view x), plane 2 (view w) if ( trackerNo == 0 && stationNo == 5 && planeNo == 2 ) EXPECT_EQ(number_fibres, 215*7); if ( planeNo == 1 || planeNo == 0 ) EXPECT_EQ(number_fibres, 214*7); if ( planeNo == 2 && !(trackerNo == 0 && stationNo == 5) ) EXPECT_EQ(number_fibres, 212*7); } } } } } // namespace