All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
CLICPfoSelector.h
Go to the documentation of this file.
1 #ifndef CLICPFOSELECTOR_H
2 #define CLICPFOSELECTOR 1
3 
4 #include <EVENT/ReconstructedParticle.h>
5 #include <algorithm>
6 #include <map>
7 #include <set>
8 #include <string>
9 #include "HelixClass.h"
10 #include "PfoUtilities.h"
11 #include "TrackHitPair.h"
12 #include "lcio.h"
13 #include "marlin/Processor.h"
14 
15 using namespace lcio;
16 using namespace marlin;
17 
18 /** === CLICPfoSelector Processor === <br>
19  * Processor to select good pfos based on timing
20  */
21 
22 class CLICPfoSelector : public Processor {
23 public:
24  virtual Processor* newProcessor() { return new CLICPfoSelector; }
26  virtual void init();
27  virtual void processRunHeader(LCRunHeader* run);
28  virtual void processEvent(LCEvent* evt);
29  virtual void check(LCEvent* evt);
30  virtual void end();
31 
32 protected:
33  void CleanUp();
34 
35  int _nRun = -1;
36  int _nEvt = -1;
37 
38  float _bField = 0.0;
39 
40  std::string m_inputPfoCollection{}; ///< Input PFO collection name
41  std::string m_selectedPfoCollection{}; ///< Output PFO collection name
42  int m_monitoring = 0; ///< Whether to display monitoring information
43  int m_displaySelectedPfos = 0; ///< Whether to display monitoring information concerning selected pfos
44  int m_displayRejectedPfos = 0; ///< Whether to display monitoring information concerning rejected pfos
45  float m_monitoringPfoEnergyToDisplay = 1.0; ///< Minimum pfo energy in order to display monitoring information
46  int m_correctHitTimesForTimeOfFlight = 0; ///< Correct hit times for straight line time of flight
47  int m_checkProtonCorrection = 0; ///< Check proton hypothesis
48  int m_checkKaonCorrection = 0; ///< Check charged hypothesis
49  int m_keepKShorts = 1; ///< Keep kshorts
50  int m_useNeutronTiming = 0; ///< Attempt to make a (dubious) neutron timing correction
51  float m_minimumEnergyForNeutronTiming = 1.0; ///< Minimum energy for attempted neutron timing correction
52 
53  float m_farForwardCosTheta = 0.975; ///< Value of cos theta identifying the detector forward region
54  float m_ptCutForTightTiming = 0.75; ///< The pt value below which tight timing cuts are used
55 
56  float m_photonPtCut = 0.0; ///< The basic pt cut for a photon pfo
57  float m_photonPtCutForLooseTiming = 4.0; ///< The photon pt value below which tight timing cuts are used
58  float m_photonLooseTimingCut = 2.0; ///< The photon loose high timing cut
59  float m_photonTightTimingCut = 1.0; ///< The photon tight high timing cut
60 
61  float m_chargedPfoPtCut = 0.0; ///< The basic pt cut for a charged hadron pfo
62  float m_chargedPfoPtCutForLooseTiming = 4.0; ///< The charged hadron pt value below which tight timing cuts are used
63  float m_chargedPfoLooseTimingCut = 3.0; ///< The charged hadron loose high timing cut
64  float m_chargedPfoTightTimingCut = 1.5; ///< The charged hadron tight high timing cut
65  float m_chargedPfoNegativeLooseTimingCut = -1.0; ///< The charged hadron loose low timing cut
66  float m_chargedPfoNegativeTightTimingCut = -0.5; ///< The charged hadron tight low timing cut
67 
68  float m_neutralHadronPtCut = 0.0; ///< The basic pt cut for a neutral hadron pfo
69  float m_neutralHadronPtCutForLooseTiming = 8.0; ///< The neutral hadron pt value below which tight timing cuts are used
70  float m_neutralHadronLooseTimingCut = 2.5; ///< The neutral hadron loose high timing cut
71  float m_neutralHadronTightTimingCut = 1.5; ///< The neutral hadron tight high timing cut
72  float m_neutralFarForwardLooseTimingCut = 2.0; ///< The neutral hadron loose high timing cut for the forward region
73  float m_neutralFarForwardTightTimingCut = 1.0; ///< The neutral hadron tight high timing cut for the forward region
74  float m_photonFarForwardLooseTimingCut = 2.0; ///< The photon loose high timing cut for the forward region
75  float m_photonFarForwardTightTimingCut = 1.0; ///< The photon tight high timing cut for the forward region
76 
77  float m_hCalBarrelLooseTimingCut = 20.0; ///< The loose timing cut for hits predominantly in hcal barrel
78  float m_hCalBarrelTightTimingCut = 10.0; ///< The tight timing cut for hits predominantly in hcal barrel
79  float m_hCalEndCapTimingFactor = 1.0; ///< Factor by which high timing cut is multiplied for hcal barrel hits
80  float m_neutralHadronBarrelPtCutForLooseTiming =
81  3.5; ///< pt above which loose timing cuts are applied to neutral hadrons in barrel
82 
83  int m_minECalHitsForTiming = 5; ///< Minimum ecal hits in order to use ecal timing info
84  int m_minHCalEndCapHitsForTiming = 5; ///< Minimum hcal endcap hits in order to use hcal endcap timing info
85 
86  int m_useClusterLessPfos = 1; ///< Whether to accept any cluster-less pfos
87  float m_minMomentumForClusterLessPfos = 0.5; ///< Minimum momentum for a cluster-less pfo
88  float m_maxMomentumForClusterLessPfos = 2.0; ///< Minimum momentum for a cluster-less pfo
89  float m_minPtForClusterLessPfos = 0.5; ///< Minimum pT for a cluster-less pfo
90  float m_clusterLessPfoTrackTimeCut = 10.0; ///< Maximum arrival time at Ecal for cluster-less pfo
91  float m_forwardCosThetaForHighEnergyNeutralHadrons =
92  0.95; ///< Forward region of HCAL where timing cuts will be applied to all neutral hadrons
93  float m_forwardHighEnergyNeutralHadronsEnergy =
94  10.0; ///< Energy cut for specific HCAL timing requirements cuts for neutral hadrons
95 };
96 
97 #endif
=== CLICPfoSelector Processor === Processor to select good pfos based on timing ...
virtual Processor * newProcessor()