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_enableDebugOutput
 Whether to save information on tracks and associated hits and dE/dx values in DedxTrack objects.
 
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 'EnableDebugOutput' option adds 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("enableDebugOutput", m_enableDebugOutput,
61 "Option to write out debugging information to CDCDedxTracks (DataStore objects).", true);
62 addParam("useIndividualHits", m_useIndividualHits,
63 "If using lookup table PDFs, include PDF value for each hit in likelihood. If false, the truncated mean of dedx values will be used.",
64 true);
65 addParam("ignoreMissingParticles", m_ignoreMissingParticles,
66 "Ignore particles for which no PDFs are found", false);
67 addParam("trackLevel", m_trackLevel,
68 "ONLY USEFUL FOR MC: Use track-level MC. If false, use hit-level MC", true);
69 addParam("onlyPrimaryParticles", m_onlyPrimaryParticles,
70 "ONLY USEFUL FOR MC: Only save data for primary particles", false);
71}
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.
bool m_enableDebugOutput
Whether to save information on tracks and associated hits and dE/dx values in DedxTrack objects.
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 73 of file CDCDedxPIDModule.cc.

73{ }

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, 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, FlipQualityModule, FullSimModule, TRGGDLUnpackerModule, GearboxModule, GenRawSendModule, GetEventFromSocketModule, GRLNeuroModule, He3DigitizerModule, He3tubeModule, He3tubeStudyModule, HistoManagerModule, HistoModule, HitXPModule, HLTDQM2ZMQModule, 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, 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, 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< TrackFindingCDC::FindletStoreArrayInput< BaseEventTimeExtractorModuleFindlet< AFindlet > > >, FindletModule< TrackFindingCDC::FindletStoreArrayInput< BaseEventTimeExtractorModuleFindlet< AFindlet > > >, FindletModule< TrackFlightTimeAdjuster >, FindletModule< TrackFlightTimeAdjuster >, 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 >, TrackFinderVXDAnalizerModule, TrackingAbortDQMModule, TrackingPerformanceEvaluationModule, 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 641 of file CDCDedxPIDModule.cc.

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

76{
77 if (!m_DBDedxPDFs) B2FATAL("No Dedx pdfs found in database");
78 //load dedx:momentum PDFs
79 int nBinsX, nBinsY;
80 double xMin, xMax, yMin, yMax;
81 nBinsX = nBinsY = -1;
82 xMin = xMax = yMin = yMax = 0.0;
83 for (unsigned int iPart = 0; iPart < 6; iPart++) {
84 const int pdgCode = Const::chargedStableSet.at(iPart).getPDGCode();
85 const TH2F* pdf = m_DBDedxPDFs->getCDCPDF(iPart, !m_useIndividualHits);
86
87 if (pdf->GetEntries() == 0) {
89 continue;
90 B2FATAL("Couldn't find PDF for PDG " << pdgCode);
91 }
92
93 //check that PDFs have the same dimensions and same binning
94 const double epsFactor = 1e-5;
95 if (nBinsX == -1 and nBinsY == -1) {
96 nBinsX = pdf->GetNbinsX();
97 nBinsY = pdf->GetNbinsY();
98 xMin = pdf->GetXaxis()->GetXmin();
99 xMax = pdf->GetXaxis()->GetXmax();
100 yMin = pdf->GetYaxis()->GetXmin();
101 yMax = pdf->GetYaxis()->GetXmax();
102 } else if (nBinsX != pdf->GetNbinsX()
103 or nBinsY != pdf->GetNbinsY()
104 or fabs(xMin - pdf->GetXaxis()->GetXmin()) > epsFactor * xMax
105 or fabs(xMax - pdf->GetXaxis()->GetXmax()) > epsFactor * xMax
106 or fabs(yMin - pdf->GetYaxis()->GetXmin()) > epsFactor * yMax
107 or fabs(yMax - pdf->GetYaxis()->GetXmax()) > epsFactor * yMax) {
108 B2FATAL("PDF for PDG " << pdgCode << " has binning/dimensions differing from previous PDF.");
109 }
110 }
111}
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 725 of file CDCDedxPIDModule.cc.

