5 #include "G4EventManager.hh"
7 #include "G4SDManager.hh"
8 #include "G4DigiManager.hh"
10 #include "G4RotationMatrix.hh"
11 #include "G4ThreeVector.hh"
22 #ifndef HYPER_VERBOSITY
33 G4String detectorElement)
34 :G4VDigitizerModule(name), detectorElement(detectorElement)
39 if(detectorElement==
"tank") collectionName.push_back(
"WCRawPMTSignalCollection");
40 else if(detectorElement==
"OD") collectionName.push_back(
"WCRawPMTSignalCollection_OD");
41 else G4cout <<
"detectorElement undefined..." << G4endl;
45 #ifdef HYPER_VERBOSITY
46 if(detectorElement==
"OD") G4cout<<
"WCSimWCPMT::WCSimWCPMT ☆ recording collection name "<<collectionName[0]<<G4endl;
59 G4String WCCollectionName;
66 G4double random = G4UniformRand();
67 G4double random2 = G4UniformRand();
70 for(i = 0; i < 501; i++){
72 if (random <= *(qpe0+i))
break;
75 random = G4UniformRand();
77 return (G4double(i-50) + random2)/22.83;
88 G4String WCCollectionName;
89 G4String DigitsCollectionName;
91 DigitsCollectionName=
"WCDigitizedCollection";
94 DigitsCollectionName=
"WCDigitizedCollection_OD";
100 G4DigiManager* DigiMan = G4DigiManager::GetDMpointer();
104 G4int WCHCID = DigiMan->GetHitsCollectionID(WCCollectionName);
110 #ifdef HYPER_VERBOSITY
112 G4cout<<
"WCSimWCPMT::Digitize ☆ Making digits collection (WCSimWCDigitsCollection*)"<<DigitsCollectionName<<
" for "<<
detectorElement
113 <<
" and calling MakePeCorrection on "<<WCCollectionName<<
" to fill it."<<G4endl;
123 #ifdef HYPER_VERBOSITY
125 G4cout<<
"WCSimWCPMT::Digitize ☆ Storing "<<DigitsCollectionName<<
" for "<<
detectorElement
144 G4String WCCollectionName;
153 #ifdef HYPER_VERBOSITY
155 G4cout<<
"WCSimWCPMT::MakePeCorrection ☆ making PE correction for ";
158 G4cout<<WCHC->entries();
162 G4cout<<
" entries"<<G4endl;
165 for (G4int i=0; i < WCHC->entries(); i++)
178 G4int tube = (*WCHC)[i]->GetTubeID();
180 G4double time_PMT, time_true;
182 for (G4int ip =0; ip < (*WCHC)[i]->GetTotalPe(); ip++){
193 time_true = (*WCHC)[i]->GetTime(ip);
196 int parent_id = (*WCHC)[i]->GetParentID(ip);
201 Digi->
AddPe(time_PMT);
203 Digi->
SetPe(ip,peSmeared);
211 (*DigitsCollection)[
DigiHitMapPMT[tube]-1]->SetLogicalVolume((*WCHC)[0]->GetLogicalVolume());
213 (*DigitsCollection)[
DigiHitMapPMT[tube]-1]->SetPe(ip,peSmeared);
214 (*DigitsCollection)[
DigiHitMapPMT[tube]-1]->SetTime(ip,time_PMT);
215 (*DigitsCollection)[
DigiHitMapPMT[tube]-1]->SetPreSmearTime(ip,time_true);
216 (*DigitsCollection)[
DigiHitMapPMT[tube]-1]->SetParentID(ip,parent_id);
void SetPreSmearTime(G4int gate, G4double T)
void SetLogicalVolume(G4LogicalVolume *logV)
static G4double first_time
void SetTubeID(G4int tube)
virtual G4double * Getqpe()=0
WCSimPMTObject * GetPMTPointer(G4String CollectionName)
G4THitsCollection< WCSimWCHit > WCSimWCHitsCollection
void SetPe(G4int gate, G4double Q)
WCSimDetectorConstruction * myDetector
G4TDigiCollection< WCSimWCDigi > WCSimWCDigitsCollection
G4String GetIDCollectionName()
std::map< int, int > DigiHitMapPMT
WCSimWCPMT(G4String name, WCSimDetectorConstruction *, G4String detectorElement)
WCSimWCDigitsCollection * DigitsCollection
void MakePeCorrection(WCSimWCHitsCollection *)
G4String GetODCollectionName()
void AddPe(G4double hitTime)
void SetTime(G4int gate, G4double T)
void SetParentID(G4int gate, G4int parent)