CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_7/src/SimG4CMS/Calo/interface/HCalSD.h

Go to the documentation of this file.
00001 #ifndef SimG4CMS_HCalSD_h
00002 #define SimG4CMS_HCalSD_h
00003 
00004 // File: HCalSD.h
00005 // Description: Stores hits of Hadron calorimeter in appropriate container
00006 // Use in your sensitive detector builder:
00007 //    HCalSD* hcalSD = new HCalSD(SDname, new CaloNumberingScheme());
00009 
00010 #include "SimG4CMS/Calo/interface/CaloSD.h"
00011 #include "SimG4CMS/Calo/interface/HFShower.h"
00012 #include "SimG4CMS/Calo/interface/HFShowerLibrary.h"
00013 #include "SimG4CMS/Calo/interface/HFShowerParam.h"
00014 #include "SimG4CMS/Calo/interface/HFShowerPMT.h"
00015 #include "SimG4CMS/Calo/interface/HFShowerFibreBundle.h"
00016 #include "SimG4CMS/Calo/interface/HcalNumberingScheme.h"
00017 #include "DataFormats/HcalCalibObjects/interface/HEDarkening.h"
00018 #include "SimG4CMS/Calo/interface/HFDarkening.h"
00019 #include "DetectorDescription/Core/interface/DDsvalues.h"
00020 #include "Geometry/HcalCommonData/interface/HcalNumberingFromDDD.h"
00021 
00022 #include "G4String.hh"
00023 #include <map>
00024 #include <string>
00025 #include <TH1F.h>
00026 
00027 class DDCompactView;
00028 class DDFilteredView;
00029 class G4LogicalVolume;
00030 class G4Material;
00031 class G4Step;
00032 
00033 class HCalSD : public CaloSD {
00034 
00035 public:    
00036 
00037   HCalSD(G4String , const DDCompactView &, SensitiveDetectorCatalog &,
00038          edm::ParameterSet const &, const SimTrackManager*);
00039   virtual ~HCalSD();
00040   virtual bool                  ProcessHits(G4Step * , G4TouchableHistory * );
00041   virtual double                getEnergyDeposit(G4Step* );
00042   virtual uint32_t              setDetUnitId(G4Step* step);
00043   void                          setNumberingScheme(HcalNumberingScheme* );
00044 
00045 protected:
00046 
00047   virtual void                  initRun();
00048   virtual bool                  filterHit(CaloG4Hit*, double);
00049 
00050 private:    
00051 
00052   uint32_t                      setDetUnitId(int, G4ThreeVector, int, int);
00053   std::vector<double>           getDDDArray(const std::string&, 
00054                                             const DDsvalues_type&);
00055   std::vector<G4String>         getNames(DDFilteredView&);
00056   bool                          isItHF(G4Step *);
00057   bool                          isItHF(G4String);
00058   bool                          isItFibre(G4LogicalVolume*);
00059   bool                          isItFibre(G4String);
00060   bool                          isItPMT(G4LogicalVolume*);
00061   bool                          isItStraightBundle(G4LogicalVolume*);
00062   bool                          isItConicalBundle(G4LogicalVolume*);
00063   bool                          isItScintillator(G4Material*);
00064   bool                          isItinFidVolume (G4ThreeVector&);
00065   void                          getFromLibrary(G4Step * step, double weight);
00066   void                          hitForFibre(G4Step * step, double weight);
00067   void                          getFromParam(G4Step * step, double weight);
00068   void                          getHitPMT(G4Step * step);
00069   void                          getHitFibreBundle(G4Step * step, bool type);
00070   int                           setTrackID(G4Step * step);
00071   void                          readWeightFromFile(std::string);
00072   double                        layerWeight(int, G4ThreeVector, int, int);
00073   void                          plotProfile(G4Step* step, G4ThreeVector pos, 
00074                                             double edep, double time, int id);
00075   void                          plotHF(G4ThreeVector& pos, bool emType);
00076 
00077   HcalNumberingFromDDD*         numberingFromDDD;
00078   HcalNumberingScheme*          numberingScheme;
00079   HFShowerLibrary *             showerLibrary;
00080   HFShower *                    hfshower;
00081   HFShowerParam *               showerParam;
00082   HFShowerPMT *                 showerPMT;
00083   HFShowerFibreBundle *         showerBundle;
00084   HEDarkening *                 m_HEDarkening;
00085   HFDarkening *                 m_HFDarkening;
00086   bool                          useBirk, useLayerWt, useFibreBundle, usePMTHit, testNumber;
00087   double                        birk1, birk2, birk3, betaThr;
00088   bool                          useHF, useShowerLibrary, useParam, applyFidCut;
00089   double                        eminHitHB, eminHitHE, eminHitHO, eminHitHF;
00090   double                        deliveredLumi;
00091   G4int                         mumPDG, mupPDG; 
00092   std::vector<double>           layer0wt, gpar;
00093   std::vector<int>              hfLevels;
00094   std::vector<G4String>         hfNames, fibreNames, matNames;
00095   std::vector<G4Material*>      materials;
00096   std::vector<G4LogicalVolume*> hfLV, fibreLV, pmtLV, fibre1LV, fibre2LV;
00097   std::map<uint32_t,double>     layerWeights;
00098   TH1F                          *hit_[9], *time_[9], *dist_[9], *hzvem, *hzvhad;
00099 
00100 };
00101 
00102 #endif // HCalSD_h