726{
727 double absCosTheta = fabs(cosTheta);
728 double projection = pow(absCosTheta, m_hadronpars[3]) + m_hadronpars[2];
729 if (projection == 0) {
730 B2WARNING("Something wrong with dE/dx hadron constants!");
731 return D;
732 }
733
734 double chargeDensity = D / projection;
735 double numerator = 1 + m_hadronpars[0] * chargeDensity;
736 double denominator = 1 + m_hadronpars[1] * chargeDensity;
737
738 if (denominator == 0) {
739 B2WARNING("Something wrong with dE/dx hadron constants!");
740 return D;
741 }
742
743 double I = D * m_hadronpars[4] * numerator / denominator;
744 return I;
745}
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, 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, 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< TrackFindingCDC::FindletStoreArrayInput< BaseEventTimeExtractorModuleFindlet< AFindlet > > >, FindletModule< TrackFindingCDC::FindletStoreArrayInput< BaseEventTimeExtractorModuleFindlet< AFindlet > > >, FindletModule< TrackFlightTimeAdjuster >, FindletModule< TrackFlightTimeAdjuster >, 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 >, TrackFinderVXDAnalizerModule, TrackingPerformanceEvaluationModule, 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 172 of file CDCDedxPIDModule.cc.

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

◆ 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 804 of file CDCDedxPIDModule.cc.

805{
806 // define the section of the mean to use
807 double A = 0, B = 0, C = 0;
808 if (bg < 4.5)
809 A = 1;
810 else if (bg < 10)
811 B = 1;
812 else
813 C = 1;
814
815 double x[1]; x[0] = bg;
816 double parsA[9];
817 double parsB[5];
818 double parsC[5];
819
820 parsA[0] = 1; parsB[0] = 2; parsC[0] = 3;
821 for (int i = 0; i < 15; ++i) {
822 if (i < 7) parsA[i + 1] = m_meanpars[i];
823 else if (i < 11) parsB[i % 7 + 1] = m_meanpars[i];
824 else parsC[i % 11 + 1] = m_meanpars[i];
825 }
826
827 // calculate dE/dx from the Bethe-Bloch mean
828 double partA = meanCurve(x, parsA, 0);
829 double partB = meanCurve(x, parsB, 0);
830 double partC = meanCurve(x, parsC, 0);
831
832 return (A * partA + B * partB + C * partC);
833}
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 858 of file CDCDedxPIDModule.cc.

859{
860
861 double x[1];
862 double dedxpar[3];
863 double nhitpar[6];
864 double cospar[11];
865
866 dedxpar[0] = 1; nhitpar[0] = 2; cospar[0] = 3;
867 for (int i = 0; i < 10; ++i) {
868 if (i < 2) dedxpar[i + 1] = m_sigmapars[i];
869 if (i < 5) nhitpar[i + 1] = m_sigmapars[i + 2];
870 cospar[i + 1] = m_sigmapars[i + 7];
871 }
872
873 // determine sigma from the parameterization
874 x[0] = dedx;
875 double corDedx = sigmaCurve(x, dedxpar, 0);
876
877 x[0] = nhit;
878 double corNHit;
879 int nhit_min = 8, nhit_max = 37;
880
881 if (nhit < nhit_min) {
882 x[0] = nhit_min;
883 corNHit = sigmaCurve(x, nhitpar, 0) * sqrt(nhit_min / nhit);
884 } else if (nhit > nhit_max) {
885 x[0] = nhit_max;
886 corNHit = sigmaCurve(x, nhitpar, 0) * sqrt(nhit_max / nhit);
887 } else corNHit = sigmaCurve(x, nhitpar, 0);
888
889 x[0] = cos;
890 double corCos = sigmaCurve(x, cospar, 0);
891
892 return (corDedx * corCos * corNHit * timereso);
893}
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 747 of file CDCDedxPIDModule.cc.

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

