CMS 3D CMS Logo

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

#include <EcalTBMCInfoProducer.h>

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

Public Member Functions

 EcalTBMCInfoProducer (const edm::ParameterSet &ps)
 Constructor. More...
 
void produce (edm::Event &event, const edm::EventSetup &eventSetup)
 Produce digis out of raw data. More...
 
virtual ~EcalTBMCInfoProducer ()
 Destructor. More...
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDProducer ()
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 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
std::vector< ConsumesInfoconsumesInfo () const
 
 EDConsumerBase ()
 
ProductHolderIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
std::vector
< ProductHolderIndexAndSkipBit >
const & 
itemsToGetFromEvent () const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesDependentUpon (std::string const &iProcessName, std::string const &iModuleLabel, bool iPrint, std::vector< char const * > &oModuleLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
bool registeredToConsume (ProductHolderIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Private Attributes

double beamEta
 
double beamPhi
 
double beamTheta
 
double beamXoff
 
double beamYoff
 
int crysNumber
 
ROOT::Math::Rotation3D * fromCMStoTB
 
std::string GenVtxLabel
 
double partXhodo
 
double partYhodo
 
EcalTBCrystalMaptheTestMap
 

Additional Inherited Members

- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- 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::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

Definition at line 29 of file EcalTBMCInfoProducer.h.

Constructor & Destructor Documentation

EcalTBMCInfoProducer::EcalTBMCInfoProducer ( const edm::ParameterSet ps)

Constructor.

Definition at line 18 of file EcalTBMCInfoProducer.cc.

References funct::cos(), reco_application_tbsim_DetSim-Digi_cfg::CrystalMapFile, spr::deltaEta, SiPixelRawToDigiRegional_cfi::deltaPhi, eta, Exception, create_public_lumi_plots::exp, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), edm::Service< T >::isAvailable(), EcalTBCrystalMap::NCRYSTAL, phi(), funct::sin(), and create_public_lumi_plots::xy.

18  {
19 
20  produces<PEcalTBInfo>();
21 
23  GenVtxLabel = ps.getUntrackedParameter<string>("moduleLabelVtx","source");
24  double fMinEta = ps.getParameter<double>("MinEta");
25  double fMaxEta = ps.getParameter<double>("MaxEta");
26  double fMinPhi = ps.getParameter<double>("MinPhi");
27  double fMaxPhi = ps.getParameter<double>("MaxPhi");
28  beamEta = (fMaxEta+fMinEta)/2.;
29  beamPhi = (fMaxPhi+fMinPhi)/2.;
30  beamTheta = 2.0*atan(exp(-beamEta));
31  beamXoff = ps.getParameter<double>("BeamMeanX");
32  beamYoff = ps.getParameter<double>("BeamMeanX");
33 
34  string fullMapName = CrystalMapFile.fullPath();
35  theTestMap = new EcalTBCrystalMap(fullMapName);
36  crysNumber = 0;
37 
38  double deltaEta = 999.;
39  double deltaPhi = 999.;
40  for ( int cryIndex = 1; cryIndex <= EcalTBCrystalMap::NCRYSTAL; ++cryIndex) {
41  double eta = 0;
42  double phi = 0.;
43  theTestMap->findCrystalAngles(cryIndex, eta, phi);
44  if ( fabs(beamEta - eta) < deltaEta && fabs(beamPhi - phi) < deltaPhi ) {
45  deltaEta = fabs(beamEta - eta);
46  deltaPhi = fabs(beamPhi - phi);
47  crysNumber = cryIndex;
48  }
49  else if (fabs(beamEta - eta)<deltaEta && fabs(beamPhi - phi)>deltaPhi ) {
50  if ( fabs(beamPhi - phi) < 0.017 ) {
51  deltaEta = fabs(beamEta - eta);
52  deltaPhi = fabs(beamPhi - phi);
53  crysNumber = cryIndex;
54  }
55  }
56  else if (fabs(beamEta - eta)>deltaEta && fabs(beamPhi - phi)<deltaPhi ) {
57  if ( fabs(beamEta - eta) < 0.017 ) {
58  deltaEta = fabs(beamEta - eta);
59  deltaPhi = fabs(beamPhi - phi);
60  crysNumber = cryIndex;
61  }
62  }
63  }
64 
65  edm::LogInfo("EcalTBInfo") << "Initialize TB MC ECAL info producer with parameters: \n"
66  << "Crystal map file: " << CrystalMapFile << "\n"
67  << "Beam average eta = " << beamEta << "\n"
68  << "Beam average phi = " << beamPhi << "\n"
69  << "Corresponding to crystal number = " << crysNumber << "\n"
70  << "Beam X offset = " << beamXoff << "\n"
71  << "Beam Y offset = " << beamYoff;
72 
73  // rotation matrix to move from the CMS reference frame to the test beam one
74 
75  double xx = -cos(beamTheta)*cos(beamPhi);
76  double xy = -cos(beamTheta)*sin(beamPhi);
77  double xz = sin(beamTheta);
78 
79  double yx = sin(beamPhi);
80  double yy = -cos(beamPhi);
81  double yz = 0.;
82 
83  double zx = sin(beamTheta)*cos(beamPhi);
84  double zy = sin(beamTheta)*sin(beamPhi);
85  double zz = cos(beamTheta);
86 
87  fromCMStoTB = new ROOT::Math::Rotation3D(xx, xy, xz, yx, yy, yz, zx, zy, zz);
88 
89  // random number
91  if ( ! rng.isAvailable()) {
92  throw cms::Exception("Configuration")
93  << "EcalTBMCInfoProducer requires the RandomNumberGeneratorService\n"
94  "which is not present in the configuration file. You must add the service\n"
95  "in the configuration file or remove the modules that require it.";
96  }
97 }
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
static const int NCRYSTAL
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
static const double deltaEta
Definition: CaloConstants.h:8
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
bool isAvailable() const
Definition: Service.h:46
EcalTBCrystalMap * theTestMap
void findCrystalAngles(const int thisCrysIndex, double &thisEta, double &thisPhi)
ROOT::Math::Rotation3D * fromCMStoTB
EcalTBMCInfoProducer::~EcalTBMCInfoProducer ( )
virtual

Destructor.

Definition at line 99 of file EcalTBMCInfoProducer.cc.

99  {
100  delete theTestMap;
101 }
EcalTBCrystalMap * theTestMap

Member Function Documentation

void EcalTBMCInfoProducer::produce ( edm::Event event,
const edm::EventSetup eventSetup 
)
virtual

Produce digis out of raw data.

Implements edm::EDProducer.

Definition at line 103 of file EcalTBMCInfoProducer.cc.

References edm::RandomNumberGenerator::getEngine(), LogDebug, and edm::Event::streamID().

104 {
106  CLHEP::HepRandomEngine* engine = &rng->getEngine(event.streamID());
107 
108  auto_ptr<PEcalTBInfo> product(new PEcalTBInfo());
109 
110  // Fill the run information
111 
112  product->setCrystal(crysNumber);
113 
114  product->setBeamDirection(beamEta, beamPhi);
115  product->setBeamOffset(beamXoff, beamYoff);
116 
117  // Compute the event x,y vertex coordinates in the beam reference system
118  // e.g. in the place orthogonal to the beam average direction
119 
120  partXhodo = partYhodo = 0.;
121 
123  event.getByLabel(GenVtxLabel,GenEvt);
124 
125  const HepMC::GenEvent* Evt = GenEvt->GetEvent() ;
126  HepMC::GenEvent::vertex_const_iterator Vtx = Evt->vertices_begin();
127 
128  math::XYZPoint eventCMSVertex((*Vtx)->position().x(),
129  (*Vtx)->position().y(),
130  (*Vtx)->position().z());
131 
132  LogDebug("EcalTBInfo") << "Generated vertex position = "
133  << eventCMSVertex.x() << " "
134  << eventCMSVertex.y() << " "
135  << eventCMSVertex.z();
136 
137  math::XYZPoint eventTBVertex = (*fromCMStoTB)*eventCMSVertex;
138 
139  LogDebug("EcalTBInfo") << "Rotated vertex position = "
140  << eventTBVertex.x() << " "
141  << eventTBVertex.y() << " "
142  << eventTBVertex.z();
143 
144  partXhodo = eventTBVertex.x();
145  partYhodo = eventTBVertex.y();
146 
147  product->setBeamPosition(partXhodo, partYhodo);
148 
149  // Asynchronous phase shift
150  double thisPhaseShift = CLHEP::RandFlat::shoot(engine);
151 
152  product->setPhaseShift(thisPhaseShift);
153  LogDebug("EcalTBInfo") << "Asynchronous Phaseshift = " << thisPhaseShift;
154 
155  // store the object in the framework event
156 
157  event.put(product);
158 }
#define LogDebug(id)
virtual CLHEP::HepRandomEngine & getEngine(StreamID const &)=0
Use this engine in event methods.
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
StreamID streamID() const
Definition: Event.h:80

Member Data Documentation

double EcalTBMCInfoProducer::beamEta
private

Definition at line 51 of file EcalTBMCInfoProducer.h.

double EcalTBMCInfoProducer::beamPhi
private

Definition at line 52 of file EcalTBMCInfoProducer.h.

double EcalTBMCInfoProducer::beamTheta
private

Definition at line 53 of file EcalTBMCInfoProducer.h.

double EcalTBMCInfoProducer::beamXoff
private

Definition at line 57 of file EcalTBMCInfoProducer.h.

double EcalTBMCInfoProducer::beamYoff
private

Definition at line 58 of file EcalTBMCInfoProducer.h.

int EcalTBMCInfoProducer::crysNumber
private

Definition at line 55 of file EcalTBMCInfoProducer.h.

ROOT::Math::Rotation3D* EcalTBMCInfoProducer::fromCMStoTB
private

Definition at line 65 of file EcalTBMCInfoProducer.h.

std::string EcalTBMCInfoProducer::GenVtxLabel
private

Definition at line 67 of file EcalTBMCInfoProducer.h.

double EcalTBMCInfoProducer::partXhodo
private

Definition at line 60 of file EcalTBMCInfoProducer.h.

double EcalTBMCInfoProducer::partYhodo
private

Definition at line 61 of file EcalTBMCInfoProducer.h.

EcalTBCrystalMap* EcalTBMCInfoProducer::theTestMap
private

Definition at line 63 of file EcalTBMCInfoProducer.h.