Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- GENERARE PARTICELLE
- ACTION INITIALIZATION---PARTICLE GUN
- ACTION.HH
- #ifndef ACTION_HH
- #define ACTION_HH
- #include "G4VUserActionInitialization.hh"
- class MyActionInitialization : public G4VUserActionInitialization
- {
- public:
- MyActionInitialization();
- ~MyActionInitialization();
- virtual void Build() const;
- {
- //prendiamo la funzione build dalla classe G4VUserActionInitialization che fa il run di una particella, funzione principale del programma
- MyPrimaryGenerator *generator = new MyPrimaryGenerator();
- SetUserAction(generator);
- }
- }
- #endif
- ACTION.CC
- #include "action.hh"
- MyActionInitialization::MyActionInitialization()
- {}
- MyActionInitialization::~MyActionInitialization()
- {}
- void MyActionInitialization::Build() const
- {}
- //La lascio vuota ma implemento nel main la runManager->SetUserInitialization(new MyActionInitialization()); e metto #include action.hh
- GENERARE PARTICELLE
- generator.hh
- #ifndef GENERATOR_HH
- #define GENERATOR_HH
- #include "G4VUserPrymaryGeneratorAction.hh"
- #include "G4SystemOfUnits.hh"
- #include "G4ParticleGun.hh"
- #include "G4ParticleTable.hh"
- class MyPrimaryGenerator : public G4VUserPrymaryGeneratorAction
- {
- public:
- MyPrimaryGenerator();
- ~MyPrimaryGenerator();
- virtual void GeneratorPrimaries(G4 Event*);
- //prendiamo la funzione build dalla classe G4VUserActionInitialization che fa il run di una particella, funzione principale del programma
- private:
- //adesso si definisce la particella incidente
- G4ParticleGun fParticleGun;
- }
- #endif
- GENERATOR.CC
- MyPrimaryGenerator::MyPrimaryGenerator()
- {
- fParticleGun = new G4Particleun(1);
- //dentro la parentesi va scritto il numero di particelle per evento. in g4 si fa un run con diversi eventi e ogni evento può contenere più particelle. ora è preferibile simulare una particella per ogni evento
- }
- MyPrimaryGenerator::~MyPrimaryGenerator()
- {
- delete fParticleGun;
- }
- //occupiamoci della funzione
- void MyPrimaryGenerator::GeneratorPrimaries(G4Event* anEvent)
- {
- G4ParticleTable *particleTable =G4ParticleTable::GetParticleTable();
- //questa è la clase, adesso, con il comando successivo, andiamo a trovare la particella.
- G4String particlename="proton";
- //definiamo la variabile particella
- G4ParticlDefinition *particle = ParticleTable->FindParticle("proton");
- //adesso riprendiamo la classe G4ThreeVector e creiamo il vettore posizione
- G4ThreeVector pos(0.,0.,0.,);//il protone viene generato al centro del volume madre
- G4ThreeVector mom(0.,0.,1.) //direzione iniziale del momento.
- fParticleGun->SetParticlePosition(pos); //usiamo la funzione SetParticlePosition e gli passiamo il nostro vettore
- fParticleGun->SetParticleMomentumDirection(mom); //solo direzinone del momento
- fParticleGun->SetParticleMomentum(100*GeV);//valore del momento, lo stanzard è MeV
- fParticleGun->SetParticleDefinition(proton);
- fParticleGun->GeneratePrimaryVertex(anEvent);
- }
- //adesso diciamo al main che vogliamo simulare la particella e devo dire anche di disegnare la traittoria con
- //UImanager->applycommand("/vis/scene/trajectories/smooth")
- //set autorefresh
- //modifico la funzione build in action.hh
Add Comment
Please, Sign In to add comment