File indexing completed on 2023-03-17 11:14:31
0001 #ifndef MagGeoBuilderFromDDD_H
0002 #define MagGeoBuilderFromDDD_H
0003
0004
0005
0006
0007
0008
0009
0010
0011 #include "MagneticField/Interpolation/interface/MagProviderInterpol.h"
0012
0013 #include "DetectorDescription/Core/interface/DDCompactView.h"
0014 #include "CondFormats/MFObjects/interface/MagFieldConfig.h"
0015
0016 #include <string>
0017 #include <vector>
0018 #include <map>
0019 #include <memory>
0020
0021 class Surface;
0022 class MagBLayer;
0023 class MagESector;
0024 class MagVolume6Faces;
0025 namespace magneticfield {
0026 class VolumeBasedMagneticFieldESProducer;
0027 class VolumeBasedMagneticFieldESProducerFromDB;
0028 class BaseVolumeHandle;
0029 using handles = std::vector<BaseVolumeHandle*>;
0030 }
0031
0032 class MagGeoBuilderFromDDD {
0033 public:
0034
0035 MagGeoBuilderFromDDD(std::string tableSet_, int geometryVersion, bool debug = false);
0036
0037
0038 virtual ~MagGeoBuilderFromDDD();
0039
0040
0041
0042
0043 void setScaling(const std::vector<int>& keys, const std::vector<double>& values);
0044
0045 void setGridFiles(const magneticfield::TableFileMap& gridFiles);
0046
0047
0048 std::vector<MagBLayer*> barrelLayers() const;
0049
0050
0051 std::vector<MagESector*> endcapSectors() const;
0052
0053 float maxR() const;
0054
0055 float maxZ() const;
0056
0057
0058 class volumeHandle;
0059
0060 private:
0061
0062
0063 virtual void build(const DDCompactView& cpv);
0064
0065
0066 friend class TestMagVolume;
0067 friend class MagGeometry;
0068 friend class magneticfield::VolumeBasedMagneticFieldESProducer;
0069 friend class magneticfield::VolumeBasedMagneticFieldESProducerFromDB;
0070
0071 std::vector<MagVolume6Faces*> barrelVolumes() const;
0072 std::vector<MagVolume6Faces*> endcapVolumes() const;
0073
0074
0075 void buildInterpolator(const volumeHandle* vol, std::map<std::string, MagProviderInterpol*>& interpolators);
0076
0077
0078 void buildMagVolumes(const magneticfield::handles& volumes,
0079 std::map<std::string, MagProviderInterpol*>& interpolators);
0080
0081
0082 void summary(magneticfield::handles& volumes);
0083
0084
0085 void testInside(magneticfield::handles& volumes);
0086
0087 magneticfield::handles bVolumes;
0088 magneticfield::handles eVolumes;
0089
0090 std::vector<MagBLayer*> mBLayers;
0091 std::vector<MagESector*> mESectors;
0092
0093 std::string tableSet;
0094 int geometryVersion;
0095
0096 std::map<int, double> theScalingFactors;
0097 const magneticfield::TableFileMap* theGridFiles;
0098
0099 const bool debug;
0100 };
0101 #endif