Go to the documentation of this file.00001 #ifndef _EcalSimHitsValidProducer_h
00002 #define _EcalSimHitsValidProducer_h
00003 #include <string>
00004 #include <vector>
00005 #include <map>
00006
00007 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00008 #include "SimG4Core/Watcher/interface/SimProducer.h"
00009 #include "SimG4Core/Notification/interface/Observer.h"
00010 #include "DataFormats/EcalDetId/interface/EEDetId.h"
00011 #include "DataFormats/EcalDetId/interface/EBDetId.h"
00012 #include "DataFormats/EcalDetId/interface/ESDetId.h"
00013
00014 #include "DataFormats/Math/interface/LorentzVector.h"
00015
00016 class BeginOfEvent;
00017 class G4Step;
00018 class EndOfEvent;
00019 class PEcalValidInfo;
00020
00021 class EcalSimHitsValidProducer : public SimProducer,
00022 public Observer<const BeginOfEvent*>,
00023 public Observer<const G4Step*>,
00024 public Observer<const EndOfEvent*>
00025 {
00026 typedef std::vector<float> FloatVector;
00027 typedef std::map<uint32_t,float,std::less<uint32_t> > MapType;
00028
00029 public:
00030 EcalSimHitsValidProducer(const edm::ParameterSet&);
00031 virtual ~EcalSimHitsValidProducer();
00032
00033 void produce(edm::Event&, const edm::EventSetup&);
00034
00035
00036 private:
00037 EcalSimHitsValidProducer(const EcalSimHitsValidProducer&);
00038 const EcalSimHitsValidProducer& operator=(const EcalSimHitsValidProducer&);
00039
00040 void update(const BeginOfEvent*);
00041 void update(const G4Step*);
00042 void update(const EndOfEvent*);
00043
00044 void fillEventInfo(PEcalValidInfo&);
00045
00046 private:
00047 uint32_t getUnitWithMaxEnergy(MapType& themap);
00048
00049 float energyInEEMatrix(int nCellInX, int nCellInY,
00050 int centralX, int centralY, int centralZ,
00051 MapType& themap);
00052 float energyInEBMatrix(int nCellInX, int nCellInY,
00053 int centralX, int centralY, int centralZ,
00054 MapType& themap);
00055
00056
00057 bool fillEEMatrix(int nCellInEta, int nCellInPhi,
00058 int CentralEta, int CentralPhi,int CentralZ,
00059 MapType& fillmap, MapType& themap);
00060
00061 bool fillEBMatrix(int nCellInEta, int nCellInPhi,
00062 int CentralEta, int CentralPhi,int CentralZ,
00063 MapType& fillmap, MapType& themap);
00064
00065 float eCluster2x2( MapType& themap);
00066 float eCluster4x4(float e33,MapType& themap);
00067
00068 private:
00069 float ee1;
00070 float ee4;
00071 float ee9;
00072 float ee16;
00073 float ee25;
00074
00075 float eb1;
00076 float eb4;
00077 float eb9;
00078 float eb16;
00079 float eb25;
00080
00081 float totalEInEE;
00082 float totalEInEB;
00083 float totalEInES;
00084
00085 float totalEInEEzp;
00086 float totalEInEEzm;
00087 float totalEInESzp;
00088 float totalEInESzm;
00089
00090 int totalHits;
00091 int nHitsInEE;
00092 int nHitsInEB;
00093 int nHitsInES;
00094 int nHitsIn1ES;
00095 int nHitsIn2ES;
00096 int nCrystalInEB;
00097 int nCrystalInEEzp;
00098 int nCrystalInEEzm;
00099
00100 int nHitsIn1ESzp;
00101 int nHitsIn1ESzm;
00102 int nHitsIn2ESzp;
00103 int nHitsIn2ESzm;
00104
00105 float eBX0[26];
00106 float eEX0[26];
00107
00108
00109 FloatVector eOf1ES;
00110 FloatVector eOf2ES;
00111 FloatVector eOf1ESzp;
00112 FloatVector eOf1ESzm;
00113 FloatVector eOf2ESzp;
00114 FloatVector eOf2ESzm;
00115
00116
00117 FloatVector zOfES;
00118 FloatVector phiOfEECaloG4Hit;
00119 FloatVector etaOfEECaloG4Hit;
00120 FloatVector tOfEECaloG4Hit;
00121 FloatVector eOfEECaloG4Hit;
00122 FloatVector eOfEEPlusCaloG4Hit;
00123 FloatVector eOfEEMinusCaloG4Hit;
00124
00125 FloatVector phiOfEBCaloG4Hit;
00126 FloatVector etaOfEBCaloG4Hit;
00127 FloatVector tOfEBCaloG4Hit;
00128 FloatVector eOfEBCaloG4Hit;
00129
00130 FloatVector phiOfESCaloG4Hit;
00131 FloatVector etaOfESCaloG4Hit;
00132 FloatVector tOfESCaloG4Hit;
00133 FloatVector eOfESCaloG4Hit;
00134
00135 math::XYZTLorentzVector theMomentum;
00136 math::XYZTLorentzVector theVertex;
00137
00138 int thePID;
00139 std::string label;
00140 };
00141
00142 #endif