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 67 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,
85 };
@ 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_DontCollectStatistics
No statistics is collected for this module.
Definition: Module.h:84
@ 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
@ 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

Constructor & Destructor Documentation

◆ CDCDedxPIDModule()

Default constructor.

Definition at line 43 of file CDCDedxPIDModule.cc.

43 : Module()
44{
46
47 //Set module properties
48 setDescription("Extract dE/dx and corresponding log-likelihood from fitted tracks and hits in the CDC.");
49
50 //Parameter definitions
51 addParam("usePrediction", m_usePrediction,
52 "Use parameterized means and resolutions to determine PID values. If false, lookup table PDFs are used.", true);
53 addParam("removeLowest", m_removeLowest,
54 "Portion of events with low dE/dx that should be discarded", double(0.05));
55 addParam("removeHighest", m_removeHighest,
56 "Portion of events with high dE/dx that should be discarded", double(0.25));
57 addParam("useBackHalfCurlers", m_backHalfCurlers,
58 "Whether to use the back half of curlers", false);
59 addParam("enableDebugOutput", m_enableDebugOutput,
60 "Option to write out debugging information to CDCDedxTracks (DataStore objects).", true);
61 addParam("useIndividualHits", m_useIndividualHits,
62 "If using lookup table PDFs, include PDF value for each hit in likelihood. If false, the truncated mean of dedx values will be used.",
63 true);
64 addParam("ignoreMissingParticles", m_ignoreMissingParticles,
65 "Ignore particles for which no PDFs are found", false);
66 addParam("trackLevel", m_trackLevel,
67 "ONLY USEFUL FOR MC: Use track-level MC. If false, use hit-level MC", true);
68 addParam("onlyPrimaryParticles", m_onlyPrimaryParticles,
69 "ONLY USEFUL FOR MC: Only save data for primary particles", false);
70}
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
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:560

◆ ~CDCDedxPIDModule()

~CDCDedxPIDModule ( )
virtual

Destructor.

Definition at line 72 of file CDCDedxPIDModule.cc.

72{ }

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

Definition at line 147 of file Module.h.

147{};

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

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

