DAS  3.0
Das Analysis System
NNH< BJ, I >

#include <fjcore.hh>

+ Inheritance diagram for NNH< BJ, I >:
+ Collaboration diagram for NNH< BJ, I >:

Classes

class  NNBJ
 

Public Member Functions

 NNH (const std::vector< PseudoJet > &jets)
 
 NNH (const std::vector< PseudoJet > &jets, I *info)
 
void start (const std::vector< PseudoJet > &jets)
 
double dij_min (int &iA, int &iB)
 
void remove_jet (int iA)
 
void merge_jets (int iA, int iB, const PseudoJet &jet, int jet_index)
 
 ~NNH ()
 
- Public Member Functions inherited from NNBase< _NoInfo >
 NNBase ()
 
 NNBase (_NoInfo *info)
 
virtual ~NNBase ()
 
- Public Member Functions inherited from NNInfo< _NoInfo >
 NNInfo ()
 
 NNInfo (_NoInfo *)
 
template<class BJ >
void init_jet (BJ *briefjet, const fjcore::PseudoJet &jet, int index)
 

Private Member Functions

void set_NN_crosscheck (NNBJ *jet, NNBJ *begin, NNBJ *end)
 
void set_NN_nocross (NNBJ *jet, NNBJ *begin, NNBJ *end)
 

Private Attributes

NNBJbriefjets
 
NNBJhead
 
NNBJtail
 
int n
 
std::vector< NNBJ * > where_is
 

Constructor & Destructor Documentation

◆ NNH() [1/2]

NNH ( const std::vector< PseudoJet > &  jets)
inline
1804 : NNBase<I>() {start(jets);}

◆ NNH() [2/2]

NNH ( const std::vector< PseudoJet > &  jets,
I *  info 
)
inline
1805 : NNBase<I>(info) {start(jets);}

◆ ~NNH()

~NNH ( )
inline
1810  {
1811  delete[] briefjets;
1812  }

Member Function Documentation

◆ dij_min()

double dij_min ( int &  iA,
int &  iB 
)
virtual

Implements NNBase< _NoInfo >.

1859  {
1860  double diJ_min = briefjets[0].NN_dist;
1861  int diJ_min_jet = 0;
1862  for (int i = 1; i < n; i++) {
1863  if (briefjets[i].NN_dist < diJ_min) {
1864  diJ_min_jet = i;
1865  diJ_min = briefjets[i].NN_dist;
1866  }
1867  }
1868  NNBJ * jetA = & briefjets[diJ_min_jet];
1869  iA = jetA->index();
1870  iB = jetA->NN ? jetA->NN->index() : -1;
1871  return diJ_min;
1872 }

◆ merge_jets()

void merge_jets ( int  iA,
int  iB,
const PseudoJet jet,
int  jet_index 
)
virtual

Implements NNBase< _NoInfo >.

1884  {
1885  NNBJ * jetA = where_is[iA];
1886  NNBJ * jetB = where_is[iB];
1887  if (jetA < jetB) std::swap(jetA,jetB);
1888  this->init_jet(jetB, jet, index);
1889  if (index >= int(where_is.size())) where_is.resize(2*index);
1890  where_is[jetB->index()] = jetB;
1891  tail--; n--;
1892  *jetA = *tail;
1893  where_is[jetA->index()] = jetA;
1894  for (NNBJ * jetI = head; jetI != tail; jetI++) {
1895  if (jetI->NN == jetA || jetI->NN == jetB) {
1896  set_NN_nocross(jetI, head, tail);
1897  }
1898  double dist = jetI->distance(jetB);
1899  if (dist < jetI->NN_dist) {
1900  if (jetI != jetB) {
1901  jetI->NN_dist = dist;
1902  jetI->NN = jetB;
1903  }
1904  }
1905  if (dist < jetB->NN_dist) {
1906  if (jetI != jetB) {
1907  jetB->NN_dist = dist;
1908  jetB->NN = jetI;
1909  }
1910  }
1911  if (jetI->NN == tail) {jetI->NN = jetA;}
1912  }
1913 }

◆ remove_jet()

void remove_jet ( int  iA)
virtual

Implements NNBase< _NoInfo >.

1873  {
1874  NNBJ * jetA = where_is[iA];
1875  tail--; n--;
1876  *jetA = *tail;
1877  where_is[jetA->index()] = jetA;
1878  for (NNBJ * jetI = head; jetI != tail; jetI++) {
1879  if (jetI->NN == jetA) set_NN_nocross(jetI, head, tail);
1880  if (jetI->NN == tail) {jetI->NN = jetA;}
1881  }
1882 }

