⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 g4track.cc

📁 利用linux环境下蒙特卡罗计算工具geant4实现伽玛射线与探测器乘积能量的模拟过程
💻 CC
字号:
//// ********************************************************************// * DISCLAIMER                                                       *// *                                                                  *// * The following disclaimer summarizes all the specific disclaimers *// * of contributors to this software. The specific disclaimers,which *// * govern, are listed with their locations in:                      *// *   http://cern.ch/geant4/license                                  *// *                                                                  *// * Neither the authors of this software system, nor their employing *// * institutes,nor the agencies providing financial support for this *// * work  make  any representation or  warranty, express or implied, *// * regarding  this  software system or assume any liability for its *// * use.                                                             *// *                                                                  *// * This  code  implementation is the  intellectual property  of the *// * GEANT4 collaboration.                                            *// * By copying,  distributing  or modifying the Program (or any work *// * based  on  the Program)  you indicate  your  acceptance of  this *// * statement, and all its terms.                                    *// ********************************************************************////// $Id: G4Track.cc,v 1.22 2004/12/02 06:38:17 kurasige Exp $// GEANT4 tag $Name: geant4-07-00-patch-01 $//////---------------------------------------------------------------////  G4Track.cc////---------------------------------------------------------------//   Add copy constructor            Hisaya Feb. 07 01//   Fix GetVelocity                 Hisaya Feb. 17 01//   Modification for G4TouchableHandle             22 Oct. 2001  R.Chytracek//#include "G4Track.hh"G4Allocator<G4Track> aTrackAllocator;///////////////////////////////////////////////////////////G4Track::G4Track(G4DynamicParticle* apValueDynamicParticle,                 G4double aValueTime,                 const G4ThreeVector& aValuePosition)///////////////////////////////////////////////////////////  : fCurrentStepNumber(0),    fPosition(aValuePosition),    fGlobalTime(aValueTime),  fLocalTime(0.),    fTrackLength(0.),    fParentID(0),             fTrackID(0),    fpDynamicParticle(apValueDynamicParticle),    fTrackStatus(fAlive),    fBelowThreshold(false),   fGoodForTracking(false),    fStepLength(0.0),         fWeight(1.0),    fpStep(0),    fVtxKineticEnergy(0.0),    fpLVAtVertex(0),          fpCreatorProcess(0),    fpUserInformation(0){    }//////////////////G4Track::G4Track()//////////////////  : fCurrentStepNumber(0),        fGlobalTime(0),           fLocalTime(0.),    fTrackLength(0.),    fParentID(0),             fTrackID(0),    fpDynamicParticle(0),    fTrackStatus(fAlive),    fBelowThreshold(false),   fGoodForTracking(false),    fStepLength(0.0),         fWeight(1.0),    fpStep(0),    fVtxKineticEnergy(0.0),    fpLVAtVertex(0),          fpCreatorProcess(0),    fpUserInformation(0){}//////////////////G4Track::G4Track(const G4Track& right)//////////////////{  *this = right;}///////////////////G4Track::~G4Track()///////////////////{   delete fpDynamicParticle;   delete fpUserInformation;}//////////////////G4Track & G4Track::operator=(const G4Track &right)//////////////////{  if (this != &right) {   fPosition = right.fPosition;   fGlobalTime = right.fGlobalTime;   fLocalTime = right.fLocalTime;   fTrackLength = right.fTrackLength;   fWeight = right.fWeight;   fStepLength = right.fStepLength;   // Track ID (and Parent ID) is not copied and set to zero for new track   fTrackID = 0;   fParentID =0;   // CurrentStepNumber is set to be 0   fCurrentStepNumber = 0;   // dynamic particle information    fpDynamicParticle = new G4DynamicParticle(*(right.fpDynamicParticle));    // track status and flags for tracking     fTrackStatus = right.fTrackStatus;   fBelowThreshold = right.fBelowThreshold;   fGoodForTracking = right.fGoodForTracking;      // Step information (Step Length, Step Number, pointer to the Step,)    // are not copied   fpStep=0;   // vertex information   fVtxPosition = right.fVtxPosition;   fpLVAtVertex = right.fpLVAtVertex;   fVtxKineticEnergy = right.fVtxKineticEnergy;   fVtxMomentumDirection = right.fVtxMomentumDirection;   // CreatorProcess and UserInformation are not copied    fpCreatorProcess = 0;   fpUserInformation = 0;  }  return *this;}///////////////////void G4Track::CopyTrackInfo(const G4Track& right)//////////////////{  *this = right;}#include "G4ParticleTable.hh"///////////////////G4double G4Track::GetVelocity() const///////////////////{   static G4bool isFirstTime = true;  static G4ParticleDefinition* fOpticalPhoton =0;  if ( isFirstTime ) {    isFirstTime = false;    // set  fOpticalPhoton    fOpticalPhoton = G4ParticleTable::GetParticleTable()->FindParticle("opticalphoton");  }  G4double velocity ;    G4double mass = fpDynamicParticle->GetMass();  // mass less particle    if( mass == 0. ){    velocity = c_light ;     // special case for photons    if ( (fOpticalPhoton !=0)  &&	 (fpDynamicParticle->GetDefinition()==fOpticalPhoton) ){     G4Material*	mat=fpTouchable->GetVolume()->GetLogicalVolume()->GetMaterial();       if(mat->GetMaterialPropertiesTable() != 0){	if(mat->GetMaterialPropertiesTable()->GetProperty("RINDEX") != 0 ){           // light velocity = c/reflection-index 	  velocity /= 	    mat->GetMaterialPropertiesTable()->GetProperty("RINDEX")->	    GetProperty(fpDynamicParticle->GetTotalMomentum()) ; 	}      }      }  } else {    G4double T = fpDynamicParticle->GetKineticEnergy();    velocity = c_light*std::sqrt(T*(T+2.*mass))/(T+mass) ;  }    return velocity ; } 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -