1 #include "ToFSenseCorrector.hxx" 2 #include "Parameters.hxx" 3 #include "BasicUtils.hxx" 4 #include "DetectorDefinition.hxx" 5 #include "ND280AnalysisUtils.hxx" 6 #include "CutUtils.hxx" 11 ToFSenseCorrector::ToFSenseCorrector(){
15 ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1FGD2] = (Float_t)ND::params().GetParameterD(
"psycheND280Utils.ToF.FGD1FGD2" );
16 ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1P0D_Track] = (Float_t)ND::params().GetParameterD(
"psycheND280Utils.ToF.FGD1P0D_Track" );
17 ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1ECAL_LAStartFgd_Track] = (Float_t)ND::params().GetParameterD(
"psycheND280Utils.ToF.FGD1ECAL_LAStartFgd_Track" );
18 ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1ECAL_LAStartFgd_Shower] = (Float_t)ND::params().GetParameterD(
"psycheND280Utils.ToF.FGD1ECAL_LAStartFgd_Shower" );
19 ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1ECAL_LAEndFgd_Track] = (Float_t)ND::params().GetParameterD(
"psycheND280Utils.ToF.FGD1ECAL_LAEndFgd_Track" );
20 ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1ECAL_LAEndFgd_Shower] = (Float_t)ND::params().GetParameterD(
"psycheND280Utils.ToF.FGD1ECAL_LAEndFgd_Shower" );
21 ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1ECAL_HAStartFgd_Track] = (Float_t)ND::params().GetParameterD(
"psycheND280Utils.ToF.FGD1ECAL_HAStartFgd_Track" );
22 ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1ECAL_HAStartFgd_Shower] = (Float_t)ND::params().GetParameterD(
"psycheND280Utils.ToF.FGD1ECAL_HAStartFgd_Shower" );
23 ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1ECAL_HAEndFgd_Track] = (Float_t)ND::params().GetParameterD(
"psycheND280Utils.ToF.FGD1ECAL_HAEndFgd_Track" );
24 ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1ECAL_HAEndFgd_Shower] = (Float_t)ND::params().GetParameterD(
"psycheND280Utils.ToF.FGD1ECAL_HAEndFgd_Shower" );
46 anaUtils::CopyArray(dir_tmp_start, track.
DirectionEnd, 3);
89 for (
int i=0; i<nTracks; i++){
90 if (!Tracks[i])
continue;
111 if (topo == kToFTopo_FGD1FGD2) {
112 if ((track.
ToF.FGD1_FGD2 <= ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1FGD2] && !isForward) ||
113 (track.
ToF.FGD1_FGD2 > ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1FGD2] && isForward))
return true;
117 if (topo == ToFSenseCorrector::kToFTopo_FGD1P0D_Track) {
118 if ((track.
ToF.P0D_FGD1 <= ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1P0D_Track] && !isForward) ||
119 (track.
ToF.P0D_FGD1 > ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1P0D_Track] && isForward))
return true;
123 if (topo == ToFSenseCorrector::kToFTopo_FGD1ECAL_LAStartFgd_Track) {
124 if ((track.
ToF.ECal_FGD1 > ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1ECAL_LAStartFgd_Track] && !isForward) ||
125 (track.
ToF.ECal_FGD1 <= ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1ECAL_LAStartFgd_Track] && isForward))
return true;
127 if (topo == ToFSenseCorrector::kToFTopo_FGD1ECAL_LAStartFgd_Shower) {
128 if ((track.
ToF.ECal_FGD1 > ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1ECAL_LAStartFgd_Shower] && !isForward) ||
129 (track.
ToF.ECal_FGD1 <= ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1ECAL_LAStartFgd_Shower] && isForward))
return true;
132 if (topo == ToFSenseCorrector::kToFTopo_FGD1ECAL_LAEndFgd_Track) {
133 if ((track.
ToF.ECal_FGD1 <= ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1ECAL_LAEndFgd_Track] && !isForward) ||
134 (track.
ToF.ECal_FGD1 > ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1ECAL_LAEndFgd_Track] && isForward))
return true;
136 if (topo == ToFSenseCorrector::kToFTopo_FGD1ECAL_LAEndFgd_Shower) {
137 if ((track.
ToF.ECal_FGD1 <= ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1ECAL_LAEndFgd_Shower] && !isForward) ||
138 (track.
ToF.ECal_FGD1 > ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1ECAL_LAEndFgd_Shower] && isForward))
return true;
141 if (topo == ToFSenseCorrector::kToFTopo_FGD1ECAL_HAStartFgd_Track) {
142 if ((track.
ToF.ECal_FGD1 > ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1ECAL_HAStartFgd_Track] && !isForward) ||
143 (track.
ToF.ECal_FGD1 <= ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1ECAL_HAStartFgd_Track] && isForward))
return true;
145 if (topo == ToFSenseCorrector::kToFTopo_FGD1ECAL_HAStartFgd_Shower) {
146 if ((track.
ToF.ECal_FGD1 > ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1ECAL_HAStartFgd_Shower] && !isForward) ||
147 (track.
ToF.ECal_FGD1 <= ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1ECAL_HAStartFgd_Shower] && isForward))
return true;
150 if (topo == ToFSenseCorrector::kToFTopo_FGD1ECAL_HAEndFgd_Track) {
151 if ((track.
ToF.ECal_FGD1 <= ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1ECAL_HAEndFgd_Track] && !isForward) ||
152 (track.
ToF.ECal_FGD1 > ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1ECAL_HAEndFgd_Track] && isForward))
return true;
154 if (topo == ToFSenseCorrector::kToFTopo_FGD1ECAL_HAEndFgd_Shower) {
155 if ((track.
ToF.ECal_FGD1 <= ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1ECAL_HAEndFgd_Shower] && !isForward) ||
156 (track.
ToF.ECal_FGD1 > ToFCutValues[ToFSenseCorrector::kToFTopo_FGD1ECAL_HAEndFgd_Shower] && isForward))
return true;
177 const Float_t* pos_upstream;
178 const Float_t* pos_downstream;
185 if (cutUtils::TrackQualityCut(track)) {
186 if (track.
ToF.Flag_FGD1_FGD2)
return kToFTopo_FGD1FGD2;
187 else if (track.
ToF.Flag_ECal_FGD1) {
195 if (cutUtils::StoppingBrECALorSMRDCut(pos_downstream)!=-1) {
196 if (track.
ToF.Flag_ECal_FGD1) {
206 if (cutUtils::TrackQualityCut(track)) {
207 if (track.
ToF.Flag_P0D_FGD1) {
214 else if (track.
ToF.Flag_ECal_FGD1) {
222 if (cutUtils::StoppingBrECALorSMRDCut(pos_upstream)!=-1) {
223 if (track.
ToF.Flag_ECal_FGD1) {
247 if (count != 1)
return false;
int nP0DSegments
How many P0D tracks are associated with this track.
Float_t PositionStart[4]
The reconstructed start position of the particle.
AnaP0DParticleB * P0DSegments[NMAXP0DS]
The P0D segments that contributed to this global track.
static void ForceForward(AnaTrackB &track)
Force a track to be forward going (if needed)
AnaECALParticleB * ECALSegments[NMAXECALS]
The ECAL segments that contributed to this global track.
int nECALSegments
How many ECAL tracks are associated with this track.
static bool IsForward(const AnaTrackB &track)
Check whether a track is forward going.
Float_t DirectionEnd[3]
The reconstructed end direction of the particle.
Int_t NNodes
The number of nodes in the reconstructed object.
AnaToF ToF
Times of flight between pairs of detectors.
static bool GetDetectorUsed(unsigned long BitField, SubDetId::SubDetEnum det)
Method to see if a certain subdetector or subdetector system is used.
bool TrackUsesDet(const AnaTrackB &track, SubDetId::SubDetEnum det)
Float_t Charge
The reconstructed charge of the particle.
static void FlipTrack(AnaTrackB &track)
Flip a track.
Float_t MomentumFlip
Momentum for the main PID hypothesis and reverse sense.
Float_t Momentum
The reconstructed momentum of the particle, at the start position.
Representation of a true Monte Carlo trajectory/particle.
static ToFTopology GetToFTopology(const AnaTrackB &track)
bool CheckNeedApplyToFBasedFlip(const AnaTrackB &track, ToFTopology topo) const
Check whether a direction(sense) matches ToF.
Representation of a global track.
bool InDetVolume(SubDetId::SubDetEnum det, const Float_t *pos)
Float_t DirectionStart[3]
The reconstructed start direction of the particle.
Float_t PositionEnd[4]
The end position of the true particle.
Float_t Position[4]
The initial position of the true particle.
static bool IsBarrelECAL(const AnaTrackB &track)
Check whether a given track has ECAL segment, if so only BarrelECAL.
Float_t PositionEnd[4]
The reconstructed end position of the particle.