CMS 3D CMS Logo

AsciiNeutronReader.cc
Go to the documentation of this file.
5 #include <sstream>
6 #include <iostream>
7 
8 using namespace std;
9 
11  : theFileNameBase(fileNameBase),
12  //theStreamPos(nChamberTypes+1, 0) //TODO WON"T WORK! replace with a map
13  theStreamPos(11, 0) {}
14 
16  stringstream fileName;
17  fileName << theFileNameBase << chamberType;
18  ifstream fin(fileName.str().c_str(), ios::in);
19  if (!fin.is_open()) {
20  throw cms::Exception("NeutronReader") << "Muon neutron noise file missing " << fileName.str();
21  }
22 
23  int nhits = read_nhits(fin, chamberType);
24  for (int ihit = 0; ihit < nhits; ++ihit) {
25  float entryX, entryY, entryZ, exitX, exitY, exitZ;
26  float p, tof, eloss, theta, phi;
27  int type, layer, track;
28 
29  fin >> entryX >> entryY >> entryZ >> exitX >> exitY >> exitZ >> p >> tof >> eloss >> type >> layer >> track >>
30  theta >> phi;
31  LocalPoint entry(entryX, entryY, entryZ);
32  LocalPoint exit(exitX, exitY, exitZ);
33  PSimHit phit(entry, exit, p, tof, eloss, type, layer, track, theta, phi);
34  result.push_back(phit);
35  }
36  theStreamPos[chamberType] = fin.tellg();
37 }
38 
39 int AsciiNeutronReader::read_nhits(ifstream& fin, int chamberType) {
40  int nhits = 0;
41  // go to the last saved place
42  fin.seekg(theStreamPos[chamberType]);
43  if (fin.eof()) {
44  resetStreampos(fin, chamberType);
45  }
46  LogDebug("NeutronReader") << "starting from pos " << theStreamPos[chamberType] << " EOF " << fin.eof();
47  fin >> nhits;
48  if (fin.eof()) {
49  resetStreampos(fin, chamberType);
50  fin >> nhits;
51  }
52  LogDebug("NeutronReader") << "returning nhits " << nhits;
53  return nhits;
54 }
55 
56 void AsciiNeutronReader::resetStreampos(ifstream& fin, int chamberType) {
57  LogDebug("NeutronReader") << "reached EOF, resetting streampos ";
58  theStreamPos[chamberType] = 0;
59  fin.clear();
60  fin.seekg(0, ios::beg);
61 }
#define LogDebug(id)
type
Definition: HCALResponse.h:21
void readNextEvent(int chamberType, edm::PSimHitContainer &result) override
Geom::Theta< T > theta() const
std::string theFileNameBase
std::vector< std::streampos > theStreamPos
AsciiNeutronReader(std::string fileNameBase)
std::vector< PSimHit > PSimHitContainer
int read_nhits(std::ifstream &fin, int chamberType)
void resetStreampos(std::ifstream &fin, int chamberType)