ÓÐÁËC++µÄ»ù´¡ÖªÊ¶ÎÒÃǾÍÄܹ»ºÜºÃµØÀí½âG4µÄ³ÌÐò½á¹¹ÁË¡£
G4ÊDzÉÓõÄgcc±àÒëÆ÷£¬Òò´ËÆä³ÌÐò½á¹¹ÊǺÍC++Ò»ÑùµÄ¡£
Ê×ÏȰüÀ¨ÓÐÒ»¸öÖ÷³ÌÐòmain£¬È»ºó·Ö±ð°üº¬ÓÐ×Ó³ÌÐòsrcºÍÍ·Îļþinclude ÒÔ¼°ÆäËûµ÷ÓÃÎļþothers
G4ÀïÃæÎªÁËÓëC++ÏàÇø±ð£¬³ÌÐòºó׺¶¼ÊÇ.cc£¬Í·Îļþºó׺¶¼ÊÇ.hh
ÆäÖÐÍ·ÎļþÔÚ.ccÀïÃæÐ´Ò²Ã»ÎÊÌ⣬µ«ÊÇÄÇÑù¿´ÆðÀ´²»·½±ã£¬½¨Ò黹Êǰ´ÕÕc++µÄϰ¹ßÒ»Ò»¶ÔÓ¦±È½ÏºÃ¡£
ÄÇô£¬¹Ø¼üÎÊÌâÊÇÒª½øÐÐÒ»¸öÄ£ÄâÎÒÃǶ¼ÐèҪдÄÄЩsrcºÍincludeµÄ£¿
ÏÂÃæÎÒÃÇÊ×ÏÈ¿´G4ÀïÃæµÄ¼¸¸ö»ù±¾À࣬ÕâЩ»ù±¾Àà»ù±¾ÉÏÊÇÓësrcÒ»Ò»¶ÔÓ¦µÄ¡£
G4RunManager¡ª¡ª¶ÔÓ¦Ö÷³ÌÐò
Õâ¸öÀàÔÚÖ÷³ÌÐòÖÐÓÃÒÔ³õʼ»¯Ä£ÄâÐÅÏ¢µÄ£¬»òÕßÐÎÏóµØËµÊÇÓÃÓÚÁ¬½Ó×Ó³ÌÐòµÄ£¬ ¶øÁ¬½Ó·½Ê½ÊÇͨ¹ýSetº¯ÊýÀ´Íê³ÉµÄ
´ó¼Ò¿ÉÒÔ´Ó$G4INSTALL/source/run/G4RunManager.hhÀïÃæ²é¿´¸÷ÖÖSetº¯Êý£¬Èç public: // with description
inline void SetUserInitialization(G4VUserDetectorConstruction* userInit) { userDetector = userInit; }
inline void SetUserInitialization(G4VUserPhysicsList* userInit) {
physicsList = userInit;
kernel->SetPhysics(userInit); }
¿ÉÒÔ˵G4RunManagerÀàÊǹᴩÕû¸ö³ÌÐòÄ£Äâ¹ý³ÌµÄ×ÜÏߣ¬Òò´ËÒ»°ã˵À´Ö»ÄÜÓÐÒ»¸ö ¶ø¿ªÊ¼Ò»´ÎRunµÄÐźÅÔòÊÇͨ¹ýBeamOnº¯Êý·¢³öµÄ£¬Æä¸ñʽÊÇ
virtual void BeamOn(G4int n_event,const char* macroFile=0,G4int n_select=-1); ¿ÉÒÔͨ¹ý¶à´Îµ÷ÓÃBeamOnÀ´ÊµÏÖÑ»·¼ÆËã¡£
ÆäÓà×ÓÀà°üÀ¨¼¸ºÎ½á¹¹Àà¡¢ÎïÀíÉ趨Àà¡¢Á£×Ó·¢ÉäÆ÷ÀࣨԴÃèÊöÀࣩ¡¢Ê¼þ´¦ÀíÀà¡¢¾¶¼£´¦ÀíÀàµÈ¡£
ÕâЩÀà¿ÉÒÔ°´ÕÕÁ½ÖÖ²»Í¬µÄ·ÖÀ෽ʽ·ÖÀ࣬ÿÖÖ·ÖÀ෽ʽ¶¼¿ÉÒÔ·ÖΪÁ½Àà¡£
×ÓÀà°´ÕÕÖØÒªÐÔ·ÖÎªÇ¿ÖÆÀàºÍ¿ÉÑ¡Àà¡£ ÆäÖм¸ºÎ½á¹¹ÀࣨDetectorConstruction£©¡¢ÎïÀíÉ趨ÀࣨPhysicsList£©¡¢
Ô´ÃèÊöÀࣨPrimaryGenerator£©¶¼ÊôÓÚÇ¿ÖÆÀ࣬ÊDZØÐëÓеģ¬È±ÉÙÈÎÒ»¸ö³ÌÐò¶¼ÎÞ·¨ÔËÐС£ ¶øÊ¼þ´¦ÀíÀࣨEventAction£©¡¢²½Êý¾Ý´¦ÀíÀࣨSteppingAction£©¡¢¾¶¼£´¦ÀíÀࣨTrackingAction£©¡¢ÔËÐд¦ÀíÀࣨRunAction£©
¶¼ÊôÓÚ¿ÉÑ¡À࣬Óû§¿ÉÒÔͨ¹ýÉ趨ÕâЩÀàÀ´»ñÈ¡¸ÐÐËȤµÄÐÅÏ¢£¬ËäȻûÓÐÕâЩÀà³ÌÐòÒ»Ñù¿ÉÒÔÔËÐУ¬µ«ÊÇÈç¹ûÒ»¸ö¶¼Ã»Óеϰ£¬
ÕâÑùµÄÄ£ÄâÊÇûÓÐÒâÒåµÄ£¬³ý·ÇÊÇÓÃÀ´¼ìÑ鼸ºÎ½á¹¹µÄÍ걸ÐÔ¡£
×ÓÀà°´ÕÕµ÷Óùý³Ì·ÖΪ³õʼ»¯ÀàºÍÓû§¸ÉÉæÀà ÆäÖм¸ºÎ½á¹¹ÀࣨDetectorConstruction£©¡¢ÎïÀíÉ趨ÀࣨPhysicsList£©ÊôÓÚ³õʼ»¯À࣬ ÕâÁ½¸öÀàÔÚÿ´ÎRun¿ªÊ¼ºó¾Í¶ÔÄ£Äâ¹ý³Ì½øÐгõʼ»¯£¬Ö®ºóÔÚÁ£×Ó·¢É俪ʼºó£¨BeamOn
¿ªÊ¼ºó£©¾Í²»ÔÙ¼ÌÐøµ÷ÓÃÁË¡£
¶øÆäÓàµÄÀàÔòÊÇÔÚÿ·¢ÉäÒ»¸öÁ£×Óºó¶¼ÐèÒªµ÷Óõ쬾ßÌåµ÷Óùý³ÌÇ븴ϰµÚ¶þ½²ÖеÄÄ£ÄâËã·¨¡£
ÏÂÃæ½²Ò»¸öÌØÊâµÄÀà¡£
G4UImanager¡ª¡ªUI£¨user interface£©¹ÜÀíÆ÷
Õâ¸öÀàµÄÓ¢ÎÄÈ«ÃûÊÇuser interface manager£¬¹ËÃû˼ÒåÊÇÓÃÓÚÈË»ú½»»¥µÄ£¬Óû§¿ÉÒÔͨ¹ýÕâ¸öÀàÀ´ÏòÄ£Äâ¹ý³Ì·¢³ö¡°ÃüÁ£¬
Õâ¸öÀàÔÚÒ»¶¨³Ì¶ÈÉÏʹÓúܼò½àµÄÃüÁîÓï¾ä´úÌæÁËÉÏÊöÓû§¸ÉÉæÀàµÄ¹¦ÄÜ¡£
ÐèҪ˵Ã÷µÄÊÇ£¬ÉÏÃæËù˵µÄ¼¸¸öÀಢûÓаüÀ¨ËùÓпÉÑ¡À࣬¸ù¾Ýÿ¸öÓû§µÄÐèÇó£¬Óû§¿ÉÒÔÓкܶàÆäËûÀà¡£
ÏÂÃæÒÔ$G4INSTALL/example/novice/N01µÄÀý×ÓΪÀý¿´Ò»ÏÂÕâЩÀ࣬
ÒòΪÕâ¸öÁ£×Ó½öΪÁË˵Ã÷Geant4µÄ»ù±¾ÔËÓã¬ËùÒÔÕâ¸öÀý×ÓÀïÃæÖ»¶¨ÒåÁË3¸öÇ¿ÖÆÀ࣬ûÓÐʹÓÿÉÑ¡ÀàÀ´Êä³ö¸ÐÐËȤµÄÐÅÏ¢¡£
µ«ÊÇͨ¹ýUI¹ÜÀíÆ÷²é¿´ÁËÁ£×ÓÊäÔ˹ý³ÌÖеÄһЩÐÅÏ¢¡£
// Construct the default run manager
//Ê×ÏÈÊÇÒª´´½¨Ò»¸öÔËÐйÜÀíÆ÷µÄʵÀý£¬¸ù¾ÝC++µÄ֪ʶÎÒÃÇÖªµÀÿ¸öÀà¶¼±ØÐëͨ¹ýËûµÄʵÀýÀ´½øÐвÙ×÷
G4RunManager* runManager = new G4RunManager;
// set mandatory initialization classes
//ͨ¹ýSetº¯ÊýÉèÖü¸ºÎ½á¹¹ºÍÎïÀí¹ý³Ì£¬ÕâÁ½¸öÀàÊôÓÚÇ¿ÖÆÀ࣬ҲÊôÓÚ³õʼ»¯Àà G4VUserDetectorConstruction* detector = new ExN01DetectorConstruction; runManager->SetUserInitialization(detector);
//
G4VUserPhysicsList* physics = new ExN01PhysicsList; runManager->SetUserInitialization(physics);
// set mandatory user action class
//ͨ¹ýSetº¯Êý½øÐÐÔ´ÃèÊö£¬Õâ¸öÀàÊôÓÚÇ¿ÖÆÀ࣬ҲÊôÓÚÓû§¸ÉÉæÀà
G4VUserPrimaryGeneratorAction* gen_action = new ExN01PrimaryGeneratorAction; runManager->SetUserAction(gen_action);
// Initialize G4 kernel
//SetÍê³Éºó£¬Í¨¹ýInitialize()º¯Êý³õʼ»¯G4ÄÚºË runManager->Initialize();
// Get the pointer to the UI manager and set verbosities
//´´½¨UI¹ÜÀíÆ÷£¬Í¨¹ýUI¹ÜÀíÆ÷ÉèÖÃÔËÐС¢Ê¼þ¡¢¾¶¼£µÄ¿ÉÊÓ»¯¾«Ï¸³Ì¶È¡£ G4UImanager* UI = G4UImanager::GetUIpointer(); UI->ApplyCommand(\ UI->ApplyCommand(\
UI->ApplyCommand(\
// Start a run
//ͨ¹ýBeamOn()º¯Êý¿ªÊ¼Ä£Ä⣬ÕâÀïmacroFileºÍn_Select¶¼ÊÇʹÓÃÁËĬÈÏÖµ G4int numberOfEvent = 3;
runManager->BeamOn(numberOfEvent);
Ïà¹ØÍÆ¼ö£º