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