CMS 3D CMS Logo

List of all members | Public Member Functions | Private Attributes
trklet::TrackletEngine Class Reference

#include <TrackletEngine.h>

Inheritance diagram for trklet::TrackletEngine:
trklet::ProcessBase

Public Member Functions

void addInput (MemoryBase *memory, std::string input) override
 
void addOutput (MemoryBase *memory, std::string output) override
 
void execute ()
 
void setVMPhiBin ()
 
 TrackletEngine (std::string name, Settings const &settings, Globals *global)
 
 ~TrackletEngine () override=default
 
- Public Member Functions inherited from trklet::ProcessBase
unsigned int getISeed (const std::string &name)
 
std::string const & getName () const
 
void initLayerDisk (unsigned int pos, int &layer, int &disk)
 
void initLayerDisk (unsigned int pos, int &layer, int &disk, int &layerdisk)
 
unsigned int initLayerDisk (unsigned int pos)
 
void initLayerDisksandISeed (unsigned int &layerdisk1, unsigned int &layerdisk2, unsigned int &iSeed)
 
unsigned int nbits (unsigned int power)
 
 ProcessBase (std::string name, Settings const &settings, Globals *global)
 
virtual ~ProcessBase ()=default
 

Private Attributes

unsigned int innerphibits_
 
TrackletLUT innerptlut_
 
VMStubsTEMemoryinnervmstubs_
 
unsigned int iSeed_
 
unsigned int layerdisk1_
 
unsigned int layerdisk2_
 
unsigned int outerphibits_
 
TrackletLUT outerptlut_
 
VMStubsTEMemoryoutervmstubs_
 
StubPairsMemorystubpairs_
 

Additional Inherited Members

- Protected Attributes inherited from trklet::ProcessBase
Globalsglobals_
 
std::string name_
 
Settings const & settings_
 

Detailed Description

Definition at line 18 of file TrackletEngine.h.

Constructor & Destructor Documentation

◆ TrackletEngine()

TrackletEngine::TrackletEngine ( std::string  name,
Settings const &  settings,
Globals global 
)

Definition at line 16 of file TrackletEngine.cc.

References trklet::ProcessBase::initLayerDisksandISeed(), innerphibits_, innervmstubs_, iSeed_, layerdisk1_, layerdisk2_, trklet::Settings::nfinephi(), outerphibits_, outervmstubs_, and stubpairs_.

17  : ProcessBase(name, settings, global), innerptlut_(settings), outerptlut_(settings) {
18  stubpairs_ = nullptr;
19  innervmstubs_ = nullptr;
20  outervmstubs_ = nullptr;
21 
23 
24  innerphibits_ = settings.nfinephi(0, iSeed_);
25  outerphibits_ = settings.nfinephi(1, iSeed_);
26 }
unsigned int layerdisk2_
VMStubsTEMemory * outervmstubs_
void initLayerDisksandISeed(unsigned int &layerdisk1, unsigned int &layerdisk2, unsigned int &iSeed)
Definition: ProcessBase.cc:63
unsigned int outerphibits_
ProcessBase(std::string name, Settings const &settings, Globals *global)
Definition: ProcessBase.cc:14
unsigned int layerdisk1_
StubPairsMemory * stubpairs_
unsigned int innerphibits_
VMStubsTEMemory * innervmstubs_

◆ ~TrackletEngine()

trklet::TrackletEngine::~TrackletEngine ( )
overridedefault

Member Function Documentation

◆ addInput()

void TrackletEngine::addInput ( MemoryBase memory,
std::string  input 
)
overridevirtual

Implements trklet::ProcessBase.

Definition at line 42 of file TrackletEngine.cc.

References cms::cuda::assert(), Exception, innervmstubs_, input, mps_setup::memory, trklet::ProcessBase::name_, outervmstubs_, trklet::ProcessBase::settings_, setVMPhiBin(), createJobs::tmp, and trklet::Settings::writetrace().

