9 #include <svd/modules/svdDQM/SVDDQMHitTimeModule.h>
10 #include <framework/core/HistoModule.h>
11 #include <mdst/dataobjects/TRGSummary.h>
12 #include <TDirectory.h>
21 setPropertyFlags(c_ParallelProcessingCertified);
22 setDescription(
"Make data quality monitoring plots for SVD Hit Time for bhabha, mu mu, and hadron samples seeded by different trigger times (ECL, CDC).");
23 addParam(
"histogramDirectoryName", m_histogramDirectoryName,
"Name of the directory where histograms will be placed.",
24 std::string(
"SVDHitTime"));
25 addParam(
"Clusters", m_storeSVDClustersName,
"SVDCluster StoreArray name.",
27 addParam(
"EventInfo", m_storeSVDEventInfoName,
"SVDEventInfo StoreObjPtr name.",
29 addParam(
"desynchronizeSVDTime", m_desynchSVDTime,
30 "if True, svd time back in SVD time reference",
bool(
false));
42 TDirectory* oldDir = gDirectory;
49 TString refFrame =
"in FTSW reference";
51 refFrame =
"in SVD reference";
54 Form(
"SVD L3 V-Side Cluster Time %s: bhabhas, ECLTRG time", refFrame.Data()),
58 "SVD L3 V-Side Cluster Time - EventT0 : bhabhas, ECLTRG time",
63 Form(
"SVD L3 V-Side Cluster Time %s: hadrons, ECLTRG time", refFrame.Data()),
67 "SVD L3 V-Side Cluster Time - EventT0 : hadrons, ECLTRG time",
72 Form(
"SVD L3 V-Side Cluster Time %s: mumus, ECLTRG time", refFrame.Data()),
76 "SVD L3 V-Side Cluster Time - EventT0 : mumus, ECLTRG time",
81 Form(
"SVD L3 V-Side Cluster Time %s: bhabhas, CDCTRG time", refFrame.Data()),
85 "SVD L3 V-Side Cluster Time - EventT0 : bhabhas, CDCTRG time",
90 Form(
"SVD L3 V-Side Cluster Time %s: hadrons, CDCTRG time", refFrame.Data()),
94 "SVD L3 V-Side Cluster Time - EventT0 : hadrons, CDCTRG time",
99 Form(
"SVD L3 V-Side Cluster Time %s: mumus, CDCTRG time", refFrame.Data()),
100 nBins, minT0, maxT0);
103 "SVD L3 V-Side Cluster Time - EventT0 : mumus, CDCTRG time",
104 nBins, minT0, maxT0);
153 B2WARNING(
"Missing TRGSummary, SVDDQMHitTime is skipped.");
157 B2WARNING(
"Missing SVDEventInfo, SVDDQMHitTime is skipped.");
164 B2WARNING(
"Missing SVDClusters, SVDDQMHitTime is skipped.");
170 B2WARNING(
"TRGSummary object not available but required to indicate which detector provided the L1 trigger time");
176 bool Is_ECL_L1TriggerSource = false ;
177 bool Is_CDC_L1TriggerSource = false ;
179 Is_ECL_L1TriggerSource = true ;
180 }
else if (
m_L1TimingSrc == TRGSummary::ETimingType::TTYP_CDC) {
181 Is_CDC_L1TriggerSource = true ;
184 B2DEBUG(20,
"Is_ECL_L1TriggerSource = " << Is_ECL_L1TriggerSource) ;
185 B2DEBUG(20,
"Is_CDC_L1TriggerSource= " << Is_CDC_L1TriggerSource) ;
189 B2WARNING(
"SoftwareTriggerResult object not available but require to select bhabha/mumu/hadron events for this module");
193 const std::map<std::string, int>& fresults =
m_TrgResult->getResults();
194 if ((fresults.find(
"software_trigger_cut&skim&accept_bhabha") == fresults.end()) ||
195 (fresults.find(
"software_trigger_cut&skim&accept_mumu_2trk") == fresults.end()) ||
196 (fresults.find(
"software_trigger_cut&skim&accept_hadron") == fresults.end())) {
197 B2WARNING(
"SVDDQMHitTimeModule: Can't find required bhabha or mumu or hadron trigger identifier");
204 const bool IsEvtAcceptedBhabha = (
m_TrgResult->getResult(
"software_trigger_cut&skim&accept_bhabha") ==
206 const bool IsEvtAcceptedHadron = (
m_TrgResult->getResult(
"software_trigger_cut&skim&accept_hadron") ==
208 const bool IsEvtAcceptedMumu = (
m_TrgResult->getResult(
"software_trigger_cut&skim&accept_mumu_2trk") ==
212 B2DEBUG(20,
"bhabha trigger result = " <<
static_cast<std::underlying_type<SoftwareTriggerCutResult>::type
>
213 (
m_TrgResult->getResult(
"software_trigger_cut&skim&accept_bhabha"))) ;
214 B2DEBUG(20,
"hadron trigger result = " <<
static_cast<std::underlying_type<SoftwareTriggerCutResult>::type
>
215 (
m_TrgResult->getResult(
"software_trigger_cut&skim&accept_hadron"))) ;
216 B2DEBUG(20,
"mu mu trigger result = " <<
static_cast<std::underlying_type<SoftwareTriggerCutResult>::type
>
217 (
m_TrgResult->getResult(
"software_trigger_cut&skim&accept_mumu_2trk"))) ;
218 B2DEBUG(20,
"bhabha trigger comparison bool = " << IsEvtAcceptedBhabha) ;
219 B2DEBUG(20,
"hadron trigger comparison bool = " << IsEvtAcceptedHadron) ;
220 B2DEBUG(20,
"mumu trigger comparison bool = " << IsEvtAcceptedMumu) ;
224 double eventT0 = -1000;
237 if (cluster.getSensorID().getLayerNumber() != 3)
continue;
239 if (cluster.isUCluster())
continue;
241 double time = cluster.getClsTime();
245 time = time -
m_svdEventInfo->getSVD2FTSWTimeShift(cluster.getFirstFrame());
248 if (Is_ECL_L1TriggerSource) {
249 if (IsEvtAcceptedBhabha) {
253 if (IsEvtAcceptedHadron) {
257 if (IsEvtAcceptedMumu) {
264 else if (Is_CDC_L1TriggerSource) {
265 if (IsEvtAcceptedBhabha) {
269 if (IsEvtAcceptedHadron) {
273 if (IsEvtAcceptedMumu) {
279 B2DEBUG(20,
"eventT0 = " << eventT0 <<
" ns" <<
", SVD HitTime = " << time <<
" ns") ;
HistoModule.h is supposed to be used instead of Module.h for the modules with histogram definitions t...
The SVD Cluster class This class stores all information about reconstructed SVD clusters.
This module to design collect the svd hit time for different detectors trigger timing and physics pro...
virtual ~SVDDQMHitTimeModule()
Destructor.
StoreObjPtr< EventT0 > m_eventT0
EventT0 data object.
TH1F * m_l3v_mumu_L1_ECLTRG
svd time histogram for mu mu events wrt the ECL trigger time
virtual void initialize() override
Initialize the module.
StoreObjPtr< SVDEventInfo > m_svdEventInfo
SVDEventInfo data object.
virtual void event() override
This method is called for each event.
TH1F * m_l3vEvtT0_mumu_L1_ECLTRG
svd time histogram for mu mu events wrt the ECL trigger time
StoreArray< SVDCluster > m_clusters
Store array for clusters.
TH1F * m_l3v_hadron_L1_CDCTRG
svd time histogram for hadronic events wrt the CDC trigger time
TH1F * m_l3vEvtT0_mumu_L1_CDCTRG
svd time histogram for mu mu events wrt the CDC trigger time
TH1F * m_l3vEvtT0_hadron_L1_CDCTRG
svd time histogram for hadronic events wrt the CDC trigger time
TH1F * m_l3v_hadron_L1_ECLTRG
svd time histogram for hadronic events wrt the ECL trigger time
TH1F * m_l3vEvtT0_hadron_L1_ECLTRG
svd time histogram for hadronic events wrt the ECL trigger time
StoreObjPtr< TRGSummary > m_objTrgSummary
Trigger Summary data object.
virtual void beginRun() override
This method is called for each run.
std::string m_histogramDirectoryName
Name of the histogram directory in ROOT file.
TH1F * m_l3v_bhabha_L1_ECLTRG
svd time histogram for bhabha events wrt the ECL trigger time
TH1F * m_l3vEvtT0_bhabha_L1_CDCTRG
svd time histogram for bhabha events wrt the CDC trigger time
TH1F * m_l3v_mumu_L1_CDCTRG
svd time histogram for mu mu events wrt the CDC trigger time
bool m_desynchSVDTime
if TRUE: svdTime back in SVD time reference
TH1F * m_l3v_bhabha_L1_CDCTRG
svd time histogram for bhabha events wrt the CDC trigger time
int m_L1TimingSrc
L1 timing source from getTimeType() in TRGSummary See ETimingTYpe in mdst/dataobjects/include/TRGSumm...
std::string m_storeSVDClustersName
SVDClusters StoreArray name.
std::string m_storeSVDEventInfoName
SVDEventInfo StoreObjPtry name.
StoreObjPtr< SoftwareTriggerResult > m_TrgResult
Trigger selection data object.
TH1F * m_l3vEvtT0_bhabha_L1_ECLTRG
svd time histogram for bhabha events wrt the ECL trigger time
virtual void defineHisto() override
Definition of histograms.
bool isOptional(const std::string &name="")
Tell the DataStore about an optional input.
bool isValid() const
Check wether the array was registered.
#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.