File indexing completed on 2023-10-25 09:45:58
0001 #ifndef FastSimulation_CaloGeometryTools_CaloGeometryHelper
0002 #define FastSimulation_CaloGeometryTools_CaloGeometryHelper
0003
0004 #include "FastSimulation/CalorimeterProperties/interface/Calorimeter.h"
0005 #include "Geometry/CaloTopology/interface/CaloDirection.h"
0006 #include "FastSimulation/CaloGeometryTools/interface/BaseCrystal.h"
0007
0008 #include <vector>
0009 #include <array>
0010
0011 class DetId;
0012 class Crystal;
0013
0014 namespace edm {
0015 class ParameterSet;
0016 }
0017
0018 class CaloGeometryHelper : public Calorimeter {
0019 public:
0020 typedef math::XYZVector XYZVector;
0021 typedef math::XYZVector XYZPoint;
0022
0023 CaloGeometryHelper();
0024 CaloGeometryHelper(const edm::ParameterSet& fastCalo);
0025 ~CaloGeometryHelper();
0026
0027
0028 DetId getClosestCell(const XYZPoint& point, bool ecal, bool central) const;
0029
0030
0031 void getWindow(const DetId& pivot, int s1, int s2, std::vector<DetId>&) const;
0032
0033 double preshowerZPosition(int layer) const { return (layer == 1) ? psLayer1Z_ : psLayer2Z_; }
0034
0035
0036 void buildCrystal(const DetId& id, Crystal&) const;
0037
0038 void initialize(double bField);
0039
0040
0041 typedef std::array<DetId, 8> NeiVect;
0042 const NeiVect& getNeighbours(const DetId& det) const;
0043
0044 inline double magneticField() const { return bfield_; }
0045
0046
0047 bool borderCrossing(const DetId&, const DetId&) const;
0048
0049 bool move(DetId& cell, const CaloDirection& dir, bool fast = true) const;
0050
0051 inline bool preshowerPresent() const { return preshowerPresent_; };
0052
0053 private:
0054 void buildNeighbourArray();
0055 void buildCrystalArray();
0056 bool simplemove(DetId& cell, const CaloDirection& dir) const;
0057 bool diagonalmove(DetId& cell, const CaloDirection& dir) const;
0058
0059 private:
0060
0061 double psLayer1Z_, psLayer2Z_;
0062
0063
0064 std::vector<NeiVect> barrelNeighbours_;
0065 std::vector<NeiVect> endcapNeighbours_;
0066
0067 std::vector<BaseCrystal> barrelCrystals_;
0068 std::vector<BaseCrystal> endcapCrystals_;
0069
0070 bool neighbourmapcalculated_;
0071
0072
0073 double bfield_;
0074 bool preshowerPresent_;
0075 };
0076 #endif