2 #include "G4Electron.hh"
3 #include "G4Positron.hh"
4 #include "G4VProcess.hh"
5 #include "G4SDManager.hh"
6 #include "G4PrimaryParticle.hh"
7 #include "G4PrimaryVertex.hh"
17 using namespace CLHEP;
27 recoEnergyScaleEB_ = myP.
getParameter<
double>(
"recoEnergyScaleEB");
28 recoEnergyScaleEE_ = myP.
getParameter<
double>(
"recoEnergyScaleEE");
31 histFile_ =
new TFile(histFileName_.c_str(),
"RECREATE");
33 TH1::AddDirectory(kTRUE);
36 em_incE =
new TH1F(
"em_incE",
"Incoming energy at Ecal;E (GeV);Number of Events",500,0.0,500.0);
37 em_vtx_rho =
new TH1F(
"em_vtx_rho",
"vertex position;#rho (cm);Number of Events",100,0.0,10.0);
38 em_vtx_z =
new TH1F(
"em_vtx_z",
"vertex position;z (cm);Number of Events",100,-10.0,10.0);
40 eb_ssp_rho =
new TH1F(
"eb_ssp_rho",
"Shower starting position;#rho (cm);Number of Events",200,0.0,200.0);
41 eb_hit_long =
new TH1F(
"eb_hit_long",
"longitudinal hit position;shower depth (cm);Number of energy weighted hits",400,0.0,200.0);
42 eb_hit_lat =
new TH1F(
"eb_hit_lat",
"lateral hit position;arm (cm);Number of energy weighted hits",100,0.0,5.0);
43 eb_hit_rz =
new TH2F(
"eb_hit_rz",
"hit position along the shower direction;shower depth (cm);arm (cm)",400,0.0,200.0,100,0.0,5.0);
44 eb_hit_long_sd =
new TH1F(
"eb_hit_long_sd",
"longitudinal hit position in Sensitive Detector;shower depth (cm);Number of energy weighted hits",400,0.0,200.0);
45 eb_hit_lat_sd =
new TH1F(
"eb_hit_lat_sd",
"lateral hit position in Sensitive Detector;arm (cm);Number of energy weighted hits",100,0.0,5.0);
46 eb_hit_rz_sd =
new TH2F(
"eb_hit_rz_sd",
"hit position along the shower direction in Sensitive Detector;shower depth (cm);arm (cm)",400,0.0,200.0,100,0.0,5.0);
48 ee_ssp_z =
new TH1F(
"ee_ssp_z",
"Shower starting position;z (cm);Number of Events",800,-400.0,400.0);
49 ee_hit_long =
new TH1F(
"ee_hit_long",
"longitudinal hit position;shower depth (cm);Number of energy weighted hits",800,0.0,400.0);
50 ee_hit_lat =
new TH1F(
"ee_hit_lat",
"lateral hit position;arm (cm);Number of energy weighted hits",100,0.0,5.0);
51 ee_hit_rz =
new TH2F(
"ee_hit_rz",
"hit position along the shower direction;shower depth (cm);arm (cm)",800,0.0,400.0,100,0.0,5.0);
52 ee_hit_long_sd =
new TH1F(
"ee_hit_long_sd",
"longitudinal hit position in Sensitive Detector;shower depth (cm);Number of energy weighted hits",800,0.0,400.0);
53 ee_hit_lat_sd =
new TH1F(
"ee_hit_lat_sd",
"lateral hit position in Sensitive Detector;arm (cm);Number of energy weighted hits",100,0.0,5.0);
54 ee_hit_rz_sd =
new TH2F(
"ee_hit_rz_sd",
"hit position along the shower direction in Sensitive Detector;shower depth (cm);arm (cm)",800,0.0,400.0,100,0.0,5.0);
70 const G4Event* evt = (*g4Event)();
71 inc_vertex = evt->GetPrimaryVertex(0)->GetPosition();
72 inc_position = inc_vertex;
73 inc_direction = evt->GetPrimaryVertex(0)->GetPrimary(0)->GetMomentum().unit();
74 inc_energy = evt->GetPrimaryVertex(0)->GetPrimary(0)->GetMomentum().mag();
77 em_incE->Fill(inc_energy/GeV);
78 em_vtx_rho->Fill(inc_vertex.rho()/cm);
79 em_vtx_z->Fill(inc_vertex.z()/cm);
81 if(
std::abs(inc_direction.eta()) < 1.5) eb_ssp_rho->Fill(inc_position.rho()/cm);
82 else ee_ssp_z->Fill(inc_position.z()/cm);
92 if(aStep ==
NULL)
return;
94 double hitEnergy = aStep->GetTotalEnergyDeposit();
96 if(hitEnergy < 1.0
e-6)
return;
98 bool inEB =
std::abs(inc_direction.eta()) < 1.5;
100 out_energy += hitEnergy;
103 G4ThreeVector hitPosition = aStep->GetPreStepPoint()->GetPosition();
104 G4ThreeVector
diff = hitPosition - inc_position;
105 double angle = diff.angle(inc_direction);
109 G4VSensitiveDetector* aSensitive = aStep->GetPreStepPoint()->GetSensitiveDetector();
112 hitEnergy *= recoEnergyScaleEB_;
113 eb_hit_long->Fill(diff_z/cm,hitEnergy/GeV);
114 eb_hit_lat->Fill(diff_r/cm,hitEnergy/GeV);
115 eb_hit_rz->Fill(diff_z/cm,diff_r/cm,hitEnergy/GeV);
117 eb_hit_long_sd->Fill(diff_z/cm,hitEnergy/GeV);
118 eb_hit_lat_sd->Fill(diff_r/cm,hitEnergy/GeV);
119 eb_hit_rz_sd->Fill(diff_z/cm,diff_r/cm,hitEnergy/GeV);
123 hitEnergy *= recoEnergyScaleEE_;
124 ee_hit_long->Fill(diff_z/cm,hitEnergy/GeV);
125 ee_hit_lat->Fill(diff_r/cm,hitEnergy/GeV);
126 ee_hit_rz->Fill(diff_z/cm,diff_r/cm,hitEnergy/GeV);
128 ee_hit_long_sd->Fill(diff_z/cm,hitEnergy/GeV);
129 ee_hit_lat_sd->Fill(diff_r/cm,hitEnergy/GeV);
130 ee_hit_rz_sd->Fill(diff_z/cm,diff_r/cm,hitEnergy/GeV);
T getParameter(std::string const &) const
#define DEFINE_SIMWATCHER(type)
void update(const BeginOfEvent *)
This routine will be called when the appropriate signal arrives.
Sin< T >::type sin(const T &t)
GflashG4Watcher(const edm::ParameterSet &p)
Cos< T >::type cos(const T &t)
Abs< T >::type abs(const T &t)
T angle(T x1, T y1, T z1, T x2, T y2, T z2)