本文整理汇总了C++中Blob::SetTypeSpec方法的典型用法代码示例。如果您正苦于以下问题:C++ Blob::SetTypeSpec方法的具体用法?C++ Blob::SetTypeSpec怎么用?C++ Blob::SetTypeSpec使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Blob
的用法示例。
在下文中一共展示了Blob::SetTypeSpec方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: PerformMixing
ATOOLS::Blob* Mixing_Handler::PerformMixing(Particle* decayer) const
{
// explicit mixing in event record
Flavour flav = decayer->Flav();
string tag = flav.IsAnti() ? flav.Bar().IDName() : flav.IDName();
if(m_model("Mixing_"+tag,0.0)!=0.0 && decayer->Info()!=char('M')) {
double t = DetermineMixingTime(decayer,true)/rpa->hBar();
if(t==0.0) return NULL;
double factor = decayer->Flav().QOverP2();
if(decayer->Flav().IsAnti()) factor = 1.0/factor;
double dG = decayer->Flav().DeltaGamma()*t/4.0;
double dm = decayer->Flav().DeltaM()*t/2.0;
Complex i(0.0,1.0);
double prob_not_mix = sqr(abs(exp(i*dm)*exp(dG)+exp(-i*dm)*exp(-dG)));
double prob_mix = factor*sqr(abs(exp(i*dm)*exp(dG)-exp(-i*dm)*exp(-dG)));
if(prob_mix > ran->Get()*(prob_mix+prob_not_mix)) {
if(decayer->DecayBlob()) {
decayer->DecayBlob()->RemoveOwnedParticles();
delete decayer->DecayBlob();
}
decayer->SetStatus(part_status::decayed);
decayer->SetInfo('m');
Particle* mixed_part = new Particle(0, decayer->Flav().Bar(),
decayer->Momentum(), 'M');
mixed_part->SetFinalMass(decayer->FinalMass());
mixed_part->SetStatus(part_status::active);
mixed_part->SetTime(decayer->Time());
Blob* mixingblob = new Blob();
mixingblob->SetType(btp::Hadron_Mixing);
mixingblob->SetId();
mixingblob->SetStatus(blob_status::inactive);
mixingblob->SetTypeSpec("HADRONS");
mixingblob->AddToInParticles(decayer);
mixingblob->AddToOutParticles(mixed_part);
mixingblob->SetPosition(decayer->ProductionBlob()->Position());
mixingblob->SetStatus(blob_status::needs_hadrondecays);
return mixingblob;
}
}
return NULL;
}
示例2: CreateDecayBlob
void Hard_Decay_Handler::CreateDecayBlob(ATOOLS::Particle* inpart)
{
DEBUG_FUNC(inpart->Flav());
if(inpart->DecayBlob()) THROW(fatal_error,"Decay blob already exists.");
if(!Decays(inpart->Flav())) return;
Blob* blob = p_bloblist->AddBlob(btp::Hard_Decay);
blob->SetStatus(blob_status::needs_showers);
blob->AddStatus(blob_status::needs_extraQED);
blob->AddToInParticles(inpart);
blob->SetTypeSpec("Sherpa");
Decay_Table* table=p_decaymap->FindDecay(blob->InParticle(0)->Flav());
if (table==NULL) {
msg_Error()<<METHOD<<" decay table not found, retrying event."<<endl
<<*blob<<endl;
throw Return_Value::Retry_Event;
}
blob->AddData("dc",new Blob_Data<Decay_Channel*>(table->Select()));
DEBUG_INFO("p_onshell="<<inpart->Momentum());
blob->AddData("p_onshell",new Blob_Data<Vec4D>(inpart->Momentum()));
DEBUG_INFO("succeeded.");
}
示例3: fslep
Return_Value::code Signal_Process_FS_QED_Correction::Treat
(Blob_List * bloblist, double & weight)
{
if (!m_on) return Return_Value::Nothing;
if (bloblist->empty()) {
msg_Error()<<"Signal_Process_FS_QED_Correction::Treat"
<<"("<<bloblist<<","<<weight<<"): "<<endl
<<" Blob list contains "<<bloblist->size()<<" entries."<<endl
<<" Continue and hope for the best."<<endl;
return Return_Value::Error;
}
// look for QCD corrected hard process in need for QED
Blob * sigblob(bloblist->FindLast(btp::Shower));
if (!sigblob) return Return_Value::Nothing;
// if already treated -> nothing to do
if (sigblob->TypeSpec()=="YFS-type_QED_Corrections_to_ME")
return Return_Value::Nothing;
if (sigblob->TypeSpec()=="setting_leptons_on-shell")
return Return_Value::Nothing;
// extract FS leptons
// two vectors -> the ones from the blob and the ones to be massive
DEBUG_FUNC(m_qed);
Particle_Vector fslep(sigblob->GetOutParticles());
Particle_Vector mfslep;
for (Particle_Vector::iterator it=fslep.begin();it!=fslep.end();) {
if ((*it)->Flav().Strong() || (*it)->Flav().IsDiQuark() ||
(*it)->DecayBlob()!=NULL) {
fslep.erase(it);
}
else {
mfslep.push_back(new Particle(-1,(*it)->Flav(),(*it)->Momentum(),'F'));
(*mfslep.rbegin())->SetNumber(0);
(*mfslep.rbegin())->SetOriginalPart(*it);
(*mfslep.rbegin())->SetFinalMass((*it)->FinalMass());
++it;
}
}
// if no leptons, nothing to do
// if only one lepton, cannot do anything
if (fslep.size()<2) {
sigblob->UnsetStatus(blob_status::needs_extraQED);
for (Particle_Vector::iterator it=mfslep.begin();it!=mfslep.end();++it)
delete *it;
return Return_Value::Nothing;
}
// if switched off or no need for QED stop here and build a blob
if (!m_qed || !sigblob->Has(blob_status::needs_extraQED)) {
Blob * onshellblob = bloblist->AddBlob(btp::QED_Radiation);
onshellblob->SetTypeSpec("setting_leptons_on-shell");
if (sigblob->Has(blob_status::needs_extraQED))
sigblob->UnsetStatus(blob_status::needs_extraQED);
for (Particle_Vector::iterator it=fslep.begin();it!=fslep.end();++it) {
(*it)->SetInfo('H');
(*it)->SetStatus(part_status::decayed);
onshellblob->AddToInParticles(*it);
}
for (Particle_Vector::iterator it=mfslep.begin();it!=mfslep.end();++it) {
onshellblob->AddToOutParticles(*it);
}
onshellblob->SetStatus(blob_status::needs_hadronization);
return Return_Value::Success;
}
// put them on-shell (spoils consistency of pertubative calculation,
// but necessary for YFS)
if (!PutOnMassShell(mfslep)) {
msg_Error()<<"Signal_Process_FS_QED_Correction::Treat("
<<bloblist<<","<<weight<<"): \n"
<<" Leptons could not be put on their mass shell.\n"
<<" Trying new event.\n"
<<" The event contained a ";
for (Particle_Vector::iterator it=mfslep.begin();it!=mfslep.end();++it)
msg_Error()<<(*it)->Flav().ShellName()<<"-";
if (mfslep.size()==2) msg_Error()<<"pair";
else msg_Error()<<"set";
msg_Error()<<" of too little invariant mass to be put\n"
<<" on their mass shell. If you are sensitive to this specific"
<<" signature consider\n to set the respective particles"
<<" massive in the perturbative calculation using\n"
<<" 'MASSIVE[<id>]=1' to avoid this problem.\n";
for (Particle_Vector::iterator it=mfslep.begin();it!=mfslep.end();++it)
delete *it;
return Return_Value::New_Event;
}
// build effective verteces for resonant production
// use subprocess infos if possible
Blob_Vector blobs = BuildResonantBlobs(mfslep);
// add radiation
for (Blob_Vector::iterator it=blobs.begin();it!=blobs.end();++it) {
// do nothing if no resonance determined
if ((*it)->InParticle(0)->Flav().Kfcode()!=kf_none) {
(*it)->SetStatus(blob_status::needs_extraQED);
if (!p_sphotons->AddRadiation(*it)) {
msg_Error()<<"Signal_Process_FS_QED_Correction::Treat("<<bloblist
<<","<<weight<<"): "<<endl
<<" Higher order QED corrections failed."<<endl
<<" Retrying event."<<endl;
for (Particle_Vector::iterator it=mfslep.begin();it!=mfslep.end();++it)
delete *it;
for (Blob_Vector::iterator it=blobs.begin();it!=blobs.end();++it)
delete *it;
//.........这里部分代码省略.........