◆ 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 113 of file CDCDedxPIDModule.cc.

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

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

◆ 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 895 of file CDCDedxPIDModule.cc.

898{
899 // determine a chi value for each particle type
900 Const::ParticleSet set = Const::chargedStableSet;
901 for (const Const::ChargedStable pdgIter : set) {
902 double bg = p / pdgIter.getMass();
903
904 // determine the predicted mean and resolution
905 double mean = getMean(bg);
906 double sigma = getSigma(mean, nhit, cos, timereso);
907
908 predmean[pdgIter.getIndex()] = mean;
909 predsigma[pdgIter.getIndex()] = sigma;
910
911 // fill the chi value for this particle type
912 if (sigma != 0) chi[pdgIter.getIndex()] = ((dedx - mean) / (sigma));
913 }
914}

◆ 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 689 of file CDCDedxPIDModule.cc.

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

◆ 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 835 of file CDCDedxPIDModule.cc.

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

◆ terminate()

void terminate ( void )
overridevirtual

End of the event processing.

Reimplemented from Module.

Definition at line 635 of file CDCDedxPIDModule.cc.

636{
637
638 B2DEBUG(29, "CDCDedxPIDModule exiting");
639}

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 179 of file CDCDedxPIDModule.h.

◆ m_DB2DCell

DBObjPtr<CDCDedx2DCell> m_DB2DCell
private

2D correction DB object

Definition at line 178 of file CDCDedxPIDModule.h.

◆ m_DBCosEdgeCor

DBObjPtr<CDCDedxCosineEdge> m_DBCosEdgeCor
private

non-linearly ACD correction DB object

Definition at line 176 of file CDCDedxPIDModule.h.

◆ m_DBCosineCor

DBObjPtr<CDCDedxCosineCor> m_DBCosineCor
private

Electron saturation correction DB object.

Definition at line 175 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 181 of file CDCDedxPIDModule.h.

◆ m_DBInjectTime

DBObjPtr<CDCDedxInjectionTime> m_DBInjectTime
private

time gain/reso DB object

Definition at line 174 of file CDCDedxPIDModule.h.

◆ m_DBMeanPars

DBObjPtr<CDCDedxMeanPars> m_DBMeanPars
private

dE/dx mean parameters

Definition at line 188 of file CDCDedxPIDModule.h.

◆ m_DBNonlADC

DBObjPtr<CDCDedxADCNonLinearity> m_DBNonlADC
private

non-linearly ACD correction DB object

Definition at line 180 of file CDCDedxPIDModule.h.

◆ m_DBRunGain

DBObjPtr<CDCDedxRunGain> m_DBRunGain
private

Run gain DB object.

Definition at line 173 of file CDCDedxPIDModule.h.

◆ m_DBScaleFactor

DBObjPtr<CDCDedxScaleFactor> m_DBScaleFactor
private

Scale factor to make electrons ~1.

Definition at line 172 of file CDCDedxPIDModule.h.

◆ m_DBSigmaPars

DBObjPtr<CDCDedxSigmaPars> m_DBSigmaPars
private

dE/dx resolution parameters

Definition at line 189 of file CDCDedxPIDModule.h.

◆ m_DBWireGains

DBObjPtr<CDCDedxWireGain> m_DBWireGains
private

Wire gain DB object.

Definition at line 177 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_enableDebugOutput

bool m_enableDebugOutput
private

Whether to save information on tracks and associated hits and dE/dx values in DedxTrack objects.

Definition at line 164 of file CDCDedxPIDModule.h.

◆ m_hadronpars

std::vector<double> m_hadronpars
private

hadron saturation parameters

Definition at line 183 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 169 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 185 of file CDCDedxPIDModule.h.

185{};

◆ m_onlyPrimaryParticles

bool m_onlyPrimaryParticles
private

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

Definition at line 168 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 166 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: