Ejemplo n.º 1
0
void Singlet_Sorter::Sort(PartList * inlist,PCList * outlist) {
  m_inlist = inlist;
  unsigned int ref, ref2, cont;
  Particle * part;
  while (!m_inlist->empty()) {
    part = FindNextStart();
    if (!part) {
      msg_Error()<<"Error in "<<METHOD<<":\n"
		 <<"   No new particle found in non-empty list.\n";
      exit(1);
    } 
    ref  = part->GetFlow(1);
    cont = part->GetFlow(2);
    outlist->push_back(make_pair(part,make_pair(ref,cont)));
    //if (part) msg_Out()<<"found a start: "<<ref<<".\n";
    while (part) {
      part = FindNext(ref);
      if (part) {
	ref  = part->GetFlow(1);
	ref2 = part->GetFlow(2);
	//msg_Out()<<"   continue with: "<<ref<<".\n";
	outlist->push_back(make_pair(part,make_pair(ref,ref2)));
	if (part->GetFlow(1)==cont) break;
      }
    }
  }
}
Ejemplo n.º 2
0
void Singlet_Sorter::Sort(PartList * inlist,PSetYSet * outlists) {
  m_inlist = inlist;
  unsigned int ref1, ref2, cont=0;
  Particle * part;
  PartYSet  * pset;
  while (!m_inlist->empty()) {
    part = FindNextStart();
    if (!part) {
      msg_Error()<<"Error in "<<METHOD<<":\n"
		 <<"   No new particle found in non-empty list.\n";
      exit(1);
    } 
    pset = new PartYSet;
    pset->insert(part);
    ref1 = part->GetFlow(1);
    ref2 = part->GetFlow(2);
    //if (part) msg_Out()<<"found a start: ["<<ref1<<", "<<ref2<<"].\n";
    while (part) {
      part = FindNext(ref1,ref2);
      if (part) {
	ref1 = part->GetFlow(1);
	ref2 = part->GetFlow(2);
	//msg_Out()<<"   continue with: "<<ref1<<", "<<ref2<<".\n";
	pset->insert(part);
	if (part->GetFlow(1)==cont) break;
      }
    }
    outlists->insert(pset);
  }
}
Ejemplo n.º 3
0
int Lund_Interface::PrepareFragmentationBlob(Blob * blob) 
{
  int nhep = 0;
  hepevt.idhep[nhep]=SherpaToIdhep(Flavour(kf_photon));
  for (short int j=1;j<4;++j) hepevt.phep[nhep][j-1]=blob->CMS()[j];
  hepevt.phep[nhep][3]=blob->CMS()[0];
  double pabs=(blob->CMS()).Abs2();
  if (pabs<0) hepevt.phep[nhep][4]=0.0;
  else hepevt.phep[nhep][4]=sqrt(pabs);
  for (short int j=0;j<4;++j) hepevt.vhep[nhep][j]=0.0;
  hepevt.isthep[nhep]=1;
  hepevt.jmohep[nhep][0]=0;
  hepevt.jmohep[nhep][1]=0;
  hepevt.jdahep[nhep][0]=0;
  hepevt.jdahep[nhep][1]=0;
  
  // gluon splittings
  for (int i(0);i<blob->NInP();++i) {
    Particle * part = blob->InParticle(i);
  if (part->GetFlow(1)!=0 && part->GetFlow(2)!=0) {
    Flavour            flav = Flavour(kf_d);
    if (ran->Get()<0.5) flav = Flavour(kf_u);
      Particle *help1(new Particle(-1,flav,0.5*part->Momentum()));
      Particle *help2(new Particle(-1,flav.Bar(),help1->Momentum()));
    help1->SetStatus(part_status::active);
    help2->SetStatus(part_status::active);
    AddPartonToString(help1,nhep);
    delete help1;
      unsigned int lastc(part->GetFlow(2));
      for (++i;i<blob->NInP();++i) {
      part = blob->InParticle(i);
      AddPartonToString(part,nhep);
	if (part->GetFlow(1)==lastc) {
	  lastc=0;
	  break;
	}
    }      
      if (lastc!=0)
	msg_Error()<<METHOD<<"(): Error. Open color string."<<std::endl;
    AddPartonToString(help2,nhep);
    delete help2;
      lastc=0;
  }
  else {
      for (;i<blob->NInP();i++) {
      part = blob->InParticle(i);
      AddPartonToString(part,nhep);
	if (part->GetFlow(1)==0) break;
      }  
    }  
  }
  return nhep;
}
Ejemplo n.º 4
0
void Colour_Generator::FinalColours() {
  //   msg_Out()<<METHOD<<":\n";
  size_t flow(0),col(0);
  Particle * part;
  Flavour flav;
  for (size_t beam=0;beam<2;beam++) {
    size_t length(m_hadrons[1-beam]->Size());
    
    /*      msg_Out()<<"   Trips["<<beam<<"]:";
	    for (set<int>::iterator cit=m_col[beam][0].begin();
	    cit!=m_col[beam][0].end();cit++) msg_Out()<<" "<<(*cit);
	    msg_Out()<<"\n";
	    msg_Out()<<"   Antis["<<beam<<"]:";
	    for (set<int>::iterator cit=m_col[beam][1].begin();
	    cit!=m_col[beam][1].end();cit++) msg_Out()<<" "<<(*cit);
	    msg_Out()<<"\n";*/
    
    for (size_t i=length-2;i<length;i++) {
      part = m_hadrons[1-beam]->GetParticle(i);
      flav = part->Flav();
      if (flav.IsQuark() || flav.IsDiQuark()) {
	if ((flav.IsQuark()   && !flav.IsAnti()) ||
	    (flav.IsDiQuark() && flav.IsAnti()))    flow=0;
	if ((flav.IsQuark()   && flav.IsAnti()) ||
	    (flav.IsDiQuark() && !flav.IsAnti()))   flow=1;
	if (m_col[beam][flow].size()>0) {
	  col = (*m_col[beam][flow].begin());
	  part->SetFlow(flow+1,col);
	  m_col[beam][flow].erase(m_col[beam][flow].begin());
	}
	else {
	  part->SetFlow(flow+1,-1);
	  m_col[beam][1-flow].insert(part->GetFlow(flow+1));	  
	}
      }
      else if (flav.IsGluon()) {
	for (flow=0;flow<2;flow++) {
	  if (m_col[beam][flow].size()>0) {
	    col = (*m_col[beam][flow].begin());
	    part->SetFlow(flow+1,col);
	    m_col[beam][flow].erase(m_col[beam][flow].begin());
	  }
	  else {
	    part->SetFlow(flow+1,-1);
	    m_col[beam][1-flow].insert(part->GetFlow(flow+1));	  
	  }
	}
      }
      //       msg_Out()<<(*part)<<"\n";
    }
  }
}