Belle II Software development
CDCDedxPIDModule Class Reference

Extract CDC dE/dx information from fitted tracks. More...

#include <CDCDedxPIDModule.h>

Inheritance diagram for CDCDedxPIDModule:
Module PathElement

Public Types

enum  EModulePropFlags {
  c_Input = 1 ,
  c_Output = 2 ,
  c_ParallelProcessingCertified = 4 ,
  c_HistogramManager = 8 ,
  c_InternalSerializer = 16 ,
  c_TerminateInAllProcesses = 32 ,
  c_DontCollectStatistics = 64
}
 Each module can be tagged with property flags, which indicate certain features of the module. More...
 
typedef ModuleCondition::EAfterConditionPath EAfterConditionPath
 Forward the EAfterConditionPath definition from the ModuleCondition.
 

Public Member Functions

 CDCDedxPIDModule ()
 Default constructor.
 
virtual ~CDCDedxPIDModule ()
 Destructor.
 
virtual void initialize () override
 Initialize the module.
 
virtual void event () override
 This method is called for each event.
 
virtual void terminate () override
 End of the event processing.
 
virtual std::vector< std::string > getFileNames (bool outputFiles)
 Return a list of output filenames for this modules.
 
virtual void beginRun ()
 Called when entering a new run.
 
virtual void endRun ()
 This method is called if the current run ends.
 
const std::string & getName () const
 Returns the name of the module.
 
