Пример #1
0
void InitialiseGenerator(int argc, char *argv[])
{
  if(argc<2) {
    cout<<"Usage: ./SingleDecay <PDG_CODE>"<<endl;
    THROW(normal_exit,"you didn't specify the decaying particle by PDG code.");
  }

  small_sherpa_init(argc, argv);

  hadrons = new SHERPA::Hadron_Decay_Handler(".", "Fragmentation.dat");

  Data_Reader * reader = new Data_Reader(" ",";","!","=");
  reader->AddWordSeparator("\t");
  reader->SetInputPath("./");
  reader->SetInputFile("YFS.dat");
  photons = new PHOTONS::Photons(reader,true);

  mother_flav = Flavour( (kf_code) abs(ToType<int>(argv[1])) );
  mother_flav.SetStable(false);
  if(ToType<int>(argv[1])<0) mother_flav=mother_flav.Bar();

  rpa->gen.SetEcms(mother_flav.HadMass());
  msg_Info()<<"Welcome. I am decaying a "<<mother_flav<<endl;

  Particle* mother_part = new Particle( 1,mother_flav,
                                        Vec4D(mother_flav.HadMass(),0.,0.,0.) );
  mother_part->SetTime();
  mother_part->SetFinalMass(mother_flav.HadMass());
  
  ref_blob = new Blob();
  ref_blob->SetType(btp::Hadron_Decay);
  ref_blob->SetStatus(blob_status::needs_hadrondecays);
  ref_blob->AddToInParticles(mother_part);

  try {
    hadrons->FillOnshellDecay(ref_blob, NULL);
  } catch (Return_Value::code ret) {
    msg_Error()<<METHOD<<" Something went wrong for blob: "<<ref_blob<<endl;
    return;
  }
}
Пример #2
0
Blob_List* GenerateEvent()
{
  Blob_List* blobs = new Blob_List();
  Particle* mother_part = new Particle( 1,mother_flav,Vec4D(mother_flav.HadMass(),0.,0.,0.) );
  mother_part->SetTime();
  mother_part->SetFinalMass(mother_flav.HadMass());
  
  Blob* blob = blobs->AddBlob(btp::Hadron_Decay);
  blob->SetStatus(blob_status::needs_hadrondecays);
  blob->AddToInParticles(mother_part);

  try {
    hadrons->FillOnshellDecay(blob, NULL);
  } catch (Return_Value::code ret) {
    msg_Error()<<METHOD<<" Something went wrong for event: "<<*blobs
        <<endl;
    return blobs;
  }

  hadrons->CleanUp();

  msg_Events()<<*blobs<<std::endl;
  return blobs;
}
Пример #3
0
    bool Jets(Cluster_Amplitude *ampl,int mode)
    {
      DEBUG_FUNC("mode = "<<mode);
      msg_Debugging()<<*ampl<<"\n";
      PHASIC::Jet_Finder *jf(ampl->JF<PHASIC::Jet_Finder>());
      double q2cut(jf->Ycut()*sqr(rpa->gen.Ecms()));
      double q2min(std::numeric_limits<double>::max());
      size_t imin(0), jmin(0), kmin(0);
      Flavour mofl;
      for (size_t i(0);i<ampl->Legs().size();++i) {
	Cluster_Leg *li(ampl->Leg(i));
	for (size_t j(Max(i+1,ampl->NIn()));j<ampl->Legs().size();++j) {
	  Cluster_Leg *lj(ampl->Leg(j));
	  if (j<ampl->NIn()) continue;
	  for (size_t k(0);k<ampl->Legs().size();++k) {
	    if (k==i || k==j) continue;
	    Cluster_Leg *lk(ampl->Leg(k));
	    if (i<ampl->NIn() && k>=ampl->NIn()) continue;
	    if (lk->Flav().Strong() &&
		li->Flav().Strong() && lj->Flav().Strong()) {
	      if (i<ampl->NIn()) li->SetMom(-li->Mom());
	      if (k<ampl->NIn()) lk->SetMom(-lk->Mom());
	      double q2ijk(pT2pythia(ampl,*li,*lj,*lk,i<ampl->NIn()?-1:1));
	      msg_Debugging()<<"Q_{"<<ID(li->Id())<<ID(lj->Id())
			     <<","<<ID(lk->Id())<<"} = "<<sqrt(q2ijk)<<"\n";
	      if (i<ampl->NIn()) li->SetMom(-li->Mom());
	      if (k<ampl->NIn()) lk->SetMom(-lk->Mom());
	      if (mode==0) {
		if (q2ijk<q2cut) return false;
	      }
	      else {
		if (q2ijk<q2min) {
		  q2min=q2ijk;
		  mofl=Flavour(kf_gluon);
		  if (li->Flav().IsGluon()) mofl=lj->Flav();
		  if (lj->Flav().IsGluon()) mofl=li->Flav();
		  imin=i;
		  jmin=j;
		  kmin=k;
		}
	      }
	    }
	  }
	}
      }
      if (mode!=0 && imin!=jmin) {
	Vec4D_Vector p=Combine(*ampl,imin,jmin,kmin,mofl);
	if (p.empty()) {
	  msg_Error()<<METHOD<<"(): Combine failed. Use R configuration."<<std::endl;
	  return Jets(ampl,0);
	}
	Cluster_Amplitude *bampl(Cluster_Amplitude::New());
	bampl->SetProc(ampl->Proc<void>());
	bampl->SetMS(ampl->MS());
	bampl->SetNIn(ampl->NIn());
	bampl->SetJF(ampl->JF<void>());
	for (int i(0), j(0);i<ampl->Legs().size();++i) {
	  if (i==jmin) continue;
	  if (i==imin) {
	    bampl->CreateLeg(p[j],mofl,ampl->Leg(i)->Col());
	    bampl->Legs().back()->SetId(ampl->Leg(imin)->Id()|ampl->Leg(jmin)->Id());
	    bampl->Legs().back()->SetK(ampl->Leg(kmin)->Id());	
	  }
	  else {
	    bampl->CreateLeg(p[j],ampl->Leg(i)->Flav(),ampl->Leg(i)->Col());
	  }
	  ++j;
	}
	bool res=Jets(bampl,0);
	bampl->Delete();
	return res;
      }
      msg_Debugging()<<"--- Jet veto ---\n";
      return true;
    }
Пример #4
0
    CT10_Fortran_Interface(const ATOOLS::Flavour bunch,
                           std::string set, int member) :
      m_anti(1)
    {
      m_xmin=1.e-8;
      m_xmax=1.;
      m_q2min=1.69;
      m_q2max=1.e10;

      m_set=set;
      m_type=m_set;
      m_bunch=bunch;
      m_member=member;
      if (m_bunch==Flavour(kf_p_plus).Bar()) m_anti=-1;
      int iset = 0;
      std::string path = rpa->gen.Variable("SHERPA_SHARE_PATH")+"/CT10Grid";
  
      if (m_set==std::string("ct10")) {
        iset = 100+m_member;
        m_asinfo.m_order=1;
        m_asinfo.m_asmz=0.118;
        if (m_member==0) m_lhef_number=10800;
        else m_lhef_number=10801;
      }
      double asmz[10] = {0.116, 0.117, 0.119, 0.120, 0.113, 0.114, 0.115, 0.121, 0.122, 0.123};
      for (size_t i=0; i<10; ++i) {
        if (m_set==std::string("ct10.as"+ToString(i)) && m_member==0) {
          iset = 10+i;
          m_asinfo.m_order=1;
          m_asinfo.m_asmz=asmz[i];
        }
      }
      if (m_set==std::string("ct10.3f") && m_member==0) {
        iset = 30;
        m_asinfo.m_order=1;
        m_asinfo.m_asmz=0.118;
      }
      if (m_set==std::string("ct10.4f") && m_member==0) {
        iset = 31;
        m_asinfo.m_order=1;
        m_asinfo.m_asmz=0.118;
      }

      if (m_set==std::string("ct10w")) {
        iset = 200+m_member;
        m_asinfo.m_order=1;
        m_asinfo.m_asmz=0.118;
      }
      for (size_t i=0; i<10; ++i) {
        if (m_set==std::string("ct10was"+ToString(i)) && m_member==0) {
          iset = 20+i;
          m_asinfo.m_order=1;
          m_asinfo.m_asmz=asmz[i];
        }
      }
      if (m_set==std::string("ct10w3f") && m_member==0) {
        iset = 32;
        m_asinfo.m_order=1;
        m_asinfo.m_asmz=0.118;
      }
      if (m_set==std::string("ct10w4f") && m_member==0) {
        iset = 33;
        m_asinfo.m_order=1;
        m_asinfo.m_asmz=0.118;
      }

      if (iset==0) {
        THROW(fatal_error, "PDF set "+m_set+" ("+ToString(m_member)+") not found.");
      }
      m_asinfo.m_mz2=sqr(91.1876);

      char buffer[1024];
      char * err = getcwd(buffer,1024);
      if (err==NULL) {
        msg_Error()<<"Error in CT10_Fortran_Interface.C "<<std::endl;
      }
      int stat=chdir(path.c_str());
      msg_Tracking()<<METHOD<<"(): Init Iset "<<iset<<"."<<std::endl;
      setct10_(iset);
      if (stat==0) {
        stat=chdir(buffer);
      }
      else {
        msg_Error()<<"Error in CT10_Fortran_Interface.C "<<std::endl
                   <<"   path "<<path<<" not found "<<std::endl;
      }
  
      for (int i=1;i<6;i++) {
        m_partons.insert(Flavour((kf_code)(i)));
        m_partons.insert(Flavour((kf_code)(i)).Bar());
      }
      m_partons.insert(Flavour(kf_gluon));
      m_partons.insert(Flavour(kf_jet));
      m_partons.insert(Flavour(kf_jet));
      m_partons.insert(Flavour(kf_quark));
      m_partons.insert(Flavour(kf_quark).Bar());                               
    }
