CMS 3D CMS Logo

TextToRaw.cc
Go to the documentation of this file.
1 
2 
4 
5 // system
6 #include <fstream>
7 #include <iostream>
8 #include <string>
9 #include <vector>
10 
11 // framework
13 
15 
16 // Raw data collection
18 
19 using std::cerr;
20 using std::cout;
21 using std::endl;
22 using std::ios;
23 using std::string;
24 using std::vector;
25 
26 const unsigned TextToRaw::EVT_MAX_SIZE;
27 
29  : fedId_(iConfig.getUntrackedParameter<int>("fedId", 745)),
30  filename_(iConfig.getUntrackedParameter<std::string>("filename",
31  "slinkOutput.txt")),
32  fileEventOffset_(
33  iConfig.getUntrackedParameter<int>("FileEventOffset", 0)),
34  nevt_(0) {
35  edm::LogInfo("TextToDigi")
36  << "Reading ASCII dump from " << filename_ << std::endl;
37 
38  // register the products
39  produces<FEDRawDataCollection>();
40 }
41 
43 
44  // do anything here that needs to be done at desctruction time
45  // (e.g. close files, deallocate resources etc.)
46 }
47 
50  std::unique_ptr<FEDRawDataCollection> rawColl(new FEDRawDataCollection());
51  // FEDRawData& feddata=rawColl->FEDData(fedId_);
52  // feddata.data()[0] = 0;
53  iEvent.put(std::move(rawColl));
54 }
55 
56 // ------------ method called to produce the data ------------
58  using namespace edm;
59 
60  // Skip event if required
61  if (nevt_ < fileEventOffset_) {
62  putEmptyDigi(iEvent);
63  nevt_++;
64  return;
65  } else if (nevt_ == 0 && fileEventOffset_ < 0) {
67  // skip first fileEventOffset input crossings
68  for (unsigned i = 0; i < (unsigned)abs(fileEventOffset_); i++) {
69  unsigned iline = 0;
70  while (getline(file_, line) && !line.empty()) {
71  iline++;
72  if (iline * 4 >= EVT_MAX_SIZE)
73  throw cms::Exception("TextToRawEventSizeOverflow")
74  << "TextToRaw::produce() : "
75  << " read too many lines (" << iline << ": " << line << ")"
76  << ", maximum event size is " << EVT_MAX_SIZE << std::endl;
77  }
78  }
79  }
80 
81  nevt_++;
82 
83  // read file
85  unsigned i = 0; // count 32-bit words
86 
87  // while not encountering dumb errors
88  while (getline(file_, line) && !line.empty()) {
89 
90  // bail if we reached the EVT_MAX_SIZE
91  if (i * 4 >= EVT_MAX_SIZE) {
92  throw cms::Exception("TextToRaw")
93  << "Read too many lines from file. Maximum event size is "
94  << EVT_MAX_SIZE << " lines" << std::endl;
95  }
96 
97  // convert string to int
98  std::istringstream iss(line);
99  unsigned long d;
100  iss >> std::hex >> d;
101 
102  // copy data
103  for (int j = 0; j < 4; j++) {
104  if ((i * 4 + j) < EVT_MAX_SIZE) {
105  char c = (d >> (8 * j)) & 0xff;
106  data_[i * 4 + j] = c;
107  }
108  }
109 
110  ++i;
111 
112  // bail if we reached the EVT_MAX_SIZE
113  if (i >= EVT_MAX_SIZE) {
114  throw cms::Exception("TextToRaw")
115  << "Read too many lines from file. Maximum event size is "
116  << EVT_MAX_SIZE << " lines" << std::endl;
117  }
118  }
119 
120  unsigned evtSize = i * 4;
121 
122  // create the collection
123  std::unique_ptr<FEDRawDataCollection> rawColl(new FEDRawDataCollection());
124  // retrieve the target buffer
125  FEDRawData &feddata = rawColl->FEDData(fedId_);
126  // Allocate space for header+trailer+payload
127  feddata.resize(evtSize);
128 
129  // fill FEDRawData object
130  for (unsigned i = 0; i < evtSize; ++i) {
131  feddata.data()[i] = data_[i];
132  }
133 
134  // put the collection in the event
135  iEvent.put(std::move(rawColl));
136 }
137 
138 // ------------ method called once each job just before starting event loop
139 // ------------
141  // open VME file
142  file_.open(filename_.c_str(), std::ios::in);
143  if (!file_.good()) {
144  edm::LogInfo("TextToDigi")
145  << "Failed to open ASCII file " << filename_ << std::endl;
146  }
147 }
148 
149 // ------------ method called once each job just after ending the event loop
150 // ------------
151 void TextToRaw::endJob() { file_.close(); }
std::ifstream file_
Definition: TextToRaw.h:57
void putEmptyDigi(edm::Event &)
Append empty digi collection.
Definition: TextToRaw.cc:49
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:125
int fileEventOffset_
Definition: TextToRaw.h:63
void produce(edm::Event &, const edm::EventSetup &) override
Definition: TextToRaw.cc:57
void beginJob() override
Definition: TextToRaw.cc:140
int nevt_
Definition: TextToRaw.h:64
std::string filename_
Definition: TextToRaw.h:56
char data_[EVT_MAX_SIZE]
Definition: TextToRaw.h:61
static const unsigned EVT_MAX_SIZE
Definition: TextToRaw.h:60
int iEvent
Definition: GenABIO.cc:224
TextToRaw(const edm::ParameterSet &)
Definition: TextToRaw.cc:28
~TextToRaw() override
Definition: TextToRaw.cc:42
void resize(size_t newsize)
Definition: FEDRawData.cc:32
void endJob() override
Definition: TextToRaw.cc:151
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
int fedId_
Definition: TextToRaw.h:53
HLT enums.
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Definition: FEDRawData.cc:28
def move(src, dest)
Definition: eostools.py:511