CMS 3D CMS Logo

List of all members | Public Member Functions | Protected Member Functions | Private Attributes
XtalDedxAnalysis Class Reference
Inheritance diagram for XtalDedxAnalysis:
edm::EDAnalyzer edm::EDConsumerBase

Public Member Functions

 XtalDedxAnalysis (const edm::ParameterSet &)
 
 ~XtalDedxAnalysis () override
 
- Public Member Functions inherited from edm::EDAnalyzer
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 EDAnalyzer ()
 
SerialTaskQueueglobalLuminosityBlocksQueue ()
 
SerialTaskQueueglobalRunsQueue ()
 
ModuleDescription const & moduleDescription () const
 
std::string workerType () const
 
 ~EDAnalyzer () override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase &&)=default
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Protected Member Functions

void analyze (const edm::Event &, const edm::EventSetup &) override
 
void analyzeHits (std::vector< PCaloHit > &, edm::Handle< edm::SimTrackContainer > &, edm::Handle< edm::SimVertexContainer > &)
 
void beginJob () override
 
void endJob () override
 
- Protected Member Functions inherited from edm::EDConsumerBase
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (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 ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 

Private Attributes

edm::InputTag caloHitSource_
 
TH1F * meE1T0_ [4]
 
TH1F * meE1T1_ [4]
 
TH1F * meE9T0_ [4]
 
TH1F * meE9T1_ [4]
 
TH1F * meNHit_ [4]
 
TH1I * mType_
 
std::string simTkLabel_
 
edm::EDGetTokenT< edm::PCaloHitContainertok_calo_
 
edm::EDGetTokenT< edm::SimTrackContainertok_tk_
 
edm::EDGetTokenT< edm::SimVertexContainertok_vtx_
 

Additional Inherited Members

- Public Types inherited from edm::EDAnalyzer
typedef EDAnalyzer ModuleType
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::EDAnalyzer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &)
 
static bool wantsGlobalLuminosityBlocks ()
 
static bool wantsGlobalRuns ()
 
static bool wantsStreamLuminosityBlocks ()
 
static bool wantsStreamRuns ()
 

Detailed Description

Definition at line 37 of file XtalDedxAnalysis.cc.

Constructor & Destructor Documentation

◆ XtalDedxAnalysis()

XtalDedxAnalysis::XtalDedxAnalysis ( const edm::ParameterSet ps)
explicit

Definition at line 63 of file XtalDedxAnalysis.cc.