const std::string & getType () const
 Returns the type of the module (i.e.
 
const std::string & getPackage () const
 Returns the package this module is in.
 
const std::string & getDescription () const
 Returns the description of the module.
 
void setName (const std::string &name)
 Set the name of the module.
 
void setPropertyFlags (unsigned int propertyFlags)
 Sets the flags for the module properties.
 
LogConfiggetLogConfig ()
 Returns the log system configuration.
 
void setLogConfig (const LogConfig &logConfig)
 Set the log system configuration.
 
void setLogLevel (int logLevel)
 Configure the log level.
 
void setDebugLevel (int debugLevel)
 Configure the debug messaging level.
 
void setAbortLevel (int abortLevel)
 Configure the abort log level.
 
void setLogInfo (int logLevel, unsigned int logInfo)
 Configure the printed log information for the given level.
 
void if_value (const std::string &expression, const std::shared_ptr< Path > &path, EAfterConditionPath afterConditionPath=EAfterConditionPath::c_End)
 Add a condition to the module.
 
void if_false (const std::shared_ptr< Path > &path, EAfterConditionPath afterConditionPath=EAfterConditionPath::c_End)
 A simplified version to add a condition to the module.
 
void if_true (const std::shared_ptr< Path > &path, EAfterConditionPath afterConditionPath=EAfterConditionPath::c_End)
 A simplified version to set the condition of the module.
 
bool hasCondition () const
 Returns true if at least one condition was set for the module.
 
const ModuleConditiongetCondition () const
 Return a pointer to the first condition (or nullptr, if none was set)
 
const std::vector< ModuleCondition > & getAllConditions () const
 Return all set conditions for this module.
 
bool evalCondition () const
 If at least one condition was set, it is evaluated and true returned if at least one condition returns true.
 
std::shared_ptr< PathgetConditionPath () const
 Returns the path of the last true condition (if there is at least one, else reaturn a null pointer).
 
Module::EAfterConditionPath getAfterConditionPath () const
 What to do after the conditional path is finished.
 
std::vector< std::shared_ptr< Path > > getAllConditionPaths () const
 Return all condition paths currently set (no matter if the condition is true or not).
 
bool hasProperties (unsigned int propertyFlags) const
 Returns true if all specified property flags are available in this module.
 
bool hasUnsetForcedParams () const
 Returns true and prints error message if the module has unset parameters which the user has to set in the steering file.
 
const ModuleParamListgetParamList () const
 Return module param list.
 
template<typename T>
ModuleParam< T > & getParam (const std::string &name) const
 Returns a reference to a parameter.
 
bool hasReturnValue () const
 Return true if this module has a valid return value set.
 
int getReturnValue () const
 Return the return value set by this module.
 
std::shared_ptr< PathElementclone () const override
 Create an independent copy of this module.
 
std::shared_ptr< boost::python::list > getParamInfoListPython () const
 Returns a python list of all parameters.
 

Static Public Member Functions

static void exposePythonAPI ()
 Exposes methods of the Module class to Python.
 

Protected Member Functions

virtual void def_initialize ()
 Wrappers to make the methods without "def_" prefix callable from Python.
 
virtual void def_beginRun ()
 Wrapper method for the virtual function beginRun() that has the implementation to be used in a call from Python.
 
virtual void def_event ()
 Wrapper method for the virtual function event() that has the implementation to be used in a call from Python.
 
virtual void def_endRun ()
 This method can receive that the current run ends as a call from the Python side.
 
virtual void def_terminate ()
 Wrapper method for the virtual function terminate() that has the implementation to be used in a call from Python.
 
void setDescription (const std::string &description)
 Sets the description of the module.
 
void setType (const std::string &type)
 Set the module type.
 
template<typename T>
void addParam (const std::string &name, T &paramVariable, const std::string &description, const T &defaultValue)
 Adds a new parameter to the module.
 
template<typename T>
void addParam (const std::string &name, T &paramVariable, const std::string &description)
 Adds a new enforced parameter to the module.
 
void setReturnValue (int value)
 Sets the return value for this module as integer.
 
void setReturnValue (bool value)
 Sets the return value for this module as bool.
 
void setParamList (const ModuleParamList &params)
 Replace existing parameter list.
 

Private Member Functions

double meanCurve (double *x, double *par, int version) const
 parameterized beta-gamma curve for predicted means
 
double getMean (double bg) const
 calculate the predicted mean using the parameterized resolution
 
double sigmaCurve (double *x, const double *par, int version) const
 parameterized resolution for predictions
 
double getSigma (double dedx, double nhit, double cos, double timereso) const
 calculate the predicted resolution using the parameterized resolution
 
double I2D (double cosTheta, double I) const
 hadron saturation parameterization part 1
 
double D2I (double cosTheta, double D) const
 hadron saturation parameterization part 2
 
void calculateMeans (double *mean, double *truncatedMean, double *truncatedMeanErr, const std::vector< double > &dedx) const
 Save arithmetic and truncated mean for the 'dedx' values.
 
void saveChiValue (double(&chi)[Const::ChargedStable::c_SetSize], double(&predmean)[Const::ChargedStable::c_SetSize], double(&predres)[Const::ChargedStable::c_SetSize], double p, double dedx, double cos, int nhit, double timereso) const
 for all particles, save chi values into 'chi'.
 
void saveLookupLogl (double(&logl)[Const::ChargedStable::c_SetSize], double p, double dedx)
 for all particles, save log-likelihood values into 'logl'.
 
void checkPDFs ()
 Check the pdfs for consistency every time they change in the database.
 
std::list< ModulePtrgetModules () const override
 no submodules, return empty list
 
std::string getPathString () const override
 return the module name.
 
void setParamPython (const std::string &name, const boost::python::object &pyObj)
 Implements a method for setting boost::python objects.
 
void setParamPythonDict (const boost::python::dict &dictionary)
 Implements a method for reading the parameter values from a boost::python dictionary.
 

Private Attributes

StoreArray< CDCDedxTrackm_dedxTracks
 Output array of CDCDedxTracks.
 
StoreArray< CDCDedxLikelihoodm_dedxLikelihoods
 Output array of CDCDedxLikelihoods.
 
StoreArray< Trackm_tracks
 Required array of input Tracks.
 
StoreArray< RecoTrackm_recoTracks
 Required array of input RecoTracks.
 
StoreArray< MCParticlem_mcparticles
 Optional array of input MCParticles.
 
std::vector< double > m_meanpars
 dE/dx mean parameters
 
std::vector< double > m_sigmapars
 dE/dx resolution parameters
 
DBObjPtr< CDCdEdxPDFsm_DBDedxPDFs
 DB object for dedx:momentum PDFs.
 
bool m_trackLevel
 Whether to use track-level or hit-level MC.
 
bool m_usePrediction
 Whether to use parameterized means and resolutions or lookup tables.
 
double m_removeLowest
 Portion of lowest dE/dx values that should be discarded for truncated mean.
 
double m_removeHighest
 Portion of highest dE/dx values that should be discarded for truncated mean.
 
bool m_backHalfCurlers
 Whether to use the back half of curlers.
 
bool m_useIndividualHits
 Include PDF value for each hit in likelihood.
 
bool m_onlyPrimaryParticles
 Only save data for primary particles (as determined by MC truth)
 
bool m_ignoreMissingParticles
 Ignore particles for which no PDFs are found.
 
DBObjPtr< CDCDedxScaleFactorm_DBScaleFactor
 Scale factor to make electrons ~1.
 
DBObjPtr< CDCDedxRunGainm_DBRunGain
 Run gain DB object.
 
DBObjPtr< CDCDedxInjectionTimem_DBInjectTime
 time gain/reso DB object
 
DBObjPtr< CDCDedxCosineCorm_DBCosineCor
 Electron saturation correction DB object.
 
DBObjPtr< CDCDedxCosineEdgem_DBCosEdgeCor
 non-linearly ACD correction DB object
 
DBObjPtr< CDCDedxWireGainm_DBWireGains
 Wire gain DB object.
 
DBObjPtr< CDCDedx2DCellm_DB2DCell
 2D correction DB object
 
DBObjPtr< CDCDedx1DCellm_DB1DCell
 1D correction DB object
 
DBObjPtr< CDCDedxADCNonLinearitym_DBNonlADC
 non-linearly ACD correction DB object
 
DBObjPtr< CDCDedxHadronCorm_DBHadronCor
 hadron saturation parameters
 
std::vector< double > m_hadronpars
 hadron saturation parameters
 
int m_nLayerWires [9] = {}
 number of wires per layer: needed for wire gain calibration
 
DBObjPtr< CDCDedxMeanParsm_DBMeanPars
 dE/dx mean parameters
 
DBObjPtr< CDCDedxSigmaParsm_DBSigmaPars
 dE/dx resolution parameters
 
std::string m_name
 The name of the module, saved as a string (user-modifiable)
 
std::string m_type
 The type of the module, saved as a string.
 
std::string m_package
 Package this module is found in (may be empty).
 
std::string m_description
 The description of the module.
 
unsigned int m_propertyFlags
 The properties of the module as bitwise or (with |) of EModulePropFlags.
 
LogConfig m_logConfig
 The log system configuration of the module.
 
ModuleParamList m_moduleParamList
 List storing and managing all parameter of the module.
 
bool m_hasReturnValue
 True, if the return value is set.
 
int m_returnValue
 The return value.
 
std::vector< ModuleConditionm_conditions
 Module condition, only non-null if set.
 

Detailed Description

Extract CDC dE/dx information from fitted tracks.

If a PDF file is specified using the 'PDFFile' parameter, likelihood values for all particle hypotheses are calculated and saved in a CDCDedxLikelihood object.

Performs a simple path length correction to the dE/dx measurement based on individual hits in the CDC and determines the mean and truncated mean dE/dx value for each track.

The module creates CDCDedxTrack objects (one for each genfit::Track), which includes individual dE/dx data points and their corresponding layer, and hit information like reconstructed position, charge, etc.

The reconstruction of flight paths and the used likelihood ratio method are described and evaluated in dE/dx Particle Identification and Pixel Detector Data Reduction for the Belle II Experiment (Chapter 6)

Definition at line 66 of file CDCDedxPIDModule.h.

Member Typedef Documentation

◆ EAfterConditionPath

Forward the EAfterConditionPath definition from the ModuleCondition.

Definition at line 88 of file Module.h.

Member Enumeration Documentation

◆ EModulePropFlags

enum EModulePropFlags
inherited

Each module can be tagged with property flags, which indicate certain features of the module.

Enumerator
c_Input 

This module is an input module (reads data).

c_Output 

This module is an output module (writes data).

c_ParallelProcessingCertified 

This module can be run in parallel processing mode safely (All I/O must be done through the data store, in particular, the module must not write any files.)

c_HistogramManager 

This module is used to manage histograms accumulated by other modules.

c_InternalSerializer 

This module is an internal serializer/deserializer for parallel processing.

c_TerminateInAllProcesses 

When using parallel processing, call this module's terminate() function in all processes().

This will also ensure that there is exactly one process (single-core if no parallel modules found) or at least one input, one main and one output process.

c_DontCollectStatistics 

No statistics is collected for this module.

Definition at line 77 of file Module.h.

77 {
78 c_Input = 1,
79 c_Output = 2,
80 c_ParallelProcessingCertified = 4,
81 c_HistogramManager = 8,
82 c_InternalSerializer = 16,
83 c_TerminateInAllProcesses = 32,
84 c_DontCollectStatistics = 64,
85 };
@ c_Output
Output Process.
Definition ProcHelper.h:19
@ c_Input
Input Process.
Definition ProcHelper.h:17

Constructor & Destructor Documentation

◆ CDCDedxPIDModule()

Default constructor.

Definition at line 44 of file CDCDedxPIDModule.cc.

44 : Module()
45{
47
48 //Set module properties
49 setDescription("Extract dE/dx and corresponding log-likelihood from fitted tracks and hits in the CDC.");
50
51 //Parameter definitions
52 addParam("usePrediction", m_usePrediction,
53 "Use parameterized means and resolutions to determine PID values. If false, lookup table PDFs are used.", true);
54 addParam("removeLowest", m_removeLowest,
55 "Portion of events with low dE/dx that should be discarded", double(0.05));
56 addParam("removeHighest", m_removeHighest,
57 "Portion of events with high dE/dx that should be discarded", double(0.25));
58 addParam("useBackHalfCurlers", m_backHalfCurlers,
59 "Whether to use the back half of curlers", false);
60 addParam("useIndividualHits", m_useIndividualHits,
61 "If using lookup table PDFs, include PDF value for each hit in likelihood. If false, the truncated mean of dedx values will be used.",
62 true);
63 addParam("ignoreMissingParticles", m_ignoreMissingParticles,
64 "Ignore particles for which no PDFs are found", false);
65 addParam("trackLevel", m_trackLevel,
66 "ONLY USEFUL FOR MC: Use track-level MC. If false, use hit-level MC", true);
67 addParam("onlyPrimaryParticles", m_onlyPrimaryParticles,
68 "ONLY USEFUL FOR MC: Only save data for primary particles", false);
69}
double m_removeHighest
Portion of highest dE/dx values that should be discarded for truncated mean.
bool m_ignoreMissingParticles
Ignore particles for which no PDFs are found.
bool m_onlyPrimaryParticles
Only save data for primary particles (as determined by MC truth)
bool m_backHalfCurlers
Whether to use the back half of curlers.
bool m_trackLevel
Whether to use track-level or hit-level MC.
bool m_useIndividualHits
Include PDF value for each hit in likelihood.
bool m_usePrediction
Whether to use parameterized means and resolutions or lookup tables.
double m_removeLowest
Portion of lowest dE/dx values that should be discarded for truncated mean.
void setDescription(const std::string &description)
Sets the description of the module.
Definition Module.cc:214
void setPropertyFlags(unsigned int propertyFlags)
Sets the flags for the module properties.
Definition Module.cc:208
Module()
Constructor.
Definition Module.cc:30
@ c_ParallelProcessingCertified
This module can be run in parallel processing mode safely (All I/O must be done through the data stor...
Definition Module.h:80
void addParam(const std::string &name, T &paramVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
Definition Module.h:559

◆ ~CDCDedxPIDModule()

~CDCDedxPIDModule ( )
virtual

Destructor.

Definition at line 71 of file CDCDedxPIDModule.cc.

71{ }

Member Function Documentation

◆ beginRun()

virtual void beginRun ( void )
inlinevirtualinherited

Called when entering a new run.

Called at the beginning of each run, the method gives you the chance to change run dependent constants like alignment parameters, etc.

This method can be implemented by subclasses.

Reimplemented in AnalysisPhase1StudyModule, ARICHBackgroundModule, arichBtestModule, ARICHDigitizerModule, ARICHDQMModule, ARICHRateCalModule, ARICHReconstructorModule, AWESOMEBasicModule, B2BIIConvertBeamParamsModule, B2BIIConvertMdstModule, B2BIIFixMdstModule, B2BIIMCParticlesMonitorModule, B2BIIMdstInputModule, BeamabortModule, BeamabortStudyModule, BeamDigitizerModule, BeamBkgGeneratorModule, BeamBkgHitRateMonitorModule, BeamBkgMixerModule, BeamBkgTagSetterModule, BeamSpotMonitorModule, BelleMCOutputModule, BgoDigitizerModule, BgoModule, BgoStudyModule, BGOverlayInputModule, BKLMAnaModule, BKLMDigitAnalyzerModule, BKLMSimHistogrammerModule, BKLMTrackingModule, CalibrationCollectorModule, CaveModule, CDCCosmicAnalysisModule, CDCCRTestModule, CDCPackerModule, CDCRecoTrackFilterModule, CDCUnpackerModule, CDCDedxDQMModule, CDCDedxValidationModule, cdcDQM7Module, CDCDQMModule, CDCTrigger2DFinderModule, CDCTriggerNDFinderModule, CDCTriggerNeuroDQMModule, CDCTriggerNeuroDQMOnlineModule, CDCTriggerTSFModule, CDCTriggerUnpackerModule, CertifyParallelModule, ChargedPidMVAModule, ChargedPidMVAMulticlassModule, ClawDigitizerModule, ClawModule, ClawStudyModule, ClawsDigitizerModule, CLAWSModule, ClawsStudyModule, Convert2RawDetModule, CosmicsAlignmentValidationModule, CreateFieldMapModule, CsiDigitizer_v2Module, CsIDigitizerModule, CsiModule, CsiStudy_v2Module, CsIStudyModule, CurlTaggerModule, DAQMonitorModule, DAQPerfModule, DataWriterModule, DelayDQMModule, DeSerializerPXDModule, DetectorOccupanciesDQMModule, DosiDigitizerModule, DosiModule, DosiStudyModule, DQMHistAnalysisARICHModule, DQMHistAnalysisCDCDedxModule, DQMHistAnalysisCDCEpicsModule, DQMHistAnalysisCDCMonObjModule, DQMHistAnalysisDAQMonObjModule, DQMHistAnalysisDeltaEpicsMonObjExampleModule, DQMHistAnalysisDeltaTestModule, DQMHistAnalysisECLConnectedRegionsModule, DQMHistAnalysisECLModule, DQMHistAnalysisECLShapersModule, DQMHistAnalysisECLSummaryModule, DQMHistAnalysisEcmsMonObjModule, DQMHistAnalysisEpicsExampleModule, DQMHistAnalysisEpicsOutputModule, DQMHistAnalysisEventT0EfficiencyModule, DQMHistAnalysisEventT0TriggerJitterModule, DQMHistAnalysisExampleFlagsModule, DQMHistAnalysisExampleModule, DQMHistAnalysisHLTModule, DQMHistAnalysisInput2Module, DQMHistAnalysisInputPVSrvModule, DQMHistAnalysisInputRootFileModule, DQMHistAnalysisInputTestModule, DQMHistAnalysisKLM2Module, DQMHistAnalysisKLMModule, DQMHistAnalysisMiraBelleModule, DQMHistAnalysisOutputMonObjModule, DQMHistAnalysisOutputRelayMsgModule, DQMHistAnalysisPeakModule, DQMHistAnalysisPhysicsModule, DQMHistAnalysisPXDChargeModule, DQMHistAnalysisPXDCMModule, DQMHistAnalysisPXDDAQModule, DQMHistAnalysisPXDEffModule, DQMHistAnalysisPXDERModule, DQMHistAnalysisPXDFitsModule, DQMHistAnalysisPXDInjectionModule, DQMHistAnalysisPXDReductionModule, DQMHistAnalysisPXDTrackChargeModule, DQMHistAnalysisRooFitExampleModule, DQMHistAnalysisRunNrModule, DQMHistAnalysisSVDClustersOnTrackModule, DQMHistAnalysisSVDDoseModule, DQMHistAnalysisSVDEfficiencyModule, DQMHistAnalysisSVDGeneralModule, DQMHistAnalysisSVDOccupancyModule, DQMHistAnalysisSVDOnMiraBelleModule, DQMHistAnalysisSVDUnpackerModule, DQMHistAnalysisTOPModule, DQMHistAnalysisTrackingAbortModule, DQMHistAnalysisTrackingHLTModule, DQMHistAnalysisTRGECLModule, DQMHistAnalysisTRGModule, DQMHistAutoCanvasModule, DQMHistComparitorModule, DQMHistDeltaHistoModule, DQMHistInjectionModule, DqmHistoManagerModule, DQMHistoModuleBase, DQMHistOutputToEPICSModule, DQMHistReferenceModule, DQMHistSnapshotsModule, Ds2RawFileModule, Ds2RawModule, Ds2RbufModule, Ds2SampleModule, ECLDQMInjectionModule, ECLLOMModule, ECLBackgroundModule, ECLChargedPIDDataAnalysisModule, ECLChargedPIDDataAnalysisValidationModule, ECLChargedPIDModule, ECLChargedPIDMVAModule, ECLClusterPSDModule, ECLCovarianceMatrixModule, ECLCRFinderModule, ECLDataAnalysisModule, ECLDigitCalibratorModule, ECLDigitizerModule, ECLDigitizerPureCsIModule, EclDisplayModule, ECLDQMConnectedRegionsModule, ECLDQMEXTENDEDModule, ECLDQMModule, ECLDQMOutOfTimeDigitsModule, ECLExpertModule, ECLFinalizerModule, ECLHitDebugModule, ECLLocalMaximumFinderModule, ECLLocalRunCalibratorModule, ECLPackerModule, ECLShowerCorrectorModule, ECLShowerShapeModule, ECLSplitterN1Module, ECLSplitterN2Module, ECLUnpackerModule, ECLWaveformFitModule, EffPlotsModule, EKLMDataCheckerModule, ElapsedTimeModule, EnergyBiasCorrectionModule, EventInfoPrinterModule, EventLimiterModule, EventsOfDoomBusterModule, EventT0DQMModule, EventT0ValidationModule, EvReductionModule, EvtGenDecayModule, EvtGenInputModule, ExportGeometryModule, ExtModule, FANGSDigitizerModule, FANGSModule, FANGSStudyModule, FastRbuf2DsModule, FlippedRecoTracksMergerModule, FlipQualityModule, FullSimModule, TRGGDLUnpackerModule, GearboxModule, GenRawSendModule, GetEventFromSocketModule, GRLNeuroModule, He3DigitizerModule, He3tubeModule, He3tubeStudyModule, HistoManagerModule, HistoModule, HitXPModule, HLTDQM2ZMQModule, HLTPrefilterModule, IoVDependentConditionModule, IPDQMModule, KinkFinderModule, KKGenInputModule, KLMClusterAnaModule, KLMClusterEfficiencyModule, KLMClustersReconstructorModule, KLMDigitizerModule, KLMDigitTimeShifterModule, KLMDQM2Module, KLMDQMModule, KLMExpertModule, KLMMuonIDDNNExpertModule, KLMPackerModule, KLMReconstructorModule, KLMScintillatorSimulatorModule, KLMTrackingModule, KLMTriggerModule, KLMUnpackerModule, KlongValidationModule, LowEnergyPi0IdentificationExpertModule, LowEnergyPi0VetoExpertModule, MaterialScanModule, MCMatcherTRGECLModule, MCTrackCandClassifierModule, MCV0MatcherModule, MicrotpcModule, MicrotpcStudyModule, TpcDigitizerModule, MonitorDataModule, MuidModule, MVAExpertModule, MVAMultipleExpertsModule, MVAPrototypeModule, NtuplePhase1_v6Module, OverrideGenerationFlagsModule, PartialSeqRootReaderModule, ParticleVertexFitterModule, Ph1bpipeModule, Ph1sustrModule, PhotonEfficiencySystematicsModule, PhysicsObjectsDQMModule, PhysicsObjectsMiraBelleBhabhaModule, PhysicsObjectsMiraBelleDst2Module, PhysicsObjectsMiraBelleDstModule, PhysicsObjectsMiraBelleEcmsBBModule, PhysicsObjectsMiraBelleHadronModule, PhysicsObjectsMiraBelleModule, PinDigitizerModule, PindiodeModule, PindiodeStudyModule, PlumeDigitizerModule, PlumeModule, ProgressModule, PXDBackgroundModule, PXDBgTupleProducerModule, PXDClusterizerModule, PXDDAQDQMModule, PXDDigitizerModule, PXDGatedDHCDQMModule, PXDGatedModeDQMModule, PXDInjectionDQMModule, PXDMCBgTupleProducerModule, PXDPackerModule, PXDRawDQMChipsModule, PXDRawDQMModule, PXDROIDQMModule, PXDUnpackerModule, PXDclusterFilterModule, PXDClustersFromTracksModule, PXDdigiFilterModule, PXDDQMClustersModule, PXDDQMCorrModule, PXDDQMEfficiencyModule, PXDDQMEfficiencySelftrackModule, PXDDQMExpressRecoModule, PXDPerformanceModule, PXDRawDQMCorrModule, PXDROIFinderAnalysisModule, PXDROIFinderModule, PXDTrackClusterDQMModule, PyModule, QcsmonitorDigitizerModule, QcsmonitorModule, QcsmonitorStudyModule, QualityEstimatorVXDModule, RandomBarrierModule, Raw2DsModule, RawInputModule, Rbuf2DsModule, Rbuf2RbufModule, ReceiveEventModule, RecoTracksReverterModule, ReprocessorModule, RxModule, RxSocketModule, SecMapTrainerBaseModule, SecMapTrainerVXDTFModule, SectorMapBootstrapModule, SegmentNetworkProducerModule, SeqRootInputModule, SeqRootMergerModule, SeqRootOutputModule, SerializerModule, SoftwareTriggerHLTDQMModule, SoftwareTriggerModule, StatisticsTimingHLTDQMModule, SPTCmomentumSeedRetrieverModule, SPTCvirtualIPRemoverModule, SrsensorModule, StatisticsSummaryModule, StorageDeserializerModule, StorageSerializerModule, SubEventModule, SVD3SamplesEmulatorModule, SVDBackgroundModule, SVDClusterizerModule, SVDDigitizerModule, SVDDQMDoseModule, SVDDQMInjectionModule, SVDMissingAPVsClusterCreatorModule, SVDPackerModule, SVDRecoDigitCreatorModule, SVDUnpackerModule, SVDB4CommissioningPlotsModule, SVDClusterCalibrationsMonitorModule, SVDClusterEvaluationModule, SVDClusterEvaluationTrueInfoModule, SVDClusterFilterModule, SVDCoGTimeEstimatorModule, SVDDataFormatCheckModule, SVDDQMClustersOnTrackModule, SVDDQMExpressRecoModule, SVDDQMHitTimeModule, svdDumpModule, SVDEventInfoSetterModule, SVDEventT0EstimatorModule, SVDHotStripFinderModule, SVDLatencyCalibrationModule, SVDLocalCalibrationsCheckModule, SVDLocalCalibrationsMonitorModule, SVDMaxStripTTreeModule, SVDOccupancyAnalysisModule, SVDPerformanceModule, SVDPerformanceTTreeModule, SVDPositionErrorScaleFactorImporterModule, SVDROIFinderAnalysisModule, SVDROIFinderModule, SVDShaperDigitsFromTracksModule, SVDSpacePointCreatorModule, SVDTimeCalibrationsMonitorModule, SVDTimeGroupingModule, SVDTriggerQualityGeneratorModule, SVDUnpackerDQMModule, SwitchDataStoreModule, TagVertexModule, TOPBackgroundModule, TOPBunchFinderModule, TOPChannelMaskerModule, TOPChannelT0MCModule, TOPDigitizerModule, TOPDoublePulseGeneratorModule, TOPDQMModule, TOPGainEfficiencyCalculatorModule, TOPInterimFENtupleModule, TOPLaserCalibratorModule, TOPLaserHitSelectorModule, TOPMCTrackMakerModule, TOPModuleT0CalibratorModule, TOPNtupleModule, TOPPackerModule, TOPRawDigitConverterModule, TOPTBCComparatorModule, TOPTimeBaseCalibratorModule, TOPTimeRecalibratorModule, TOPTriggerDigitizerModule, TOPUnpackerModule, TOPWaveformFeatureExtractorModule, TOPXTalkChargeShareSetterModule, TrackAnaModule, TrackCreatorModule, TrackFinderMCTruthRecoTracksModule, TrackFinderVXDBasicPathFinderModule, TrackFinderVXDCellOMatModule, TrackFinderVXDAnalizerModule, TrackingAbortDQMModule, TrackingEnergyLossCorrectionModule, TrackingMomentumScaleFactorsModule, TrackingPerformanceEvaluationModule, FindletModule< AFindlet >, FindletModule< AsicBackgroundLibraryCreator >, FindletModule< AxialSegmentPairCreator >, FindletModule< AxialSegmentPairCreator >, FindletModule< AxialStraightTrackFinder >, FindletModule< AxialStraightTrackFinder >, FindletModule< AxialTrackCreatorMCTruth >, FindletModule< AxialTrackCreatorMCTruth >, FindletModule< AxialTrackCreatorSegmentHough >, FindletModule< AxialTrackCreatorSegmentHough >, FindletModule< AxialTrackFinderHough >, FindletModule< AxialTrackFinderHough >, FindletModule< AxialTrackFinderLegendre >, FindletModule< AxialTrackFinderLegendre >, FindletModule< CDCTrackingEventLevelMdstInfoFillerFromHitsFindlet >, FindletModule< CDCTrackingEventLevelMdstInfoFillerFromSegmentsFindlet >, FindletModule< CKFToCDCFindlet >, FindletModule< CKFToCDCFromEclFindlet >, FindletModule< CKFToPXDFindlet >, FindletModule< CKFToSVDFindlet >, FindletModule< CKFToSVDSeedFindlet >, FindletModule< ClusterBackgroundDetector >, FindletModule< ClusterBackgroundDetector >, FindletModule< ClusterPreparer >, FindletModule< ClusterPreparer >, FindletModule< ClusterRefiner< BridgingWireHitRelationFilter > >, FindletModule< ClusterRefiner< BridgingWireHitRelationFilter > >, FindletModule< CosmicsTrackMergerFindlet >, FindletModule< DATCONFPGAFindlet >, FindletModule< FacetCreator >, FindletModule< FacetCreator >, FindletModule< HitBasedT0Extractor >, FindletModule< HitBasedT0Extractor >, FindletModule< HitReclaimer >, FindletModule< HitReclaimer >, FindletModule< MCVXDCDCTrackMergerFindlet >, FindletModule< MonopoleAxialTrackFinderLegendre >, FindletModule< MonopoleAxialTrackFinderLegendre >, FindletModule< MonopoleStereoHitFinder >, FindletModule< MonopoleStereoHitFinder >, FindletModule< MonopoleStereoHitFinderQuadratic >, FindletModule< MonopoleStereoHitFinderQuadratic >, FindletModule< SegmentCreatorFacetAutomaton >, FindletModule< SegmentCreatorFacetAutomaton >, FindletModule< SegmentCreatorMCTruth >, FindletModule< SegmentCreatorMCTruth >, FindletModule< SegmentFinderFacetAutomaton >, FindletModule< SegmentFinderFacetAutomaton >, FindletModule< SegmentFitter >, FindletModule< SegmentFitter >, FindletModule< SegmentLinker >, FindletModule< SegmentLinker >, FindletModule< SegmentOrienter >, FindletModule< SegmentOrienter >, FindletModule< SegmentPairCreator >, FindletModule< SegmentPairCreator >, FindletModule< SegmentRejecter >, FindletModule< SegmentRejecter >, FindletModule< SegmentTrackCombiner >, FindletModule< SegmentTrackCombiner >, FindletModule< SegmentTripleCreator >, FindletModule< SegmentTripleCreator >, FindletModule< StereoHitFinder >, FindletModule< StereoHitFinder >, FindletModule< SuperClusterCreator >, FindletModule< SuperClusterCreator >, FindletModule< TrackCombiner >, FindletModule< TrackCombiner >, FindletModule< TrackCreatorSegmentPairAutomaton >, FindletModule< TrackCreatorSegmentPairAutomaton >, FindletModule< TrackCreatorSegmentTripleAutomaton >, FindletModule< TrackCreatorSegmentTripleAutomaton >, FindletModule< TrackCreatorSingleSegments >, FindletModule< TrackCreatorSingleSegments >, FindletModule< TrackExporter >, FindletModule< TrackExporter >, FindletModule< TrackFinder >, FindletModule< TrackFinderAutomaton >, FindletModule< TrackFinderCosmics >, FindletModule< TrackFinderSegmentPairAutomaton >, FindletModule< TrackFinderSegmentPairAutomaton >, FindletModule< TrackFinderSegmentTripleAutomaton >, FindletModule< TrackFinderSegmentTripleAutomaton >, FindletModule< TrackFlightTimeAdjuster >, FindletModule< TrackFlightTimeAdjuster >, FindletModule< TrackingUtilities::FindletStoreArrayInput< BaseEventTimeExtractorModuleFindlet< AFindlet > > >, FindletModule< TrackingUtilities::FindletStoreArrayInput< BaseEventTimeExtractorModuleFindlet< AFindlet > > >, FindletModule< TrackLinker >, FindletModule< TrackLinker >, FindletModule< TrackOrienter >, FindletModule< TrackOrienter >, FindletModule< TrackQualityAsserter >, FindletModule< TrackQualityAsserter >, FindletModule< TrackQualityEstimator >, FindletModule< TrackQualityEstimator >, FindletModule< TrackRejecter >, FindletModule< TrackRejecter >, FindletModule< vxdHoughTracking::SVDHoughTracking >, FindletModule< WireHitBackgroundDetector >, FindletModule< WireHitBackgroundDetector >, FindletModule< WireHitCreator >, FindletModule< WireHitCreator >, FindletModule< WireHitPreparer >, FindletModule< WireHitPreparer >, TrackQETrainingDataCollectorModule, TrackQualityEstimatorMVAModule, TreeFitterModule, TRGCDCETFUnpackerModule, TRGCDCModule, TRGCDCT2DDQMModule, TRGCDCT3DConverterModule, TRGCDCT3DDQMModule, TRGCDCT3DUnpackerModule, TRGCDCTSFUnpackerModule, TRGCDCTSFDQMModule, TRGCDCTSStreamModule, TRGECLBGTCHitModule, TRGECLDQMModule, TRGECLEventTimingDQMModule, TRGECLFAMModule, TRGECLModule, TRGECLQAMModule, TRGECLRawdataAnalysisModule, TRGECLTimingCalModule, TRGECLUnpackerModule, TRGEFFDQMModule, TRGGDLDQMModule, TRGGDLDSTModule, TRGGDLModule, TRGGDLSummaryModule, TRGGRLDQMModule, TRGGRLInjectionVetoFromOverlayModule, TRGGRLMatchModule, TRGGRLModule, TRGGRLProjectsModule, TRGGRLUnpackerModule, TRGRAWDATAModule, TRGTOPDQMModule, TRGTOPTRD2TTSConverterModule, TRGTOPUnpackerModule, TRGTOPUnpackerWaveformModule, TRGTOPWaveformPlotterModule, TTDDQMModule, TxModule, TxSocketModule, V0findingPerformanceEvaluationModule, V0ObjectsDQMModule, VXDMisalignmentModule, vxdDigitMaskingModule, VXDDQMExpressRecoModule, VXDQETrainingDataCollectorModule, VXDQualityEstimatorMVAModule, VXDSimpleClusterizerModule, and VXDTFTrainingDataCollectorModule.

Definition at line 146 of file Module.h.

146{};

◆ calculateMeans()

void calculateMeans ( double * mean,
double * truncatedMean,
double * truncatedMeanErr,
const std::vector< double > & dedx ) const
private

Save arithmetic and truncated mean for the 'dedx' values.

Parameters
meancalculated arithmetic mean
truncatedMeancalculated truncated mean
truncatedMeanErrerror for truncatedMean
dedxinput values

Definition at line 633 of file CDCDedxPIDModule.cc.

635{
636 // Calculate the truncated average by skipping the lowest & highest
637 // events in the array of dE/dx values
638 std::vector<double> sortedDedx = dedx;
639 std::sort(sortedDedx.begin(), sortedDedx.end());
640 sortedDedx.erase(std::remove(sortedDedx.begin(), sortedDedx.end(), 0), sortedDedx.end());
641 sortedDedx.shrink_to_fit();
642
643 double truncatedMeanTmp = 0.0;
644 double meanTmp = 0.0;
645 double sumOfSquares = 0.0;
646 int numValuesTrunc = 0;
647 const int numDedx = sortedDedx.size();
648
649 // add a factor of 0.51 here to make sure we are rounding appropriately...
650 const int lowEdgeTrunc = int(numDedx * m_removeLowest + 0.51);
651 const int highEdgeTrunc = int(numDedx * (1 - m_removeHighest) + 0.51);
652 for (int i = 0; i < numDedx; i++) {
653 meanTmp += sortedDedx[i];
654 if (i >= lowEdgeTrunc and i < highEdgeTrunc) {
655 truncatedMeanTmp += sortedDedx[i];
656 sumOfSquares += sortedDedx[i] * sortedDedx[i];
657 numValuesTrunc++;
658 }
659 }
660
661 if (numDedx != 0) {
662 meanTmp /= numDedx;
663 }
664 if (numValuesTrunc != 0) {
665 truncatedMeanTmp /= numValuesTrunc;
666 } else {
667 truncatedMeanTmp = meanTmp;
668 }
669
670 *mean = meanTmp;
671 *truncatedMean = truncatedMeanTmp;
672
673 if (numValuesTrunc > 1) {
674 *truncatedMeanErr = sqrt(sumOfSquares / double(numValuesTrunc) - truncatedMeanTmp * truncatedMeanTmp) / double(
675 numValuesTrunc - 1);
676 } else {
677 *truncatedMeanErr = 0;
678 }
679}
double sqrt(double a)
sqrt for double
Definition beamHelpers.h:28

◆ checkPDFs()

void checkPDFs ( )
private

Check the pdfs for consistency every time they change in the database.

Definition at line 73 of file CDCDedxPIDModule.cc.

74{
75 if (!m_DBDedxPDFs) B2FATAL("No Dedx pdfs found in database");
76 //load dedx:momentum PDFs
77 int nBinsX, nBinsY;
78 double xMin, xMax, yMin, yMax;
79 nBinsX = nBinsY = -1;
80 xMin = xMax = yMin = yMax = 0.0;
81 for (unsigned int iPart = 0; iPart < 6; iPart++) {
82 const int pdgCode = Const::chargedStableSet.at(iPart).getPDGCode();
83 const TH2F* pdf = m_DBDedxPDFs->getCDCPDF(iPart, !m_useIndividualHits);
84
85 if (pdf->GetEntries() == 0) {
87 continue;
88 B2FATAL("Couldn't find PDF for PDG " << pdgCode);
89 }
90
91 //check that PDFs have the same dimensions and same binning
92 const double epsFactor = 1e-5;
93 if (nBinsX == -1 and nBinsY == -1) {
94 nBinsX = pdf->GetNbinsX();
95 nBinsY = pdf->GetNbinsY();
96 xMin = pdf->GetXaxis()->GetXmin();
97 xMax = pdf->GetXaxis()->GetXmax();
98 yMin = pdf->GetYaxis()->GetXmin();
99 yMax = pdf->GetYaxis()->GetXmax();
100 } else if (nBinsX != pdf->GetNbinsX()
101 or nBinsY != pdf->GetNbinsY()
102 or fabs(xMin - pdf->GetXaxis()->GetXmin()) > epsFactor * xMax
103 or fabs(xMax - pdf->GetXaxis()->GetXmax()) > epsFactor * xMax
104 or fabs(yMin - pdf->GetYaxis()->GetXmin()) > epsFactor * yMax
105 or fabs(yMax - pdf->GetYaxis()->GetXmax()) > epsFactor * yMax) {
106 B2FATAL("PDF for PDG " << pdgCode << " has binning/dimensions differing from previous PDF.");
107 }
108 }
109}
DBObjPtr< CDCdEdxPDFs > m_DBDedxPDFs
DB object for dedx:momentum PDFs.
const ParticleType & at(unsigned int index) const
Return particle at given index, or end() if out of range.
Definition Const.h:549
int getPDGCode() const
PDG code.
Definition Const.h:473
static const ParticleSet chargedStableSet
set of charged stable particles
Definition Const.h:618

◆ clone()

std::shared_ptr< PathElement > clone ( ) const
overridevirtualinherited

Create an independent copy of this module.

Note that parameters are shared, so changing them on a cloned module will also affect the original module.

Implements PathElement.

Definition at line 179 of file Module.cc.

180{
183 newModule->setName(getName());
184 newModule->m_package = m_package;
185 newModule->m_propertyFlags = m_propertyFlags;
186 newModule->m_logConfig = m_logConfig;
187 newModule->m_conditions = m_conditions;
188
189 return newModule;
190}
std::shared_ptr< Module > registerModule(const std::string &moduleName, std::string sharedLibPath="") noexcept(false)
Creates an instance of a module and registers it to the ModuleManager.
static ModuleManager & Instance()
Exception is thrown if the requested module could not be created by the ModuleManager.
void setParameters(const ModuleParamList &params)
Set values for parameters from other parameter list.
const ModuleParamList & getParamList() const
Return module param list.
Definition Module.h:362
const std::string & getName() const
Returns the name of the module.
Definition Module.h:186
const std::string & getType() const
Returns the type of the module (i.e.
Definition Module.cc:41
unsigned int m_propertyFlags
The properties of the module as bitwise or (with |) of EModulePropFlags.
Definition Module.h:511
ModuleParamList m_moduleParamList
List storing and managing all parameter of the module.
Definition Module.h:515
void setName(const std::string &name)
Set the name of the module.
Definition Module.h:213
LogConfig m_logConfig
The log system configuration of the module.
Definition Module.h:513
std::vector< ModuleCondition > m_conditions
Module condition, only non-null if set.
Definition Module.h:520
std::string m_package
Package this module is found in (may be empty).
Definition Module.h:509
std::shared_ptr< Module > ModulePtr
Defines a pointer to a module object as a boost shared pointer.
Definition Module.h:43

◆ D2I()

double D2I ( double cosTheta,
double D ) const
private

hadron saturation parameterization part 2

Definition at line 717 of file CDCDedxPIDModule.cc.

718{
719 double absCosTheta = fabs(cosTheta);
720 double projection = pow(absCosTheta, m_hadronpars[3]) + m_hadronpars[2];
721 if (projection == 0) {
722 B2WARNING("Something wrong with dE/dx hadron constants!");
723 return D;
724 }
725
726 double chargeDensity = D / projection;
727 double numerator = 1 + m_hadronpars[0] * chargeDensity;
728 double denominator = 1 + m_hadronpars[1] * chargeDensity;
729
730 if (denominator == 0) {
731 B2WARNING("Something wrong with dE/dx hadron constants!");
732 return D;
733 }
734
735 double I = D * m_hadronpars[4] * numerator / denominator;
736 return I;
737}
std::vector< double > m_hadronpars
hadron saturation parameters

◆ def_beginRun()

virtual void def_beginRun ( )
inlineprotectedvirtualinherited

Wrapper method for the virtual function beginRun() that has the implementation to be used in a call from Python.

Reimplemented in PyModule.

Definition at line 425 of file Module.h.

425{ beginRun(); }

◆ def_endRun()

virtual void def_endRun ( )
inlineprotectedvirtualinherited

This method can receive that the current run ends as a call from the Python side.

For regular C++-Modules that forwards the call to the regular endRun() method.

Reimplemented in PyModule.

Definition at line 438 of file Module.h.

438{ endRun(); }

◆ def_event()

virtual void def_event ( )
inlineprotectedvirtualinherited

Wrapper method for the virtual function event() that has the implementation to be used in a call from Python.

Reimplemented in PyModule.

Definition at line 431 of file Module.h.

431{ event(); }

◆ def_initialize()

virtual void def_initialize ( )
inlineprotectedvirtualinherited

Wrappers to make the methods without "def_" prefix callable from Python.

Overridden in PyModule. Wrapper method for the virtual function initialize() that has the implementation to be used in a call from Python.

Reimplemented in PyModule.

Definition at line 419 of file Module.h.

419{ initialize(); }

◆ def_terminate()

virtual void def_terminate ( )
inlineprotectedvirtualinherited

Wrapper method for the virtual function terminate() that has the implementation to be used in a call from Python.

Reimplemented in PyModule.

Definition at line 444 of file Module.h.

444{ terminate(); }

◆ endRun()

virtual void endRun ( void )
inlinevirtualinherited

This method is called if the current run ends.

Use this method to store information, which should be aggregated over one run.

This method can be implemented by subclasses.

Reimplemented in AlignDQMModule, AnalysisPhase1StudyModule, arichBtestModule, ARICHDQMModule, AWESOMEBasicModule, B2BIIConvertMdstModule, B2BIIMCParticlesMonitorModule, B2BIIMdstInputModule, BeamabortModule, BeamabortStudyModule, BeamDigitizerModule, BeamBkgGeneratorModule, BeamBkgHitRateMonitorModule, BeamBkgMixerModule, BeamBkgTagSetterModule, BelleMCOutputModule, BgoDigitizerModule, BgoModule, BgoStudyModule, BGOverlayInputModule, BKLMAnaModule, BKLMDigitAnalyzerModule, BKLMSimHistogrammerModule, BKLMTrackingModule, CalibrationCollectorModule, CaveModule, CDCCosmicAnalysisModule, CDCCRTestModule, CDCPackerModule, CDCRecoTrackFilterModule, CDCUnpackerModule, CDCDedxDQMModule, CDCDedxValidationModule, cdcDQM7Module, CDCDQMModule, CDCTriggerNDFinderModule, CDCTriggerNeuroDQMModule, CDCTriggerNeuroDQMOnlineModule, CertifyParallelModule, ClawDigitizerModule, ClawModule, ClawStudyModule, ClawsDigitizerModule, CLAWSModule, ClawsStudyModule, Convert2RawDetModule, CosmicsAlignmentValidationModule, CsiDigitizer_v2Module, CsIDigitizerModule, CsiModule, CsiStudy_v2Module, CsIStudyModule, CurlTaggerModule, DAQPerfModule, DataWriterModule, DeSerializerPXDModule, DosiDigitizerModule, DosiModule, DosiStudyModule, DQMHistAnalysisARICHModule, DQMHistAnalysisARICHMonObjModule, DQMHistAnalysisCDCDedxModule, DQMHistAnalysisCDCEpicsModule, DQMHistAnalysisCDCMonObjModule, DQMHistAnalysisDAQMonObjModule, DQMHistAnalysisDeltaEpicsMonObjExampleModule, DQMHistAnalysisDeltaTestModule, DQMHistAnalysisECLConnectedRegionsModule, DQMHistAnalysisECLModule, DQMHistAnalysisECLOutOfTimeDigitsModule, DQMHistAnalysisECLShapersModule, DQMHistAnalysisECLSummaryModule, DQMHistAnalysisEcmsMonObjModule, DQMHistAnalysisEpicsExampleModule, DQMHistAnalysisEpicsOutputModule, DQMHistAnalysisEventT0TriggerJitterModule, DQMHistAnalysisExampleFlagsModule, DQMHistAnalysisExampleModule, DQMHistAnalysisHLTMonObjModule, DQMHistAnalysisInput2Module, DQMHistAnalysisInputPVSrvModule, DQMHistAnalysisInputTestModule, DQMHistAnalysisKLM2Module, DQMHistAnalysisKLMModule, DQMHistAnalysisMiraBelleModule, DQMHistAnalysisMonObjModule, DQMHistAnalysisOutputFileModule, DQMHistAnalysisOutputMonObjModule, DQMHistAnalysisOutputRelayMsgModule, DQMHistAnalysisPhysicsModule, DQMHistAnalysisPXDChargeModule, DQMHistAnalysisPXDFitsModule, DQMHistAnalysisPXDTrackChargeModule, DQMHistAnalysisRooFitExampleModule, DQMHistAnalysisSVDClustersOnTrackModule, DQMHistAnalysisSVDDoseModule, DQMHistAnalysisSVDEfficiencyModule, DQMHistAnalysisSVDGeneralModule, DQMHistAnalysisSVDOccupancyModule, DQMHistAnalysisSVDOnMiraBelleModule, DQMHistAnalysisSVDUnpackerModule, DQMHistAnalysisTOPModule, DQMHistAnalysisTRGECLModule, DQMHistAnalysisTRGEFFModule, DQMHistAnalysisTRGGDLModule, DQMHistAnalysisTRGModule, DQMHistComparitorModule, DQMHistDeltaHistoModule, DqmHistoManagerModule, DQMHistOutputToEPICSModule, DQMHistReferenceModule, DQMHistSnapshotsModule, Ds2RawFileModule, Ds2RawModule, Ds2RbufModule, Ds2SampleModule, ECLLOMModule, ECLBackgroundModule, ECLChargedPIDDataAnalysisModule, ECLChargedPIDDataAnalysisValidationModule, ECLChargedPIDModule, ECLClusterPSDModule, ECLCovarianceMatrixModule, ECLCRFinderModule, ECLDataAnalysisModule, ECLDigitCalibratorModule, ECLDigitizerModule, ECLDigitizerPureCsIModule, EclDisplayModule, ECLDQMEXTENDEDModule, ECLDQMModule, ECLFinalizerModule, ECLHitDebugModule, ECLLocalMaximumFinderModule, ECLLocalRunCalibratorModule, ECLPackerModule, ECLShowerCorrectorModule, ECLShowerShapeModule, ECLSplitterN1Module, ECLSplitterN2Module, ECLUnpackerModule, ECLWaveformFitModule, EffPlotsModule, EKLMDataCheckerModule, ElapsedTimeModule, EventInfoPrinterModule, EventT0ValidationModule, EvReductionModule, EvtGenDecayModule, ExtModule, FANGSDigitizerModule, FANGSModule, FANGSStudyModule, FastRbuf2DsModule, FullSimModule, TRGGDLUnpackerModule, GenfitVisModule, GenRawSendModule, GetEventFromSocketModule, He3DigitizerModule, He3tubeModule, He3tubeStudyModule, HistoManagerModule, HistoModule, HitXPModule, HLTDQM2ZMQModule, HLTDs2ZMQModule, KLMClusterEfficiencyModule, KLMClustersReconstructorModule, KLMDigitizerModule, KLMDQM2Module, KLMDQMModule, KLMMuonIDDNNExpertModule, KLMPackerModule, KLMReconstructorModule, KLMScintillatorSimulatorModule, KLMTrackingModule, KLMTriggerModule, KLMUnpackerModule, KlongValidationModule, LowEnergyPi0IdentificationExpertModule, LowEnergyPi0VetoExpertModule, MCMatcherTRGECLModule, MCTrackCandClassifierModule, MCV0MatcherModule, MicrotpcModule, MicrotpcStudyModule, TpcDigitizerModule, TPCStudyModule, MonitorDataModule, MuidModule, NoKickCutsEvalModule, NtuplePhase1_v6Module, OverrideGenerationFlagsModule, PartialSeqRootReaderModule, Ph1bpipeModule, Ph1sustrModule, PhysicsObjectsDQMModule, PhysicsObjectsMiraBelleBhabhaModule, PhysicsObjectsMiraBelleDst2Module, PhysicsObjectsMiraBelleDstModule, PhysicsObjectsMiraBelleHadronModule, PhysicsObjectsMiraBelleModule, PinDigitizerModule, PindiodeModule, PindiodeStudyModule, PlumeDigitizerModule, PlumeModule, PrintDataModule, PrintEventRateModule, PXDBackgroundModule, PXDClustersFromTracksModule, PXDPerformanceModule, PXDROIFinderModule, PyModule, QcsmonitorDigitizerModule, QcsmonitorModule, QcsmonitorStudyModule, RandomBarrierModule, Raw2DsModule, RawInputModule, Rbuf2DsModule, Rbuf2RbufModule, ReceiveEventModule, ReprocessorModule, Root2BinaryModule, Root2RawModule, RT2SPTCConverterModule, RxModule, RxSocketModule, SecMapTrainerBaseModule, SecMapTrainerVXDTFModule, SectorMapBootstrapModule, SeqRootInputModule, SeqRootMergerModule, SeqRootOutputModule, SerializerModule, SPTCmomentumSeedRetrieverModule, SPTCvirtualIPRemoverModule, SrsensorModule, StatisticsSummaryModule, StorageDeserializerModule, StorageRootOutputModule, StorageSerializerModule, SubEventModule, SVD3SamplesEmulatorModule, SVDBackgroundModule, SVDClusterizerModule, SVDPackerModule, SVDRecoDigitCreatorModule, SVDUnpackerModule, SVDB4CommissioningPlotsModule, SVDClusterCalibrationsMonitorModule, SVDClusterEvaluationModule, SVDClusterEvaluationTrueInfoModule, SVDClusterFilterModule, SVDCoGTimeEstimatorModule, SVDDataFormatCheckModule, svdDumpModule, SVDHotStripFinderModule, SVDLatencyCalibrationModule, SVDLocalCalibrationsMonitorModule, SVDOccupancyAnalysisModule, SVDPerformanceModule, SVDPositionErrorScaleFactorImporterModule, SVDROIDQMModule, SVDROIFinderAnalysisModule, SVDROIFinderModule, SVDShaperDigitsFromTracksModule, SVDTimeCalibrationsMonitorModule, SVDTriggerQualityGeneratorModule, SVDUnpackerDQMModule, SwitchDataStoreModule, TOPBackgroundModule, TOPChannelT0MCModule, TOPDoublePulseGeneratorModule, TOPGainEfficiencyCalculatorModule, TOPInterimFENtupleModule, TOPLaserCalibratorModule, TOPLaserHitSelectorModule, TOPMCTrackMakerModule, TOPNtupleModule, TOPPackerModule, TOPRawDigitConverterModule, TOPTBCComparatorModule, TOPTimeBaseCalibratorModule, TOPTriggerDigitizerModule, TOPUnpackerModule, TOPWaveformFeatureExtractorModule, TOPWaveformQualityPlotterModule, TOPXTalkChargeShareSetterModule, TrackAnaModule, TrackFinderMCTruthRecoTracksModule, TrackFinderVXDAnalizerModule, TrackingPerformanceEvaluationModule, FindletModule< AFindlet >, FindletModule< AsicBackgroundLibraryCreator >, FindletModule< AxialSegmentPairCreator >, FindletModule< AxialSegmentPairCreator >, FindletModule< AxialStraightTrackFinder >, FindletModule< AxialStraightTrackFinder >, FindletModule< AxialTrackCreatorMCTruth >, FindletModule< AxialTrackCreatorMCTruth >, FindletModule< AxialTrackCreatorSegmentHough >, FindletModule< AxialTrackCreatorSegmentHough >, FindletModule< AxialTrackFinderHough >, FindletModule< AxialTrackFinderHough >, FindletModule< AxialTrackFinderLegendre >, FindletModule< AxialTrackFinderLegendre >, FindletModule< CDCTrackingEventLevelMdstInfoFillerFromHitsFindlet >, FindletModule< CDCTrackingEventLevelMdstInfoFillerFromSegmentsFindlet >, FindletModule< CKFToCDCFindlet >, FindletModule< CKFToCDCFromEclFindlet >, FindletModule< CKFToPXDFindlet >, FindletModule< CKFToSVDFindlet >, FindletModule< CKFToSVDSeedFindlet >, FindletModule< ClusterBackgroundDetector >, FindletModule< ClusterBackgroundDetector >, FindletModule< ClusterPreparer >, FindletModule< ClusterPreparer >, FindletModule< ClusterRefiner< BridgingWireHitRelationFilter > >, FindletModule< ClusterRefiner< BridgingWireHitRelationFilter > >, FindletModule< CosmicsTrackMergerFindlet >, FindletModule< DATCONFPGAFindlet >, FindletModule< FacetCreator >, FindletModule< FacetCreator >, FindletModule< HitBasedT0Extractor >, FindletModule< HitBasedT0Extractor >, FindletModule< HitReclaimer >, FindletModule< HitReclaimer >, FindletModule< MCVXDCDCTrackMergerFindlet >, FindletModule< MonopoleAxialTrackFinderLegendre >, FindletModule< MonopoleAxialTrackFinderLegendre >, FindletModule< MonopoleStereoHitFinder >, FindletModule< MonopoleStereoHitFinder >, FindletModule< MonopoleStereoHitFinderQuadratic >, FindletModule< MonopoleStereoHitFinderQuadratic >, FindletModule< SegmentCreatorFacetAutomaton >, FindletModule< SegmentCreatorFacetAutomaton >, FindletModule< SegmentCreatorMCTruth >, FindletModule< SegmentCreatorMCTruth >, FindletModule< SegmentFinderFacetAutomaton >, FindletModule< SegmentFinderFacetAutomaton >, FindletModule< SegmentFitter >, FindletModule< SegmentFitter >, FindletModule< SegmentLinker >, FindletModule< SegmentLinker >, FindletModule< SegmentOrienter >, FindletModule< SegmentOrienter >, FindletModule< SegmentPairCreator >, FindletModule< SegmentPairCreator >, FindletModule< SegmentRejecter >, FindletModule< SegmentRejecter >, FindletModule< SegmentTrackCombiner >, FindletModule< SegmentTrackCombiner >, FindletModule< SegmentTripleCreator >, FindletModule< SegmentTripleCreator >, FindletModule< StereoHitFinder >, FindletModule< StereoHitFinder >, FindletModule< SuperClusterCreator >, FindletModule< SuperClusterCreator >, FindletModule< TrackCombiner >, FindletModule< TrackCombiner >, FindletModule< TrackCreatorSegmentPairAutomaton >, FindletModule< TrackCreatorSegmentPairAutomaton >, FindletModule< TrackCreatorSegmentTripleAutomaton >, FindletModule< TrackCreatorSegmentTripleAutomaton >, FindletModule< TrackCreatorSingleSegments >, FindletModule< TrackCreatorSingleSegments >, FindletModule< TrackExporter >, FindletModule< TrackExporter >, FindletModule< TrackFinder >, FindletModule< TrackFinderAutomaton >, FindletModule< TrackFinderCosmics >, FindletModule< TrackFinderSegmentPairAutomaton >, FindletModule< TrackFinderSegmentPairAutomaton >, FindletModule< TrackFinderSegmentTripleAutomaton >, FindletModule< TrackFinderSegmentTripleAutomaton >, FindletModule< TrackFlightTimeAdjuster >, FindletModule< TrackFlightTimeAdjuster >, FindletModule< TrackingUtilities::FindletStoreArrayInput< BaseEventTimeExtractorModuleFindlet< AFindlet > > >, FindletModule< TrackingUtilities::FindletStoreArrayInput< BaseEventTimeExtractorModuleFindlet< AFindlet > > >, FindletModule< TrackLinker >, FindletModule< TrackLinker >, FindletModule< TrackOrienter >, FindletModule< TrackOrienter >, FindletModule< TrackQualityAsserter >, FindletModule< TrackQualityAsserter >, FindletModule< TrackQualityEstimator >, FindletModule< TrackQualityEstimator >, FindletModule< TrackRejecter >, FindletModule< TrackRejecter >, FindletModule< vxdHoughTracking::SVDHoughTracking >, FindletModule< WireHitBackgroundDetector >, FindletModule< WireHitBackgroundDetector >, FindletModule< WireHitCreator >, FindletModule< WireHitCreator >, FindletModule< WireHitPreparer >, FindletModule< WireHitPreparer >, TrackSetEvaluatorHopfieldNNDEVModule, TRGCDCETFUnpackerModule, TRGCDCModule, TRGCDCT2DDQMModule, TRGCDCT3DConverterModule, TRGCDCT3DDQMModule, TRGCDCT3DUnpackerModule, TRGCDCTSFUnpackerModule, TRGCDCTSFDQMModule, TRGCDCTSStreamModule, TRGECLBGTCHitModule, TRGECLDQMModule, TRGECLFAMModule, TRGECLModule, TRGECLQAMModule, TRGECLRawdataAnalysisModule, TRGECLTimingCalModule, TRGECLUnpackerModule, TRGEFFDQMModule, TRGGDLDQMModule, TRGGDLDSTModule, TRGGDLModule, TRGGDLSummaryModule, TRGGRLDQMModule, TRGGRLMatchModule, TRGGRLModule, TRGGRLProjectsModule, TRGGRLUnpackerModule, TRGRAWDATAModule, TRGTOPDQMModule, TRGTOPTRD2TTSConverterModule, TRGTOPUnpackerModule, TRGTOPUnpackerWaveformModule, TRGTOPWaveformPlotterModule, TxModule, TxSocketModule, V0findingPerformanceEvaluationModule, vxdDigitMaskingModule, VXDSimpleClusterizerModule, VXDTFTrainingDataCollectorModule, ZMQTxInputModule, and ZMQTxWorkerModule.

Definition at line 165 of file Module.h.

165{};

◆ evalCondition()

bool evalCondition ( ) const
inherited

If at least one condition was set, it is evaluated and true returned if at least one condition returns true.

If no condition or result value was defined, the method returns false. Otherwise, the condition is evaluated and true returned, if at least one condition returns true. To speed up the evaluation, the condition strings were already parsed in the method if_value().

Returns
True if at least one condition and return value exists and at least one condition expression was evaluated to true.

Definition at line 96 of file Module.cc.

97{
98 if (m_conditions.empty()) return false;
99
100 //okay, a condition was set for this Module...
101 if (!m_hasReturnValue) {
102 B2FATAL("A condition was set for '" << getName() << "', but the module did not set a return value!");
103 }
104
105 for (const auto& condition : m_conditions) {
106 if (condition.evaluate(m_returnValue)) {
107 return true;
108 }
109 }
110 return false;
111}
int m_returnValue
The return value.
Definition Module.h:518
bool m_hasReturnValue
True, if the return value is set.
Definition Module.h:517

◆ event()

void event ( void )
overridevirtual

This method is called for each event.

All processing of the event takes place in this method.

Reimplemented from Module.

Definition at line 167 of file CDCDedxPIDModule.cc.

168{
169 // go through Tracks
170 // get fitresult and RecoTrack and do extrapolations, save corresponding dE/dx and likelihood values
171 // get hit indices through RecoTrack::getHitPointsWithMeasurement(...)
172 // create one CDCDedxTrack per fitresult/recoTrack
173 // create one DedkLikelihood per Track (plus rel)
174
175 // inputs
176 const int numMCParticles = m_mcparticles.getEntries();
177
178 // get the geometry of the cdc
179 static CDCGeometryPar& cdcgeo = CDCGeometryPar::Instance();
180
181 // **************************************************
182 //
183 // LOOP OVER TRACKS
184 //
185 // **************************************************
186
187 m_dedxTracks.clear();
188 m_dedxLikelihoods.clear();
189
190 int mtrack = 0;
191 for (const auto& track : m_tracks) {
192 std::shared_ptr<CDCDedxTrack> dedxTrack = std::make_shared<CDCDedxTrack>();
193 dedxTrack->m_track = mtrack++;
194
195 // load the pion fit hypothesis or the hypothesis which is the closest in mass to a pion
196 // the tracking will not always successfully fit with a pion hypothesis
197 const TrackFitResult* fitResult = track.getTrackFitResultWithClosestMass(Const::pion);
198 if (!fitResult) {
199 B2WARNING("No related fit for track ...");
200 continue;
201 }
202
203 if (m_onlyPrimaryParticles and numMCParticles != 0) {
204 // find MCParticle corresponding to this track
205 const MCParticle* mcpart = track.getRelatedTo<MCParticle>();
206
207 if (mcpart) {
209 continue; //not a primary particle, ignore
210 }
211
212 //add some MC truths to CDCDedxTrack object
213 dedxTrack->m_pdg = mcpart->getPDG();
214 dedxTrack->m_mcmass = mcpart->getMass();
215 const MCParticle* mother = mcpart->getMother();
216 dedxTrack->m_motherPDG = mother ? mother->getPDG() : 0;
217
218 const ROOT::Math::XYZVector trueMomentum = mcpart->getMomentum();
219 dedxTrack->m_pTrue = trueMomentum.R();
220 dedxTrack->m_cosThetaTrue = cos(trueMomentum.Theta());
221 }
222 } else {
223 dedxTrack->m_pdg = -999;
224 }
225
226 // get momentum (at origin) from fit result
227 const ROOT::Math::XYZVector& trackMom = fitResult->getMomentum();
228 dedxTrack->m_p = trackMom.R();
229 bool nomom = (dedxTrack->m_p != dedxTrack->m_p);
230 double costh = std::cos(std::atan(1 / fitResult->getCotTheta()));
231 int charge = 1;
232 if (!nomom) {
233 costh = cos(trackMom.Theta());
234 charge = fitResult->getChargeSign();
235 }
236 dedxTrack->m_cosTheta = costh;
237 dedxTrack->m_charge = charge;
238
239 double injring = -1.0, injtime = -1.0;
240 StoreObjPtr<EventLevelTriggerTimeInfo> m_TTDInfo;
241 if (m_TTDInfo.isValid() && m_TTDInfo->hasInjection()) {
242 injring = m_TTDInfo->isHER();
243 injtime = m_TTDInfo->getTimeSinceLastInjectionInMicroSeconds();
244 }
245 dedxTrack->m_injring = injring;
246 dedxTrack->m_injtime = injtime;
247
248 // dE/dx values will be calculated using associated RecoTrack
249 const RecoTrack* recoTrack = track.getRelatedTo<RecoTrack>();
250 if (!recoTrack) {
251 B2WARNING("No related track for this fit...");
252 continue;
253 }
254
255 // Check to see if the track is pruned
256 if (recoTrack->getTrackFitStatus()->isTrackPruned()) {
257 B2ERROR("GFTrack is pruned, please run CDCDedxPID only on unpruned tracks! Skipping this track.");
258 continue;
259 }
260
261 // scale factor to make electron dE/dx ~ 1
262 dedxTrack->m_scale = (m_DBScaleFactor) ? m_DBScaleFactor->getScaleFactor() : 1.0;
263
264 // store run gains only for data!
265 bool isData = false;
266 if (m_usePrediction && numMCParticles == 0)isData = true;
267 dedxTrack->m_runGain = (m_DBRunGain && isData) ? m_DBRunGain->getRunGain() : 1.0;
268
269 // get the cosine correction only for data!
270 dedxTrack->m_cosCor = (m_DBCosineCor && isData) ? m_DBCosineCor->getMean(costh) : 1.0;
271
272 // get the cosine edge correction only for data!
273 bool isEdge = false;
274 if ((abs(costh + 0.860) < 0.010) || (abs(costh - 0.955) <= 0.005))isEdge = true;
275 dedxTrack->m_cosEdgeCor = (m_DBCosEdgeCor && isData && isEdge) ? m_DBCosEdgeCor->getMean(costh) : 1.0;
276
277 bool isvalidTime = true;
278 if (injtime < 0 || injring < 0)isvalidTime = false;
279 dedxTrack->m_timeGain = (m_DBInjectTime && isData && isvalidTime) ? m_DBInjectTime->getCorrection("mean", injring, injtime) : 1.0;
280 dedxTrack->m_timeReso = (m_DBInjectTime && isData && isvalidTime) ? m_DBInjectTime->getCorrection("reso", injring, injtime) : 1.0;
281
282 // initialize a few variables to be used in the loop over track points
283 double layerdE = 0.0; // total charge in current layer
284 double layerdx = 0.0; // total path length in current layer
285 double cdcMom = 0.0; // momentum valid in the CDC
286 int nhitscombined = 0; // number of hits combined per layer
287 int wirelongesthit = 0; // wire number of longest hit
288 double longesthit = 0; // path length of longest hit
289
290 // loop over all CDC hits from this track
291 // Get the TrackPoints, which contain the hit information we need.
292 // Then iterate over each point.
293 const std::vector< genfit::AbsTrackRep* >& gftrackRepresentations = recoTrack->getRepresentations();
294 const std::vector< genfit::TrackPoint* >& gftrackPoints = recoTrack->getHitPointsWithMeasurement();
295 for (std::vector< genfit::TrackPoint* >::const_iterator tp = gftrackPoints.begin();
296 tp != gftrackPoints.end(); ++tp) {
297
298 // should also be possible to use this for svd and pxd hits...
299 genfit::AbsMeasurement* aAbsMeasurementPtr = (*tp)->getRawMeasurement(0);
300 const CDCRecoHit* cdcRecoHit = dynamic_cast<const CDCRecoHit* >(aAbsMeasurementPtr);
301 if (!cdcRecoHit) continue;
302 const CDCHit* cdcHit = cdcRecoHit->getCDCHit();
303 if (!cdcHit) continue;
304
305 // get the poca on the wire and track momentum for this hit
306 // make sure the fitter info exists
307 const genfit::AbsFitterInfo* fi = (*tp)->getFitterInfo();
308 if (!fi) {
309 B2DEBUG(29, "No fitter info, skipping...");
310 continue;
311 }
312
313 // get the wire ID (not between 0 and 14336) and the layer info
314 WireID wireID = cdcRecoHit->getWireID();
315 const int wire = wireID.getIWire(); // use getEWire() for encoded wire number
316 int layer = cdcHit->getILayer(); // layer within superlayer
317 int superlayer = cdcHit->getISuperLayer();
318
319 // check which algorithm found this hit
320 int foundByTrackFinder = 0;
321 const RecoHitInformation* hitInfo = recoTrack->getRecoHitInformation(cdcHit);
322 foundByTrackFinder = hitInfo->getFoundByTrackFinder();
323
324 // add weights for hypotheses
325 double weightPionHypo = 0;
326 double weightProtHypo = 0;
327 double weightKaonHypo = 0;
328 // loop over all the present hypotheses
329 for (std::vector<genfit::AbsTrackRep* >::const_iterator trep = gftrackRepresentations.begin();
330 trep != gftrackRepresentations.end(); ++trep) {
331 const int pdgCode = TMath::Abs((*trep)->getPDG());
332 // configured to only save weights for one of these 3
333 if (!(pdgCode == Const::pion.getPDGCode() ||
334 pdgCode == Const::kaon.getPDGCode() ||
335 pdgCode == Const::proton.getPDGCode())) continue;
336 const genfit::KalmanFitterInfo* kalmanFitterInfo = (*tp)->getKalmanFitterInfo(*trep);
337 if (kalmanFitterInfo == NULL) {
338 //B2WARNING("No KalmanFitterInfo for hit in "<<pdgCode<<" track representationt. Skipping.");
339 continue;
340 }
341
342 // there are always 2 hits, one of which is ~1, the other ~0; or both ~0. Store only the largest.
343 std::vector<double> weights = kalmanFitterInfo->getWeights();
344 const double maxWeight = weights[0] > weights[1] ? weights[0] : weights[1];
345 if (pdgCode == Const::pion.getPDGCode()) weightPionHypo = maxWeight;
346 else if (pdgCode == Const::kaon.getPDGCode()) weightKaonHypo = maxWeight;
347 else if (pdgCode == Const::proton.getPDGCode()) weightProtHypo = maxWeight;
348
349 }
350
351 // continuous layer number
352 int currentLayer = (superlayer == 0) ? layer : (8 + (superlayer - 1) * 6 + layer);
353 int nextLayer = currentLayer;
354
355 // dense packed wire number (between 0 and 14336)
356 const int iwire = (superlayer == 0) ? 160 * layer + wire : m_nLayerWires[superlayer - 1] + (160 + 32 *
357 (superlayer - 1)) * layer + wire;
358
359 // if multiple hits in a layer, we may combine the hits
360 const bool lastHit = (tp + 1 == gftrackPoints.end());
361 bool lastHitInCurrentLayer = lastHit;
362 if (!lastHit) {
363 // peek at next hit
364 genfit::AbsMeasurement* aAbsMeasurementPtrNext = (*(tp + 1))->getRawMeasurement(0);
365 const CDCRecoHit* nextcdcRecoHit = dynamic_cast<const CDCRecoHit* >(aAbsMeasurementPtrNext);
366 // if next hit fails, assume this is the last hit in the layer
367 if (!nextcdcRecoHit || !(cdcRecoHit->getCDCHit()) || !((*(tp + 1))->getFitterInfo())) {
368 break;
369 }
370 const CDCHit* nextcdcHit = nextcdcRecoHit->getCDCHit();
371 const int nextILayer = nextcdcHit->getILayer();
372 const int nextSuperlayer = nextcdcHit->getISuperLayer();
373 nextLayer = (nextSuperlayer == 0) ? nextILayer : (8 + (nextSuperlayer - 1) * 6 + nextILayer);
374 lastHitInCurrentLayer = (nextLayer != currentLayer);
375 }
376
377 // find the position of the endpoints of the sense wire
378 const ROOT::Math::XYZVector& wirePosF = cdcgeo.wireForwardPosition(wireID, CDCGeometryPar::c_Aligned);
379
380 int nWires = cdcgeo.nWiresInLayer(currentLayer);
381
382 // radii of field wires for this layer
383 double inner = cdcgeo.innerRadiusWireLayer()[currentLayer];
384 double outer = cdcgeo.outerRadiusWireLayer()[currentLayer];
385
386 double topHeight = outer - wirePosF.Rho();
387 double bottomHeight = wirePosF.Rho() - inner;
388 double cellHeight = topHeight + bottomHeight;
389 double topHalfWidth = M_PI * outer / nWires;
390 double bottomHalfWidth = M_PI * inner / nWires;
391 double cellHalfWidth = M_PI * wirePosF.Rho() / nWires;
392
393 // first construct the boundary lines, then create the cell
394 const DedxPoint tl = DedxPoint(-topHalfWidth, topHeight);
395 const DedxPoint tr = DedxPoint(topHalfWidth, topHeight);
396 const DedxPoint br = DedxPoint(bottomHalfWidth, -bottomHeight);
397 const DedxPoint bl = DedxPoint(-bottomHalfWidth, -bottomHeight);
398 DedxDriftCell c = DedxDriftCell(tl, tr, br, bl);
399
400 // make sure the MOP is reasonable (an exception is thrown for bad numerics)
401 try {
402 const genfit::MeasuredStateOnPlane& mop = fi->getFittedState();
403
404 // use the MOP to determine the DOCA and entrance angle
405 ROOT::Math::XYZVector fittedPoca = ROOT::Math::XYZVector(mop.getPos());
406 const ROOT::Math::XYZVector& pocaMom = ROOT::Math::XYZVector(mop.getMom());
407 if (tp == gftrackPoints.begin() || cdcMom == 0) {
408 cdcMom = pocaMom.R();
409 dedxTrack->m_pCDC = cdcMom;
410 }
411 if (nomom)
412 dedxTrack->m_p = cdcMom;
413
414 // get the doca and entrance angle information.
415 // constructPlane places the coordinate center in the POCA to the
416 // wire. Using this is the default behavior. If this should be too
417 // slow, as it has to re-evaluate the POCA
418 // B2Vector3D pocaOnWire = cdcRecoHit->constructPlane(mop)->getO();
419
420 // uses the plane determined by the track fit.
421 ROOT::Math::XYZVector pocaOnWire = ROOT::Math::XYZVector(mop.getPlane()->getO()); // DOUBLE CHECK THIS --\/
422
423 // The vector from the wire to the track.
424 ROOT::Math::XYZVector B2WireDoca = fittedPoca - pocaOnWire;
425
426 // the sign of the doca is defined here to be positive in the +x dir in the cell
427 double doca = B2WireDoca.Rho();
428 double phidiff = fittedPoca.Phi() - pocaOnWire.Phi();
429 // be careful about "wrap around" cases when the poca and wire are close, but
430 // the difference in phi is largy
431 if (phidiff > -3.1416 && (phidiff < 0 || phidiff > 3.1416)) doca *= -1;
432
433 // The opening angle of the track momentum direction
434 const double px = pocaMom.X();
435 const double py = pocaMom.Y();
436 const double wx = pocaOnWire.X();
437 const double wy = pocaOnWire.Y();
438 const double cross = wx * py - wy * px;
439 const double dot = wx * px + wy * py;
440 double entAng = atan2(cross, dot);
441
442 // re-scaled (RS) doca and entAng variable: map to square cell
443 double cellR = 2 * cellHalfWidth / cellHeight;
444 double tana = 100.0;
445 if (std::abs(2 * atan(1) - std::abs(entAng)) < 0.01)tana = 100 * (entAng / std::abs(entAng)); //avoid infinity at pi/2
446 else tana = std::tan(entAng);
447 double docaRS = doca * std::sqrt((1 + cellR * cellR * tana * tana) / (1 + tana * tana));
448 double entAngRS = std::atan(tana / cellR);
449
450 LinearGlobalADCCountTranslator translator;
451 int adcbaseCount = cdcHit->getADCCount(); // pedestal subtracted?
452 int adcCount = (m_DBNonlADC && m_usePrediction
453 && numMCParticles == 0) ? m_DBNonlADC->getCorrectedADC(adcbaseCount, currentLayer) : adcbaseCount;
454
455 double hitCharge = translator.getCharge(adcCount, wireID, false, pocaOnWire.Z(), pocaMom.Phi());
456 int driftT = cdcHit->getTDCCount();
457
458 // we want electrons to be one, so artificially scale the adcCount
459 double dadcCount = 1.0 * adcCount;
460 if (dedxTrack->m_scale != 0) dadcCount /= dedxTrack->m_scale;
461
462 RealisticTDCCountTranslator realistictdc;
463 double driftDRealistic = realistictdc.getDriftLength(driftT, wireID, 0, true, pocaOnWire.Z(), pocaMom.Phi(), pocaMom.Theta());
464 double driftDRealisticRes = realistictdc.getDriftLengthResolution(driftDRealistic, wireID, true, pocaOnWire.Z(), pocaMom.Phi(),
465 pocaMom.Theta());
466
467 // now calculate the path length for this hit
468 double celldx = c.dx(doca, entAng);
469 if (c.isValid()) {
470 // get the wire gain constant
471 double wiregain = (m_DBWireGains && m_usePrediction && numMCParticles == 0) ? m_DBWireGains->getWireGain(iwire) : 1.0;
472
473 //normalization of rescaled doca wrt cell size for layer dependent 2D corrections
474 double normDocaRS = docaRS / cellHalfWidth;
475 double twodcor = (m_DB2DCell && m_usePrediction
476 && numMCParticles == 0) ? m_DB2DCell->getMean(currentLayer, normDocaRS, entAngRS) : 1.0;
477
478 // get the 1D cleanup correction
479 double onedcor = (m_DB1DCell && m_usePrediction && numMCParticles == 0) ? m_DB1DCell->getMean(currentLayer, entAngRS) : 1.0;
480
481 // apply the calibration to dE to propagate to both hit and layer measurements
482 // Note: could move the sin(theta) here since it is common across the track
483 // It is applied in two places below (hit level and layer level)
484 double correction = dedxTrack->m_runGain * dedxTrack->m_cosCor * dedxTrack->m_cosEdgeCor * dedxTrack->m_timeGain * wiregain *
485 twodcor * onedcor;
486
487 // --------------------
488 // save individual hits (even for dead wires)
489 // --------------------
490 if (correction != 0) dadcCount = dadcCount / correction;
491 else dadcCount = 0;
492
493 double cellDedx = (dadcCount / celldx);
494
495 // correct for path length through the cell
496 if (nomom) cellDedx *= std::sin(std::atan(1 / fitResult->getCotTheta()));
497 else cellDedx *= std::sin(trackMom.Theta());
498
499 dedxTrack->addHit(wire, iwire, currentLayer, doca, docaRS, entAng, entAngRS,
500 adcCount, adcbaseCount, hitCharge, celldx, cellDedx, cellHeight, cellHalfWidth, driftT,
501 driftDRealistic, driftDRealisticRes, wiregain, twodcor, onedcor,
502 foundByTrackFinder, weightPionHypo, weightKaonHypo, weightProtHypo);
503
504 // --------------------
505 // save layer hits only with active wires
506 // --------------------
507 if (correction != 0) {
508
509 layerdE += dadcCount;
510 layerdx += celldx;
511
512 if (celldx > longesthit) {
513 longesthit = celldx;
514 wirelongesthit = iwire;
515 }
516 nhitscombined++;
517 }
518 }
519 } catch (genfit::Exception&) {
520 B2WARNING("Track: " << mtrack << ": genfit::MeasuredStateOnPlane exception...");
521 continue;
522 }
523
524 // check if there are any more hits in this layer
525 if (lastHitInCurrentLayer) {
526 if (layerdx > 0) {
527 double totalDistance;
528 if (nomom) totalDistance = layerdx / std::sin(std::atan(1 / fitResult->getCotTheta()));
529 else totalDistance = layerdx / std::sin(trackMom.Theta());
530 double layerDedx = layerdE / totalDistance;
531
532 // save the information for this layer
533 if (layerDedx > 0) {
534 dedxTrack->addDedx(nhitscombined, wirelongesthit, currentLayer, totalDistance, layerDedx);
535 // save the PID information if using individual hits
537 // use the momentum valid in the cdc
538 saveLookupLogl(dedxTrack->m_cdcLogl, dedxTrack->m_pCDC, layerDedx);
539 }
540 }
541 }
542 // stop when the track starts to curl
543 if (!m_backHalfCurlers && nextLayer < currentLayer) break;
544
545 layerdE = 0;
546 layerdx = 0;
547 nhitscombined = 0;
548 wirelongesthit = 0;
549 longesthit = 0;
550 }
551 } // end of loop over CDC hits for this track
552
553 // Determine the number of hits to be used
554 //m_lDedx is a ector for layerDedx and created w/ ->adddedx method above
555 if (dedxTrack->m_lDedx.empty()) {
556 B2DEBUG(29, "Found track with no hits, ignoring.");
557 continue;
558 } else {
559 // determine the number of hits for this track (used below)
560 const int numDedx = dedxTrack->m_lDedx.size();
561 // add a factor of 0.51 here to make sure we are rounding appropriately...
562 const int lowEdgeTrunc = int(numDedx * m_removeLowest + 0.51);
563 const int highEdgeTrunc = int(numDedx * (1 - m_removeHighest) + 0.51);
564 dedxTrack->m_lNHitsUsed = highEdgeTrunc - lowEdgeTrunc;
565 }
566
567 // Get the truncated mean
568 //
569 // If using track-level MC, get the predicted mean and resolution and throw a random
570 // number to get the simulated dE/dx truncated mean. Otherwise, calculate the truncated
571 // mean from the simulated hits (hit-level MC).
572 if (!m_useIndividualHits) {
573 calculateMeans(&(dedxTrack->m_dedxAvg),
574 &(dedxTrack->m_dedxAvgTruncatedNoSat),
575 &(dedxTrack->m_dedxAvgTruncatedErr),
576 dedxTrack->m_lDedx);
577
578 // apply the "hadron correction" only to data
579 if (numMCParticles == 0)
580 dedxTrack->m_dedxAvgTruncated = D2I(costh, I2D(costh, 1.00) / 1.00 * dedxTrack->m_dedxAvgTruncatedNoSat);
581 else dedxTrack->m_dedxAvgTruncated = dedxTrack->m_dedxAvgTruncatedNoSat;
582 }
583
584 // If this is a MC track, get the track-level dE/dx
585 if (numMCParticles != 0 && dedxTrack->m_mcmass > 0 && dedxTrack->m_pTrue != 0) {
586 // determine the predicted mean and resolution
587 double mean = getMean(dedxTrack->m_pCDC / dedxTrack->m_mcmass);
588 double sigma = getSigma(mean, dedxTrack->m_lNHitsUsed,
589 dedxTrack->m_cosTheta, dedxTrack->m_timeReso);
590 dedxTrack->m_simDedx = gRandom->Gaus(mean, sigma);
591 while (dedxTrack->m_simDedx < 0)
592 dedxTrack->m_simDedx = gRandom->Gaus(mean, sigma);
593 if (m_trackLevel)
594 dedxTrack->m_dedxAvgTruncated = dedxTrack->m_simDedx;
595 }
596
597 // save the PID information for both lookup tables and parameterized means and resolutions
598 saveChiValue(dedxTrack->m_cdcChi, dedxTrack->m_predmean, dedxTrack->m_predres, dedxTrack->m_pCDC, dedxTrack->m_dedxAvgTruncated,
599 dedxTrack->m_cosTheta, dedxTrack->m_lNHitsUsed, dedxTrack->m_timeReso);
601 saveLookupLogl(dedxTrack->m_cdcLogl, dedxTrack->m_pCDC, dedxTrack->m_dedxAvgTruncated);
602
603 // save CDCDedxLikelihood
604 // use parameterized method if called or if pdf file for lookup tables are empty
605 double pidvalues[Const::ChargedStable::c_SetSize];
606 Const::ParticleSet set = Const::chargedStableSet;
607 if (m_usePrediction) {
608 for (const Const::ChargedStable pdgIter : set) {
609 pidvalues[pdgIter.getIndex()] = -0.5 * dedxTrack->m_cdcChi[pdgIter.getIndex()] * dedxTrack->m_cdcChi[pdgIter.getIndex()];
610 }
611 } else {
612 for (const Const::ChargedStable pdgIter : set) {
613 pidvalues[pdgIter.getIndex()] = dedxTrack->m_cdcLogl[pdgIter.getIndex()];
614 }
615 }
616
617 CDCDedxLikelihood* likelihoodObj = m_dedxLikelihoods.appendNew(pidvalues);
618 track.addRelationTo(likelihoodObj);
619
620 // book the information for this track
621 CDCDedxTrack* newCDCDedxTrack = m_dedxTracks.appendNew(*dedxTrack);
622 track.addRelationTo(newCDCDedxTrack);
623
624 } // end of loop over tracks
625}
double I2D(double cosTheta, double I) const
hadron saturation parameterization part 1
double D2I(double cosTheta, double D) const
hadron saturation parameterization part 2
double getMean(double bg) const
calculate the predicted mean using the parameterized resolution
DBObjPtr< CDCDedxRunGain > m_DBRunGain
Run gain DB object.
StoreArray< CDCDedxLikelihood > m_dedxLikelihoods
Output array of CDCDedxLikelihoods.
DBObjPtr< CDCDedxCosineEdge > m_DBCosEdgeCor
non-linearly ACD correction DB object
StoreArray< MCParticle > m_mcparticles
Optional array of input MCParticles.
void saveLookupLogl(double(&logl)[Const::ChargedStable::c_SetSize], double p, double dedx)
for all particles, save log-likelihood values into 'logl'.
DBObjPtr< CDCDedxADCNonLinearity > m_DBNonlADC
non-linearly ACD correction DB object
DBObjPtr< CDCDedx1DCell > m_DB1DCell
1D correction DB object
void saveChiValue(double(&chi)[Const::ChargedStable::c_SetSize], double(&predmean)[Const::ChargedStable::c_SetSize], double(&predres)[Const::ChargedStable::c_SetSize], double p, double dedx, double cos, int nhit, double timereso) const
for all particles, save chi values into 'chi'.
void calculateMeans(double *mean, double *truncatedMean, double *truncatedMeanErr, const std::vector< double > &dedx) const
Save arithmetic and truncated mean for the 'dedx' values.
DBObjPtr< CDCDedx2DCell > m_DB2DCell
2D correction DB object
double getSigma(double dedx, double nhit, double cos, double timereso) const
calculate the predicted resolution using the parameterized resolution
DBObjPtr< CDCDedxCosineCor > m_DBCosineCor
Electron saturation correction DB object.
StoreArray< Track > m_tracks
Required array of input Tracks.
int m_nLayerWires[9]
number of wires per layer: needed for wire gain calibration
DBObjPtr< CDCDedxWireGain > m_DBWireGains
Wire gain DB object.
StoreArray< CDCDedxTrack > m_dedxTracks
Output array of CDCDedxTracks.
DBObjPtr< CDCDedxInjectionTime > m_DBInjectTime
time gain/reso DB object
DBObjPtr< CDCDedxScaleFactor > m_DBScaleFactor
Scale factor to make electrons ~1.
short getTDCCount() const
Getter for TDC count.
Definition CDCHit.h:219
unsigned short getADCCount() const
Getter for integrated charge.
Definition CDCHit.h:230
unsigned short getISuperLayer() const
Getter for iSuperLayer.
Definition CDCHit.h:184
unsigned short getILayer() const
Getter for iLayer.
Definition CDCHit.h:172
WireID getWireID() const
Getter for WireID object.
Definition CDCRecoHit.h:49
const CDCHit * getCDCHit() const
get the pointer to the CDCHit object that was used to create this CDCRecoHit object.
Definition CDCRecoHit.h:112
const B2Vector3D wireForwardPosition(uint layerId, int cellId, EWirePosition set=c_Base) const
Returns the forward position of the input sense wire.
unsigned nWiresInLayer(int layerId) const
Returns wire numbers in a layer.
const double * innerRadiusWireLayer() const
Returns an array of inner radius of wire layers.
static CDCGeometryPar & Instance(const CDCGeometry *=nullptr)
Static method to get a reference to the CDCGeometryPar instance.
const double * outerRadiusWireLayer() const
Returns an array of outer radius of wire layers.
float getCharge(unsigned short adcCount, const WireID &, bool, float, float)
just multiply with the conversion factor and return.
double getDriftLength(unsigned short tdcCount, const WireID &wireID=WireID(), double timeOfFlightEstimator=0, bool leftRight=false, double z=0, double alpha=0, double theta=static_cast< double >(TMath::Pi()/2.), unsigned short adcCount=0) override
Get Drift length.
double getDriftLengthResolution(double driftLength, const WireID &wireID=WireID(), bool leftRight=false, double z=0, double alpha=0, double=static_cast< double >(TMath::Pi()/2.)) override
Get position resolution^2 corresponding to the drift length from getDriftLength of this class.
static const unsigned int c_SetSize
Number of elements (for use in array bounds etc.)
Definition Const.h:615
static const ChargedStable pion
charged pion particle
Definition Const.h:661
static const ChargedStable proton
proton particle
Definition Const.h:663
static const ChargedStable kaon
charged kaon particle
Definition Const.h:662
@ c_PrimaryParticle
bit 0: Particle is primary particle.
Definition MCParticle.h:47
float getMass() const
Return the particle mass in GeV.
Definition MCParticle.h:124
bool hasStatus(unsigned short int bitmask) const
Return if specific status bit is set.
Definition MCParticle.h:118
int getPDG() const
Return PDG code of particle.
Definition MCParticle.h:101
ROOT::Math::XYZVector getMomentum() const
Return momentum.
Definition MCParticle.h:187
OriginTrackFinder getFoundByTrackFinder() const
Get which track finder has found the track.
const std::vector< genfit::AbsTrackRep * > & getRepresentations() const
Return a list of track representations. You are not allowed to modify or delete them!
Definition RecoTrack.h:638
RecoHitInformation * getRecoHitInformation(HitType *hit) const
Return the reco hit information for a generic hit from the storeArray.
Definition RecoTrack.h:312
const genfit::FitStatus * getTrackFitStatus(const genfit::AbsTrackRep *representation=nullptr) const
Return the track fit status for the given representation or for the cardinal one. You are not allowed...
Definition RecoTrack.h:621
const std::vector< genfit::TrackPoint * > & getHitPointsWithMeasurement() const
Return a list of measurements and track points, which can be used e.g. to extrapolate....
Definition RecoTrack.h:708
bool isValid() const
Check whether the object was created.
short getChargeSign() const
Return track charge (1 or -1).
double getCotTheta() const
Getter for tanLambda with CDF naming convention.
ROOT::Math::XYZVector getMomentum() const
Getter for vector of momentum at closest approach of track in r/phi projection.
unsigned short getIWire() const
Getter for wire within the layer.
Definition WireID.h:145
double atan(double a)
atan for double
Definition beamHelpers.h:34
T dot(GeneralVector< T > a, GeneralVector< T > b)
dot product of two general vectors
MCParticle * getMother() const
Returns a pointer to the mother particle.
Definition MCParticle.h:590

◆ exposePythonAPI()

void exposePythonAPI ( )
staticinherited

Exposes methods of the Module class to Python.

Definition at line 325 of file Module.cc.

326{
327 // to avoid confusion between std::arg and boost::python::arg we want a shorthand namespace as well
328 namespace bp = boost::python;
329
330 docstring_options options(true, true, false); //userdef, py sigs, c++ sigs
331
332 void (Module::*setReturnValueInt)(int) = &Module::setReturnValue;
333
334 enum_<Module::EAfterConditionPath>("AfterConditionPath",
335 R"(Determines execution behaviour after a conditional path has been executed:
336
337.. attribute:: END
338
339 End processing of this path after the conditional path. (this is the default for if_value() etc.)
340
341.. attribute:: CONTINUE
342
343 After the conditional path, resume execution after this module.)")
344 .value("END", Module::EAfterConditionPath::c_End)
345 .value("CONTINUE", Module::EAfterConditionPath::c_Continue)
346 ;
347
348 /* Do not change the names of >, <, ... we use them to serialize conditional paths */
349 enum_<Belle2::ModuleCondition::EConditionOperators>("ConditionOperator")
356 ;
357
358 enum_<Module::EModulePropFlags>("ModulePropFlags",
359 R"(Flags to indicate certain low-level features of modules, see :func:`Module.set_property_flags()`, :func:`Module.has_properties()`. Most useful flags are:
360
361.. attribute:: PARALLELPROCESSINGCERTIFIED
362
363 This module can be run in parallel processing mode safely (All I/O must be done through the data store, in particular, the module must not write any files.)
364
365.. attribute:: HISTOGRAMMANAGER
366
367 This module is used to manage histograms accumulated by other modules
368
369.. attribute:: TERMINATEINALLPROCESSES
370
371 When using parallel processing, call this module's terminate() function in all processes. This will also ensure that there is exactly one process (single-core if no parallel modules found) or at least one input, one main and one output process.
372)")
373 .value("INPUT", Module::EModulePropFlags::c_Input)
374 .value("OUTPUT", Module::EModulePropFlags::c_Output)
375 .value("PARALLELPROCESSINGCERTIFIED", Module::EModulePropFlags::c_ParallelProcessingCertified)
376 .value("HISTOGRAMMANAGER", Module::EModulePropFlags::c_HistogramManager)
377 .value("INTERNALSERIALIZER", Module::EModulePropFlags::c_InternalSerializer)
378 .value("TERMINATEINALLPROCESSES", Module::EModulePropFlags::c_TerminateInAllProcesses)
379 ;
380
381 //Python class definition
382 class_<Module, PyModule> module("Module", R"(
383Base class for Modules.
384
385A module is the smallest building block of the framework.
386A typical event processing chain consists of a Path containing
387modules. By inheriting from this base class, various types of
388modules can be created. To use a module, please refer to
389:func:`Path.add_module()`. A list of modules is available by running
390``basf2 -m`` or ``basf2 -m package``, detailed information on parameters is
391given by e.g. ``basf2 -m RootInput``.
392
393The 'Module Development' section in the manual provides detailed information
394on how to create modules, setting parameters, or using return values/conditions:
395https://xwiki.desy.de/xwiki/rest/p/f4fa4/#HModuleDevelopment
396
397)");
398 module
399 .def("__str__", &Module::getPathString)
400 .def("name", &Module::getName, return_value_policy<copy_const_reference>(),
401 "Returns the name of the module. Can be changed via :func:`set_name() <Module.set_name()>`, use :func:`type() <Module.type()>` for identifying a particular module class.")
402 .def("type", &Module::getType, return_value_policy<copy_const_reference>(),
403 "Returns the type of the module (i.e. class name minus 'Module')")
404 .def("set_name", &Module::setName, args("name"), R"(
405Set custom name, e.g. to distinguish multiple modules of the same type.
406
407>>> path.add_module('EventInfoSetter')
408>>> ro = path.add_module('RootOutput', branchNames=['EventMetaData'])
409>>> ro.set_name('RootOutput_metadata_only')
410>>> print(path)
411[EventInfoSetter -> RootOutput_metadata_only]
412
413)")
414 .def("description", &Module::getDescription, return_value_policy<copy_const_reference>(),
415 "Returns the description of this module.")
416 .def("package", &Module::getPackage, return_value_policy<copy_const_reference>(),
417 "Returns the package this module belongs to.")
418 .def("available_params", &_getParamInfoListPython,
419 "Return list of all module parameters as `ModuleParamInfo` instances")
420 .def("has_properties", &Module::hasProperties, (bp::arg("properties")),
421 R"DOCSTRING(Allows to check if the module has the given properties out of `ModulePropFlags` set.
422
423>>> if module.has_properties(ModulePropFlags.PARALLELPROCESSINGCERTIFIED):
424>>> ...
425
426Parameters:
427 properties (int): bitmask of `ModulePropFlags` to check for.
428)DOCSTRING")
429 .def("set_property_flags", &Module::setPropertyFlags, args("property_mask"),
430 "Set module properties in the form of an OR combination of `ModulePropFlags`.");
431 {
432 // python signature is too crowded, make ourselves
433 docstring_options subOptions(true, false, false); //userdef, py sigs, c++ sigs
434 module
435 .def("if_value", &Module::if_value,
436 (bp::arg("expression"), bp::arg("condition_path"), bp::arg("after_condition_path")= Module::EAfterConditionPath::c_End),
437 R"DOCSTRING(if_value(expression, condition_path, after_condition_path=AfterConditionPath.END)
438
439Sets a conditional sub path which will be executed after this
440module if the return value set in the module passes the given ``expression``.
441
442Modules can define a return value (int or bool) using ``setReturnValue()``,
443which can be used in the steering file to split the Path based on this value, for example
444
445>>> module_with_condition.if_value("<1", another_path)
446
447In case the return value of the ``module_with_condition`` for a given event is
448less than 1, the execution will be diverted into ``another_path`` for this event.
449
450You could for example set a special return value if an error occurs, and divert
451the execution into a path containing :b2:mod:`RootOutput` if it is found;
452saving only the data producing/produced by the error.
453
454After a conditional path has executed, basf2 will by default stop processing
455the path for this event. This behaviour can be changed by setting the
456``after_condition_path`` argument.
457
458Parameters:
459 expression (str): Expression to determine if the conditional path should be executed.
460 This should be one of the comparison operators ``<``, ``>``, ``<=``,
461 ``>=``, ``==``, or ``!=`` followed by a numerical value for the return value
462 condition_path (Path): path to execute in case the expression is fulfilled
463 after_condition_path (AfterConditionPath): What to do once the ``condition_path`` has been executed.
464)DOCSTRING")
465 .def("if_false", &Module::if_false,
466 (bp::arg("condition_path"), bp::arg("after_condition_path")= Module::EAfterConditionPath::c_End),
467 R"DOC(if_false(condition_path, after_condition_path=AfterConditionPath.END)
468
469Sets a conditional sub path which will be executed after this module if
470the return value of the module evaluates to False. This is equivalent to
471calling `if_value` with ``expression=\"<1\"``)DOC")
472 .def("if_true", &Module::if_true,
473 (bp::arg("condition_path"), bp::arg("after_condition_path")= Module::EAfterConditionPath::c_End),
474 R"DOC(if_true(condition_path, after_condition_path=AfterConditionPath.END)
475
476Sets a conditional sub path which will be executed after this module if
477the return value of the module evaluates to True. It is equivalent to
478calling `if_value` with ``expression=\">=1\"``)DOC");
479 }
480 module
481 .def("has_condition", &Module::hasCondition,
482 "Return true if a conditional path has been set for this module "
483 "using `if_value`, `if_true` or `if_false`")
484 .def("get_all_condition_paths", &_getAllConditionPathsPython,
485 "Return a list of all conditional paths set for this module using "
486 "`if_value`, `if_true` or `if_false`")
487 .def("get_all_conditions", &_getAllConditionsPython,
488 "Return a list of all conditional path expressions set for this module using "
489 "`if_value`, `if_true` or `if_false`")
490 .add_property("logging", make_function(&Module::getLogConfig, return_value_policy<reference_existing_object>()),
491 &Module::setLogConfig)
@ c_GE
Greater or equal than: ">=".
@ c_SE
Smaller or equal than: "<=".
@ c_GT
Greater than: ">".
@ c_NE
Not equal: "!=".
@ c_EQ
Equal: "=" or "==".
@ c_ST
Smaller than: "<".
void if_value(const std::string &expression, const std::shared_ptr< Path > &path, EAfterConditionPath afterConditionPath=EAfterConditionPath::c_End)
Add a condition to the module.
Definition Module.cc:79
void if_true(const std::shared_ptr< Path > &path, EAfterConditionPath afterConditionPath=EAfterConditionPath::c_End)
A simplified version to set the condition of the module.
Definition Module.cc:90
void setReturnValue(int value)
Sets the return value for this module as integer.
Definition Module.cc:220
@ c_HistogramManager
This module is used to manage histograms accumulated by other modules.
Definition Module.h:81
@ c_Input
This module is an input module (reads data).
Definition Module.h:78
@ c_InternalSerializer
This module is an internal serializer/deserializer for parallel processing.
Definition Module.h:82
@ c_Output
This module is an output module (writes data).
Definition Module.h:79
@ c_TerminateInAllProcesses
When using parallel processing, call this module's terminate() function in all processes().
Definition Module.h:83
void if_false(const std::shared_ptr< Path > &path, EAfterConditionPath afterConditionPath=EAfterConditionPath::c_End)
A simplified version to add a condition to the module.
Definition Module.cc:85
ModuleCondition::EAfterConditionPath EAfterConditionPath
Forward the EAfterConditionPath definition from the ModuleCondition.
Definition Module.h:88

◆ getAfterConditionPath()

Module::EAfterConditionPath getAfterConditionPath ( ) const
inherited

What to do after the conditional path is finished.

(defaults to c_End if no condition is set)

Definition at line 133 of file Module.cc.

134{
135 if (m_conditions.empty()) return EAfterConditionPath::c_End;
136
137 //okay, a condition was set for this Module...
138 if (!m_hasReturnValue) {
139 B2FATAL("A condition was set for '" << getName() << "', but the module did not set a return value!");
140 }
141
142 for (const auto& condition : m_conditions) {
143 if (condition.evaluate(m_returnValue)) {
144 return condition.getAfterConditionPath();
145 }
146 }
147
148 return EAfterConditionPath::c_End;
149}

◆ getAllConditionPaths()

std::vector< std::shared_ptr< Path > > getAllConditionPaths ( ) const
inherited

Return all condition paths currently set (no matter if the condition is true or not).

Definition at line 150 of file Module.cc.

151{
152 std::vector<std::shared_ptr<Path>> allConditionPaths;
153 for (const auto& condition : m_conditions) {
154 allConditionPaths.push_back(condition.getPath());
155 }
156
157 return allConditionPaths;
158}

◆ getAllConditions()

const std::vector< ModuleCondition > & getAllConditions ( ) const
inlineinherited

Return all set conditions for this module.

Definition at line 323 of file Module.h.

324 {
325 return m_conditions;
326 }

◆ getCondition()

const ModuleCondition * getCondition ( ) const
inlineinherited

Return a pointer to the first condition (or nullptr, if none was set)

Definition at line 313 of file Module.h.

314 {
315 if (m_conditions.empty()) {
316 return nullptr;
317 } else {
318 return &m_conditions.front();
319 }
320 }

◆ getConditionPath()

std::shared_ptr< Path > getConditionPath ( ) const
inherited

Returns the path of the last true condition (if there is at least one, else reaturn a null pointer).

Definition at line 113 of file Module.cc.

114{
115 PathPtr p;
116 if (m_conditions.empty()) return p;
117
118 //okay, a condition was set for this Module...
119 if (!m_hasReturnValue) {
120 B2FATAL("A condition was set for '" << getName() << "', but the module did not set a return value!");
121 }
122
123 for (const auto& condition : m_conditions) {
124 if (condition.evaluate(m_returnValue)) {
125 return condition.getPath();
126 }
127 }
128
129 // if none of the conditions were true, return a null pointer.
130 return p;
131}
std::shared_ptr< Path > PathPtr
Defines a pointer to a path object as a boost shared pointer.
Definition Path.h:35

◆ getDescription()

const std::string & getDescription ( ) const
inlineinherited

Returns the description of the module.

Definition at line 201 of file Module.h.

201{return m_description;}

◆ getFileNames()

virtual std::vector< std::string > getFileNames ( bool outputFiles)
inlinevirtualinherited

Return a list of output filenames for this modules.

This will be called when basf2 is run with "--dry-run" if the module has set either the c_Input or c_Output properties.

If the parameter outputFiles is false (for modules with c_Input) the list of input filenames should be returned (if any). If outputFiles is true (for modules with c_Output) the list of output files should be returned (if any).

If a module has sat both properties this member is called twice, once for each property.

The module should return the actual list of requested input or produced output filenames (including handling of input/output overrides) so that the grid system can handle input/output files correctly.

This function should return the same value when called multiple times. This is especially important when taking the input/output overrides from Environment as they get consumed when obtained so the finalized list of output files should be stored for subsequent calls.

Reimplemented in RootInputModule, RootOutputModule, and StorageRootOutputModule.

Definition at line 133 of file Module.h.

134 {
135 return std::vector<std::string>();
136 }

◆ getLogConfig()

LogConfig & getLogConfig ( )
inlineinherited

Returns the log system configuration.

Definition at line 224 of file Module.h.

224{return m_logConfig;}

◆ getMean()

double getMean ( double bg) const
private

calculate the predicted mean using the parameterized resolution

Definition at line 796 of file CDCDedxPIDModule.cc.

797{
798 // define the section of the mean to use
799 double A = 0, B = 0, C = 0;
800 if (bg < 4.5)
801 A = 1;
802 else if (bg < 10)
803 B = 1;
804 else
805 C = 1;
806
807 double x[1]; x[0] = bg;
808 double parsA[9];
809 double parsB[5];
810 double parsC[5];
811
812 parsA[0] = 1; parsB[0] = 2; parsC[0] = 3;
813 for (int i = 0; i < 15; ++i) {
814 if (i < 7) parsA[i + 1] = m_meanpars[i];
815 else if (i < 11) parsB[i % 7 + 1] = m_meanpars[i];
816 else parsC[i % 11 + 1] = m_meanpars[i];
817 }
818
819 // calculate dE/dx from the Bethe-Bloch mean
820 double partA = meanCurve(x, parsA, 0);
821 double partB = meanCurve(x, parsB, 0);
822 double partC = meanCurve(x, parsC, 0);
823
824 return (A * partA + B * partB + C * partC);
825}
double meanCurve(double *x, double *par, int version) const
parameterized beta-gamma curve for predicted means
std::vector< double > m_meanpars
dE/dx mean parameters

◆ getModules()

std::list< ModulePtr > getModules ( ) const
inlineoverrideprivatevirtualinherited

no submodules, return empty list

Implements PathElement.

Definition at line 505 of file Module.h.

505{ return std::list<ModulePtr>(); }

◆ getName()

const std::string & getName ( ) const
inlineinherited

Returns the name of the module.

This can be changed via e.g. set_name() in the steering file to give more useful names if there is more than one module of the same type.

For identifying the type of a module, using getType() (or type() in Python) is recommended.

Definition at line 186 of file Module.h.

186{return m_name;}

◆ getPackage()

const std::string & getPackage ( ) const
inlineinherited

Returns the package this module is in.

Definition at line 196 of file Module.h.

196{return m_package;}

◆ getParamInfoListPython()

std::shared_ptr< boost::python::list > getParamInfoListPython ( ) const
inherited

Returns a python list of all parameters.

Each item in the list consists of the name of the parameter, a string describing its type, a python list of all default values and the description of the parameter.

Returns
A python list containing the parameters of this parameter list.

Definition at line 279 of file Module.cc.

280{
282}
std::shared_ptr< boost::python::list > getParamInfoListPython() const
Returns a python list of all parameters.

◆ getParamList()

const ModuleParamList & getParamList ( ) const
inlineinherited

Return module param list.

Definition at line 362 of file Module.h.

362{ return m_moduleParamList; }

◆ getPathString()

std::string getPathString ( ) const
overrideprivatevirtualinherited

return the module name.

Implements PathElement.

Definition at line 192 of file Module.cc.

193{
194
195 std::string output = getName();
196
197 for (const auto& condition : m_conditions) {
198 output += condition.getString();
199 }
200
201 return output;
202}

◆ getReturnValue()

int getReturnValue ( ) const
inlineinherited

Return the return value set by this module.

This value is only meaningful if hasReturnValue() is true

Definition at line 380 of file Module.h.

380{ return m_returnValue; }

◆ getSigma()

double getSigma ( double dedx,
double nhit,
double cos,
double timereso ) const
private

calculate the predicted resolution using the parameterized resolution

Definition at line 850 of file CDCDedxPIDModule.cc.

851{
852
853 double x[1];
854 double dedxpar[3];
855 double nhitpar[6];
856 double cospar[11];
857
858 dedxpar[0] = 1; nhitpar[0] = 2; cospar[0] = 3;
859 for (int i = 0; i < 10; ++i) {
860 if (i < 2) dedxpar[i + 1] = m_sigmapars[i];
861 if (i < 5) nhitpar[i + 1] = m_sigmapars[i + 2];
862 cospar[i + 1] = m_sigmapars[i + 7];
863 }
864
865 // determine sigma from the parameterization
866 x[0] = dedx;
867 double corDedx = sigmaCurve(x, dedxpar, 0);
868
869 x[0] = nhit;
870 double corNHit;
871 int nhit_min = 8, nhit_max = 37;
872
873 if (nhit < nhit_min) {
874 x[0] = nhit_min;
875 corNHit = sigmaCurve(x, nhitpar, 0) * sqrt(nhit_min / nhit);
876 } else if (nhit > nhit_max) {
877 x[0] = nhit_max;
878 corNHit = sigmaCurve(x, nhitpar, 0) * sqrt(nhit_max / nhit);
879 } else corNHit = sigmaCurve(x, nhitpar, 0);
880
881 x[0] = cos;
882 double corCos = sigmaCurve(x, cospar, 0);
883
884 return (corDedx * corCos * corNHit * timereso);
885}
double sigmaCurve(double *x, const double *par, int version) const
parameterized resolution for predictions
std::vector< double > m_sigmapars
dE/dx resolution parameters

◆ getType()

const std::string & getType ( ) const
inherited

Returns the type of the module (i.e.

class name minus 'Module')

Definition at line 41 of file Module.cc.

42{
43 if (m_type.empty())
44 B2FATAL("Module type not set for " << getName());
45 return m_type;
46}
std::string m_type
The type of the module, saved as a string.
Definition Module.h:508

◆ hasCondition()

bool hasCondition ( ) const
inlineinherited

Returns true if at least one condition was set for the module.

Definition at line 310 of file Module.h.

310{ return not m_conditions.empty(); };

◆ hasProperties()

bool hasProperties ( unsigned int propertyFlags) const
inherited

Returns true if all specified property flags are available in this module.

Parameters
propertyFlagsOred EModulePropFlags which should be compared with the module flags.

Definition at line 160 of file Module.cc.

161{
162 return (propertyFlags & m_propertyFlags) == propertyFlags;
163}

◆ hasReturnValue()

bool hasReturnValue ( ) const
inlineinherited

Return true if this module has a valid return value set.

Definition at line 377 of file Module.h.

377{ return m_hasReturnValue; }

◆ hasUnsetForcedParams()

bool hasUnsetForcedParams ( ) const
inherited

Returns true and prints error message if the module has unset parameters which the user has to set in the steering file.

Definition at line 166 of file Module.cc.

167{
169 std::string allMissing = "";
170 for (const auto& s : missing)
171 allMissing += s + " ";
172 if (!missing.empty())
173 B2ERROR("The following required parameters of Module '" << getName() << "' were not specified: " << allMissing <<
174 "\nPlease add them to your steering file.");
175 return !missing.empty();
176}
std::vector< std::string > getUnsetForcedParams() const
Returns list of unset parameters (if they are required to have a value.

◆ I2D()

double I2D ( double cosTheta,
double I ) const
private

hadron saturation parameterization part 1

Definition at line 739 of file CDCDedxPIDModule.cc.

740{
741 double absCosTheta = fabs(cosTheta);
742 double projection = pow(absCosTheta, m_hadronpars[3]) + m_hadronpars[2];
743
744 if (projection == 0 || m_hadronpars[4] == 0) {
745 B2WARNING("Something wrong with dE/dx hadron constants!");
746 return I;
747 }
748
749 double a = m_hadronpars[0] / projection;
750 double b = 1 - m_hadronpars[1] / projection * (I / m_hadronpars[4]);
751 double c = -1.0 * I / m_hadronpars[4];
752
753 if (b == 0 && a == 0) {
754 B2WARNING("both a and b coefficiants for hadron correction are 0");
755 return I;
756 }
757
758 double discr = b * b - 4.0 * a * c;
759 if (discr < 0) {
760 B2WARNING("negative discriminant; return uncorrectecd value");
761 return I;
762 }
763
764 double D = (a != 0) ? (-b + sqrt(discr)) / (2.0 * a) : -c / b;
765 if (D < 0) {
766 B2WARNING("D is less 0! will try another solution");
767 D = (a != 0) ? (-b - sqrt(discr)) / (2.0 * a) : -c / b;
768 if (D < 0) {
769 B2WARNING("D is still less 0! just return uncorrectecd value");
770 return I;
771 }
772 }
773
774 return D;
775}

◆ if_false()

void if_false ( const std::shared_ptr< Path > & path,
EAfterConditionPath afterConditionPath = EAfterConditionPath::c_End )
inherited

A simplified version to add a condition to the module.

Please note that successive calls of this function will add more than one condition to the module. If more than one condition results in true, only the last of them will be used.

Please be careful: Avoid creating cyclic paths, e.g. by linking a condition to a path which is processed before the path where this module is located in.

It is equivalent to the if_value() method, using the expression "<1". This method is meant to be used together with the setReturnValue(bool value) method.

Parameters
pathShared pointer to the Path which will be executed if the return value is false.
afterConditionPathWhat to do after executing 'path'.

Definition at line 85 of file Module.cc.

86{
87 if_value("<1", path, afterConditionPath);
88}

◆ if_true()

void if_true ( const std::shared_ptr< Path > & path,
EAfterConditionPath afterConditionPath = EAfterConditionPath::c_End )
inherited

A simplified version to set the condition of the module.

Please note that successive calls of this function will add more than one condition to the module. If more than one condition results in true, only the last of them will be used.

Please be careful: Avoid creating cyclic paths, e.g. by linking a condition to a path which is processed before the path where this module is located in.

It is equivalent to the if_value() method, using the expression ">=1". This method is meant to be used together with the setReturnValue(bool value) method.

Parameters
pathShared pointer to the Path which will be executed if the return value is true.
afterConditionPathWhat to do after executing 'path'.

Definition at line 90 of file Module.cc.

91{
92 if_value(">=1", path, afterConditionPath);
93}

◆ if_value()

void if_value ( const std::string & expression,
const std::shared_ptr< Path > & path,
EAfterConditionPath afterConditionPath = EAfterConditionPath::c_End )
inherited

Add a condition to the module.

Please note that successive calls of this function will add more than one condition to the module. If more than one condition results in true, only the last of them will be used.

See https://xwiki.desy.de/xwiki/rest/p/a94f2 or ModuleCondition for a description of the syntax.

Please be careful: Avoid creating cyclic paths, e.g. by linking a condition to a path which is processed before the path where this module is located in.

Parameters
expressionThe expression of the condition.
pathShared pointer to the Path which will be executed if the condition is evaluated to true.
afterConditionPathWhat to do after executing 'path'.

Definition at line 79 of file Module.cc.

80{
81 m_conditions.emplace_back(expression, path, afterConditionPath);
82}

◆ initialize()

void initialize ( void )
overridevirtual

Initialize the module.

Reimplemented from Module.

Definition at line 111 of file CDCDedxPIDModule.cc.

112{
113
114 // required inputs
115 m_tracks.isRequired();
116 m_recoTracks.isRequired();
117
118 // optional inputs
119 m_mcparticles.isOptional();
120 m_tracks.optionalRelationTo(m_mcparticles);
121
122 m_dedxTracks.registerInDataStore();
123 m_tracks.registerRelationTo(m_dedxTracks);
124
125 // register outputs
126 m_dedxLikelihoods.registerInDataStore();
127 m_tracks.registerRelationTo(m_dedxLikelihoods);
128
129 m_DBDedxPDFs.addCallback([this]() { checkPDFs(); });
130 checkPDFs();
131
132 // lookup table for number of wires per layer (indexed on superlayer)
133 m_nLayerWires[0] = 1280;
134 for (int i = 1; i < 9; ++i) {
135 m_nLayerWires[i] = m_nLayerWires[i - 1] + 6 * (160 + (i - 1) * 32);
136 }
137
138 // make sure the mean and resolution parameters are reasonable
139 if (!m_DBMeanPars || m_DBMeanPars->getSize() == 0) {
140 B2WARNING("No dE/dx mean parameters!");
141 for (int i = 0; i < 15; ++i)
142 m_meanpars.push_back(1.0);
143 } else m_meanpars = m_DBMeanPars->getMeanPars();
144
145 if (!m_DBSigmaPars || m_DBSigmaPars->getSize() == 0) {
146 B2WARNING("No dE/dx sigma parameters!");
147 for (int i = 0; i < 12; ++i)
148 m_sigmapars.push_back(1.0);
149 } else m_sigmapars = m_DBSigmaPars->getSigmaPars();
150
151 // get the hadron correction parameters
152 if (!m_DBHadronCor || m_DBHadronCor->getSize() == 0) {
153 B2WARNING("No hadron correction parameters!");
154 for (int i = 0; i < 4; ++i)
155 m_hadronpars.push_back(0.0);
156 m_hadronpars.push_back(1.0);
157 } else m_hadronpars = m_DBHadronCor->getHadronPars();
158
159 // create instances here to not confuse profiling
161
162 if (!genfit::MaterialEffects::getInstance()->isInitialized()) {
163 B2FATAL("Need to have SetupGenfitExtrapolationModule in path before this one.");
164 }
165}
DBObjPtr< CDCDedxMeanPars > m_DBMeanPars
dE/dx mean parameters
DBObjPtr< CDCDedxHadronCor > m_DBHadronCor
hadron saturation parameters
void checkPDFs()
Check the pdfs for consistency every time they change in the database.
DBObjPtr< CDCDedxSigmaPars > m_DBSigmaPars
dE/dx resolution parameters
StoreArray< RecoTrack > m_recoTracks
Required array of input RecoTracks.

◆ meanCurve()

double meanCurve ( double * x,
double * par,
int version ) const
private

parameterized beta-gamma curve for predicted means

Definition at line 777 of file CDCDedxPIDModule.cc.

778{
779 // calculate the predicted mean value as a function of beta-gamma (bg)
780 // this is done with a different function depending on the value of bg
781 double f = 0;
782
783 if (version == 0) {
784 if (par[0] == 1)
785 f = par[1] * std::pow(std::sqrt(x[0] * x[0] + 1), par[3]) / std::pow(x[0], par[3]) *
786 (par[2] - par[5] * std::log(1 / x[0])) - par[4] + std::exp(par[6] + par[7] * x[0]);
787 else if (par[0] == 2)
788 f = par[1] * std::pow(x[0], 3) + par[2] * x[0] * x[0] + par[3] * x[0] + par[4];
789 else if (par[0] == 3)
790 f = -1.0 * par[1] * std::log(par[4] + std::pow(1 / x[0], par[2])) + par[3];
791 }
792
793 return f;
794}

◆ saveChiValue()

void saveChiValue ( double(&) chi[Const::ChargedStable::c_SetSize],
double(&) predmean[Const::ChargedStable::c_SetSize],
double(&) predres[Const::ChargedStable::c_SetSize],
double p,
double dedx,
double cos,
int nhit,
double timereso ) const
private

for all particles, save chi values into 'chi'.

Parameters
chiarray of chi values to be modified
predmeanpredicted mean for each hypothesis
predrespredicted resolution for each hypothesis
ptrack momentum valid in the cdc
dedxdE/dx value
costrack cos(theta)
nhitnumber of hits used for this track
timeresotime resolution from database

Definition at line 887 of file CDCDedxPIDModule.cc.

890{
891 // determine a chi value for each particle type
892 Const::ParticleSet set = Const::chargedStableSet;
893 for (const Const::ChargedStable pdgIter : set) {
894 double bg = p / pdgIter.getMass();
895
896 // determine the predicted mean and resolution
897 double mean = getMean(bg);
898 double sigma = getSigma(mean, nhit, cos, timereso);
899
900 predmean[pdgIter.getIndex()] = mean;
901 predsigma[pdgIter.getIndex()] = sigma;
902
903 // fill the chi value for this particle type
904 if (sigma != 0) chi[pdgIter.getIndex()] = ((dedx - mean) / (sigma));
905 }
906}

◆ saveLookupLogl()

void saveLookupLogl ( double(&) logl[Const::ChargedStable::c_SetSize],
double p,
double dedx )
private

for all particles, save log-likelihood values into 'logl'.

Parameters
loglarray of log-likelihood to be modified
ptrack momentum
dedxdE/dx value

Definition at line 681 of file CDCDedxPIDModule.cc.

682{
683 //all pdfs have the same dimensions
684 const TH2F* pdf = m_DBDedxPDFs->getCDCPDF(0, !m_useIndividualHits);
685 const Int_t binX = pdf->GetXaxis()->FindFixBin(p);
686 const Int_t binY = pdf->GetYaxis()->FindFixBin(dedx);
687
688 for (unsigned int iPart = 0; iPart < Const::ChargedStable::c_SetSize; iPart++) {
689 pdf = m_DBDedxPDFs->getCDCPDF(iPart, !m_useIndividualHits);
690 if (pdf->GetEntries() == 0) { //might be NULL if m_ignoreMissingParticles is set
691 B2WARNING("NO CDC PDFS...");
692 continue;
693 }
694 double probability = 0.0;
695
696 //check if this is still in the histogram, take overflow bin otherwise
697 if (binX < 1 or binX > pdf->GetNbinsX()
698 or binY < 1 or binY > pdf->GetNbinsY()) {
699 probability = pdf->GetBinContent(binX, binY);
700 } else {
701 //in normal histogram range. Of course ROOT has a bug that Interpolate()
702 //is not declared as const but it does not modify the internal state so
703 //fine, const_cast it is.
704 probability = const_cast<TH2F*>(pdf)->Interpolate(p, dedx);
705 }
706
707 if (probability != probability)
708 B2ERROR("probability NAN for a track with p=" << p << " and dedx=" << dedx);
709
710 //my pdfs aren't perfect...
711 if (probability == 0.0)
712 probability = m_useIndividualHits ? (1e-5) : (1e-3); //likelihoods for truncated mean are much higher
713 logl[iPart] += log(probability);
714 }
715}

◆ setAbortLevel()

void setAbortLevel ( int abortLevel)
inherited

Configure the abort log level.

Definition at line 67 of file Module.cc.

68{
69 m_logConfig.setAbortLevel(static_cast<LogConfig::ELogLevel>(abortLevel));
70}
ELogLevel
Definition of the supported log levels.
Definition LogConfig.h:26
void setAbortLevel(ELogLevel abortLevel)
Configure the abort level.
Definition LogConfig.h:112

◆ setDebugLevel()

void setDebugLevel ( int debugLevel)
inherited

Configure the debug messaging level.

Definition at line 61 of file Module.cc.

62{
63 m_logConfig.setDebugLevel(debugLevel);
64}
void setDebugLevel(int debugLevel)
Configure the debug messaging level.
Definition LogConfig.h:98

◆ setDescription()

void setDescription ( const std::string & description)
protectedinherited

Sets the description of the module.

Parameters
descriptionA description of the module.

Definition at line 214 of file Module.cc.

215{
216 m_description = description;
217}
std::string m_description
The description of the module.
Definition Module.h:510

◆ setLogConfig()

void setLogConfig ( const LogConfig & logConfig)
inlineinherited

Set the log system configuration.

Definition at line 229 of file Module.h.

229{m_logConfig = logConfig;}

◆ setLogInfo()

void setLogInfo ( int logLevel,
unsigned int logInfo )
inherited

Configure the printed log information for the given level.

Parameters
logLevelThe log level (one of LogConfig::ELogLevel)
logInfoWhat kind of info should be printed? ORed combination of LogConfig::ELogInfo flags.

Definition at line 73 of file Module.cc.

74{
75 m_logConfig.setLogInfo(static_cast<LogConfig::ELogLevel>(logLevel), logInfo);
76}
void setLogInfo(ELogLevel logLevel, unsigned int logInfo)
Configure the printed log information for the given level.
Definition LogConfig.h:127

◆ setLogLevel()

void setLogLevel ( int logLevel)
inherited

Configure the log level.

Definition at line 55 of file Module.cc.

56{
57 m_logConfig.setLogLevel(static_cast<LogConfig::ELogLevel>(logLevel));
58}
void setLogLevel(ELogLevel logLevel)
Configure the log level.
Definition LogConfig.cc:25

◆ setName()

void setName ( const std::string & name)
inlineinherited

Set the name of the module.

Note
The module name is set when using the REG_MODULE macro, but the module can be renamed before calling process() using the set_name() function in your steering file.
Parameters
nameThe name of the module

Definition at line 213 of file Module.h.

213{ m_name = name; };

◆ setParamList()

void setParamList ( const ModuleParamList & params)
inlineprotectedinherited

Replace existing parameter list.

Definition at line 500 of file Module.h.

500{ m_moduleParamList = params; }

◆ setParamPython()

void setParamPython ( const std::string & name,
const boost::python::object & pyObj )
privateinherited

Implements a method for setting boost::python objects.

The method supports the following types: list, dict, int, double, string, bool The conversion of the python object to the C++ type and the final storage of the parameter value is done in the ModuleParam class.

Parameters
nameThe unique name of the parameter.
pyObjThe object which should be converted and stored as the parameter value.

Definition at line 234 of file Module.cc.

235{
236 LogSystem& logSystem = LogSystem::Instance();
237 logSystem.updateModule(&(getLogConfig()), getName());
238 try {
240 } catch (std::runtime_error& e) {
241 throw std::runtime_error("Cannot set parameter '" + name + "' for module '"
242 + m_name + "': " + e.what());
243 }
244
245 logSystem.updateModule(nullptr);
246}
void updateModule(const LogConfig *moduleLogConfig=nullptr, const std::string &moduleName="")
Sets the log configuration to the given module log configuration and sets the module name This method...
Definition LogSystem.h:200
static LogSystem & Instance()
Static method to get a reference to the LogSystem instance.
Definition LogSystem.cc:28
LogConfig & getLogConfig()
Returns the log system configuration.
Definition Module.h:224
std::string m_name
The name of the module, saved as a string (user-modifiable)
Definition Module.h:507
void setParamPython(const std::string &name, const PythonObject &pyObj)
Implements a method for setting boost::python objects.

◆ setParamPythonDict()

void setParamPythonDict ( const boost::python::dict & dictionary)
privateinherited

Implements a method for reading the parameter values from a boost::python dictionary.

The key of the dictionary has to be the name of the parameter and the value has to be of one of the supported parameter types.

Parameters
dictionaryThe python dictionary from which the parameter values are read.

Definition at line 249 of file Module.cc.

250{
251
252 LogSystem& logSystem = LogSystem::Instance();
253 logSystem.updateModule(&(getLogConfig()), getName());
254
255 boost::python::list dictKeys = dictionary.keys();
256 int nKey = boost::python::len(dictKeys);
257
258 //Loop over all keys in the dictionary
259 for (int iKey = 0; iKey < nKey; ++iKey) {
260 boost::python::object currKey = dictKeys[iKey];
261 boost::python::extract<std::string> keyProxy(currKey);
262
263 if (keyProxy.check()) {
264 const boost::python::object& currValue = dictionary[currKey];
265 setParamPython(keyProxy, currValue);
266 } else {
267 B2ERROR("Setting the module parameters from a python dictionary: invalid key in dictionary!");
268 }
269 }
270
271 logSystem.updateModule(nullptr);
272}
void setParamPython(const std::string &name, const boost::python::object &pyObj)
Implements a method for setting boost::python objects.
Definition Module.cc:234

◆ setPropertyFlags()

void setPropertyFlags ( unsigned int propertyFlags)
inherited

Sets the flags for the module properties.

Parameters
propertyFlagsbitwise OR of EModulePropFlags

Definition at line 208 of file Module.cc.

209{
210 m_propertyFlags = propertyFlags;
211}

◆ setReturnValue() [1/2]

void setReturnValue ( bool value)
protectedinherited

Sets the return value for this module as bool.

The bool value is saved as an integer with the convention 1 meaning true and 0 meaning false. The value can be used in the steering file to divide the analysis chain into several paths.

Parameters
valueThe value of the return value.

Definition at line 227 of file Module.cc.

228{
229 m_hasReturnValue = true;
230 m_returnValue = value;
231}

◆ setReturnValue() [2/2]

void setReturnValue ( int value)
protectedinherited

Sets the return value for this module as integer.

The value can be used in the steering file to divide the analysis chain into several paths.

Parameters
valueThe value of the return value.

Definition at line 220 of file Module.cc.

221{
222 m_hasReturnValue = true;
223 m_returnValue = value;
224}

◆ setType()

void setType ( const std::string & type)
protectedinherited

Set the module type.

Only for use by internal modules (which don't use the normal REG_MODULE mechanism).

Definition at line 48 of file Module.cc.

49{
50 if (!m_type.empty())
51 B2FATAL("Trying to change module type from " << m_type << " is not allowed, the value is assumed to be fixed.");
52 m_type = type;
53}

◆ sigmaCurve()

double sigmaCurve ( double * x,
const double * par,
int version ) const
private

parameterized resolution for predictions

Definition at line 827 of file CDCDedxPIDModule.cc.

828{
829 // calculate the predicted mean value as a function of beta-gamma (bg)
830 // this is done with a different function depending dE/dx, nhit, and sin(theta)
831 double f = 0;
832
833 if (version == 0) {
834 if (par[0] == 1) { // return dedx parameterization
835 f = par[1] + par[2] * x[0];
836 } else if (par[0] == 2) { // return nhit or sin(theta) parameterization
837 f = par[1] * std::pow(x[0], 4) + par[2] * std::pow(x[0], 3) +
838 par[3] * x[0] * x[0] + par[4] * x[0] + par[5];
839 } else if (par[0] == 3) { // return cos(theta) parameterization
840 f = par[1] * exp(-0.5 * pow(((x[0] - par[2]) / par[3]), 2)) +
841 par[4] * pow(x[0], 6) + par[5] * pow(x[0], 5) + par[6] * pow(x[0], 4) +
842 par[7] * pow(x[0], 3) + par[8] * x[0] * x[0] + par[9] * x[0] + par[10];
843 }
844 }
845
846 return f;
847}

◆ terminate()

void terminate ( void )
overridevirtual

End of the event processing.

Reimplemented from Module.

Definition at line 627 of file CDCDedxPIDModule.cc.

628{
629
630 B2DEBUG(29, "CDCDedxPIDModule exiting");
631}

Member Data Documentation

◆ m_backHalfCurlers

bool m_backHalfCurlers
private

Whether to use the back half of curlers.

Definition at line 163 of file CDCDedxPIDModule.h.

◆ m_conditions

std::vector<ModuleCondition> m_conditions
privateinherited

Module condition, only non-null if set.

Definition at line 520 of file Module.h.

◆ m_DB1DCell

DBObjPtr<CDCDedx1DCell> m_DB1DCell
private

1D correction DB object

Definition at line 178 of file CDCDedxPIDModule.h.

◆ m_DB2DCell

DBObjPtr<CDCDedx2DCell> m_DB2DCell
private

2D correction DB object

Definition at line 177 of file CDCDedxPIDModule.h.

◆ m_DBCosEdgeCor

DBObjPtr<CDCDedxCosineEdge> m_DBCosEdgeCor
private

non-linearly ACD correction DB object

Definition at line 175 of file CDCDedxPIDModule.h.

◆ m_DBCosineCor

DBObjPtr<CDCDedxCosineCor> m_DBCosineCor
private

Electron saturation correction DB object.

Definition at line 174 of file CDCDedxPIDModule.h.

◆ m_DBDedxPDFs

DBObjPtr<CDCdEdxPDFs> m_DBDedxPDFs
private

DB object for dedx:momentum PDFs.

Definition at line 157 of file CDCDedxPIDModule.h.

◆ m_DBHadronCor

DBObjPtr<CDCDedxHadronCor> m_DBHadronCor
private

hadron saturation parameters

Definition at line 180 of file CDCDedxPIDModule.h.

◆ m_DBInjectTime

DBObjPtr<CDCDedxInjectionTime> m_DBInjectTime
private

time gain/reso DB object

Definition at line 173 of file CDCDedxPIDModule.h.

◆ m_DBMeanPars

DBObjPtr<CDCDedxMeanPars> m_DBMeanPars
private

dE/dx mean parameters

Definition at line 187 of file CDCDedxPIDModule.h.

◆ m_DBNonlADC

DBObjPtr<CDCDedxADCNonLinearity> m_DBNonlADC
private

non-linearly ACD correction DB object

Definition at line 179 of file CDCDedxPIDModule.h.

◆ m_DBRunGain

DBObjPtr<CDCDedxRunGain> m_DBRunGain
private

Run gain DB object.

Definition at line 172 of file CDCDedxPIDModule.h.

◆ m_DBScaleFactor

DBObjPtr<CDCDedxScaleFactor> m_DBScaleFactor
private

Scale factor to make electrons ~1.

Definition at line 171 of file CDCDedxPIDModule.h.

◆ m_DBSigmaPars

DBObjPtr<CDCDedxSigmaPars> m_DBSigmaPars
private

dE/dx resolution parameters

Definition at line 188 of file CDCDedxPIDModule.h.

◆ m_DBWireGains

DBObjPtr<CDCDedxWireGain> m_DBWireGains
private

Wire gain DB object.

Definition at line 176 of file CDCDedxPIDModule.h.

◆ m_dedxLikelihoods

StoreArray<CDCDedxLikelihood> m_dedxLikelihoods
private

Output array of CDCDedxLikelihoods.

Definition at line 90 of file CDCDedxPIDModule.h.

◆ m_dedxTracks

StoreArray<CDCDedxTrack> m_dedxTracks
private

Output array of CDCDedxTracks.

Definition at line 89 of file CDCDedxPIDModule.h.

◆ m_description

std::string m_description
privateinherited

The description of the module.

Definition at line 510 of file Module.h.

◆ m_hadronpars

std::vector<double> m_hadronpars
private

hadron saturation parameters

Definition at line 182 of file CDCDedxPIDModule.h.

◆ m_hasReturnValue

bool m_hasReturnValue
privateinherited

True, if the return value is set.

Definition at line 517 of file Module.h.

◆ m_ignoreMissingParticles

bool m_ignoreMissingParticles
private

Ignore particles for which no PDFs are found.

Definition at line 168 of file CDCDedxPIDModule.h.

◆ m_logConfig

LogConfig m_logConfig
privateinherited

The log system configuration of the module.

Definition at line 513 of file Module.h.

◆ m_mcparticles

StoreArray<MCParticle> m_mcparticles
private

Optional array of input MCParticles.

Definition at line 97 of file CDCDedxPIDModule.h.

◆ m_meanpars

std::vector<double> m_meanpars
private

dE/dx mean parameters

Definition at line 153 of file CDCDedxPIDModule.h.

◆ m_moduleParamList

ModuleParamList m_moduleParamList
privateinherited

List storing and managing all parameter of the module.

Definition at line 515 of file Module.h.

◆ m_name

std::string m_name
privateinherited

The name of the module, saved as a string (user-modifiable)

Definition at line 507 of file Module.h.

◆ m_nLayerWires

int m_nLayerWires[9] = {}
private

number of wires per layer: needed for wire gain calibration

Definition at line 184 of file CDCDedxPIDModule.h.

184{};

◆ m_onlyPrimaryParticles

bool m_onlyPrimaryParticles
private

Only save data for primary particles (as determined by MC truth)

Definition at line 167 of file CDCDedxPIDModule.h.

◆ m_package

std::string m_package
privateinherited

Package this module is found in (may be empty).

Definition at line 509 of file Module.h.

◆ m_propertyFlags

unsigned int m_propertyFlags
privateinherited

The properties of the module as bitwise or (with |) of EModulePropFlags.

Definition at line 511 of file Module.h.

◆ m_recoTracks

StoreArray<RecoTrack> m_recoTracks
private

Required array of input RecoTracks.

Definition at line 94 of file CDCDedxPIDModule.h.

◆ m_removeHighest

double m_removeHighest
private

Portion of highest dE/dx values that should be discarded for truncated mean.

Definition at line 162 of file CDCDedxPIDModule.h.

◆ m_removeLowest

double m_removeLowest
private

Portion of lowest dE/dx values that should be discarded for truncated mean.

Definition at line 161 of file CDCDedxPIDModule.h.

◆ m_returnValue

int m_returnValue
privateinherited

The return value.

Definition at line 518 of file Module.h.

◆ m_sigmapars

std::vector<double> m_sigmapars
private

dE/dx resolution parameters

Definition at line 154 of file CDCDedxPIDModule.h.

◆ m_trackLevel

bool m_trackLevel
private

Whether to use track-level or hit-level MC.

Definition at line 159 of file CDCDedxPIDModule.h.

◆ m_tracks

StoreArray<Track> m_tracks
private

Required array of input Tracks.

Definition at line 93 of file CDCDedxPIDModule.h.

◆ m_type

std::string m_type
privateinherited

The type of the module, saved as a string.

Definition at line 508 of file Module.h.

◆ m_useIndividualHits

bool m_useIndividualHits
private

Include PDF value for each hit in likelihood.

If false, the truncated mean of dedx values for the detectors will be used.

Definition at line 165 of file CDCDedxPIDModule.h.

◆ m_usePrediction

bool m_usePrediction
private

Whether to use parameterized means and resolutions or lookup tables.

Definition at line 160 of file CDCDedxPIDModule.h.


The documentation for this class was generated from the following files: