@@ -70,7 +70,8 @@ class sbnd::crt::CRTTimingAnalysis : public art::EDAnalyzer {
7070
7171 void AnalyseCRTSpacePoints (const std::vector<art::Ptr<CRTSpacePoint>> &CRTSpacePointVec,
7272 const art::FindOneP<CRTCluster> &spacepointsToClusters,
73- const art::FindManyP<CRTStripHit> &clustersToStripHits);
73+ const art::FindManyP<CRTStripHit> &clustersToStripHits,
74+ const art::FindOneP<CRTTrack> &spacepointsToTracks);
7475
7576 void ResetSPVariables ();
7677
@@ -171,6 +172,9 @@ class sbnd::crt::CRTTimingAnalysis : public art::EDAnalyzer {
171172 std::vector<double > _sp_sh_calib_offset_ts0_set;
172173 std::vector<double > _sp_sh_cable_length_ts1_set;
173174 std::vector<double > _sp_sh_calib_offset_ts1_set;
175+ bool _sp_has_track;
176+ double _sp_norm_angle;
177+ double _sp_path_length;
174178
175179 double _tr_start_x;
176180 double _tr_start_y;
@@ -324,6 +328,9 @@ sbnd::crt::CRTTimingAnalysis::CRTTimingAnalysis(fhicl::ParameterSet const& p)
324328 fSPTree ->Branch (" sp_sh_calib_offset_ts0_set" , " std::vector<double>" , &_sp_sh_calib_offset_ts0_set);
325329 fSPTree ->Branch (" sp_sh_cable_length_ts1_set" , " std::vector<double>" , &_sp_sh_cable_length_ts1_set);
326330 fSPTree ->Branch (" sp_sh_calib_offset_ts1_set" , " std::vector<double>" , &_sp_sh_calib_offset_ts1_set);
331+ fSPTree ->Branch (" sp_has_track" , &_sp_has_track);
332+ fSPTree ->Branch (" sp_norm_angle" , &_sp_norm_angle);
333+ fSPTree ->Branch (" sp_path_length" , &_sp_path_length);
327334
328335 fTrTree = fs->make <TTree>(" tracks" ," " );
329336 fTrTree ->Branch (" run" , &_run);
@@ -495,6 +502,9 @@ void sbnd::crt::CRTTimingAnalysis::analyze(art::Event const& e)
495502 // Get CRTSpacePoint to CRTCluster Assns
496503 art::FindOneP<CRTCluster> spacepointsToClusters (CRTSpacePointHandle, e, fCRTSpacePointModuleLabel );
497504
505+ // Get CRTSpacePoint to CRTTrack Assns
506+ art::FindOneP<CRTTrack> spacepointsToTracks (CRTSpacePointHandle, e, fCRTTrackModuleLabel );
507+
498508 // Get CRTClusters
499509 art::Handle<std::vector<CRTCluster>> CRTClusterHandle;
500510 e.getByLabel (fCRTClusterModuleLabel , CRTClusterHandle);
@@ -507,7 +517,7 @@ void sbnd::crt::CRTTimingAnalysis::analyze(art::Event const& e)
507517 art::FindManyP<CRTStripHit> clustersToStripHits (CRTClusterHandle, e, fCRTClusterModuleLabel );
508518
509519 // Fill CRTSpacePoint variables
510- AnalyseCRTSpacePoints (CRTSpacePointVec, spacepointsToClusters, clustersToStripHits);
520+ AnalyseCRTSpacePoints (CRTSpacePointVec, spacepointsToClusters, clustersToStripHits, spacepointsToTracks );
511521
512522 // Get CRTTracks
513523 art::Handle<std::vector<CRTTrack>> CRTTrackHandle;
@@ -736,13 +746,15 @@ void sbnd::crt::CRTTimingAnalysis::SortReferencing()
736746
737747void sbnd::crt::CRTTimingAnalysis::AnalyseCRTSpacePoints (const std::vector<art::Ptr<CRTSpacePoint>> &CRTSpacePointVec,
738748 const art::FindOneP<CRTCluster> &spacepointsToClusters,
739- const art::FindManyP<CRTStripHit> &clustersToStripHits)
749+ const art::FindManyP<CRTStripHit> &clustersToStripHits,
750+ const art::FindOneP<CRTTrack> &spacepointsToTracks)
740751{
741752 for (auto const & sp : CRTSpacePointVec)
742753 {
743754 ResetSPVariables ();
744755
745756 const art::Ptr<CRTCluster> cl = spacepointsToClusters.at (sp.key ());
757+ const art::Ptr<CRTTrack> tr = spacepointsToTracks.at (sp.key ());
746758
747759 const std::vector<art::Ptr<CRTStripHit>> shs = clustersToStripHits.at (cl.key ());
748760 const unsigned n_shs = shs.size ();
@@ -790,6 +802,23 @@ void sbnd::crt::CRTTimingAnalysis::AnalyseCRTSpacePoints(const std::vector<art::
790802 _sp_single_timing_chain = timing_chain_set.size () == 1 ;
791803 _sp_timing_chain = _sp_single_timing_chain ? *timing_chain_set.begin () : -1 ;
792804
805+ if (tr.isNonnull ())
806+ {
807+ _sp_has_track = true ;
808+
809+ TVector3 normal;
810+ if (_sp_tagger == kBottomTagger || _sp_tagger == kTopLowTagger || _sp_tagger == kTopHighTagger )
811+ normal = TVector3 (0 , 1 , 0 );
812+ else if (_sp_tagger == kWestTagger || _sp_tagger == kEastTagger )
813+ normal = TVector3 (1 , 0 , 0 );
814+ else if (_sp_tagger == kSouthTagger || _sp_tagger == kNorthTagger )
815+ normal = TVector3 (0 , 0 , 1 );
816+
817+ const TVector3 tr_dir (tr->Direction ().X (), tr->Direction ().Y (), tr->Direction ().Z ());
818+ _sp_norm_angle = TMath::RadToDeg () * normal.Angle (tr_dir);
819+ _sp_path_length = 1 . / TMath::Cos (normal.Angle (tr_dir));
820+ }
821+
793822 fSPTree ->Fill ();
794823
795824 fSPTaggerMap [sp.key ()] = _sp_tagger;
@@ -824,8 +853,11 @@ void sbnd::crt::CRTTimingAnalysis::ResetSPVariables()
824853 _sp_ts1_rwm_ref_front_face = std::numeric_limits<double >::lowest ();
825854 _sp_ts1_ptb_hlt_beam_gate_ref_front_face = std::numeric_limits<double >::lowest ();
826855 _sp_dts1 = std::numeric_limits<double >::lowest ();
856+ _sp_norm_angle = std::numeric_limits<double >::lowest ();
857+ _sp_path_length = std::numeric_limits<double >::lowest ();
827858
828859 _sp_single_timing_chain = false ;
860+ _sp_has_track = false ;
829861
830862 _sp_sh_channel_set.clear ();
831863 _sp_sh_mac5_set.clear ();
0 commit comments