|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
下面有两个类,SteppingAction.c文件和RunAction.c,两个文件的头文件彼此都没有相互包含,
两个函数在软件里的调用是,先调用RunAction类里面的BeginOfRunAction函数,然后 执行N次的SteppingAction类之后,N次的SteppingAction类执行完毕之后 会调用 RunAction类里面的EndOfRunAction函数,
现在的问题是:
两个类的最开始都定义了 DepositArray全局变量数组,理论上是希望这是同一个数组,然后在SteppingAction类执行完毕之后,在RunAction类里面保存这个数组的内容,
我的问题是,这两个类,风马牛不相及,彼此没有相互包含,还各各自定义了各自的全局变量,最后是怎么实现数据传递的,。。。。。结果看上去是可靠的。。。。
- //
- using namespace std;
- extern G4double DepositArray[500];
- mutex step_lock1;
- namespace B1
- {
- SteppingAction::SteppingAction(EventAction *eventAction)
- : fEventAction(eventAction)
- {
- filename = "View_0.txt";
- }
- SteppingAction::~SteppingAction()
- {
- }
- void SteppingAction::UserSteppingAction(const G4Step *step)
- {
- // get volume of the current step
- G4String volumeName = step->GetPreStepPoint()->GetPhysicalVolume()->GetName();
- // ParticleName
- G4String ParticleName = step->GetTrack()->GetDynamicParticle()->GetParticleDefinition()->GetParticleName();
- if (volumeName == "DetectorArray")
- {
-
- G4int copyNo = step->GetPreStepPoint()->GetPhysicalVolume()->GetCopyNo();
-
- G4double edep = step->GetTotalEnergyDeposit();
- step_lock1.lock();
- DepositArray[copyNo] = DepositArray[copyNo] + edep;
- step_lock1.unlock();
- }
- }
- }
复制代码
- //
- #include <fstream>
- using namespace std;
- G4double DepositArray[500] = {0};
- namespace B1
- {
- RunAction::RunAction()
- {
- }
- RunAction::~RunAction()
- {
- }
- void RunAction::BeginOfRunAction(const G4Run *)
- {
- }
- void RunAction::EndOfRunAction(const G4Run *run)
- {
- //if(IsMaster())语句用于判断当前程序是否为主节点,并根据结果执行相应的操作,以确保在文件存储过程中只有主节点进行相关操作。
- if (IsMaster())
- {
- ofstream DataOutPut;
- DataOutPut.open("./DataOutPut.txt",ios::trunc);
- for (int i = 0; i < sizeof(DepositArray) / sizeof(DepositArray[0]); i++)
- {
- DataOutPut << i << "\t" << DepositArray[i] << G4endl;
- }
- DataOutPut.close();
- }
- }
- }
复制代码 |
|