CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
FullMatchMemory.cc
Go to the documentation of this file.
6 #include <iomanip>
7 #include <filesystem>
8 
9 using namespace std;
10 using namespace trklet;
11 
12 FullMatchMemory::FullMatchMemory(string name, Settings const& settings) : MemoryBase(name, settings) {
13  size_t pos = find_nth(name, 0, "_", 1);
14  assert(pos != string::npos);
15  initLayerDisk(pos + 1, layer_, disk_);
16 }
17 
18 void FullMatchMemory::addMatch(Tracklet* tracklet, const Stub* stub) {
19  if (!settings_.doKF() || !settings_.doMultipleMatches()) { //When using KF we allow multiple matches
20  for (auto& match : matches_) {
21  if (match.first == tracklet) { //Better match, replace
22  match.second = stub;
23  return;
24  }
25  }
26  }
27  std::pair<Tracklet*, const Stub*> tmp(tracklet, stub);
28  //Check that we have the right TCID order
29  if (!matches_.empty()) {
30  if ((!settings_.doKF() && matches_[matches_.size() - 1].first->TCID() >= tracklet->TCID()) ||
31  (settings_.doKF() && matches_[matches_.size() - 1].first->TCID() > tracklet->TCID())) {
32  edm::LogPrint("Tracklet") << "Wrong TCID ordering in " << getName() << " : "
33  << matches_[matches_.size() - 1].first->TCID() << " " << tracklet->TCID() << " "
34  << matches_[matches_.size() - 1].first->trackletIndex() << " "
35  << tracklet->trackletIndex();
36  }
37  }
38  matches_.push_back(tmp);
39 }
40 
41 void FullMatchMemory::writeMC(bool first, unsigned int iSector) {
42  iSector_ = iSector;
43  const string dirM = settings_.memPath() + "Matches/";
44 
45  std::ostringstream oss;
46  oss << dirM << "FullMatches_" << getName() << "_" << std::setfill('0') << std::setw(2) << (iSector_ + 1) << ".dat";
47  auto const& fname = oss.str();
48 
49  openfile(out_, first, dirM, fname, __FILE__, __LINE__);
50 
51  out_ << "BX = " << (bitset<3>)bx_ << " Event : " << event_ << endl;
52 
53  for (unsigned int j = 0; j < matches_.size(); j++) {
54  string match = (layer_ > 0) ? matches_[j].first->fullmatchstr(layer_) : matches_[j].first->fullmatchdiskstr(disk_);
55  out_ << "0x";
56  out_ << std::setfill('0') << std::setw(2);
57  out_ << hex << j << dec;
58  out_ << " " << match << " " << trklet::hexFormat(match) << endl;
59  }
60  out_.close();
61 
62  bx_++;
63  event_++;
64  if (bx_ > 7)
65  bx_ = 0;
66 }
static size_t find_nth(const std::string &haystack, size_t pos, const std::string &needle, size_t nth)
Definition: MemoryBase.cc:103
std::string memPath() const
Definition: Settings.h:192
unsigned int iSector_
Definition: MemoryBase.h:44
std::vector< std::pair< Tracklet *, const Stub * > > matches_
assert(be >=bs)
bool doKF() const
Definition: Settings.h:240
std::string hexFormat(const std::string &binary)
Definition: Util.h:19
bool doMultipleMatches() const
Definition: Settings.h:241
std::string const & getName() const
Definition: MemoryBase.h:19
Settings const & settings_
Definition: MemoryBase.h:50
std::ofstream out_
Definition: MemoryBase.h:46
void addMatch(Tracklet *tracklet, const Stub *stub)
int trackletIndex() const
Definition: Tracklet.h:206
int TCID() const
Definition: Tracklet.h:212
Log< level::Warning, true > LogPrint
string fname
main script
void writeMC(bool first, unsigned int iSector)
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10
tmp
align.sh
Definition: createJobs.py:716
void initLayerDisk(unsigned int pos, int &layer, int &disk)
Definition: MemoryBase.cc:19
std::ofstream openfile(const std::string &dir, const std::string &fname, const char *file, int line)
Definition: Util.h:139