CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
FamosManager.cc
Go to the documentation of this file.
1 // CMSSW Header
10 
12 
14 
15 //#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
16 //#include "RecoTracker/TkDetLayers/interface/GeometricSearchTracker.h"
21 
25 //#include "Geometry/CaloTopology/interface/CaloTopology.h"
26 
27 // HepMC headers
28 //#include "HepMC/GenEvent.h"
29 
30 // FAMOS Header
41 #include <iostream>
42 #include <memory>
43 #include <vector>
44 
45 using namespace HepMC;
46 
48  : iEvent(0),
49  myPileUpSimulator(0),
50  myCalorimetry(0),
51  m_pUseMagneticField(p.getParameter<bool>("UseMagneticField")),
52  m_Tracking(p.getParameter<bool>("SimulateTracking")),
53  m_Calorimetry(p.getParameter<bool>("SimulateCalorimetry")),
54  m_Alignment(p.getParameter<bool>("ApplyAlignment")),
55  m_pRunNumber(p.getUntrackedParameter<int>("RunNumber",1)),
56  m_pVerbose(p.getUntrackedParameter<int>("Verbosity",1))
57 {
58  // Initialize the FSimEvent
59  mySimEvent =
60  new FSimEvent(p.getParameter<edm::ParameterSet>("ParticleFilter"));
61 
65  p.getParameter<edm::ParameterSet>("MaterialEffects"),
66  p.getParameter<edm::ParameterSet>("TrackerSimHits"),
67  p.getParameter<edm::ParameterSet>("ActivateDecays"));
68 
69  // Initialize PileUp Producer (if requested)
71 
72  // Initialize Calorimetry Fast Simulation (if requested)
73  if ( m_Calorimetry)
74  myCalorimetry =
76  p.getParameter<edm::ParameterSet>("Calorimetry"),
77  p.getParameter<edm::ParameterSet>("MaterialEffectsForMuonsInECAL"),
78  p.getParameter<edm::ParameterSet>("MaterialEffectsForMuonsInHCAL"),
79  p.getParameter<edm::ParameterSet>("GFlash"));
80 }
81 
83 {
84  if ( mySimEvent ) delete mySimEvent;
87  if ( myCalorimetry) delete myCalorimetry;
88 }
89 
90 void
92 {
93  // Particle data table (from Pythia)
95  es.getData(pdt);
96  mySimEvent->initializePdt(&(*pdt));
97 
98  // Initialize the full (misaligned) tracker geometry
99  // (only if tracking is requested)
100  std::string misAligned = m_Alignment ? "MisAligned" : "";
101  // 1) By default, the aligned geometry is chosen (m_Alignment = false)
102  // 2) By default, the misaligned geometry is aligned
104  es.get<TrackerDigiGeometryRecord>().get(misAligned,tracker);
106 
107  // Initialize the tracker misaligned reco geometry (always needed)
108  // By default, the misaligned geometry is aligned
109  edm::ESHandle<GeometricSearchTracker> theGeomSearchTracker;
110  es.get<TrackerRecoGeometryRecord>().get(misAligned, theGeomSearchTracker );
111 
112  // Initialize the misaligned tracker interaction geometry
113  edm::ESHandle<TrackerInteractionGeometry> theTrackerInteractionGeometry;
114  es.get<TrackerInteractionGeometryRecord>().get(misAligned, theTrackerInteractionGeometry );
115 
116  // Initialize the magnetic field
117  double bField000 = 0.;
118  if (m_pUseMagneticField) {
119  edm::ESHandle<MagneticFieldMap> theMagneticFieldMap;
120  es.get<MagneticFieldMapRecord>().get(misAligned, theMagneticFieldMap);
121  const GlobalPoint g(0.,0.,0.);
122  bField000 = theMagneticFieldMap->inTeslaZ(g);
123  myTrajectoryManager->initializeRecoGeometry(&(*theGeomSearchTracker),
124  &(*theTrackerInteractionGeometry),
125  &(*theMagneticFieldMap));
126  } else {
127  myTrajectoryManager->initializeRecoGeometry(&(*theGeomSearchTracker),
128  &(*theTrackerInteractionGeometry),
129  0);
130  bField000 = 4.0;
131  }
132  // The following should be on LogInfo
133  //std::cout << "B-field(T) at (0,0,0)(cm): " << bField000 << std::endl;
134 
135  // Initialize the calorimeter geometry
136  if ( myCalorimetry ) {
138  es.get<CaloGeometryRecord>().get(pG);
140 
141  edm::ESHandle<CaloTopology> theCaloTopology;
142  es.get<CaloTopologyRecord>().get(theCaloTopology);
143  myCalorimetry->getCalorimeter()->setupTopology(*theCaloTopology);
144  myCalorimetry->getCalorimeter()->initialize(bField000);
145 
147  }
148 
149  m_pRunNumber = run.run();
150 
151 }
152 
153 
154 void
155 FamosManager::reconstruct(const HepMC::GenEvent* evt,
156  const HepMC::GenEvent* pu,
157  const TrackerTopology *tTopo,
159 {
160  // myGenEvent = evt;
161 
162  iEvent++;
164 
165 
166  // Fill the event from the original generated event
167  mySimEvent->fill(*evt,id);
168 
169  // Get the pileup events and add the particles to the main event
170  if(pu)
172 
173  // And propagate the particles through the detector
174  myTrajectoryManager->reconstruct(tTopo, random);
175 
176  if ( myCalorimetry ) myCalorimetry->reconstruct(random);
177 
178  edm::LogInfo("FamosManager") << " saved : Event " << iEvent
179  << " of weight " << mySimEvent->weight()
180  << " with " << mySimEvent->nTracks()
181  << " tracks and " << mySimEvent->nVertices()
182  << " vertices, generated by "
183  << mySimEvent->nGenParts() << " particles " << std::endl;
184 }
void reconstruct(const TrackerTopology *tTopo, RandomEngineAndDistribution const *)
Does the real job.
T getParameter(std::string const &) const
bool m_pUseMagneticField
Definition: FamosManager.h:71
void initializeTrackerGeometry(const TrackerGeometry *geomTracker)
Initialize the full Tracker Geometry.
RunNumber_t run() const
Definition: RunBase.h:42
~FamosManager()
Destructor.
Definition: FamosManager.cc:82
FSimEvent * mySimEvent
Definition: FamosManager.h:64
bool m_Alignment
Definition: FamosManager.h:74
void setupTopology(const CaloTopology &)
Definition: Calorimeter.cc:127
void initializeRecoGeometry(const GeometricSearchTracker *geomSearchTracker, const TrackerInteractionGeometry *interactionGeometry, const MagneticFieldMap *aFieldMap)
Initialize the Reconstruction Geometry.
void fill(const HepMC::GenEvent &hev, edm::EventID &Id)
fill the FBaseSimEvent from the current HepMC::GenEvent
Definition: FSimEvent.cc:14
CaloGeometryHelper * getCalorimeter() const
TRandom random
Definition: MVATrainer.cc:138
TrajectoryManager * myTrajectoryManager
Definition: FamosManager.h:65
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
Definition: Activities.doc:4
void getData(T &iHolder) const
Definition: EventSetup.h:78
int iEvent
Definition: GenABIO.cc:230
void reconstruct(RandomEngineAndDistribution const *)
FastHFShowerLibrary * getHFShowerLibrary() const
CalorimetryManager * myCalorimetry
Definition: FamosManager.h:67
FamosManager(edm::ParameterSet const &p)
Constructor.
Definition: FamosManager.cc:47
bool m_Calorimetry
Definition: FamosManager.h:73
void reconstruct(const HepMC::GenEvent *evt, const HepMC::GenEvent *pu, const TrackerTopology *tTopo, RandomEngineAndDistribution const *)
The real thing is done here.
unsigned int nTracks() const
Number of tracks.
Definition: FSimEvent.cc:36
void setupGeometry(const CaloGeometry &pG)
Definition: Calorimeter.cc:117
unsigned int nGenParts() const
Number of MC particles.
Definition: FSimEvent.cc:46
const T & get() const
Definition: EventSetup.h:55
unsigned int nVertices() const
Number of vertices.
Definition: FSimEvent.cc:41
void produce(const HepMC::GenEvent *pu)
Produce N minimum bias events, and add them to the FSimEvent.
float weight() const
Method to return the event weight.
Definition: FSimEvent.cc:31
void initializePdt(const HepPDT::ParticleDataTable *aPdt)
Initialize the particle data table.
PileUpSimulator * myPileUpSimulator
Definition: FamosManager.h:66
void const initHFShowerLibrary(const edm::EventSetup &)
void initialize(double bField)
void setupGeometryAndField(edm::Run const &run, const edm::EventSetup &es)
Get information from the Event Setup.
Definition: FamosManager.cc:91
Definition: Run.h:41