当前位置: 首页>>代码示例>>C++>>正文


C++ Process::SetLimits方法代码示例

本文整理汇总了C++中Process::SetLimits方法的典型用法代码示例。如果您正苦于以下问题:C++ Process::SetLimits方法的具体用法?C++ Process::SetLimits怎么用?C++ Process::SetLimits使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Process的用法示例。


在下文中一共展示了Process::SetLimits方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: Propagate


//.........这里部分代码省略.........
			realpath = stepsize / corrB_factor;
		}

		zpos -= dz;
		walkdone += realpath;
		Elast = Ecurr;

		if (type == 0 || type == 22)
			Ecurr = EnergyLoss1D(Ecurr, zpos + Mpc2z(realpath), zpos, 0);
		else
			Ecurr = EnergyLoss1D(Ecurr, zpos + Mpc2z(realpath), zpos, BNorm);

		z_curr = zpos;

		curr_particle.Setz(z_curr);
		curr_particle.SetEnergy(Ecurr);

				
		if (z_curr <= 0) 
		{
			ParticleAtGround.push_back(curr_particle);
			return;
		}
		if (Ecurr <= Ethr2) 
		{ 
			if (!dropParticlesBelowEnergyThreshold)
			{
				ParticleAtGround.push_back(curr_particle);
			}
			return;
		}
		proc.SetIncidentParticle(curr_particle);
		proc.SetCMEnergy();
		proc.SetLimits();
		//      std::vector<double> EtargetAll=GetEtarget(proc,curr_particle);
		min_dist = ExtractMinDist(proc, curr_particle.GetType(), R, R2,
				EtargetAll);
	} //end while

	if (interacted == 1) {
		if (proc.GetName() == Process::PP) {

			E1 = ExtractPPSecondariesEnergy(proc);

			if (E1 == 0 || E1 == Ecurr)
				std::cerr << "ERROR in PP process:  E : " << Ecurr << "  " << E1
						<< " " << std::endl;

			Particle pp(11, E1, z_curr,curr_particle.Generation()+1);
			pp.SetWeigth(wi_last);
			ParticleAtMatrix.push_back(pp);

			Particle pe(-11, Ecurr - E1, z_curr,curr_particle.Generation()+1);
			pe.SetWeigth(wi_last);
			ParticleAtMatrix.push_back(pe);
			return;
		} //if PP
		else if (proc.GetName() == Process::DPP) {
		  E1 = (Ecurr - 2 * ElectronMass) / 2.0;
			if (E1 == 0)
				std::cerr << "ERROR in DPP process E : " << E1 << std::endl;

			Particle pp(11, E1, z_curr,curr_particle.Generation()+1);
			pp.SetWeigth(wi_last);
			ParticleAtMatrix.push_back(pp);
			
开发者ID:phyytang,项目名称:CRPropa3,代码行数:66,代码来源:Propagation.cpp

示例2: if

std::vector<double> Propagation::GetEtarget(Process &proc,
		const Particle &particle) const {

	std::vector<double> Etarget;
	double Etarget_tmp = 0;
	double smintmp = 0;
	double z_curr = particle.Getz();
	double Energy = particle.GetEnergy();
	int pType = particle.GetType();
	double Eexp = smintmp/(4.0 * Energy);

	if (pType == 22) {
		proc.SetName(Process::PP);
	  proc.SetLimits();
	  smintmp = proc.GetMin(); 
	  Eexp = std::max(proc.feps_inf,ElectronMass*ElectronMass/Energy);    
	  if (Eexp > proc.feps_sup) {
//	    std::cout << proc.GetName() << "  " <<  Eexp << " too big wrt " << proc.feps_sup << " , " << proc.feps_inf << " .. it should not interact!" << std::endl;
	    Eexp = 0; 
	    Etarget.push_back(0);}
	  else
	    Etarget_tmp = ShootPhotonEnergyMC(Eexp, z_curr);
	  Etarget.push_back(Etarget_tmp);

		proc.SetName(Process::DPP);
	  proc.SetLimits();
	  smintmp = proc.GetMin();
	  Eexp = std::max(proc.feps_inf,2*ElectronMass*ElectronMass/Energy);
	  if (Eexp > proc.feps_sup) {
//	    std::cout << proc.GetName() << "  " <<  Eexp << " too big wrt " << proc.feps_sup << " , " << proc.feps_inf << " .. it should not interact!" << std::endl;
	    Eexp = 0; 
	    Etarget.push_back(0);}
	  else
	    Etarget_tmp = ShootPhotonEnergyMC(Eexp, z_curr);	  
	  Etarget.push_back(Etarget_tmp);
	}

	else if (abs(pType) == 11) {
		proc.SetName(Process::ICS);
	  proc.SetLimits();
	  smintmp = proc.GetMin();
	  Eexp = proc.feps_inf;
          Etarget_tmp = ShootPhotonEnergyMC(Eexp, z_curr);	  
	  
	  Etarget.push_back(Etarget_tmp);
	  
		proc.SetName(Process::TPP);
	  proc.SetLimits();
	  smintmp = proc.GetMin();
	  Eexp = std::max(proc.feps_inf,2*ElectronMass*ElectronMass/Energy);
	  if (Eexp > proc.feps_sup) {
//	    std::cout << proc.GetName() << "  " <<  Eexp << " too big wrt " << proc.feps_sup << " , " << proc.feps_inf << " .. it should not interact!" << std::endl;
	    Eexp = 0; 
	    Etarget.push_back(0);}
	  else
	    Etarget_tmp = ShootPhotonEnergyMC(Eexp, z_curr);	  

	  Etarget.push_back(Etarget_tmp);
	}    //end e/e
	else
		std::cerr << "something wrong in particle type ( " << pType
				<< ". Propagation of photons and e+/e- is the only allowed.)"
				<< std::endl;

	if (Etarget.size() != 2) {
		std::cout << "something wrong with the Etarget!! " << std::endl;
		exit(0);
	}

	return Etarget;
}
开发者ID:phyytang,项目名称:CRPropa3,代码行数:71,代码来源:Propagation.cpp


注:本文中的Process::SetLimits方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。