Пример #5
0
PoleFit::PoleFit(GeneralModel model, double* masses,
                 const Flavour_Vector& flavs, const std::vector<int>& i) :
  FormFactor_Base(model, masses, flavs, i)
{
  m_V_F0=0.0; m_V_m0=0.0; m_V_a0=0.0; m_V_b0=0.0; m_V_c0=0.0; m_V_d0=0.0;
  m_V_F1=0.0; m_V_m1=0.0; m_V_a1=0.0; m_V_b1=0.0; m_V_c1=0.0; m_V_d1=0.0;
  m_A0_F0=0.0; m_A0_m0=0.0; m_A0_a0=0.0; m_A0_b0=0.0; m_A0_c0=0.0; m_A0_d0=0.0;
  m_A0_F1=0.0; m_A0_m1=0.0; m_A0_a1=0.0; m_A0_b1=0.0; m_A0_c1=0.0; m_A0_d1=0.0;
  m_A1_F0=0.0; m_A1_m0=0.0; m_A1_a0=0.0; m_A1_b0=0.0; m_A1_c0=0.0; m_A1_d0=0.0;
  m_A1_F1=0.0; m_A1_m1=0.0; m_A1_a1=0.0; m_A1_b1=0.0; m_A1_c1=0.0; m_A1_d1=0.0;
  m_A2_F0=0.0; m_A2_m0=0.0; m_A2_a0=0.0; m_A2_b0=0.0; m_A2_c0=0.0; m_A2_d0=0.0;
  m_A2_F1=0.0; m_A2_m1=0.0; m_A2_a1=0.0; m_A2_b1=0.0; m_A2_c1=0.0; m_A2_d1=0.0;

  kf_code kf0=m_flavs[p_i[0]].Kfcode();
  kf_code kf1=m_flavs[p_i[1]].Kfcode();
  if (kf0==kf_B || kf0==kf_B_plus) {
    if (kf1==kf_rho_770 || kf1==kf_rho_770_plus) {
      m_V_F0 = 1.045;
      m_V_m0 = 5.32;
      m_V_F1 = -0.721;
      m_V_m1 = 6.192;
      m_V_a0 = -1.0;
      m_V_a1 = -1.0;

      m_A0_F0 = 1.527;
      m_A0_m0 = 5.28;
      m_A0_F1 = -1.220;
      m_A0_m1 = 5.776;
      m_A0_a0 = -1.0;
      m_A0_a1 = -1.0;

      m_A1_F0 = 0.240;
      m_A1_m0 = 6.125;
      m_A1_a0 = -1.0;

      m_A2_F0 = 0.009;
      m_A2_m0 = 6.389;
      m_A2_F1 = 0.212;
      m_A2_m1 = 6.389;
      m_A2_a0 = -1.0;
      m_A2_a1 = -2.0;
      m_A2_b1 = 1.0;
    }
    else if(kf1==kf_omega_782) {
      m_V_F0 = 1.006;
      m_V_m0 = 5.32;
      m_V_F1 = -0.713;
      m_V_m1 = 6.12;
      m_V_a0 = -1.0;
      m_V_a1 = -1.0;

      m_A0_F0 = 1.321;
      m_A0_m0 = 5.28;
      m_A0_F1 = -1.040;
      m_A0_m1 = 5.871;
      m_A0_a0 = -1.0;
      m_A0_a1 = -1.0;

      m_A1_F0 = -0.217;
      m_A1_m0 = 6.084;
      m_A1_a0 = -1.0;

      m_A2_F0 = 0.006;
      m_A2_m0 = 6.422;
      m_A2_F1 = 0.192;
      m_A2_m1 = 6.422;
      m_A2_a0 = -1.0;
      m_A2_a1 = -2.0;
      m_A2_b1 = 1.0;
    }
    else if(kf1==kf_a_1_1260 || kf1==kf_a_1_1260_plus) {
      m_V_F0=-0.67;
      m_V_m0=m_m0;
      m_V_a0=-0.72;
      m_V_b0=-0.2;
      
      m_A0_F0=-0.23;
      m_A0_m0=m_m0;
      m_A0_a0=-0.86;
      m_A0_b0=-0.38;

      m_A1_F0=-0.42;
      m_A1_m0=m_m0;
      m_A1_a0=0.44;
      m_A1_b0=0.45;

      m_A2_F0=-0.53;
      m_A2_m0=m_m0;
      m_A2_a0=-0.45;
      m_A2_b0=0.13;
    }
  }
  else if (kf0==kf_D_plus || kf0==kf_D) {
    if (kf1==kf_K_star_892 || kf1==kf_K_star_892_plus) {
      m_V_F0 = 1.62;
      m_V_a0 = -1.0;
      m_V_m0 = 2.1;

      m_A1_F0 = 1.0;
      m_A1_a0 = -1.0;
      m_A1_m0 = 2.5;

      m_A2_F0 = 0.83;
      m_A2_a0 = -1.0;
      m_A2_m0 = 2.5;
    }
  }
  else if (kf0==kf_D_s_plus) {
    if (kf1==kf_phi_1020) {
      switch( int(model("FORM_FACTOR_TUNE", 1)+0.5)) {
      case 1:
	// hep-lat 1311.6669v1 lattice QCD
	m_V_F0 = 1.059;
	m_V_m0 = 2.112;
	m_V_a0 = -1.0;

	m_A0_F0 = 0.706;
	m_A0_m0 = 2.459;
	m_A0_a0 = -1.0;

	m_A1_F0 = 0.615;
	m_A1_m0 = 2.459;
	m_A1_a0 = -1.0;

	m_A2_F0 = 0.457;
	m_A2_m0 = 2.459;
	m_A2_a0 = -1.0;
	break;
      case 2:
	// hep-ph 0308259 QCD sum rules
	m_V_F0 = 1.21;
	m_V_m0 = 2.08;
	m_V_a0 = -1.0;

	m_A0_F0 = 0.42;
	m_A0_m0 = 1.9;
	m_A0_a0 = -1.0;

	m_A1_F0 = 0.55;
	m_A1_m0 = 1.9;
	m_A1_a0 = -1.0;

	m_A2_F0 = 0.59;
	m_A2_m0 = 1.9;
	m_A2_a0 = -1.0;
	break;
      case 4:
	// hep-ph/0401181 light-cone sum rules
	m_V_F0 = 0.9;
	m_V_m0 = 1.9685;
	m_V_a0 = -2.82;
	m_V_b0 = 1.51;

	m_A0_F0 = 0.56;
	m_A0_m0 = 1.9685;
	m_A0_a0 = -0.13;
	m_A0_b0 = -0.46;

	m_A1_F0 = 0.65;
	m_A1_m0 = 1.9685;
	m_A1_a0 = -1.36;
	m_A1_b0 = -0.31;

	m_A2_F0 = 0.85;
	m_A2_m0 = 1.9685;
	m_A2_a0 = -4.5;
	m_A2_b0 = 5.55;
	break;
      case 5:
	// PhysRevD.78.054002 light-front quark model
	m_V_F0 = 0.91;
	m_V_m0 = 1.9685;
	m_V_a0 = -1.15;
	m_V_b0 = 0.39;

	m_A0_F0 = 0.62;
	m_A0_m0 = 1.9685;
	m_A0_a0 = -1.02;
	m_A0_b0 = 0.45;

	m_A1_F0 = 0.61;
	m_A1_m0 = 1.9685;
	m_A1_a0 = -0.69;
	m_A1_b0 = 0.02;

	m_A2_F0 = 0.58;
	m_A2_m0 = 1.9685;
	m_A2_a0 = -0.98;
	m_A2_b0 = 0.27;
	break;
      default:
	msg_Error()<<METHOD<<": You chose a form factor tune which does not "
	           <<"exist. Aborting."<<std::endl;
	abort();
      }
    }
    else if (kf1==kf_K_star_892) {
      // doi:10.1103/PhysRevD.78.054002 light-front quark model
      m_V_F0 = 0.79;
      m_V_m0 = 1.9685;
      m_V_a0 = -1.24;
      m_V_b0 = 0.50;

      m_A0_F0 = 0.54;
      m_A0_m0 = 1.9685;
      m_A0_a0 = -1.03;
      m_A0_b0 = 0.62;

      m_A1_F0 = 0.53;
      m_A1_m0 = 1.9685;
      m_A1_a0 = -0.53;
      m_A1_b0 = 0.03;

      m_A2_F0 = 0.49;
      m_A2_m0 = 1.9685;
      m_A2_a0 = -1.03;
      m_A2_b0 = 0.34;
    }  
  }

  m_V_F0 = model("V_F0",m_V_F0); m_V_F1 = model("V_F1",m_V_F1);
  m_V_m0 = model("V_m0",m_V_m0); m_V_m1 = model("V_m1",m_V_m1);
  m_V_a0 = model("V_a0",m_V_a0); m_V_a1 = model("V_a1",m_V_a1);
  m_V_b0 = model("V_b0",m_V_b0); m_V_b1 = model("V_b1",m_V_b1);
  m_V_c0 = model("V_c0",m_V_c0); m_V_c1 = model("V_c1",m_V_c1);
  m_V_d0 = model("V_d0",m_V_d0); m_V_d1 = model("V_d1",m_V_d1);

  m_A0_F0 = model("A0_F0",m_A0_F0); m_A0_F1 = model("A0_F1",m_A0_F1);
  m_A0_m0 = model("A0_m0",m_A0_m0); m_A0_m1 = model("A0_m1",m_A0_m1);
  m_A0_a0 = model("A0_a0",m_A0_a0); m_A0_a1 = model("A0_a1",m_A0_a1);
  m_A0_b0 = model("A0_b0",m_A0_b0); m_A0_b1 = model("A0_b1",m_A0_b1);
  m_A0_c0 = model("A0_c0",m_A0_c0); m_A0_c1 = model("A0_c1",m_A0_c1);
  m_A0_d0 = model("A0_d0",m_A0_d0); m_A0_d1 = model("A0_d1",m_A0_d1);

  m_A1_F0 = model("A1_F0",m_A1_F0); m_A1_F1 = model("A1_F1",m_A1_F1);
  m_A1_m0 = model("A1_m0",m_A1_m0); m_A1_m1 = model("A1_m1",m_A1_m1);
  m_A1_a0 = model("A1_a0",m_A1_a0); m_A1_a1 = model("A1_a1",m_A1_a1);
  m_A1_b0 = model("A1_b0",m_A1_b0); m_A1_b1 = model("A1_b1",m_A1_b1);
  m_A1_c0 = model("A1_c0",m_A1_c0); m_A1_c1 = model("A1_c1",m_A1_c1);
  m_A1_d0 = model("A1_d0",m_A1_d0); m_A1_d1 = model("A1_d1",m_A1_d1);

  m_A2_F0 = model("A2_F0",m_A2_F0); m_A2_F1 = model("A2_F1",m_A2_F1);
  m_A2_m0 = model("A2_m0",m_A2_m0); m_A2_m1 = model("A2_m1",m_A2_m1);
  m_A2_a0 = model("A2_a0",m_A2_a0); m_A2_a1 = model("A2_a1",m_A2_a1);
  m_A2_b0 = model("A2_b0",m_A2_b0); m_A2_b1 = model("A2_b1",m_A2_b1);
  m_A2_c0 = model("A2_c0",m_A2_c0); m_A2_c1 = model("A2_c1",m_A2_c1);
  m_A2_d0 = model("A2_d0",m_A2_d0); m_A2_d1 = model("A2_d1",m_A2_d1);
}