63  {
64  caloHitSource_ = ps.getParameter<edm::InputTag>("caloHitSource");
65  simTkLabel_ = ps.getUntrackedParameter<std::string>("moduleLabelTk", "g4SimHits");
66  double energyMax = ps.getParameter<double>("EnergyMax");
67 #ifdef EDM_ML_DEBUG
68  edm::LogInfo("CherenkovAnalysis") << "XtalDedxAnalysis::Source " << caloHitSource_ << " Track Label " << simTkLabel_
69  << " Energy Max " << energyMax;
70 #endif
71  // register for data access
72  tok_calo_ = consumes<edm::PCaloHitContainer>(caloHitSource_);
73  tok_tk_ = consumes<edm::SimTrackContainer>(edm::InputTag(simTkLabel_));
74  tok_vtx_ = consumes<edm::SimVertexContainer>(edm::InputTag(simTkLabel_));
75 
76  // Book histograms
78 
79  if (!tfile.isAvailable())
80  throw cms::Exception("BadConfig") << "TFileService unavailable: "
81  << "please add it to config file";
82  // Histograms for Hits
83  std::string types[4] = {"total", "by dE/dx", "by delta-ray", "by bremms"};
84  char name[20], title[80];
85  for (int i = 0; i < 4; i++) {
86  sprintf(name, "Hits%d", i);
87  sprintf(title, "Number of hits (%s)", types[i].c_str());
88  meNHit_[i] = tfile->make<TH1F>(name, title, 5000, 0., 5000.);
89  meNHit_[i]->GetXaxis()->SetTitle(title);
90  meNHit_[i]->GetYaxis()->SetTitle("Events");
91  sprintf(name, "E1T0%d", i);
92  sprintf(title, "E1 (Loss %s) in GeV", types[i].c_str());
93  meE1T0_[i] = tfile->make<TH1F>(name, title, 5000, 0, energyMax);
94  meE1T0_[i]->GetXaxis()->SetTitle(title);
95  meE1T0_[i]->GetYaxis()->SetTitle("Events");
96  sprintf(name, "E9T0%d", i);
97  sprintf(title, "E9 (Loss %s) in GeV", types[i].c_str());
98  meE9T0_[i] = tfile->make<TH1F>(name, title, 5000, 0, energyMax);
99  meE9T0_[i]->GetXaxis()->SetTitle(title);
100  meE9T0_[i]->GetYaxis()->SetTitle("Events");
101  sprintf(name, "E1T1%d", i);
102  sprintf(title, "E1 (Loss %s with t < 400 ns) in GeV", types[i].c_str());
103  meE1T1_[i] = tfile->make<TH1F>(name, title, 5000, 0, energyMax);
104  meE1T1_[i]->GetXaxis()->SetTitle(title);
105  meE1T1_[i]->GetYaxis()->SetTitle("Events");
106  sprintf(name, "E9T1%d", i);
107  sprintf(title, "E9 (Loss %s with t < 400 ns) in GeV", types[i].c_str());
108  meE9T1_[i] = tfile->make<TH1F>(name, title, 5000, 0, energyMax);
109  meE9T1_[i]->GetXaxis()->SetTitle(title);
110  meE9T1_[i]->GetYaxis()->SetTitle("Events");
111  }
112  sprintf(name, "PDGType");
113  sprintf(title, "PDG ID of first level secondary");
114  mType_ = tfile->make<TH1I>(name, title, 5000, -2500, 2500);
115  mType_->GetXaxis()->SetTitle(title);
116  mType_->GetYaxis()->SetTitle("Tracks");
117 }

References caloHitSource_, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), mps_fire::i, meE1T0_, meE1T1_, meE9T0_, meE9T1_, meNHit_, mType_, Skims_PA_cff::name, simTkLabel_, AlCaHLTBitMon_QueryRunRegistry::string, compare::tfile, overlapproblemtsosanalyzer_cfi::title, tok_calo_, tok_tk_, and tok_vtx_.

◆ ~XtalDedxAnalysis()

XtalDedxAnalysis::~XtalDedxAnalysis ( )
inlineoverride

Definition at line 40 of file XtalDedxAnalysis.cc.

40 {}

Member Function Documentation

◆ analyze()

void XtalDedxAnalysis::analyze ( const edm::Event e,
const edm::EventSetup  
)
overrideprotectedvirtual

Implements edm::EDAnalyzer.

Definition at line 119 of file XtalDedxAnalysis.cc.

119  {
120 #ifdef EDM_ML_DEBUG
121  edm::LogVerbatim("CherenkovAnalysis") << "XtalDedxAnalysis::Run = " << e.id().run() << " Event = " << e.id().event();
122 #endif
123  std::vector<PCaloHit> caloHits;
125  e.getByToken(tok_calo_, pCaloHits);
126 
127  std::vector<SimTrack> theSimTracks;
129  e.getByToken(tok_tk_, simTk);
130 
131  std::vector<SimVertex> theSimVertex;
133  e.getByToken(tok_vtx_, simVtx);
134 
135  if (pCaloHits.isValid()) {
136  caloHits.insert(caloHits.end(), pCaloHits->begin(), pCaloHits->end());
137 #ifdef EDM_ML_DEBUG
138  edm::LogVerbatim("CherenkovAnalysis") << "XtalDedxAnalysis: Hit buffer " << caloHits.size();
139 #endif
140  analyzeHits(caloHits, simTk, simVtx);
141  }
142 }

