马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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();
}
}
}
|