#include "DetectorLayoutReader.h" #include DetectorLayoutReader::DetectorLayoutReader(): fGeometryFileName("data/sa_geometry.txt") { } DetectorLayoutReader::~DetectorLayoutReader() { } void DetectorLayoutReader::GetDetectorGeometryScal( LitDetectorLayoutMuonScal& layout) const { GetDetectorGeometry(layout); } void DetectorLayoutReader::GetDetectorGeometryVec( LitDetectorLayoutMuonVec& layout) const { GetDetectorGeometry(layout); } template void DetectorLayoutReader::GetDetectorGeometry( LitDetectorLayoutMuon& layout) const { std::ifstream finLayout(fGeometryFileName.c_str(), std::ifstream::in); int nofStationGroups; finLayout >> nofStationGroups; layout.nofStationGroups = nofStationGroups; for (int isg = 0; isg < layout.nofStationGroups; isg++) { ReadStationGroup(finLayout, layout.stationGroups[isg]); } finLayout.close(); } template void DetectorLayoutReader::ReadStationGroup( std::ifstream& fin, LitStationGroupMuon& stationGroup) const { int sgNo, nofStations; fin >> sgNo >> nofStations; stationGroup.nofStations = nofStations; for (int ist = 0; ist < stationGroup.nofStations; ist++) { ReadStation(fin, stationGroup.stations[ist]); } ReadAbsorber(fin, stationGroup.absorber); } template void DetectorLayoutReader::ReadStation( std::ifstream& fin, LitStationMuon& station) const { int stNo, nofSubstations; fin >> stNo >> nofSubstations; station.nofSubstations = nofSubstations; for (int iss = 0; iss < station.nofSubstations; iss++) { ReadSubstation(fin, station.substations[iss]); } } template void DetectorLayoutReader::ReadSubstation( std::ifstream& fin, LitSubstationMuon& substation) const { int ssNo; fin >> ssNo; fin >> substation.Z; ReadMaterial(fin, substation.material); ReadFieldSlice(fin, substation.fieldSlice); } template void DetectorLayoutReader::ReadAbsorber( std::ifstream& fin, LitAbsorber& absorber) const { fin >> absorber.Z; ReadMaterial(fin, absorber.material); ReadFieldSlice(fin, absorber.fieldSliceFront); ReadFieldSlice(fin, absorber.fieldSliceBack); } template void DetectorLayoutReader::ReadMaterial( std::ifstream& fin, LitMaterialInfo& material) const { fin >> material.Thickness >> material.X0 >> material.Rho >> material.Z >> material.A >> material.Zpos >> material.I; } template void DetectorLayoutReader::ReadFieldSlice( std::ifstream& fin, LitFieldSlice& slice) const { fin >> slice.Z; unsigned int N = slice.N; for(unsigned int i = 0; i < N; i++) fin >> slice.cx[i]; for(unsigned int i = 0; i < N; i++) fin >> slice.cy[i]; for(unsigned int i = 0; i < N; i++) fin >> slice.cz[i]; }