References analyzeHits(), MillePedeFileConverter_cfg::e, edm::HandleBase::isValid(), tok_calo_, tok_tk_, and tok_vtx_.

◆ analyzeHits()

void XtalDedxAnalysis::analyzeHits ( std::vector< PCaloHit > &  hits,
edm::Handle< edm::SimTrackContainer > &  SimTk,
edm::Handle< edm::SimVertexContainer > &  SimVtx 
)
protected

Definition at line 144 of file XtalDedxAnalysis.cc.

146  {
147  edm::SimTrackContainer::const_iterator simTrkItr;
148  int nHit = hits.size();
149  double e10[4], e90[4], e11[4], e91[4], hit[4];
150  for (int i = 0; i < 4; i++)
151  e10[i] = e90[i] = e11[i] = e91[i] = hit[i] = 0;
152  for (int i = 0; i < nHit; i++) {
153  double energy = hits[i].energy();
154  double time = hits[i].time();
155  unsigned int id_ = hits[i].id();
156  int trackID = hits[i].geantTrackId();
157  int type = 1;
158  for (simTrkItr = SimTk->begin(); simTrkItr != SimTk->end(); simTrkItr++) {
159  if (trackID == (int)(simTrkItr->trackId())) {
160  int thePID = simTrkItr->type();
161  if (thePID == 11)
162  type = 2;
163  else if (thePID != -13 && thePID != 13)
164  type = 3;
165  break;
166  }
167  }
168  hit[0]++;
169  hit[type]++;
170  e90[0] += energy;
171  e90[type] += energy;
172  if (time < 400) {
173  e91[0] += energy;
174  e91[type] += energy;
175  }
176  if (id_ == 22) {
177  e10[0] += energy;
178  e10[type] += energy;
179  if (time < 400) {
180  e11[0] += energy;
181  e11[type] += energy;
182  }
183  }
184 #ifdef EDM_ML_DEBUG
185  edm::LogVerbatim("CherenkovAnalysis") << "XtalDedxAnalysis:Hit[" << i << "] ID " << id_ << " E " << energy
186  << " time " << time << " track " << trackID << " type " << type;
187 #endif
188  }
189  for (int i = 0; i < 4; i++) {
190 #ifdef EDM_ML_DEBUG
191  edm::LogVerbatim("CherenkovAnalysis") << "XtalDedxAnalysis:Type(" << i << ") Hit " << hit[i] << " E10 " << e10[i]
192  << " E11 " << e11[i] << " E90 " << e90[i] << " E91 " << e91[i];
193 #endif
194  meNHit_[i]->Fill(hit[i]);
195  meE1T0_[i]->Fill(e10[i]);
196  meE9T0_[i]->Fill(e90[i]);
197  meE1T1_[i]->Fill(e11[i]);
198  meE9T1_[i]->Fill(e91[i]);
199  }
200 
201  // Type of the secondary (coming directly from a generator level track)
202  int nvtx = 0, ntrk = 0, k1 = 0;
203  edm::SimVertexContainer::const_iterator simVtxItr;
204  for (simTrkItr = SimTk->begin(); simTrkItr != SimTk->end(); simTrkItr++)
205  ntrk++;
206  for (simVtxItr = SimVtx->begin(); simVtxItr != SimVtx->end(); simVtxItr++)
207  nvtx++;
208 #ifdef EDM_ML_DEBUG
209  edm::LogVerbatim("CherenkovAnalysis") << "XtalDedxAnalysis: " << ntrk << " tracks and " << nvtx << " vertices";
210 #endif
211  for (simTrkItr = SimTk->begin(); simTrkItr != SimTk->end(); simTrkItr++, ++k1) {
212 #ifdef EDM_ML_DEBUG
213  edm::LogVerbatim("CherenkovAnalysis") << "Track " << k1 << " PDGId " << simTrkItr->type() << " Vertex ID "
214  << simTrkItr->vertIndex() << " Generator " << simTrkItr->noGenpart();
215 #endif
216  if (simTrkItr->noGenpart()) { // This is a secondary
217  int vertIndex = simTrkItr->vertIndex(); // Vertex index of origin
218  if (vertIndex >= 0 && vertIndex < nvtx) {
219  simVtxItr = SimVtx->begin();
220  for (int iv = 0; iv < vertIndex; iv++)
221  simVtxItr++;
222  int parent = simVtxItr->parentIndex(), k2 = 0;
223  for (edm::SimTrackContainer::const_iterator trkItr = SimTk->begin(); trkItr != SimTk->end(); trkItr++, ++k2) {
224 #ifdef EDM_ML_DEBUG
225  edm::LogVerbatim("CherenkovAnalysis") << "XtalDedxAnalysis::Track " << k2 << " ID " << trkItr->trackId()
226  << " (" << parent << ") Generator " << trkItr->noGenpart();
227 #endif
228  if ((int)trkItr->trackId() == parent) { // Parent track
229  if (!trkItr->noGenpart()) { // Generator level
230 #ifdef EDM_ML_DEBUG
231  edm::LogVerbatim("CherenkovAnalysis") << "XtalDedxAnalysis::Track found with ID " << simTrkItr->type();
232 #endif
233  mType_->Fill(simTrkItr->type());
234  }
235  break;
236  }
237  }
238  }
239  }
240  }
241 }