75{
76 if (!m_DBDedxPDFs) B2FATAL("No Dedx pdfs found in database");
77 //load dedx:momentum PDFs
78 int nBinsX, nBinsY;
79 double xMin, xMax, yMin, yMax;
80 nBinsX = nBinsY = -1;
81 xMin = xMax = yMin = yMax = 0.0;
82 for (unsigned int iPart = 0; iPart < 6; iPart++) {
83 const int pdgCode = Const::chargedStableSet.at(iPart).getPDGCode();
84 const TH2F* pdf = m_DBDedxPDFs->getCDCPDF(iPart, !m_useIndividualHits);
85
86 if (pdf->GetEntries() == 0) {
88 continue;
89 B2FATAL("Couldn't find PDF for PDG " << pdgCode);
90 }
91
92 //check that PDFs have the same dimensions and same binning
93 const double epsFactor = 1e-5;
94 if (nBinsX == -1 and nBinsY == -1) {
95 nBinsX = pdf->GetNbinsX();
96 nBinsY = pdf->GetNbinsY();
97 xMin = pdf->GetXaxis()->GetXmin();
98 xMax = pdf->GetXaxis()->GetXmax();
99 yMin = pdf->GetYaxis()->GetXmin();
100 yMax = pdf->GetYaxis()->GetXmax();
101 } else if (nBinsX != pdf->GetNbinsX()
102 or nBinsY != pdf->GetNbinsY()
103 or fabs(xMin - pdf->GetXaxis()->GetXmin()) > epsFactor * xMax
104 or fabs(xMax - pdf->GetXaxis()->GetXmax()) > epsFactor * xMax
105 or fabs(yMin - pdf->GetYaxis()->GetXmin()) > epsFactor * yMax
106 or fabs(yMax - pdf->GetYaxis()->GetXmax()) > epsFactor * yMax) {
107 B2FATAL("PDF for PDG " << pdgCode << " has binning/dimensions differing from previous PDF.");
108 }
109 }
110}
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{
182 newModule->m_moduleParamList.setParameters(getParamList());
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.
const ModuleParamList & getParamList() const
Return module param list.
Definition: Module.h:363
const std::string & getName() const
Returns the name of the module.
Definition: Module.h:187
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:512
LogConfig m_logConfig
The log system configuration of the module.
Definition: Module.h:514
std::vector< ModuleCondition > m_conditions
Module condition, only non-null if set.
Definition: Module.h:521
std::string m_package
Package this module is found in (may be empty).
Definition: Module.h:510
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 724 of file CDCDedxPIDModule.cc.

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

426{ beginRun(); }
virtual void beginRun()
Called when entering a new run.
Definition: Module.h:147

◆ 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 439 of file Module.h.

439{ endRun(); }
virtual void endRun()
This method is called if the current run ends.
Definition: Module.h:166

◆ 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 432 of file Module.h.

432{ event(); }
virtual void event()
This method is the core of the module.
Definition: Module.h:157

◆ 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 420 of file Module.h.

420{ initialize(); }
virtual void initialize()
Initialize the Module.
Definition: Module.h:109

◆ 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 445 of file Module.h.

445{ terminate(); }
virtual void terminate()
This method is called at the end of the event processing.
Definition: Module.h:176

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

Definition at line 166 of file Module.h.

166{};

◆ 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:519
bool m_hasReturnValue
True, if the return value is set.
Definition: Module.h:518

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

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

◆ 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 324 of file Module.h.

325 {
326 return m_conditions;
327 }

◆ getCondition()

const ModuleCondition * getCondition ( ) const
inlineinherited

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

Definition at line 314 of file Module.h.

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

◆ 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 202 of file Module.h.

202{return m_description;}
std::string m_description
The description of the module.
Definition: Module.h:511

◆ 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, StorageRootOutputModule, and RootOutputModule.

Definition at line 134 of file Module.h.

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

◆ getLogConfig()

LogConfig & getLogConfig ( )
inlineinherited

Returns the log system configuration.

Definition at line 225 of file Module.h.

225{return m_logConfig;}

◆ getMean()

double getMean ( double  bg) const
private

calculate the predicted mean using the parameterized resolution

Definition at line 803 of file CDCDedxPIDModule.cc.

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

506{ 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 187 of file Module.h.

187{return m_name;}
std::string m_name
The name of the module, saved as a string (user-modifiable)
Definition: Module.h:508

◆ getPackage()

const std::string & getPackage ( ) const
inlineinherited

Returns the package this module is in.

Definition at line 197 of file Module.h.

197{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.
ModuleParamList m_moduleParamList
List storing and managing all parameter of the module.
Definition: Module.h:516

◆ getParamList()

const ModuleParamList & getParamList ( ) const
inlineinherited

Return module param list.

Definition at line 363 of file Module.h.

363{ 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 381 of file Module.h.

381{ 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 857 of file CDCDedxPIDModule.cc.

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

◆ hasCondition()

bool hasCondition ( ) const
inlineinherited

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

Definition at line 311 of file Module.h.

311{ 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 378 of file Module.h.

378{ 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 746 of file CDCDedxPIDModule.cc.

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

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

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

◆ meanCurve()

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

parameterized beta-gamma curve for predicted means

Definition at line 784 of file CDCDedxPIDModule.cc.

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

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

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

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

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

◆ 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}

◆ setLogConfig()

void setLogConfig ( const LogConfig logConfig)
inlineinherited

Set the log system configuration.

Definition at line 230 of file Module.h.

230{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 214 of file Module.h.

214{ m_name = name; };

◆ setParamList()

void setParamList ( const ModuleParamList params)
inlineprotectedinherited

Replace existing parameter list.

Definition at line 501 of file Module.h.

501{ 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}
Class for logging debug, info and error messages.
Definition: LogSystem.h:46
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:191
static LogSystem & Instance()
Static method to get a reference to the LogSystem instance.
Definition: LogSystem.cc:31
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 834 of file CDCDedxPIDModule.cc.

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

◆ terminate()

void terminate ( void  )
overridevirtual

End of the event processing.

Reimplemented from Module.

Definition at line 634 of file CDCDedxPIDModule.cc.

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

Member Data Documentation

◆ m_backHalfCurlers

bool m_backHalfCurlers
private

Whether to use the back half of curlers.

Definition at line 164 of file CDCDedxPIDModule.h.

◆ m_conditions

std::vector<ModuleCondition> m_conditions
privateinherited

Module condition, only non-null if set.

Definition at line 521 of file Module.h.

◆ m_DB1DCell

DBObjPtr<CDCDedx1DCell> m_DB1DCell
private

1D correction DB object

Definition at line 180 of file CDCDedxPIDModule.h.

◆ m_DB2DCell

DBObjPtr<CDCDedx2DCell> m_DB2DCell
private

2D correction DB object

Definition at line 179 of file CDCDedxPIDModule.h.

◆ m_DBCosEdgeCor

DBObjPtr<CDCDedxCosineEdge> m_DBCosEdgeCor
private

non-linearly ACD correction DB object

Definition at line 177 of file CDCDedxPIDModule.h.

◆ m_DBCosineCor

DBObjPtr<CDCDedxCosineCor> m_DBCosineCor
private

Electron saturation correction DB object.

Definition at line 176 of file CDCDedxPIDModule.h.

◆ m_DBDedxPDFs

DBObjPtr<CDCdEdxPDFs> m_DBDedxPDFs
private

DB object for dedx:momentum PDFs.

Definition at line 158 of file CDCDedxPIDModule.h.

◆ m_DBHadronCor

DBObjPtr<CDCDedxHadronCor> m_DBHadronCor
private

hadron saturation parameters

Definition at line 182 of file CDCDedxPIDModule.h.

◆ m_DBInjectTime

DBObjPtr<CDCDedxInjectionTime> m_DBInjectTime
private

time gain/reso DB object

Definition at line 175 of file CDCDedxPIDModule.h.

◆ m_DBMeanPars

DBObjPtr<CDCDedxMeanPars> m_DBMeanPars
private

dE/dx mean parameters

Definition at line 189 of file CDCDedxPIDModule.h.

◆ m_DBNonlADC

DBObjPtr<CDCDedxADCNonLinearity> m_DBNonlADC
private

non-linearly ACD correction DB object

Definition at line 181 of file CDCDedxPIDModule.h.

◆ m_DBRunGain

DBObjPtr<CDCDedxRunGain> m_DBRunGain
private

Run gain DB object.

Definition at line 174 of file CDCDedxPIDModule.h.

◆ m_DBScaleFactor

DBObjPtr<CDCDedxScaleFactor> m_DBScaleFactor
private

Scale factor to make electrons ~1.

Definition at line 173 of file CDCDedxPIDModule.h.

◆ m_DBSigmaPars

DBObjPtr<CDCDedxSigmaPars> m_DBSigmaPars
private

dE/dx resolution parameters

Definition at line 190 of file CDCDedxPIDModule.h.

◆ m_DBWireGains

DBObjPtr<CDCDedxWireGain> m_DBWireGains
private

Wire gain DB object.

Definition at line 178 of file CDCDedxPIDModule.h.

◆ m_dedxLikelihoods

StoreArray<CDCDedxLikelihood> m_dedxLikelihoods
private

Output array of CDCDedxLikelihoods.

Definition at line 91 of file CDCDedxPIDModule.h.

◆ m_dedxTracks

StoreArray<CDCDedxTrack> m_dedxTracks
private

Output array of CDCDedxTracks.

Definition at line 90 of file CDCDedxPIDModule.h.

◆ m_description

std::string m_description
privateinherited

The description of the module.

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

◆ m_hadronpars

std::vector<double> m_hadronpars
private

hadron saturation parameters

Definition at line 184 of file CDCDedxPIDModule.h.

◆ m_hasReturnValue

bool m_hasReturnValue
privateinherited

True, if the return value is set.

Definition at line 518 of file Module.h.

◆ m_ignoreMissingParticles

bool m_ignoreMissingParticles
private

Ignore particles for which no PDFs are found.

Definition at line 170 of file CDCDedxPIDModule.h.

◆ m_logConfig

LogConfig m_logConfig
privateinherited

The log system configuration of the module.

Definition at line 514 of file Module.h.

◆ m_mcparticles

StoreArray<MCParticle> m_mcparticles
private

Optional array of input MCParticles.

Definition at line 98 of file CDCDedxPIDModule.h.

◆ m_meanpars

std::vector<double> m_meanpars
private

dE/dx mean parameters

Definition at line 154 of file CDCDedxPIDModule.h.

◆ m_moduleParamList

ModuleParamList m_moduleParamList
privateinherited

List storing and managing all parameter of the module.

Definition at line 516 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 508 of file Module.h.

◆ m_nLayerWires

int m_nLayerWires[9] = {}
private

number of wires per layer: needed for wire gain calibration

Definition at line 186 of file CDCDedxPIDModule.h.

◆ m_onlyPrimaryParticles

bool m_onlyPrimaryParticles
private

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

Definition at line 169 of file CDCDedxPIDModule.h.

◆ m_package

std::string m_package
privateinherited

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

Definition at line 510 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 512 of file Module.h.

◆ m_recoTracks

StoreArray<RecoTrack> m_recoTracks
private

Required array of input RecoTracks.

Definition at line 95 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 163 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 162 of file CDCDedxPIDModule.h.

◆ m_returnValue

int m_returnValue
privateinherited

The return value.

Definition at line 519 of file Module.h.

◆ m_sigmapars

std::vector<double> m_sigmapars
private

dE/dx resolution parameters

Definition at line 155 of file CDCDedxPIDModule.h.

◆ m_trackLevel

bool m_trackLevel
private

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

Definition at line 160 of file CDCDedxPIDModule.h.

◆ m_tracks

StoreArray<Track> m_tracks
private

Required array of input Tracks.

Definition at line 94 of file CDCDedxPIDModule.h.

◆ m_type

std::string m_type
privateinherited

The type of the module, saved as a string.

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

◆ m_usePrediction

bool m_usePrediction
private

Whether to use parameterized means and resolutions or lookup tables.

Definition at line 161 of file CDCDedxPIDModule.h.


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