42  {
43  if (settings_.writetrace()) {
44  edm::LogVerbatim("Tracklet") << "In " << name_ << " adding input from " << memory->getName() << " to input "
45  << input;
46  }
47  if (input == "innervmstubin") {
48  VMStubsTEMemory* tmp = dynamic_cast<VMStubsTEMemory*>(memory);
49  assert(tmp != nullptr);
51  setVMPhiBin();
52  return;
53  }
54  if (input == "outervmstubin") {
55  VMStubsTEMemory* tmp = dynamic_cast<VMStubsTEMemory*>(memory);
56  assert(tmp != nullptr);
58  setVMPhiBin();
59  return;
60  }
61  throw cms::Exception("BadConfig") << __FILE__ << " " << __LINE__ << " Could not find input : " << input;
62 }
Log< level::Info, true > LogVerbatim
std::string name_
Definition: ProcessBase.h:38
VMStubsTEMemory * outervmstubs_
Settings const & settings_
Definition: ProcessBase.h:40
bool writetrace() const
Definition: Settings.h:193
assert(be >=bs)
static std::string const input
Definition: EdmProvDump.cc:50
tmp
align.sh
Definition: createJobs.py:716
VMStubsTEMemory * innervmstubs_

◆ addOutput()

void TrackletEngine::addOutput ( MemoryBase memory,
std::string  output 
)
overridevirtual

Implements trklet::ProcessBase.

Definition at line 28 of file TrackletEngine.cc.

References cms::cuda::assert(), Exception, mps_setup::memory, trklet::ProcessBase::name_, convertSQLitetoXML_cfg::output, trklet::ProcessBase::settings_, stubpairs_, createJobs::tmp, and trklet::Settings::writetrace().

28  {
29  if (settings_.writetrace()) {
30  edm::LogVerbatim("Tracklet") << "In " << name_ << " adding output to " << memory->getName() << " to output "
31  << output;
32  }
33  if (output == "stubpairout") {
34  StubPairsMemory* tmp = dynamic_cast<StubPairsMemory*>(memory);
35  assert(tmp != nullptr);
36  stubpairs_ = tmp;
37  return;
38  }
39  throw cms::Exception("BadConfig") << __FILE__ << " " << __LINE__ << " Could not find output : " << output;
40 }
Log< level::Info, true > LogVerbatim
std::string name_
Definition: ProcessBase.h:38
Settings const & settings_
Definition: ProcessBase.h:40
bool writetrace() const
Definition: Settings.h:193
assert(be >=bs)
StubPairsMemory * stubpairs_
tmp
align.sh
Definition: createJobs.py:716

◆ execute()

void TrackletEngine::execute ( void  )

Definition at line 64 of file TrackletEngine.cc.

References trklet::StubPairsMemory::addStubPair(), cms::cuda::assert(), trklet::VMStubTE::bend(), trklet::Settings::benddecode(), trklet::FPGAWord::bits(), trklet::Settings::debugTracklet(), trklet::Stub::disk(), trklet::VMStubTE::finephi(), trklet::ProcessBase::getName(), trklet::VMStubsTEMemory::getVMStubTE(), trklet::VMStubsTEMemory::getVMStubTEBinned(), trklet::ProcessBase::globals_, mps_fire::i, innerphibits_, innerptlut_, innervmstubs_, iSeed_, trklet::VMStubTE::isPSmodule(), dqmiolumiharvest::j, dqmdumpme::last, layerdisk1_, layerdisk2_, trklet::TrackletLUT::lookup(), trklet::Settings::maxStep(), trklet::N_RZBITS, trklet::ProcessBase::nbits(), trklet::FPGAWord::nbits(), GetRecoTauVFromDQM_MC_cff::next, trklet::VMStubsTEMemory::nVMStubs(), trklet::VMStubsTEMemory::nVMStubsBinned(), trklet::Globals::ofstream(), outerphibits_, outerptlut_, outervmstubs_, trklet::ProcessBase::settings_, trklet::VMStubTE::stub(), stubpairs_, trklet::Settings::useSeed(), trklet::FPGAWord::value(), trklet::VMStubTE::vmbits(), and trklet::Settings::writeMonitorData().

