blob: 75375c1558d43f3127c420e0f12e836b36c2079c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
/**
* Copyright (C) 2009
* The IceCube collaboration
* ID: $Id: G4TankIceSD.h 149388 2016-08-18 21:50:04Z jgonzalez $
*
* @file G4TankIceSD.h
* @version $Rev: 149388 $
* @date $Date: 2016-08-18 22:50:04 +0100 (Thu, 18 Aug 2016) $
* @author Tilo Waldenmaier, Thomas Melzig
*/
#ifndef _G4TANKRESPONSE_G4TankIceSD_H
#define _G4TANKRESPONSE_G4TankIceSD_H
#include <icetray/OMKey.h>
#include <G4VSensitiveDetector.hh>
#include <G4ThreeVector.hh>
#include <map>
class G4Step;
class G4HCofThisEvent;
class G4TouchableHistory;
/**
* An "ice sensitive detector". This sensitive detector is meant to be associated with the ice logical volume in a tank.
*
* This class keeps track of the energy losses and number Cherenkov photons produced in the ice of each tank.
* The Cherenkov photons are counted in two ways. One is a simple count and the other is a weighted count
* where the weight depends on the distance from the photon emission point an the OM.
*/
class G4TankIceSD : public G4VSensitiveDetector
{
public:
G4TankIceSD(G4String name, const std::map<OMKey, G4ThreeVector>& domPositions);
~G4TankIceSD();
/// Methods called by Geant4 framework
void Initialize(G4HCofThisEvent *HCE);
G4bool ProcessHits(G4Step *aStep, G4TouchableHistory *ROhist);
void EndOfEvent(G4HCofThisEvent *HCE);
/// Get total energy deposit for a given OM (same for both OMs in a tank)
G4double GetEDep(const OMKey& omKey) {return sumEdep_[omKey];}
/// Get average emission time weighted by deposited energy (same for both OMs in a tank)
G4double GetTime(const OMKey& omKey) {return cogTime_[omKey];}
/// Get number of Cherenkov photons for a given OM (same for both OMs in a tank)
G4double GetNumCherenkov(const OMKey& omKey) {return cherenkovCounter_[omKey];}
/// Get number of Cherenkov photons for a given OM weighted relative to emission point
G4double GetNumCherenkovWeight(const OMKey& omKey) {return cherenkovCounterWeight_[omKey];}
private:
//ExN04TrackerHitsCollection *trackerCollection;
const std::map<OMKey, G4ThreeVector> domPositions_;
/// Cherenkov production. See technical note
G4double GetCerenkovNumber(G4Step* aStep);
G4double GetProbability(G4double radius, G4double height);
std::map<OMKey, G4double> sumEdep_;
std::map<OMKey, G4double> cogTime_;
std::map<OMKey, G4double> cherenkovCounter_;
std::map<OMKey, G4double> cherenkovCounterWeight_;
};
#endif
|