CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Public Attributes | Private Member Functions | Private Attributes
SimHitShifter Class Reference

#include <simhitshifter/SimHitShifter/src/SimHitShifter.cc>

Inheritance diagram for SimHitShifter:
edm::EDProducer edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

virtual void beginRun (const edm::Run &, const edm::EventSetup &)
 
 SimHitShifter (const edm::ParameterSet &)
 
 ~SimHitShifter ()
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
virtual ~EDProducer ()
 
- Public Member Functions inherited from edm::ProducerBase
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription
const &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 
- Public Member Functions inherited from edm::EDConsumerBase
 EDConsumerBase ()
 
ProductHolderIndex indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndex > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndex > &) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Public Attributes

std::map< int, float > shiftinfo
 

Private Member Functions

virtual void beginJob (const edm::Run &, const edm::EventSetup &)
 
virtual void endJob ()
 
virtual void produce (edm::Event &, const edm::EventSetup &)
 

Private Attributes

std::string ShiftFileName
 

Additional Inherited Members

- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
typedef WorkerT< EDProducerWorkerType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Static Public Member Functions inherited from edm::EDProducer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDProducer
CurrentProcessingContext const * currentContext () const
 
- Protected Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Description: [one line class summary]

Implementation: [Notes on implementation]

Definition at line 110 of file SimHitShifter.cc.

Constructor & Destructor Documentation

SimHitShifter::SimHitShifter ( const edm::ParameterSet iConfig)
explicit

Definition at line 127 of file SimHitShifter.cc.

References gather_cfg::cout, edm::ParameterSet::getUntrackedParameter(), evf::evtn::offset(), ShiftFileName, shiftinfo, and AlCaHLTBitMon_QueryRunRegistry::string.

128 {
129  std::cout<<"in the constructor"<<std::endl;
130 
131  ShiftFileName = iConfig.getUntrackedParameter<std::string>("ShiftFileName","/afs/cern.ch/user/c/carrillo/simhits/CMSSW_3_5_8_patch2/src/simhitshifter/SimHitShifter/Merged_Muon_RawId_Shift.txt");
132 
133  //iSetup.get<MuonGeometryRecord>().get(rpcGeo);
134 
135  std::ifstream ifin(ShiftFileName.c_str());
136 
137  int rawId;
138  float offset;
139 
140  std::cout<<"In the constructor, The name of the file is "<<ShiftFileName.c_str()<<std::endl;
141 
142  if(!ifin) std::cout<<"Problem reading the map rawId shift "<<ShiftFileName.c_str()<<std::endl;
143  assert(ifin);
144 
145  while (ifin.good()){
146  ifin >>rawId >>offset;
147  shiftinfo[rawId]=offset;
148  std::cout<<"rawId ="<<rawId<<" offset="<<offset<<std::endl;
149  }
150 
151  produces<edm::PSimHitContainer>("MuonCSCHits");
152  produces<edm::PSimHitContainer>("MuonDTHits");
153  produces<edm::PSimHitContainer>("MuonRPCHits");
154 }
T getUntrackedParameter(std::string const &, T const &) const
std::map< int, float > shiftinfo
unsigned int offset(bool)
tuple cout
Definition: gather_cfg.py:121
std::string ShiftFileName
SimHitShifter::~SimHitShifter ( )

Definition at line 157 of file SimHitShifter.cc.

158 {
159 }

Member Function Documentation

void SimHitShifter::beginJob ( const edm::Run run,
const edm::EventSetup iSetup 
)
privatevirtual

Definition at line 282 of file SimHitShifter.cc.

283 {
284 
285 }
void SimHitShifter::beginRun ( const edm::Run run,
const edm::EventSetup iSetup 
)
virtual

Reimplemented from edm::EDProducer.

Definition at line 275 of file SimHitShifter.cc.

276 {
277 
278 }
void SimHitShifter::endJob ( void  )
privatevirtual

Reimplemented from edm::EDProducer.

Definition at line 289 of file SimHitShifter.cc.

289  {
290 }
void SimHitShifter::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
privatevirtual

Implements edm::EDProducer.

Definition at line 161 of file SimHitShifter.cc.

