// Gen_Laserball.cc // Contact person: Jose Maneira // See Gen_Laserball.hh for more details //———————————————————————// #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; namespace RAT { Gen_Laserball::Gen_Laserball() : GLG4Gen("laserball"), fStateStr(""), fMessenger(0) { // Set vertex generator to Laserball fVertexGen = new VertexGen_Laserball(); // Set position generator to Laserball fPosGen = new PosGen_Laserball(); // Default time generator fTimeGen = new GLG4TimeGen_Poisson(); // Default to no poisson fluctuations of number of photons per pulse fPoisson = false; } Gen_Laserball::~Gen_Laserball() { } void Gen_Laserball::GenerateEvent(G4Event *event) { debug << "Gen_Laserball::GenerateEvent: Generating Laserball events with top level generator\n"; G4double t0 = NextTime(); G4ThreeVector pos; fPosGen->GeneratePosition(pos); debug << "Gen_Laserball: time = " << t0 << " position = (" << pos.x() << ", " << pos.y() << ", " << pos.z() << ")\n"; fVertexGen->GeneratePrimaryVertex(event, pos, t0); } void Gen_Laserball::ResetTime(double offset) { fNextTime = fTimeGen->GenerateEventTime() + offset; } void Gen_Laserball::SetState(G4String /*state*/) { // Can't set state here yet } G4String Gen_Laserball::GetState() const { return fStateStr; } void Gen_Laserball::SetTimeGen(G4String state) { try { delete fTimeGen; fTimeGen = 0; // In case of exception in next line fTimeGen = RAT::GlobalFactory::New(state); info << "Gen_Laserball::SetTimeGen: Setting Laserball time generator to " << state << "\n"; } catch (RAT::FactoryUnknownID &unknown) { warn << "Gen_Laserball: Unknown time generator \"" << unknown.id << "\"" << newline; } } void Gen_Laserball::SetTimeState(G4String state) { if (fTimeGen){ fTimeGen->SetState(state); }else{ warn << "Gen_Laserball::SetTimeState error: Cannot set time state, no time generator selected" << newline; } } G4String Gen_Laserball::GetTimeState() const { if (fTimeGen) return fTimeGen->GetState(); else return G4String("Gen_Laserball::GetTimeStat error: no time generator selected"); } void Gen_Laserball::SetVertexState(G4String /*state*/) { warn << "Gen_Laserball::SetVertexState error: Cannot set vertex state - fixed to VertexGen_Laserball" << newline; } G4String Gen_Laserball::GetVertexState() const { return G4String("Gen_Laserball::GetVertexState: vertex generator fixed to VertexGen_Laserball"); } void Gen_Laserball::SetPosState(G4String /*state*/) { warn << "Gen_Laserball::SetPosState error: Cannot set position state - fixed to PosGen_Laserball" << newline; } G4String Gen_Laserball::GetPosState() const { return G4String("Gen_Laserball::GetPosState: position generator fixed to PosGen_Laserball"); } void Gen_Laserball::SetPoissonFluctuations(G4bool set) { fPoisson = set; if(fPoisson){ info << "Gen_Laserball::SetPoissonFluctuations: Poisson fluctuation number of photons per pulse " <<"\n"; }else{ info << "Gen_Laserball::SetPoissonFluctuations: Fixing number of photons per pulse \n"; } } } // namespace RAT