References HCALHighEnergyHPDFilter_cfi::energy, hfClusterShapes_cfi::hits, mps_fire::i, meE1T0_, meE1T1_, meE9T0_, meE9T1_, meNHit_, mType_, class-composition::parent, and ntuplemaker::time.

Referenced by analyze().

◆ beginJob()

void XtalDedxAnalysis::beginJob ( void  )
inlineoverrideprotectedvirtual

Reimplemented from edm::EDAnalyzer.

Definition at line 43 of file XtalDedxAnalysis.cc.

43 {}

◆ endJob()

void XtalDedxAnalysis::endJob ( void  )
inlineoverrideprotectedvirtual

Reimplemented from edm::EDAnalyzer.

Definition at line 45 of file XtalDedxAnalysis.cc.

45 {}

Member Data Documentation

◆ caloHitSource_

edm::InputTag XtalDedxAnalysis::caloHitSource_
private

Definition at line 52 of file XtalDedxAnalysis.cc.

Referenced by XtalDedxAnalysis().

◆ meE1T0_

TH1F * XtalDedxAnalysis::meE1T0_[4]
private

Definition at line 59 of file XtalDedxAnalysis.cc.

Referenced by analyzeHits(), and XtalDedxAnalysis().

◆ meE1T1_

TH1F * XtalDedxAnalysis::meE1T1_[4]
private

Definition at line 59 of file XtalDedxAnalysis.cc.

Referenced by analyzeHits(), and XtalDedxAnalysis().

◆ meE9T0_

TH1F * XtalDedxAnalysis::meE9T0_[4]
private

Definition at line 59 of file XtalDedxAnalysis.cc.

Referenced by analyzeHits(), and XtalDedxAnalysis().

◆ meE9T1_

TH1F * XtalDedxAnalysis::meE9T1_[4]
private

Definition at line 59 of file XtalDedxAnalysis.cc.

Referenced by analyzeHits(), and XtalDedxAnalysis().

◆ meNHit_

TH1F* XtalDedxAnalysis::meNHit_[4]
private

Definition at line 59 of file XtalDedxAnalysis.cc.

Referenced by analyzeHits(), and XtalDedxAnalysis().

◆ mType_

TH1I* XtalDedxAnalysis::mType_
private

Definition at line 60 of file XtalDedxAnalysis.cc.

Referenced by analyzeHits(), and XtalDedxAnalysis().

◆ simTkLabel_

std::string XtalDedxAnalysis::simTkLabel_
private

Definition at line 53 of file XtalDedxAnalysis.cc.

Referenced by XtalDedxAnalysis().

◆ tok_calo_

