00001 /*! 00002 00003 $Id$ 00004 00005 Last update to: 00006 Id: Readme-Questions 122 2008-06-30 15:25:12Z maire 00007 00008 00009 \file "jour3b/.Readme-Questions" 00010 \brief L'exercise de jour3b 00011 00012 \mainpage jour3b 00013 00014 \section s1 GEOMETRIE 00015 00016 Une navette spatiale est modelisee par un cylindre d'Aluminium. 00017 A l'interieur de la cabine se trouve un plancher, egalement en Aluminium. 00018 La navette est placée dans l'espace ('World') : une boite aussi petite que 00019 possible. 00020 00021 Un astronaute est placé sur le plancher. 00022 00023 00024 \section s2 COMMENT DEMARRER ? 00025 00026 - lire le code : jour3b.cc (main) et les 5 classes DetectorConstruction, 00027 DetectorMessenger, PhysicsList, PrimaryGeneratorAction, 00028 PrimaryGeneratorMessenger. 00029 00030 - compiler et generer un executable : 00031 \verbatim 00032 % gmake 00033 \endverbatim 00034 00035 - executer jour3b en mode interactif avec visualisation : 00036 \verbatim 00037 % $G4WORKDIR/bin/$G4SYSTEM/jour3b 00038 .... 00039 Idle> /run/beamOn 1 00040 .... 00041 Idle> exit 00042 \endverbatim 00043 00044 \section s3 CORRIGE et COMMENTAIRES de jour3a 00045 00046 - RunAction.hh : remarquer le constructeur et la fonction in-line AddEdep() 00047 - RunAction.cc : pour le calcul de la dose, on a besoin de la masse de 00048 l'astronaute. On peut obtenir cette information via 00049 logicalVolume de l'astronaute. D'ou la necessité d'un 00050 pointeur sur DetectorConstruction. 00051 Remarquer aussi les differents modes d'impression. 00052 - SteppingAction : on a modifié le constructeur pour avoir un pointeur sur 00053 RunAction. 00054 - jour3b.cc : la classe RunAction est enregistrée aupres de RunManager 00055 00056 \section s4 EXERCICES 00057 00058 On veut calculer la precision sur la dose cumulée par l'astronaute. 00059 Pour cela, on a besoin de la variable aleatoire "energie recue par evenement", 00060 pour calculer sa valeur moyenne et son ecart-type. 00061 00062 (1 evenement = 1 proton initial qui 'touche' l'astronaute.) 00063 00064 Il faut donc sommer l'energie recue evenement par evenement avant 00065 de la sommer sur tout le run. 00066 00067 On prendra modele sur examples/extended/electromagnetic/TestEm11 00068 00069 \subsection sub1 PARTIE 1 : sommer edep dans EventAction 00070 00071 a) Ajouter une classe EventAction (vide pour l'instant). 00072 Dans les data membres privées, prevoir un pointeur sur RunAction 00073 00074 b) Prevoir la variable EdepPerEvent et la fonction inline AddEdep() 00075 00076 c) Instancier la classe EventAction dans le main programme: jour3b.cc 00077 00078 d) Modifier le constructeur de SteppingAction pour passer un pointeur sur 00079 EventAction, en plus de celui sur RunAction 00080 00081 e) Modifier la fonction SteppingAction::UserSteppingAction() pour effectuer 00082 la somme sur edep dans EventAction 00083 00084 f) Imprimer EdepPerEvent depuis EventAction::EndOfEventAction() 00085 00086 \subsection sub2 PARTIE 2 : sommer EdepPerEvent dans RunAction 00087 00088 Pour calculer la valeur moyenne et la variance de EdepPerEvent, on a besoin 00089 de la somme sur EdepPerEvent et de la somme des carrés. 00090 00091 a) dans RunAction.hh, prevoir 3 données membres privées : 00092 sumEdep, sumEdep2 (pour les carrés), nbEntry (pour le nombre d'evenements 00093 avec EdepPerEvent non nul) 00094 00095 b) prevoir aussi une fonction inline SumEvents() 00096 (voir dans TestEm11 la fonction inline RunAction::AddEdep(e)). 00097 Y ajouter l'incrementation du compteur nbEntry. 00098 00099 c) Dans EventAction::EndOfEventAction(), si EdepPerEvent est non nul, la 00100 passer a RunAction::SumEvents() 00101 00102 d) Dans RunAction::EndOfRunAction(), calculer la moyenne et l'ecart type de 00103 EdepPerEvent (voir TestEm11). 00104 00105 L'erreur relative sur la dose cumulée est (1/sqrt(nbEntry))*(rms/mean) 00106 Imprimer la dose cumulée et son erreur. 00107 00108 e) supprimer l'impression dans EventAction et faire une macro pour executer 00109 un job en mode 'batch' avec 50000 evenements. 00110 00111 \section s5 SOLUTIONS : voir le code jour3c 00112 00113 */