CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
TrackletEngine.cc
Go to the documentation of this file.
7 
10 
11 #include <filesystem>
12 
13 using namespace trklet;
14 using namespace std;
15 
16 TrackletEngine::TrackletEngine(string name, Settings const& settings, Globals* global)
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 }
27 
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 }
41 
42 void TrackletEngine::addInput(MemoryBase* memory, string input) {
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 }
63 
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, 3);
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  int ir = ((ibin & 3) << 1) + (rzbin >> 2);
107  index = (index << 3) + ir;
108  }
109 
110  if (start != ibin)
111  rzbin += 8;
112  if ((rzbin < rzbinfirst) || (rzbin - rzbinfirst > rzdiffmax)) {
113  continue;
114  }
115 
116  FPGAWord innerbend = innervmstub.bend();
117  FPGAWord outerbend = outervmstub.bend();
118 
119  int ptinnerindex = (index << innerbend.nbits()) + innerbend.value();
120  int ptouterindex = (index << outerbend.nbits()) + outerbend.value();
121 
122  if (!(innerptlut_.lookup(ptinnerindex) && outerptlut_.lookup(ptouterindex))) {
123  if (settings_.debugTracklet()) {
124  edm::LogVerbatim("Tracklet") << "Stub pair rejected because of stub pt cut bends : "
126  innervmstub.bend().value(), layerdisk1_, innervmstub.isPSmodule())
127  << " "
129  outervmstub.bend().value(), layerdisk2_, outervmstub.isPSmodule());
130  }
131  continue;
132  }
133 
134  if (settings_.debugTracklet())
135  edm::LogVerbatim("Tracklet") << "Adding stub pair in " << getName();
136 
137  stubpairs_->addStubPair(innervmstub, outervmstub);
138  countpass++;
139  }
140  }
141  }
142 
143  if (settings_.writeMonitorData("TE")) {
144  globals_->ofstream("trackletengine.txt") << getName() << " " << countall << " " << countpass << endl;
145  }
146 }
147 
149  if (innervmstubs_ == nullptr || outervmstubs_ == nullptr)
150  return;
151 
154 
155  double innerphimin, innerphimax;
156  innervmstubs_->getPhiRange(innerphimin, innerphimax, iSeed_, 0);
157 
158  double outerphimin, outerphimax;
159  outervmstubs_->getPhiRange(outerphimin, outerphimax, iSeed_, 1);
160 
161  string innermem = innervmstubs_->getName().substr(6);
162  string outermem = outervmstubs_->getName().substr(6);
163 
165  false,
166  iSeed_,
167  layerdisk1_,
168  layerdisk2_,
171  innerphimin,
172  innerphimax,
173  outerphimin,
174  outerphimax,
175  innermem,
176  outermem);
177 
178  outerptlut_.initteptlut(false,
179  false,
180  iSeed_,
181  layerdisk1_,
182  layerdisk2_,
185  innerphimin,
186  innerphimax,
187  outerphimin,
188  outerphimax,
189  innermem,
190  outermem);
191 
192  TrackletLUT innertememlut(settings_);
193  TrackletLUT outertememlut(settings_);
194 
195  innertememlut.initteptlut(true,
196  true,
197  iSeed_,
198  layerdisk1_,
199  layerdisk2_,
202  innerphimin,
203  innerphimax,
204  outerphimin,
205  outerphimax,
206  innermem,
207  outermem);
208 
209  outertememlut.initteptlut(false,
210  true,
211  iSeed_,
212  layerdisk1_,
213  layerdisk2_,
216  innerphimin,
217  innerphimax,
218  outerphimin,
219  outerphimax,
220  innermem,
221  outermem);
222 
223  innervmstubs_->setbendtable(innertememlut);
224  outervmstubs_->setbendtable(outertememlut);
225 }
Log< level::Info, true > LogVerbatim
const FPGAWord & disk() const
Definition: Stub.h:68
unsigned int layerdisk2_
void setbendtable(const TrackletLUT &bendtable)
void setother(VMStubsTEMemory *other)
std::string name_
Definition: ProcessBase.h:38
VMStubsTEMemory * outervmstubs_
void addStubPair(const VMStubTE &stub1, const VMStubTE &stub2, const unsigned index=0, const std::string &tedName="")
int nbits() const
Definition: FPGAWord.h:25
const VMStubTE & getVMStubTEBinned(unsigned int bin, unsigned int i) const
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:240
void initLayerDisksandISeed(unsigned int &layerdisk1, unsigned int &layerdisk2, unsigned int &iSeed)
Definition: ProcessBase.cc:63
Settings const & settings_
Definition: ProcessBase.h:40
Globals * globals_
Definition: ProcessBase.h:41
unsigned int outerphibits_
assert(be >=bs)
bool debugTracklet() const
Definition: Settings.h:182
static std::string const input
Definition: EdmProvDump.cc:47
unsigned int nVMStubsBinned(unsigned int bin) const
std::string const & getName() const
Definition: ProcessBase.h:22
std::string const & getName() const
Definition: MemoryBase.h:19
unsigned int nbits(unsigned int power)
Definition: ProcessBase.cc:17
int value() const
Definition: FPGAWord.h:24
const FPGAWord & vmbits() const
Definition: VMStubTE.h:27
unsigned int layerdisk1_
unsigned int bits(unsigned int lsb, unsigned int nbit) const
Definition: FPGAWord.cc:74
bool isPSmodule() const
Definition: VMStubTE.h:31
const Stub * stub() const
Definition: VMStubTE.h:29
unsigned int maxStep(std::string module) const
Definition: Settings.h:116
int lookup(unsigned int index) const
Definition: TrackletLUT.cc:900
StubPairsMemory * stubpairs_
const FPGAWord & finephi() const
Definition: VMStubTE.h:23
unsigned int nVMStubs() const
std::ofstream & ofstream(std::string fname)
Definition: Globals.cc:44
unsigned int innerphibits_
int nfinephi(unsigned int inner, unsigned int iSeed) const
Definition: Settings.h:133
bool useSeed(unsigned int iSeed) const
Definition: Settings.h:94
tuple last
Definition: dqmdumpme.py:56
const VMStubTE & getVMStubTE(unsigned int i) const
void addInput(MemoryBase *memory, std::string input) override
double benddecode(int ibend, int layerdisk, bool isPSmodule) const
Definition: Settings.h:402
tmp
align.sh
Definition: createJobs.py:716
void getPhiRange(double &phimin, double &phimax, unsigned int iSeed, unsigned int inner)
TrackletEngine(std::string name, Settings const &settings, Globals *global)
VMStubsTEMemory * innervmstubs_
const FPGAWord & bend() const
Definition: VMStubTE.h:25
void addOutput(MemoryBase *memory, std::string output) override
bool writeMonitorData(std::string module) const
Definition: Settings.h:109
bool writetrace() const
Definition: Settings.h:183