◆ set_NN_crosscheck()

void set_NN_crosscheck ( NNBJ jet,
NNBJ begin,
NNBJ end 
)
private
1915  {
1916  double NN_dist = jet->beam_distance();
1917  NNBJ * NN = NULL;
1918  for (NNBJ * jetB = begin; jetB != end; jetB++) {
1919  double dist = jet->distance(jetB);
1920  if (dist < NN_dist) {
1921  NN_dist = dist;
1922  NN = jetB;
1923  }
1924  if (dist < jetB->NN_dist) {
1925  jetB->NN_dist = dist;
1926  jetB->NN = jet;
1927  }
1928  }
1929  jet->NN = NN;
1930  jet->NN_dist = NN_dist;
1931 }

◆ set_NN_nocross()

void set_NN_nocross ( NNBJ jet,
NNBJ begin,
NNBJ end 
)
private
1933  {
1934  double NN_dist = jet->beam_distance();
1935  NNBJ * NN = NULL;
1936  if (begin < jet) {
1937  for (NNBJ * jetB = begin; jetB != jet; jetB++) {
1938  double dist = jet->distance(jetB);
1939  if (dist < NN_dist) {
1940  NN_dist = dist;
1941  NN = jetB;
1942  }
1943  }
1944  }
1945  if (end > jet) {
1946  for (NNBJ * jetB = jet+1; jetB != end; jetB++) {
1947  double dist = jet->distance (jetB);
1948  if (dist < NN_dist) {
1949  NN_dist = dist;
1950  NN = jetB;
1951  }
1952  }
1953  }
1954  jet->NN = NN;
1955  jet->NN_dist = NN_dist;
1956 }

◆ start()

void start ( const std::vector< PseudoJet > &  jets)
virtual

Implements NNBase< _NoInfo >.

1843  {
1844  n = jets.size();
1845  briefjets = new NNBJ[n];
1846  where_is.resize(2*n);
1847  NNBJ * jetA = briefjets;
1848  for (int i = 0; i< n; i++) {
1849  this->init_jet(jetA, jets[i], i);
1850  where_is[i] = jetA;
1851  jetA++; // move on to next entry of briefjets
1852  }
1853  tail = jetA; // a semaphore for the end of briefjets
1854  head = briefjets; // a nicer way of naming start
1855  for (jetA = head + 1; jetA != tail; jetA++) {
1856  set_NN_crosscheck(jetA, head, jetA);
1857  }
1858 }

Member Data Documentation

◆ briefjets

NNBJ* briefjets
private

◆ head

NNBJ* head
private

◆ n

int n
private

◆ tail

NNBJ * tail
private

◆ where_is

std::vector<NNBJ *> where_is
private

The documentation for this class was generated from the following file:
NNH::tail
NNBJ * tail
Definition: fjcore.hh:1818
NNH::start
void start(const std::vector< PseudoJet > &jets)
Definition: fjcore.hh:1843
NNBase
Definition: fjcore.hh:1787
NNH::NNBJ::index
int index() const
Definition: fjcore.hh:1836
NNH::set_NN_crosscheck
void set_NN_crosscheck(NNBJ *jet, NNBJ *begin, NNBJ *end)
Definition: fjcore.hh:1914
Ntupliser_cfg.jets
string jets
Definition: Ntupliser_cfg.py:41
NNH::where_is
std::vector< NNBJ * > where_is
Definition: fjcore.hh:1820
NNH::NNBJ::NN_dist
double NN_dist
Definition: fjcore.hh:1837
swap
void swap(SharedPtr< T > &a, SharedPtr< T > &b)
Definition: fjcore.hh:412
NNH::n
int n
Definition: fjcore.hh:1819
NNH::set_NN_nocross
void set_NN_nocross(NNBJ *jet, NNBJ *begin, NNBJ *end)
Definition: fjcore.hh:1932
NNH::head
NNBJ * head
Definition: fjcore.hh:1818
NNInfo< _NoInfo >::init_jet
void init_jet(BJ *briefjet, const fjcore::PseudoJet &jet, int index)
Definition: fjcore.hh:1785
NNH::briefjets
NNBJ * briefjets
Definition: fjcore.hh:1817