38 namespace jptJetAnalysis {
78 : histogramPath_(config.getParameter<std::string>(
"HistogramPath")),
79 verbose_(config.getUntrackedParameter<bool>(
"PrintDebugMessages",
false)),
80 writeDQMStore_(config.getUntrackedParameter<bool>(
"WriteDQMStore")),
82 n90HitsMin_(config.getParameter<int>(
"n90HitsMin")),
83 fHPDMax_(config.getParameter<double>(
"fHPDMax")),
84 resEMFMin_(config.getParameter<double>(
"resEMFMin")),
85 correctedPtMin_(config.getParameter<double>(
"correctedPtThreshold")),
86 trackPropagator_(new jptJetAnalysis::TrackPropagatorToCalo),
87 sOverNCalculator_(new jptJetAnalysis::StripSignalOverNoiseCalculator),
88 jetID_(new
reco::helper::JetIDHelper(config.getParameter<edm::
ParameterSet>(
"JetIDParams")))
91 std::ostringstream debugStream;
93 debugStream <<
"Configuration for JPTJetAnalyzer: " << std::endl
95 <<
"\tPrintDebugMessages? " << (
verbose_ ?
"yes" :
"no") << std::endl;
102 std::ostringstream* pDebugStream = (
verbose_ ? &debugStream :
NULL);
178 for (reco::JPTJetCollection::const_iterator iJet = jptJets.begin(); iJet != jptJets.end(); ++iJet) {
179 analyze(event,eventSetup,*iJet,pt1,pt2,pt3);
194 const double factorZSP = jptJet.
getZSPCor();
196 const double factorZSPJPT = jptJet.
energy()/rawJet.
energy();
199 if ( fabs(rawJet.
eta()) > 2.1)
return;
213 const double pt = jptJet.
pt();
218 }
else if (pt > pt2) {
221 }
else if (pt > pt3) {
228 jetID_->calculate(event,rawCaloJet);
229 }
catch (
const std::bad_cast&) {
231 <<
"Histograms not filled. ";
240 const double deltaEta = jptJet.
eta() - rawJet.
eta();
267 const double factorJPT = factorZSPJPT / factorZSP;
277 pionsInVertexInCalo,pionsOutVertexInCalo,pionsInVertexOutCalo,rawJet);
279 muonsInVertexInCalo,muonsOutVertexInCalo,muonsInVertexOutCalo,rawJet);
281 electronsInVertexInCalo,electronsOutVertexInCalo,electronsInVertexOutCalo,rawJet);
292 std::ostringstream* pDebugStream)
294 const std::string psetName = configName+std::string(
"HistogramConfig");
295 if (!psetContainingConfigPSet.
exists(psetName)) {
300 (*pDebugStream) <<
"Histogram " << configName <<
" config found and loaded" << std::endl;
303 const bool enabled = (pset.
exists(
"Enabled") ? pset.
getParameter<
bool>(
"Enabled") :
true);
307 (*pDebugStream) <<
"\tHistogram: " << configName <<
" Disabled" << std::endl;
310 const unsigned int nBins = (pset.
exists(
"NBins") ? pset.
getParameter<
unsigned int>(
"NBins") : 0);
313 const unsigned int nBinsY = (pset.
exists(
"NBinsY") ? pset.
getParameter<
unsigned int>(
"NBinsY") : 0);
318 (*pDebugStream) <<
"\tHistogram: " << configName <<
"\tEnabled"
319 <<
"\tNBins: " << nBins <<
"\tMin: " << min <<
"\tMax: " <<
max;
320 if (nBinsY) (*pDebugStream) <<
"\tNBinsY: " << nBinsY <<
"\tMinY: " << minY <<
"\tMaxY: " <<
maxY;
321 (*pDebugStream) << std::endl;
334 std::ostringstream* pDebugStream)
350 std::map<std::string,HistogramConfig>::const_iterator configIterator =
histogramConfig_.find(name);
366 const std::string& xAxisTitle,
const std::string& yAxisTitle,
DQMStore* dqm)
368 std::map<std::string,HistogramConfig>::const_iterator configIterator =
histogramConfig_.find(name);
385 const std::string& xAxisTitle,
const std::string& yAxisTitle,
DQMStore* dqm)
387 std::map<std::string,HistogramConfig>::const_iterator configIterator =
histogramConfig_.find(name);
394 TProfile* underlyingRootObject =
new TProfile(name.c_str(),title.c_str(),histoConfig.
nBins,histoConfig.
min,histoConfig.
max);
397 histo->setAxisTitle(yAxisTitle,2);
429 "#Delta R between track direrction at vertex and jet axis (track in cone at calo)",
"#Delta R",dqm);
431 "#Delta R between track direrction at vertex and jet axis (track out of cone at calo)",
"#Delta R",dqm);
433 "#Delta R between track impact point on calo and jet axis (track in cone at vertex)",
"#Delta R",dqm);
435 "#Delta R between track impact point on calo and jet axis (track out of cone at vertex)",
"#Delta R",dqm);
442 "#frac{p_{T}^{in-cone}}{p_{T}^{in-cone}+p_{T}^{out-of-cone}}",dqm);
444 "Jet raw E_{T} / GeV",
"#frac{p_{T}^{in-cone}}{p_{T}^{in-cone}+p_{T}^{out-of-cone}}",dqm);
446 "Jet #eta",
"#frac{p_{T}^{in-cone}}{p_{T}^{in-cone}+p_{T}^{out-of-cone}}",dqm);
453 "Jet raw E_{T}",
"#frac{E_{T}^{corr}}{E_{T}^{raw}}",dqm);
455 "Jet #eta",
"#frac{E_{T}^{corr}}{E_{T}^{raw}}",dqm);
458 "Jet raw E_{T}",
"#frac{E_{T}^{corr}}{E_{T}^{raw}}",dqm);
460 "Jet #eta",
"#frac{E_{T}^{corr}}{E_{T}^{raw}}",dqm);
498 histos->
ptVsEtaHisto =
bookProfile(tag+
"TrackPtVsEta",titleTag+
" track p_{T} vs #eta",
"#eta",
"p_{T} /GeV/c",dqm);
532 const double pt = track.
pt();
533 const double phi = track.
phi();
534 const double eta = track.
eta();
535 const unsigned int nHits = track.
found();
537 const double dz = track.
dz();
538 const double dxy = track.
dxy();
547 const double trackDirectionJetDR =
deltaR(rawJet,track);
583 if (pMatchedRecHit2D) {
586 }
else if (pProjctedRecHit2D) {
588 }
else if (pRecHit2D) {
590 }
else if (pInvalidHit) {
604 cluster = &*regionalClusterRef;
605 }
else if (normalClusterRef.
isNonnull()) {
606 cluster = &*normalClusterRef;
612 const double sOverN = (*sOverNCalculator_)(*cluster);
623 const double pt = (*iInConeTrack)->pt();
629 const double pt = (*iOutOfConeTrack)->pt();
632 if (totalPt)
return inConePt/totalPt;
660 const unsigned int theNBinsY,
const double theMinY,
const double theMaxY)
679 trackDirectionJetDRHisto(
NULL),
680 trackImpactPointJetDRHisto(
NULL)
688 : nTracksHisto(theNTracksHisto),
690 phiHisto(thePhiHisto),
691 etaHisto(theEtaHisto),
692 nHitsHisto(theNHitsHisto),
693 nLayersHisto(theNLayersHisto),
694 ptVsEtaHisto(thePtVsEtaHisto),
696 dxyHisto(theDxyHisto),
697 trackDirectionJetDRHisto(theTrackDirectionJetDRHisto),
698 trackImpactPointJetDRHisto(theTrackImpactPointJetDRHisto)
701 namespace jptJetAnalysis {
703 TrackPropagatorToCalo::TrackPropagatorToCalo()
704 : magneticField_(
NULL),
706 magneticFieldCacheId_(0),
707 propagatorCacheId_(0)
714 const uint32_t newMagneticFieldCacheId = magneticFieldRecord.
cacheIdentifier();
717 magneticFieldRecord.
get(magneticFieldHandle);
723 const uint32_t newPropagatorCacheId = trackingComponentsRecord.
cacheIdentifier();
726 trackingComponentsRecord.
get(
"SteppingHelixPropagatorAlong",propagatorHandle);
738 : qualityLabel_(theQualityLabel),
763 noiseRecord.
get(noiseHandle);
772 gainRecord.
get(gainHandle);
781 const uint16_t firstStrip = cluster.
firstStrip();
787 unsigned int nNonZeroStrips = 0;
788 const std::vector<uint8_t>& clusterAmplitudes = cluster.
amplitudes();
789 const std::vector<uint8_t>::const_iterator clusterAmplitudesEnd = clusterAmplitudes.end();
790 const std::vector<uint8_t>::const_iterator clusterAmplitudesBegin = clusterAmplitudes.begin();
791 for (std::vector<uint8_t>::const_iterator iAmp = clusterAmplitudesBegin; iAmp != clusterAmplitudesEnd; ++iAmp) {
792 const uint8_t
adc = *iAmp;
793 const uint16_t
strip = iAmp-clusterAmplitudesBegin+firstStrip;
798 if (adc) ++nNonZeroStrips;
799 const double noiseContrib = (stripBad ? 0 : noise/gain);
800 noise2 += noiseContrib*noiseContrib;
802 const double noise =
sqrt(noise2/nNonZeroStrips);
803 if (noise)
return signal/noise;
int adc(sample_type sample)
get the ADC sample (12 bits)
MonitorElement * CorrFactorVsJetEtaHisto_
T getParameter(std::string const &) const
unsigned long long cacheIdentifier() const
T getUntrackedParameter(std::string const &, T const &) const
MonitorElement * NTracksPerJetHisto_
uint32_t magneticFieldCacheId_
virtual double p() const
magnitude of momentum vector
MonitorElement * JetResEMF_
virtual ~JPTJetAnalyzer()
Destructor.
const reco::TrackRefVector & getElecsOutVertexInCalo() const
DQMStore * dqm_
DQMStore. Used to write out to file.
Helper class for grouping histograms belowing to a set of tracks.
Jets made from CaloTowers.
MonitorElement * PtFractionInConeVsJetRawEtHisto_
const reco::TrackRefVector & getPionsInVertexOutCalo() const
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
MonitorElement * NTracksPerJetVsJetEtHisto_
virtual double et() const
transverse energy
void fillTrackHistograms(TrackHistograms &allTracksHistos, TrackHistograms &inCaloInVertexHistos, TrackHistograms &inCaloOutVertexHistos, TrackHistograms &outCaloInVertexHistos, const reco::TrackRefVector &inVertexInCalo, const reco::TrackRefVector &outVertexInCalo, const reco::TrackRefVector &inVertexOutCalo, const reco::Jet &rawJet)
Fill all track histograms.
TrackHistograms inCaloInVertexPionHistograms_
std::vector< JPTJet > JPTJetCollection
collection of CaloJet objects
double deltaPhi(float phi1, float phi2)
Helper class to hold the configuration for a histogram.
const SiStripRecHit2D * stereoHit() const
Base class for all types of Jets.
bool IsStripBad(const uint32_t &detid, const short &strip) const
TrackHistograms allElectronHistograms_
void save(const std::string &filename, const std::string &path="", const std::string &pattern="", const std::string &rewrite="", SaveReferenceTag ref=SaveWithReference, int minStatus=dqm::qstatus::STATUS_OK, const std::string &fileupdate="RECREATE")
std::auto_ptr< jptJetAnalysis::StripSignalOverNoiseCalculator > sOverNCalculator_
Helper object to calculate strip SoN for tracks.
bool exists(std::string const ¶meterName) const
checks if a parameter exists
MonitorElement * CorrFactorVsJetEtHisto_
TrackHistograms inCaloOutVertexMuonHistograms_
double phi() const
azimuthal angle of momentum vector
const bool verbose_
Create verbose debug messages.
TrackHistograms outCaloInVertexMuonHistograms_
MonitorElement * JetN90Hits_
uint16_t firstStrip() const
MonitorElement * InVertexTrackImpactPointJetDRHisto_
std::auto_ptr< reco::helper::JetIDHelper > jetID_
Helper object to calculate jet ID parameters.
const edm::RefToBase< reco::Jet > & getCaloJetRef() const
ClusterRegionalRef const & cluster_regional() const
double signalOverNoise(const SiStripCluster &cluster) const
TrackHistograms inCaloInVertexMuonHistograms_
MonitorElement * ZSPCorrFactorHisto_
const_iterator end() const
Termination of iteration.
float getStripGain(const uint16_t &strip, const SiStripApvGain::Range &range) const
int trackerLayersWithMeasurement() const
MonitorElement * TrackSiStripHitStoNHisto_
MonitorElement * JetDeltaPhi_
virtual double eta() const
momentum pseudorapidity
const_iterator begin() const
Initialize an iterator over the RefVector.
void fillSiStripHitSoN(const TrackingRecHit &hit)
MonitorElement * InCaloTrackDirectionJetDRHisto_
const SiStripGain * gain_
JPTJetAnalyzer(const edm::ParameterSet &config)
Constructor.
MonitorElement * JetfRBX_
MonitorElement * CorrFactorHisto_
void bookTrackHistograms(TrackHistograms *histos, const std::string &tag, const std::string &titleTag, MonitorElement *trackDirectionJetDRHisto, MonitorElement *trackImpactPointJetDRHisto, DQMStore *dqm)
Book the histograms for a track.
uint32_t geographicalId() const
TrackHistograms inCaloOutVertexElectronHistograms_
uint32_t rawId() const
get the raw id
static const char * messageLoggerCatregory
String constant for message logger category.
MonitorElement * JetMass_
void getConfigForHistogram(const std::string &configName, const edm::ParameterSet &psetContainingConfigPSet, std::ostringstream *pDebugStream=NULL)
Load the config for a hitogram.
bool isNonnull() const
Checks for non-null.
void update(const edm::EventSetup &eventSetup)
virtual double mass() const
mass
virtual double energy() const
energy
const SiStripNoises * noise_
double eta() const
pseudorapidity of momentum vector
MonitorElement * bookProfile(const std::string &name, const std::string &title, const std::string &xAxisTitle, const std::string &yAxisTitle, DQMStore *dqm)
void analyze(const edm::Event &event, const edm::EventSetup &eventSetup, const reco::JPTJet &jptJet, double &pt1, double &pt2, double &pt3)
Do the analysis.
MonitorElement * JPTCorrFactorVsJetEtHisto_
const T & max(const T &a, const T &b)
MonitorElement * book2DHistogram(const std::string &name, const std::string &title, const std::string &xAxisTitle, const std::string &yAxisTitle, DQMStore *dqm)
MonitorElement * ptVsEtaHisto
Jets made from CaloJets corrected for ZSP and tracks.
double pt() const
track transverse momentum
void bookHistograms(DQMStore *dqm)
Book all histograms.
void fillHistogram(MonitorElement *histogram, const double value)
Fill histogram or profile if it has been booked.
void get(HolderT &iHolder) const
std::auto_ptr< jptJetAnalysis::TrackPropagatorToCalo > trackPropagator_
Helper object to propagate tracks to the calo surface.
MonitorElement * dxyHisto
std::pair< ContainerIterator, ContainerIterator > Range
void fillSiStripHitSoNForSingleHit(const SiStripRecHit2D &hit)
MonitorElement * OutCaloTrackDirectionJetDRHisto_
MonitorElement * nLayersHisto
MonitorElement * bookProfile(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, const char *option="s")
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
std::map< std::string, HistogramConfig > histogramConfig_
Histogram configuration (nBins etc)
double operator()(const SiStripCluster &cluster) const
StripSignalOverNoiseCalculator(const std::string &theQualityLabel=std::string(""))
TrackHistograms outCaloInVertexPionHistograms_
static float getNoise(uint16_t strip, const Range &range)
MonitorElement * JetPhiVsEta_
double dz() const
dz parameter (= dsz/cos(lambda)). This is the track z0 w.r.t (0,0,0) only if the refPoint is close to...
double deltaR(double eta1, double eta2, double phi1, double phi2)
const std::string qualityLabel_
const MagneticField * magneticField_
TrackHistograms outCaloInVertexElectronHistograms_
MonitorElement * ZSPCorrFactorVsJetEtaHisto_
const reco::TrackRefVector & getPionsInVertexInCalo() const
Tracks.
virtual double px() const
x coordinate of momentum vector
const float & getZSPCor() const
virtual void endJob()
Finish up a job.
MonitorElement * trackImpactPointJetDRHisto
virtual double pt() const
transverse momentum
TrackHistograms allMuonHistograms_
const double correctedPtMin_
XYZPointD XYZPoint
point in space with cartesian internal representation
const Propagator * propagator_
ClusterRef const & cluster() const
T const * product() const
const Range getRange(const uint32_t &detID) const
TrackHistograms inCaloInVertexElectronHistograms_
const reco::TrackRefVector & getElecsInVertexOutCalo() const
MonitorElement * NTracksPerJetVsJetEtaHisto_
virtual double pz() const
z coordinate of momentum vector
void update(const edm::EventSetup &eventSetup)
const reco::TrackRefVector & getMuonsInVertexOutCalo() const
TrackHistograms allPionHistograms_
uint32_t propagatorCacheId_
const reco::TrackRefVector & getPionsOutVertexInCalo() const
MonitorElement * JPTCorrFactorHisto_
static math::XYZPoint propagateTrackToCalorimeter(const reco::Track &, const MagneticField &, const Propagator &)
Propagates track to calorimeter face.
int chargedMultiplicity() const
chargedMultiplicity
TrackHistograms inCaloOutVertexPionHistograms_
unsigned short found() const
Number of valid hits on track.
std::pair< ContainerIterator, ContainerIterator > Range
void getConfigForTrackHistograms(const std::string &tag, const edm::ParameterSet &psetContainingConfigPSet, std::ostringstream *pDebugStream=NULL)
Load the configs for histograms associated with a set of tracks.
MonitorElement * JetfHPD_
static double findPtFractionInCone(const reco::TrackRefVector &inConeTracks, const reco::TrackRefVector &outOfConeTracks)
Utility function to calculate the fraction of track Pt in cone.
MonitorElement * bookHistogram(const std::string &name, const std::string &title, const std::string &xAxisTitle, DQMStore *dqm)
Book histograms and profiles.
const SiStripApvGain::Range getRange(const uint32_t &detID) const
size_type size() const
Size of the RefVector.
void beginJob(DQMStore *dbe)
Inizialize parameters for histo binning.
MonitorElement * JetDeltaEta_
const reco::TrackRefVector & getElecsInVertexInCalo() const
MonitorElement * trackDirectionJetDRHisto
DetId geographicalId() const
MonitorElement * nTracksHisto
MonitorElement * PtFractionInConeHisto_
std::pair< ContainerIterator, ContainerIterator > Range
std::string dqmStoreFileName_
DQM store file name.
MonitorElement * JPTCorrFactorVsJetEtaHisto_
const std::string histogramPath_
Path of directory used to store histograms in DQMStore.
const Range getRange(const uint32_t &detID) const
MonitorElement * book2D(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Book 2D histogram.
const SiStripQuality * quality_
const SiStripRecHit2D * monoHit() const
MonitorElement * nHitsHisto
math::XYZPoint impactPoint(const reco::Track &track) const
double dxy() const
dxy parameter. (This is the transverse impact parameter w.r.t. to (0,0,0) ONLY if refPoint is close t...
const int n90HitsMin_
Jet ID cuts.
virtual double phi() const
momentum azimuthal angle
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
const reco::TrackRefVector & getMuonsInVertexInCalo() const
const SiStripRecHit2D & originalHit() const
MonitorElement * OutVertexTrackImpactPointJetDRHisto_
const bool writeDQMStore_
Write DQM store to a file?
MonitorElement * phiHisto
const std::vector< uint8_t > & amplitudes() const
virtual double py() const
y coordinate of momentum vector
void setCurrentFolder(const std::string &fullpath)
MonitorElement * PtFractionInConeVsJetEtaHisto_
MonitorElement * etaHisto
MonitorElement * ZSPCorrFactorVsJetEtHisto_
void fillSiStripSoNForTracks(const reco::TrackRefVector &tracks)
Fill the SoN hisotgram for hits on tracks.
const reco::TrackRefVector & getMuonsOutVertexInCalo() const