00001 #ifndef CaloHitMaker_h
00002 #define CaloHitMaker_h
00003
00004 #include "DataFormats/DetId/interface/DetId.h"
00005 #include "DataFormats/Math/interface/Vector3D.h"
00006 #include "Math/GenVector/Plane3D.h"
00007
00008
00009
00010
00011
00012
00013
00014 #include <string>
00015 #include <map>
00016
00017 class CaloGeometryHelper;
00018 class CalorimeterProperties;
00019
00020 class CaloHitMaker
00021 {
00022 public:
00023
00024 typedef math::XYZVector XYZVector;
00025 typedef math::XYZVector XYZPoint;
00026 typedef ROOT::Math::Plane3D Plane3D;
00027
00028 CaloHitMaker(const CaloGeometryHelper * calo,DetId::Detector det,int subdetn,int cal,unsigned sht=0);
00029 virtual ~CaloHitMaker(){;}
00030
00031 virtual bool addHit(double r,double phi,unsigned layer=0)=0;
00032 virtual void setSpotEnergy(double e)=0;
00033 virtual const std::map<uint32_t,float>& getHits()=0;
00034
00035 const CaloGeometryHelper * getCalorimeter() const
00036 {
00037
00038 return myCalorimeter;
00039 }
00040
00041 protected:
00044 static XYZPoint intersect(const Plane3D& p,const XYZPoint& a,const XYZPoint& b,double& t,bool segment,bool debug=false);
00045
00046 const CaloGeometryHelper * myCalorimeter;
00047 const CalorimeterProperties * theCaloProperties;
00048 double moliereRadius;
00049 double interactionLength;
00050 double spotEnergy;
00051
00052 bool EMSHOWER;
00053 bool HADSHOWER;
00054
00055 private:
00056 DetId::Detector base_;
00057 int subdetn_;
00058 int onCal_;
00059
00060
00061 protected:
00062 unsigned showerType_;
00063 std::map<uint32_t,float> hitMap_;
00064
00065 };
00066
00067 #endif