edm::EDGetTokenT<edm::PCaloHitContainer> XtalDedxAnalysis::tok_calo_
private

Definition at line 55 of file XtalDedxAnalysis.cc.

Referenced by analyze(), and XtalDedxAnalysis().

◆ tok_tk_

edm::EDGetTokenT<edm::SimTrackContainer> XtalDedxAnalysis::tok_tk_
private

Definition at line 56 of file XtalDedxAnalysis.cc.

Referenced by analyze(), and XtalDedxAnalysis().

◆ tok_vtx_

edm::EDGetTokenT<edm::SimVertexContainer> XtalDedxAnalysis::tok_vtx_
private

Definition at line 57 of file XtalDedxAnalysis.cc.

Referenced by analyze(), and XtalDedxAnalysis().

XtalDedxAnalysis::caloHitSource_
edm::InputTag caloHitSource_
Definition: XtalDedxAnalysis.cc:52
XtalDedxAnalysis::tok_calo_
edm::EDGetTokenT< edm::PCaloHitContainer > tok_calo_
Definition: XtalDedxAnalysis.cc:55
mps_fire.i
i
Definition: mps_fire.py:355
hfClusterShapes_cfi.hits
hits
Definition: hfClusterShapes_cfi.py:5
XtalDedxAnalysis::meE1T0_
TH1F * meE1T0_[4]
Definition: XtalDedxAnalysis.cc:59
edm::LogInfo
Definition: MessageLogger.h:254
XtalDedxAnalysis::simTkLabel_
std::string simTkLabel_
Definition: XtalDedxAnalysis.cc:53
edm::ParameterSet::getUntrackedParameter
T getUntrackedParameter(std::string const &, T const &) const
XtalDedxAnalysis::meNHit_
TH1F * meNHit_[4]
Definition: XtalDedxAnalysis.cc:59
edm::Handle
Definition: AssociativeIterator.h:50
XtalDedxAnalysis::analyzeHits
void analyzeHits(std::vector< PCaloHit > &, edm::Handle< edm::SimTrackContainer > &, edm::Handle< edm::SimVertexContainer > &)
Definition: XtalDedxAnalysis.cc:144
tfile
Definition: tfile.py:1
XtalDedxAnalysis::meE9T0_
TH1F * meE9T0_[4]
Definition: XtalDedxAnalysis.cc:59
HCALHighEnergyHPDFilter_cfi.energy
energy
Definition: HCALHighEnergyHPDFilter_cfi.py:5
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
XtalDedxAnalysis::meE9T1_
TH1F * meE9T1_[4]
Definition: XtalDedxAnalysis.cc:59
edm::Service< TFileService >
edm::LogVerbatim
Definition: MessageLogger.h:297
XtalDedxAnalysis::tok_vtx_
edm::EDGetTokenT< edm::SimVertexContainer > tok_vtx_
Definition: XtalDedxAnalysis.cc:57
compare.tfile
tfile
Definition: compare.py:325
overlapproblemtsosanalyzer_cfi.title
title
Definition: overlapproblemtsosanalyzer_cfi.py:7
types
types
Definition: AlignPCLThresholds_PayloadInspector.cc:30
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
type
type
Definition: HCALResponse.h:21
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
cms::Exception
Definition: Exception.h:70
XtalDedxAnalysis::mType_
TH1I * mType_
Definition: XtalDedxAnalysis.cc:60
XtalDedxAnalysis::meE1T1_
TH1F * meE1T1_[4]
Definition: XtalDedxAnalysis.cc:59
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
ntuplemaker.time
time
Definition: ntuplemaker.py:310
XtalDedxAnalysis::tok_tk_
edm::EDGetTokenT< edm::SimTrackContainer > tok_tk_
Definition: XtalDedxAnalysis.cc:56
class-composition.parent
parent
Definition: class-composition.py:88
edm::InputTag
Definition: InputTag.h:15
hit
Definition: SiStripHitEffFromCalibTree.cc:88
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37