9 #include <dqm/modules/PhysicsObjectsMiraBelle/PhysicsObjectsMiraBelleModule.h>
10 #include <analysis/dataobjects/ParticleList.h>
11 #include <analysis/variables/ContinuumSuppressionVariables.h>
12 #include <analysis/variables/TrackVariables.h>
13 #include <analysis/utility/PCmsLabTransform.h>
14 #include <framework/datastore/StoreObjPtr.h>
15 #include <framework/datastore/StoreArray.h>
16 #include <mdst/dataobjects/Track.h>
17 #include <mdst/dataobjects/TrackFitResult.h>
18 #include <mdst/dataobjects/KLMCluster.h>
19 #include <mdst/dataobjects/HitPatternCDC.h>
20 #include <mdst/dataobjects/HitPatternVXD.h>
21 #include <mdst/dataobjects/EventLevelTrackingInfo.h>
22 #include <mdst/dataobjects/PIDLikelihood.h>
23 #include <top/variables/TOPDigitVariables.h>
24 #include <arich/modules/arichDQM/ARICHDQMModule.h>
25 #include <arich/dataobjects/ARICHLikelihood.h>
26 #include <klm/dataobjects/KLMMuidLikelihood.h>
27 #include <mdst/dataobjects/SoftwareTriggerResult.h>
28 #include <TDirectory.h>
37 setDescription(
"Monitor Physics Objects Quality");
38 setPropertyFlags(c_ParallelProcessingCertified);
40 addParam(
"TriggerIdentifier", m_triggerIdentifier,
41 "Trigger identifier string used to select events for the histograms", std::string(
"software_trigger_cut&skim&accept_mumutight"));
42 addParam(
"MuPListName", m_muPListName,
"Name of the muon particle list", std::string(
"mu+:physMiraBelle"));
43 addParam(
"MuMuPListName", m_mumuPListName,
"Name of the di-muon particle list", std::string(
"Upsilon:physMiraBelle"));
48 TDirectory* oldDir = gDirectory;
49 oldDir->mkdir(
"PhysicsObjectsMiraBelle")->cd();
51 m_h_npxd =
new TH1F(
"hist_npxd",
"hist_npxd", 100, 0, 5);
53 m_h_nsvd =
new TH1F(
"hist_nsvd",
"hist_nsvd", 100, 0, 16);
55 m_h_ncdc =
new TH1F(
"hist_ncdc",
"hist_ncdc", 100, 0, 80);
57 m_h_topdig =
new TH1F(
"hist_topdig",
"hist_topdig", 120, 0, 120);
59 m_h_DetPhotonARICH =
new TH1F(
"hist_DetPhotonARICH",
"hist_DetPhotonARICH", 70, 0, 70);
61 m_h_klmTotalHits =
new TH1F(
"hist_klmTotalHits",
"hist_klmTotalHits", 15, 0, 15);
63 m_h_Pval =
new TH1F(
"hist_Pval",
"hist_Pval", 100, 0, 1);
65 m_h_dD0 =
new TH1F(
"hist_dD0",
"hist_dD0", 100, -0.02, 0.02);
67 m_h_dZ0 =
new TH1F(
"hist_dZ0",
"hist_dZ0", 100, -0.05, 0.05);
69 m_h_dPtcms =
new TH1F(
"hist_dPtcms",
"hist_dPtcms", 100, -0.5, 0.5);
71 m_h_nExtraCDCHits =
new TH1F(
"hist_nExtraCDCHits",
"hist_nExtraCDCHits", 100, 0, 1600);
73 m_h_nECLClusters =
new TH1F(
"hist_nECLClusters",
"hist_nECLClusters", 100, 0, 60);
75 m_h_muid =
new TH1F(
"hist_muid",
"hist_muid", 20, 0, 1);
77 m_h_inv_p =
new TH1F(
"hist_inv_p",
"hist_inv_p", 400, 8, 12);
79 m_h_ndf =
new TH1F(
"hist_ndf",
"hist_ndf", 100, 0, 80);
81 m_h_D0 =
new TH1F(
"hist_D0",
"hist_D0", 100, -0.1, 0.1);
82 m_h_D0->SetXTitle(
"hist_D0");
83 m_h_Z0 =
new TH1F(
"hist_Z0",
"hist_Z0", 100, -0.3, 0.3);
84 m_h_Z0->SetXTitle(
"hist_Z0");
85 m_h_theta =
new TH1F(
"hist_theta",
"hist_theta", 36, 10, 170);
87 m_h_Phi0 =
new TH1F(
"hist_Phi0",
"hist_Phi0", 72, -180, 180);
89 m_h_Pt =
new TH1F(
"hist_Pt",
"hist_Pt", 100, 0, 10);
90 m_h_Pt->SetXTitle(
"hist_Pt");
91 m_h_Mom =
new TH1F(
"hist_Mom",
"hist_Mom", 100, 0, 10);
99 m_h_dPhicms =
new TH1F(
"hist_dPhicms",
"hist_dPhicms", 100, -1, 1);
147 if (!result.isValid()) {
148 B2WARNING(
"SoftwareTriggerResult object not available but needed to select events for the histograms.");
152 const std::map<std::string, int>& results = result->getResults();
154 B2WARNING(
"PhysicsObjectsMiraBelle: Can't find trigger identifier: " <<
m_triggerIdentifier);
160 if (accepted ==
false)
return;
165 double ptcms[2] = {};
166 double phicms[2] = {};
171 for (
unsigned int i = 0; i < UpsParticles->getListSize(); i++) {
172 Particle* Ups = UpsParticles->getParticle(i);
179 for (
unsigned int i = 0; i < muParticles->getListSize(); i++) {
180 Particle* mu = muParticles->getParticle(i);
187 m_h_npxd->Fill(Belle2::Variable::trackNPXDHits(mu));
188 m_h_nsvd->Fill(Belle2::Variable::trackNSVDHits(mu));
189 m_h_ncdc->Fill(Belle2::Variable::trackNCDCHits(mu));
190 m_h_topdig->Fill(Belle2::Variable::TOPVariable::topDigitCount(mu));
199 unsigned int bklm_hit = muid->getTotalBarrelHits();
200 unsigned int eklm_hit = muid->getTotalEndcapHits();
226 d0[index] = fitresult->
getD0();
227 z0[index] = fitresult->
getZ0();
240 m_h_dD0->Fill((d0[0] + d0[1]) / sqrt(2));
241 m_h_dZ0->Fill((z0[0] - z0[1]) / sqrt(2));
242 m_h_dPtcms->Fill((ptcms[0] - ptcms[1]) / sqrt(2));
243 m_h_dPhicms->Fill(180 - abs(phicms[0] - phicms[1]));
250 double neclClusters = -1.;
253 const unsigned int numberOfECLClusters = std::count_if(eclClusters.
begin(), eclClusters.
end(),
255 return (eclcluster.hasHypothesis(ECLCluster::EHypothesisBit::c_nPhotons)
256 and eclcluster.getEnergy(ECLCluster::EHypothesisBit::c_nPhotons) > 0.1);
258 neclClusters = numberOfECLClusters;
This is a class to store ARICH likelihoods in the datastore.
float getDetPhot() const
Return number of detected photons for a given particle.
static const ChargedStable muon
muon particle
static const ChargedStable pion
charged pion particle
HistoModule.h is supposed to be used instead of Module.h for the modules with histogram definitions t...
int getLayers() const
Get number of layers with hits.
Class to store the likelihoods from KLM with additional informations related to the extrapolation.
Class to collect log likelihoods from TOP, ARICH, dEdx, ECL and KLM aimed for output to mdst includes...
double getProbability(const Const::ChargedStable &p1, const Const::ChargedStable &p2, Const::PIDDetectorSet set=Const::PIDDetectorSet::set()) const
Return combined likelihood probability for a particle being p1 and not p2, assuming equal prior proba...
Class to store reconstructed particles.
const Track * getTrack() const
Returns the pointer to the Track object that was used to create this Particle (ParticleType == c_Trac...
float getMass() const
Returns invariant mass (= nominal for FS particles)
TH1F * m_h_dZ0
histogram for Z0 difference between mu+ and mu-
TH1F * m_h_D0
histogram for D0 of muon track
std::string m_muPListName
Name of the mu+ particle list.
TH1F * m_h_Pt
histogram for Pt of muon track
TH1F * m_h_DetPhotonARICH
histogram for number of photon in ARICH associated with muon track
void initialize() override
Function for dynamic initialization of module.
TH1F * m_h_klmTotalEndcapHits
histogram for number of EKLM hits associated with muon track
TH1F * m_h_dPhicms
histogram for phi difference between mu+ and mu- in CMS
TH1F * m_h_Mom
histogram for Momentum of muon track
void event() override
Function to process event record.
TH1F * m_h_dPtcms
histogram for Pt difference between mu+ and mu-
TH1F * m_h_theta
histogram for theta of muon track
TH1F * m_h_ncdc
histogram for number of CDC hits associated with muon track
TH1F * m_h_ndf
histogram for n.d.f.
void endRun() override
Function to process end_run record.
TH1F * m_h_npxd
histogram for number of PXD hits associated with muon track
void terminate() override
Function to terminate module.
std::string m_triggerIdentifier
Trigger identifier string used to select events for the histograms.
TH1F * m_h_klmTotalBarrelHits
histogram for number of BKLM hits associated with muon track
void beginRun() override
Function to process begin_run record.
TH1F * m_h_klmTotalHits
histogram for number of KLM hits associated with muon track
TH1F * m_h_muid
histogram for muon ID
TH1F * m_h_nsvd
histogram for number of SVD hits associated with muon track
std::string m_mumuPListName
Name of the mu+mu- (Upsilon) particle list.
TH1F * m_h_Z0
histogram for Z0 of muon track
TH1F * m_h_nExtraCDCHits
histogram for number of CDC hits not associated with any tracks
TH1F * m_h_dD0
histogram for D0 difference between mu+ and mu-
TH1F * m_h_topdig
histogram for TOP digits associated with muon track
TH1F * m_h_inv_p
histogram for invariant mass of di-muon
TH1F * m_h_klmClusterLayers
histogram for number of KLM layers with cluster associated with muon track
TH1F * m_h_Pval
histogram for Pvalue of tracks in CDC
TH1F * m_h_Phi0
histogram for phi of muon track
TH1F * m_h_nECLClusters
histogram for ECL clusters
void defineHisto() override
Function to define histograms.
Accessor to arrays stored in the data store.
bool isValid() const
Check wether the array was registered.
iterator end()
Return iterator to last entry +1.
iterator begin()
Return iterator to first entry.
Type-safe access to single objects in the data store.
bool isValid() const
Check whether the object was created.
Values of the result of a track fit with a given particle hypothesis.
short getChargeSign() const
Return track charge (1 or -1).
double getPValue() const
Getter for Chi2 Probability of the track fit.
TLorentzVector get4Momentum() const
Getter for the 4Momentum at the closest approach of the track in the r/phi projection.
double getD0() const
Getter for d0.
double getZ0() const
Getter for z0.
Class that bundles various TrackFitResults.
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
@ c_accept
Accept this event.
Abstract base class for different kinds of events.