64  {
65  if (!settings_.useSeed(iSeed_))
66  return;
67 
68  unsigned int countall = 0;
69  unsigned int countpass = 0;
70 
71  assert(innervmstubs_ != nullptr);
72  assert(outervmstubs_ != nullptr);
73 
74  for (unsigned int i = 0; i < innervmstubs_->nVMStubs(); i++) {
75  const VMStubTE& innervmstub = innervmstubs_->getVMStubTE(i);
76  FPGAWord lookupbits = innervmstub.vmbits();
77 
78  unsigned int nbits = 7;
79  if (iSeed_ == 4 || iSeed_ == 5)
80  nbits = 6;
81  int rzdiffmax = lookupbits.bits(nbits, lookupbits.nbits() - nbits);
82  int rzbinfirst = lookupbits.bits(0, 3);
83  int start = lookupbits.bits(4, nbits - 4);
84  int next = lookupbits.bits(3, 1);
85 
86  if ((iSeed_ == 4 || iSeed_ == 5) && innervmstub.stub()->disk().value() < 0) { //TODO - need to store negative disk
87  start += 4;
88  }
89  int last = start + next;
90 
91  for (int ibin = start; ibin <= last; ibin++) {
92  for (unsigned int j = 0; j < outervmstubs_->nVMStubsBinned(ibin); j++) {
93  if (countall >= settings_.maxStep("TE"))
94  break;
95  countall++;
96  const VMStubTE& outervmstub = outervmstubs_->getVMStubTEBinned(ibin, j);
97 
98  int rzbin = outervmstub.vmbits().bits(0, N_RZBITS);
99 
100  FPGAWord iphiinnerbin = innervmstub.finephi();
101  FPGAWord iphiouterbin = outervmstub.finephi();
102 
103  unsigned int index = (iphiinnerbin.value() << outerphibits_) + iphiouterbin.value();
104 
105  if (iSeed_ >= 4) { //Also use r-position
106 
107  int nrbits = 3; // Number of bits used for r position in disk LUT
108  int ibinmask = (1 << (nrbits - 1)) - 1; // Mask of two least significant bits
109 
110  int ir = ((ibin & ibinmask) << 1) + (rzbin >> (N_RZBITS - 1));
111  index += (ir << (outerphibits_ + innerphibits_));
112  }
113 
114  if (start != ibin)
115  rzbin += (1 << N_RZBITS);
116  if ((rzbin < rzbinfirst) || (rzbin - rzbinfirst > rzdiffmax)) {
117  continue;
118  }
119 
120  FPGAWord innerbend = innervmstub.bend();
121  FPGAWord outerbend = outervmstub.bend();
122 
123  int ptinnerindex = (index << innerbend.nbits()) + innerbend.value();
124  int ptouterindex = (index << outerbend.nbits()) + outerbend.value();
125 
126  if (!(innerptlut_.lookup(ptinnerindex) && outerptlut_.lookup(ptouterindex))) {
127  if (settings_.debugTracklet()) {
128  edm::LogVerbatim("Tracklet") << "Stub pair rejected because of stub pt cut bends : "
130  innervmstub.bend().value(), layerdisk1_, innervmstub.isPSmodule())
131  << " "
133  outervmstub.bend().value(), layerdisk2_, outervmstub.isPSmodule());
134  }
135  continue;
136  }
137 
138  if (settings_.debugTracklet())
139  edm::LogVerbatim("Tracklet") << "Adding stub pair in " << getName();
140 
141  assert(stubpairs_ != nullptr);
142  stubpairs_->addStubPair(innervmstub, outervmstub);
143  countpass++;
144  }
145  }
146  }
147 
148  if (settings_.writeMonitorData("TE")) {
149  globals_->ofstream("trackletengine.txt") << getName() << " " << countall << " " << countpass << endl;
150  }
151 }
Definition: start.py:1
Log< level::Info, true > LogVerbatim
constexpr unsigned int N_RZBITS
Definition: Settings.h:39
const VMStubTE & getVMStubTEBinned(unsigned int bin, unsigned int i) const
unsigned int layerdisk2_
unsigned int maxStep(std::string module) const
Definition: Settings.h:123
bool isPSmodule() const
Definition: VMStubTE.h:31
VMStubsTEMemory * outervmstubs_
double benddecode(int ibend, int layerdisk, bool isPSmodule) const
Definition: Settings.h:437
const FPGAWord & bend() const
Definition: VMStubTE.h:25
void addStubPair(const VMStubTE &stub1, const VMStubTE &stub2, const unsigned index=0, const std::string &tedName="")
Settings const & settings_
Definition: ProcessBase.h:40
Globals * globals_
Definition: ProcessBase.h:41
int lookup(unsigned int index) const
unsigned int outerphibits_
assert(be >=bs)
const FPGAWord & disk() const
Definition: Stub.h:68
const Stub * stub() const
Definition: VMStubTE.h:29
unsigned int nbits(unsigned int power)
Definition: ProcessBase.cc:17
unsigned int layerdisk1_
const FPGAWord & vmbits() const
Definition: VMStubTE.h:27
int value() const
Definition: FPGAWord.h:24
bool writeMonitorData(std::string module) const
Definition: Settings.h:116
const FPGAWord & finephi() const
Definition: VMStubTE.h:23
bool debugTracklet() const
Definition: Settings.h:192
const VMStubTE & getVMStubTE(unsigned int i) const
StubPairsMemory * stubpairs_
unsigned int nVMStubs() const
int nbits() const
Definition: FPGAWord.h:25
bool useSeed(unsigned int iSeed) const
Definition: Settings.h:101
unsigned int nVMStubsBinned(unsigned int bin) const
std::ofstream & ofstream(std::string fname)
Definition: Globals.cc:44
unsigned int innerphibits_
unsigned int bits(unsigned int lsb, unsigned int nbit) const
Definition: FPGAWord.cc:74
std::string const & getName() const
Definition: ProcessBase.h:22
VMStubsTEMemory * innervmstubs_