References CSCDetId::chamber(), CSCDetId::chamberId(), gather_cfg::cout, MuonSubdetId::CSC, CSCDetId, MuonSubdetId::DT, CSCDetId::endcap(), edm::Event::getManyByType(), i, CSCDetId::layer(), DetId::Muon, edm::Event::put(), DetId::rawId(), CSCDetId::ring(), MuonSubdetId::RPC, shiftinfo, and CSCDetId::station().

161  {
162  using namespace edm;
163 
164  //std::cout << " Getting the SimHits " <<std::endl;
165  std::vector<edm::Handle<edm::PSimHitContainer> > theSimHitContainers;
166  iEvent.getManyByType(theSimHitContainers);
167  //std::cout << " The Number of sim Hits is " << theSimHitContainers.size() <<std::endl;
168 
169  std::auto_ptr<edm::PSimHitContainer> pcsc(new edm::PSimHitContainer);
170  std::auto_ptr<edm::PSimHitContainer> pdt(new edm::PSimHitContainer);
171  std::auto_ptr<edm::PSimHitContainer> prpc(new edm::PSimHitContainer);
172 
173  std::vector<PSimHit> theSimHits;
174 
175  using std::oct;
176  using std::dec;
177 
178  for (int i = 0; i < int(theSimHitContainers.size()); i++){
179  theSimHits.insert(theSimHits.end(),theSimHitContainers.at(i)->begin(),theSimHitContainers.at(i)->end());
180  }
181 
182  for (std::vector<PSimHit>::const_iterator iHit = theSimHits.begin(); iHit != theSimHits.end(); iHit++){
183  DetId theDetUnitId((*iHit).detUnitId());
184  DetId simdetid= DetId((*iHit).detUnitId());
185 
186  if(simdetid.det()!=DetId::Muon) continue;
187 
188  float newtof = 0;
189 
190  if(simdetid.det()==DetId::Muon && simdetid.subdetId()== MuonSubdetId::RPC){//Only RPCs
191  //std::cout<<"\t\t We have an RPC Sim Hit! in t="<<(*iHit).timeOfFlight()<<" DetId="<<(*iHit).detUnitId()<<std::endl;
192  if(shiftinfo.find(simdetid.rawId())==shiftinfo.end()){
193  std::cout<<"RPC Warning the RawId = "<<simdetid.det()<<" | "<<simdetid.rawId()<<"is not in the map"<<std::endl;
194  newtof = (*iHit).timeOfFlight();
195  }else{
196  newtof = (*iHit).timeOfFlight()+shiftinfo[simdetid.rawId()];
197  }
198 
199  PSimHit hit((*iHit).entryPoint(),(*iHit).exitPoint(),(*iHit).pabs(),
200  newtof,
201  (*iHit).energyLoss(),(*iHit).particleType(),simdetid,(*iHit). trackId(),(*iHit).thetaAtEntry(),(*iHit).phiAtEntry(),(*iHit).processType());
202  prpc->push_back(hit);
203  }
204  else if(simdetid.det()==DetId::Muon && simdetid.subdetId()== MuonSubdetId::DT){//Only DTs
205  int RawId = simdetid.rawId();
206  std::cout<<"We found a DT simhit the RawId in Dec is";
207  std::cout<<dec<<RawId<<std::endl;
208  std::cout<<"and in oct"<<std::endl;
209  std::cout<<oct<<RawId<< std::endl;
210  std::cout<<"once masked in oct "<<std::endl;
211  int compressedRawId = RawId/8/8/8/8/8;
212  std::cout<<compressedRawId<<std::endl;
213  std::cout<<"extendedRawId"<<std::endl;
214  int extendedRawId = compressedRawId*8*8*8*8*8;
215  std::cout<<extendedRawId<<std::endl;
216  std::cout<<"converted again in decimal"<<std::endl;
217  std::cout<<dec<<extendedRawId<<std::endl;
218 
219  if(shiftinfo.find(extendedRawId)==shiftinfo.end()){
220  //std::cout<<"DT Warning the RawId = "<<extendedRawId<<"is not in the map"<<std::endl;
221  newtof = (*iHit).timeOfFlight();
222  }else{
223  newtof = (*iHit).timeOfFlight()+shiftinfo[extendedRawId];
224  std::cout<<"RawId = "<<extendedRawId<<"is in the map "<<(*iHit).timeOfFlight()<<" "<<newtof<<std::endl;
225  }
226 
227  std::cout<<"\t\t We have an DT Sim Hit! in t="<<(*iHit).timeOfFlight()<<" DetId="<<(*iHit).detUnitId()<<std::endl;
228  PSimHit hit((*iHit).entryPoint(),(*iHit).exitPoint(),(*iHit).pabs(),
229  newtof,
230  (*iHit).energyLoss(),(*iHit).particleType(),simdetid,(*iHit). trackId(),(*iHit).thetaAtEntry(),(*iHit).phiAtEntry(),(*iHit).processType());
231  pdt->push_back(hit);
232  }
233  else if(simdetid.det()==DetId::Muon && simdetid.subdetId()== MuonSubdetId::CSC){//Only CSCs
234  //std::cout<<"\t\t We have an CSC Sim Hit! in t="<<(*iHit).timeOfFlight()<<" DetId="<<(*iHit).detUnitId()<<std::endl;
235 
236  CSCDetId TheCSCDetId = CSCDetId(simdetid);
237  CSCDetId TheChamberDetId = TheCSCDetId.chamberId();
238 
239  if(shiftinfo.find(TheChamberDetId.rawId())==shiftinfo.end()){
240  std::cout<<"The RawId is not in the map,perhaps it is on the CSCs station 1 ring 4"<<std::endl;
241  if(TheChamberDetId.station()==1 && TheChamberDetId.ring()==4){
242  CSCDetId TheChamberDetIdNoring4= CSCDetId(TheChamberDetId.endcap(),TheChamberDetId.station(),1 //1 instead of 4
243  ,TheChamberDetId.chamber(),TheChamberDetId.layer());
244 
245  if(shiftinfo.find(TheChamberDetIdNoring4.rawId())==shiftinfo.end()){
246  std::cout<<"CSC Warning the RawId = "<<TheChamberDetIdNoring4<<" "<<TheChamberDetIdNoring4.rawId()<<"is not in the map"<<std::endl;
247  newtof = (*iHit).timeOfFlight();
248  }else{
249  newtof = (*iHit).timeOfFlight()+shiftinfo[TheChamberDetIdNoring4.rawId()];
250  }
251  }
252  }else{
253  newtof = (*iHit).timeOfFlight()+shiftinfo[TheChamberDetId.rawId()];
254  }
255 
256  PSimHit hit((*iHit).entryPoint(),(*iHit).exitPoint(),(*iHit).pabs(),
257  newtof,
258  (*iHit).energyLoss(),(*iHit).particleType(),simdetid,(*iHit). trackId(),(*iHit).thetaAtEntry(),(*iHit).phiAtEntry(),(*iHit).processType());
259 
260  std::cout<<"CSC check newtof"<<newtof<<" "<<(*iHit).timeOfFlight()<<std::endl;
261  if(newtof==(*iHit).timeOfFlight())std::cout<<"Warning!!!"<<std::endl;
262  pcsc->push_back(hit);
263  }
264  }
265 
266  std::cout<<"Putting collections in the event"<<std::endl;
267 
268  iEvent.put(pcsc,"MuonCSCHits");
269  iEvent.put(pdt,"MuonDTHits");
270  iEvent.put(prpc,"MuonRPCHits");
271 
272 }
void getManyByType(std::vector< Handle< PROD > > &results) const
Definition: Event.h:395
int chamber() const
Definition: CSCDetId.h:70
int i
Definition: DBlmapReader.cc:9
int layer() const
Definition: CSCDetId.h:63
uint32_t rawId() const
get the raw id
Definition: DetId.h:45
int endcap() const
Definition: CSCDetId.h:95
static const int CSC
Definition: MuonSubdetId.h:15
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:94
std::map< int, float > shiftinfo
CSCDetId chamberId() const
Definition: CSCDetId.h:55
int ring() const
Definition: CSCDetId.h:77
Definition: DetId.h:20
static const int RPC
Definition: MuonSubdetId.h:16
int station() const
Definition: CSCDetId.h:88
tuple cout
Definition: gather_cfg.py:121
static const int DT
Definition: MuonSubdetId.h:14
std::vector< PSimHit > PSimHitContainer

Member Data Documentation

std::string SimHitShifter::ShiftFileName
private

Definition at line 120 of file SimHitShifter.cc.

Referenced by SimHitShifter().

std::map<int,float> SimHitShifter::shiftinfo

Definition at line 116 of file SimHitShifter.cc.

Referenced by produce(), and SimHitShifter().