CMS 3D CMS Logo

L1MuGMTHWFileReader.cc
Go to the documentation of this file.
1 //-------------------------------------------------
2 //
3 // \class L1MuGMTHWFileReader
4 //
5 // Description: Puts the GMT input information from
6 // a GMT ascii HW testfile into the Event
7 //
8 //
9 //
10 // Author :
11 // Tobias Noebauer HEPHY Vienna
12 // Ivan Mikulec HEPHY Vienna
13 //
14 //--------------------------------------------------
15 
16 //-----------------------
17 // This Class's Header --
18 //-----------------------
20 
21 //---------------
22 // C++ Headers --
23 //---------------
24 #include <stdexcept>
25 
26 //-------------------------------
27 // Collaborating Class Headers --
28 //-------------------------------
31 
33 
34 //----------------
35 // Constructors --
36 //----------------
38  edm::InputSourceDescription const& desc) :
39  ProducerSourceFromFiles(ps, desc, true) {
40 
41  produces<std::vector<L1MuRegionalCand> >("DT");
42  produces<std::vector<L1MuRegionalCand> >("CSC");
43  produces<std::vector<L1MuRegionalCand> >("RPCb");
44  produces<std::vector<L1MuRegionalCand> >("RPCf");
45 
46  produces<L1CaloRegionCollection>();
47 
48  if(!fileNames().size()) {
49  throw std::runtime_error("L1MuGMTHWFileReader: no input file");
50  }
51  edm::LogInfo("GMT_HWFileReader_info") << "opening file " << fileNames()[0];
52  m_in.open((fileNames()[0].substr(fileNames()[0].find(":")+1)).c_str());
53  if(!m_in) {
54  throw std::runtime_error("L1MuGMTHWFileReader: file " + fileNames()[0]
55  + " could not be openned");
56  }
57 
58 }
59 
60 //--------------
61 // Destructor --
62 //--------------
64  m_in.close();
65 }
66 
67 //--------------
68 // Operations --
69 //--------------
71  readNextEvent();
72  if(!m_evt.getRunNumber() && !m_evt.getEventNumber()) return false;
73  id = edm::EventID(m_evt.getRunNumber(), id.luminosityBlock(), m_evt.getEventNumber());
74 
75  edm::LogInfo("GMT_HWFileReader_info") << "run: " << m_evt.getRunNumber() <<
76  " evt: " << m_evt.getEventNumber();
77  return true;
78 }
79 
81  L1MuRegionalCand empty_mu;
82 
83 
84  std::unique_ptr<std::vector<L1MuRegionalCand> > DTCands(new std::vector<L1MuRegionalCand>);
85  for (unsigned i = 0; i < 4; i++) {
86  const L1MuRegionalCand *mu = m_evt.getInputMuon("IND", i);
87  if (!mu) mu = &empty_mu;
88  DTCands->push_back(*mu);
89  }
90  e.put(std::move(DTCands),"DT");
91 
92  std::unique_ptr<std::vector<L1MuRegionalCand> > CSCCands(new std::vector<L1MuRegionalCand>);
93  for (unsigned i = 0; i < 4; i++) {
94  const L1MuRegionalCand *mu = m_evt.getInputMuon("INC", i);
95  if (!mu) mu = &empty_mu;
96  CSCCands->push_back(*mu);
97  }
98  e.put(std::move(CSCCands),"CSC");
99 
100  std::unique_ptr<std::vector<L1MuRegionalCand> > RPCbCands(new std::vector<L1MuRegionalCand>);
101  for (unsigned i = 0; i < 4; i++) {
102  const L1MuRegionalCand *mu = m_evt.getInputMuon("INB", i);
103  if (!mu) mu = &empty_mu;
104  RPCbCands->push_back(*mu);
105  }
106  e.put(std::move(RPCbCands),"RPCb");
107 
108  std::unique_ptr<std::vector<L1MuRegionalCand> > RPCfCands(new std::vector<L1MuRegionalCand>);
109  for (unsigned i = 0; i < 4; i++) {
110  const L1MuRegionalCand *mu = m_evt.getInputMuon("INF", i);
111  if (!mu) mu = &empty_mu;
112  RPCfCands->push_back(*mu);
113  }
114  e.put(std::move(RPCfCands),"RPCf");
115 
116  std::unique_ptr<L1CaloRegionCollection> rctRegions (new L1CaloRegionCollection);
117  for(int ieta = 4; ieta < 18; ieta++) {
118  for(int iphi = 0; iphi < 18; iphi++) {
119  rctRegions->push_back(L1CaloRegion(0,false,true,m_evt.getMipBit(ieta-4,iphi),m_evt.getIsoBit(ieta-4,iphi),ieta,iphi));
120  }
121  }
122 
123  e.put(std::move(rctRegions));
124 }
125 
127  m_evt.reset();
128 
129  std::string line_id;
130  do {
131  int bx = 0;
132 
133  m_in >> line_id;
134  if (line_id == "--") continue;
135 
136  if (line_id == "RUN") {
137  unsigned long runnr;
138  m_in >> runnr;
139  m_evt.setRunNumber(runnr);
140  }
141 
142  if (line_id == "EVT") {
143  unsigned long evtnr;
144  m_in >> evtnr;
145  m_evt.setEventNumber(evtnr);
146  }
147 
148 
149  if (line_id == "DT" || line_id == "CSC" || line_id == "BRPC" || line_id == "FRPC")
150  {
151 
152  // decode input muon
153 
154  unsigned inpmu = 0;
155  unsigned val;
156  m_in >> val; inpmu |= (val & 0x01) << 24; // valid charge
157  m_in >> val; inpmu |= (val & 0x01) << 23; // charge
158  m_in >> val; inpmu |= (val & 0x01) << 22; // halo / fine
159  m_in >> val; inpmu |= (val & 0x3f) << 16; // eta
160  m_in >> val; inpmu |= (val & 0x07) << 13; // quality
161  m_in >> val; inpmu |= (val & 0x1f) << 8; // pt
162  m_in >> val; inpmu |= (val & 0xff) ; // phi
163 
164  std::string chipid("IN");
165  chipid += line_id[0];
166 
167  int type=0;
168  if (line_id == "DT") type = 0;
169  if (line_id == "CSC") type = 2;
170  if (line_id == "BRPC") type = 1;
171  if (line_id == "FRPC") type = 3;
172 
173 
174  L1MuRegionalCand cand(inpmu);
175  cand.setType(type);
176  cand.setBx(bx);
177  m_evt.addInputMuon(chipid, cand);
178  }
179 
180  if (line_id == "MIP") {
181  int nPairs;
182  m_in >> nPairs;
183  for (int i=0; i<nPairs; i++) {
184  unsigned eta;
185  unsigned phi;
186  m_in >> eta;
187  m_in >> phi;
188  if (phi >= 9) phi-=9;
189  else phi+=9;
190  m_evt.setMipBit(eta, phi, true);
191  }
192  }
193 
194  if (line_id == "NQ") {
195  int nPairs;
196  m_in >> nPairs;
197  for (int i=0; i<nPairs; i++) {
198  unsigned eta;
199  unsigned phi;
200  m_in >> eta;
201  m_in >> phi;
202  if (phi >= 9) phi-=9;
203  else phi+=9;
204  m_evt.setIsoBit(eta, phi, false);
205  }
206  }
207 
208  //read the rest of the line
209  const int sz=4000; char buf[sz];
210  m_in.getline(buf, sz);
211 
212  } while (line_id != "NQ" && !m_in.eof());
213 
214 }
type
Definition: HCALResponse.h:21
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:127
L1MuGMTHWFileReader(edm::ParameterSet const &, edm::InputSourceDescription const &)
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:20
void setRunNumber(unsigned long runnr)
unsigned long getRunNumber() const
get the Run number
virtual bool setRunAndEventInfo(edm::EventID &id, edm::TimeValue_t &time, edm::EventAuxiliary::ExperimentType &eType)
std::vector< std::string > const & fileNames() const
Definition: FromFiles.h:22
void setBx(int bx)
Set Bunch Crossing.
unsigned long getEventNumber() const
get the Event number
L1MuGMTInputEvent m_evt
virtual void produce(edm::Event &)
void setType(unsigned type)
Set Type: 0 DT, 1 bRPC, 2 CSC, 3 fRPC.
const int mu
Definition: Constants.h:22
unsigned long long TimeValue_t
Definition: Timestamp.h:28
void addInputMuon(std::string chipid, const L1MuRegionalCand &inMu)
void setIsoBit(unsigned etaIndex, unsigned phiIndex, bool val)
const L1MuRegionalCand * getInputMuon(std::string chipid, unsigned index) const
const bool & getMipBit(unsigned etaIndex, unsigned phiIndex)
const bool & getIsoBit(unsigned etaIndex, unsigned phiIndex)
A calorimeter trigger region (sum of 4x4 trigger towers)
Definition: L1CaloRegion.h:22
std::vector< L1CaloRegion > L1CaloRegionCollection
void setEventNumber(unsigned long eventnr)
def move(src, dest)
Definition: eostools.py:510
void setMipBit(unsigned etaIndex, unsigned phiIndex, bool val)