◆ setVMPhiBin()

void TrackletEngine::setVMPhiBin ( )

Definition at line 153 of file TrackletEngine.cc.

References trklet::MemoryBase::getName(), trklet::VMStubsTEMemory::getPhiRange(), trklet::TrackletLUT::initteptlut(), innerphibits_, innerptlut_, innervmstubs_, iSeed_, layerdisk1_, layerdisk2_, outerphibits_, outerptlut_, outervmstubs_, trklet::VMStubsTEMemory::setbendtable(), trklet::VMStubsTEMemory::setother(), and trklet::ProcessBase::settings_.

Referenced by addInput().

153  {
154  if (innervmstubs_ == nullptr || outervmstubs_ == nullptr)
155  return;
156 
159 
160  double innerphimin, innerphimax;
161  innervmstubs_->getPhiRange(innerphimin, innerphimax, iSeed_, 0);
162 
163  double outerphimin, outerphimax;
164  outervmstubs_->getPhiRange(outerphimin, outerphimax, iSeed_, 1);
165 
166  string innermem = innervmstubs_->getName().substr(6);
167  string outermem = outervmstubs_->getName().substr(6);
168 
170  false,
171  iSeed_,
172  layerdisk1_,
173  layerdisk2_,
176  innerphimin,
177  innerphimax,
178  outerphimin,
179  outerphimax,
180  innermem,
181  outermem);
182 
183  outerptlut_.initteptlut(false,
184  false,
185  iSeed_,
186  layerdisk1_,
187  layerdisk2_,
190  innerphimin,
191  innerphimax,
192  outerphimin,
193  outerphimax,
194  innermem,
195  outermem);
196 
197  TrackletLUT innertememlut(settings_);
198  TrackletLUT outertememlut(settings_);
199 
200  innertememlut.initteptlut(true,
201  true,
202  iSeed_,
203  layerdisk1_,
204  layerdisk2_,
207  innerphimin,
208  innerphimax,
209  outerphimin,
210  outerphimax,
211  innermem,
212  outermem);
213 
214  outertememlut.initteptlut(false,
215  true,
216  iSeed_,
217  layerdisk1_,
218  layerdisk2_,
221  innerphimin,
222  innerphimax,
223  outerphimin,
224  outerphimax,
225  innermem,
226  outermem);
227 
228  innervmstubs_->setbendtable(innertememlut);
229  outervmstubs_->setbendtable(outertememlut);
230 }
unsigned int layerdisk2_
void setbendtable(const TrackletLUT &bendtable)
void setother(VMStubsTEMemory *other)
VMStubsTEMemory * outervmstubs_
void initteptlut(bool fillInner, bool fillTEMem, unsigned int iSeed, unsigned int layerdisk1, unsigned int layerdisk2, unsigned int innerphibits, unsigned int outerphibits, double innerphimin, double innerphimax, double outerphimin, double outerphimax, const std::string &innermem, const std::string &outermem)
Definition: TrackletLUT.cc:548
Settings const & settings_
Definition: ProcessBase.h:40
unsigned int outerphibits_
unsigned int layerdisk1_
std::string const & getName() const
Definition: MemoryBase.h:19
unsigned int innerphibits_
void getPhiRange(double &phimin, double &phimax, unsigned int iSeed, unsigned int inner)
VMStubsTEMemory * innervmstubs_

