00001 #ifndef SimG4CMS_ECalSD_h
00002 #define SimG4CMS_ECalSD_h
00004 // File: ECalSD.h
00005
00006
00007
00008
00010
00011 #include "SimG4CMS/Calo/interface/CaloSD.h"
00012 #include "Geometry/EcalCommonData/interface/EcalNumberingScheme.h"
00013
00014 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00015
00016 #include "G4String.hh"
00017 #include <map>
00018
00019 class EcalBaseNumber;
00020 class G4LogicalVolume;
00021
00022 class ECalSD : public CaloSD {
00023
00024 public:
00025
00026 ECalSD(G4String, const DDCompactView &, SensitiveDetectorCatalog &,
00027 edm::ParameterSet const &, const SimTrackManager*);
00028 virtual ~ECalSD();
00029 virtual double getEnergyDeposit(G4Step*);
00030 virtual int getRadiationLenght(G4Step *);
00031 virtual uint32_t setDetUnitId(G4Step*);
00032 void setNumberingScheme(EcalNumberingScheme*);
00033
00034 private:
00035
00036 void initMap(G4String, const DDCompactView &);
00037 double curve_LY(G4Step*);
00038 double crystalLength(G4LogicalVolume*);
00039 void getBaseNumber(const G4Step*);
00040 double getBirkL3(G4Step*);
00041
00042 EcalNumberingScheme * numberingScheme;
00043 bool useWeight;
00044 bool useBirk, useBirkL3;
00045 double birk1, birk2, birk3, birkSlope, birkCut;
00046 double slopeLY;
00047 std::map<G4LogicalVolume*,double> xtalLMap;
00048 EcalBaseNumber theBaseNumber;
00049 };
00050
00051 #endif // ECalSD_h