Member Data Documentation

◆ innerphibits_

unsigned int trklet::TrackletEngine::innerphibits_
private

Definition at line 49 of file TrackletEngine.h.

Referenced by execute(), setVMPhiBin(), and TrackletEngine().

◆ innerptlut_

TrackletLUT trklet::TrackletEngine::innerptlut_
private

Definition at line 45 of file TrackletEngine.h.

Referenced by execute(), and setVMPhiBin().

◆ innervmstubs_

VMStubsTEMemory* trklet::TrackletEngine::innervmstubs_
private

Definition at line 38 of file TrackletEngine.h.

Referenced by addInput(), execute(), setVMPhiBin(), and TrackletEngine().

◆ iSeed_

unsigned int trklet::TrackletEngine::iSeed_
private

Definition at line 33 of file TrackletEngine.h.

Referenced by execute(), setVMPhiBin(), and TrackletEngine().

◆ layerdisk1_

unsigned int trklet::TrackletEngine::layerdisk1_
private

Definition at line 34 of file TrackletEngine.h.

Referenced by execute(), setVMPhiBin(), and TrackletEngine().

◆ layerdisk2_

unsigned int trklet::TrackletEngine::layerdisk2_
private

Definition at line 35 of file TrackletEngine.h.

Referenced by execute(), setVMPhiBin(), and TrackletEngine().

◆ outerphibits_

unsigned int trklet::TrackletEngine::outerphibits_
private

Definition at line 50 of file TrackletEngine.h.

Referenced by execute(), setVMPhiBin(), and TrackletEngine().

◆ outerptlut_

TrackletLUT trklet::TrackletEngine::outerptlut_
private

Definition at line 46 of file TrackletEngine.h.

Referenced by execute(), and setVMPhiBin().

◆ outervmstubs_

VMStubsTEMemory* trklet::TrackletEngine::outervmstubs_
private

Definition at line 39 of file TrackletEngine.h.

Referenced by addInput(), execute(), setVMPhiBin(), and TrackletEngine().

◆ stubpairs_

StubPairsMemory* trklet::TrackletEngine::stubpairs_
private

Definition at line 42 of file TrackletEngine.h.

Referenced by addOutput(), execute(), and TrackletEngine().