File indexing completed on 2025-08-05 08:15:18
0001 #ifndef __TRACKDEADLAYERTAGGING_H__
0002 #define __TRACKDEADLAYERTAGGING_H__
0003
0004 #include <fun4all/SubsysReco.h>
0005 #include <string>
0006 #include <trackbase_historic/TrackSeedContainer.h>
0007 #include <trackbase_historic/SvtxTrackMap.h>
0008 #include <trackbase/ActsGeometry.h>
0009 #include <globalvertex/SvtxVertexMap.h>
0010 #include <trackbase/TrackVertexCrossingAssoc.h>
0011 #include <trackbase/TrkrClusterContainer.h>
0012 #include <g4detectors/PHG4CylinderGeomContainer.h>
0013 #include <trackreco/ActsPropagator.h>
0014
0015
0016 class PHCompositeNode;
0017 class TFile;
0018 class TTree;
0019 class TNtuple;
0020
0021 struct MissingSensor
0022 {
0023 int event;
0024 int trackID;
0025 int layer;
0026 int phi_id;
0027 int z_id;
0028 int local_x;
0029 int local_y;
0030 bool operator==(const MissingSensor& state)
0031 {
0032 return (event==state.event)&&
0033 (trackID==state.trackID)&&
0034 (layer==state.layer)&&
0035 (phi_id==state.phi_id)&&
0036 (z_id==state.z_id)&&
0037 (local_x==state.local_x)&&
0038 (local_y==state.local_y);
0039 }
0040 };
0041
0042 struct MissingSpacePoint
0043 {
0044 int layer;
0045 Surface surface;
0046 Acts::Vector2 local_intersection;
0047 Acts::Vector3 global_intersection;
0048 };
0049
0050
0051 class TrackDeadLayerTagging: public SubsysReco
0052 {
0053 public:
0054
0055 TrackDeadLayerTagging(const std::string &name="TrackDeadLayerTagging");
0056
0057
0058 int Init(PHCompositeNode *);
0059
0060
0061 int process_event(PHCompositeNode *);
0062
0063
0064 int End(PHCompositeNode *);
0065
0066
0067 void set_filename(const char* file)
0068 { if(file) _outfile = file; }
0069
0070 void setUseActsPropagator(bool val) { useActsPropagator = val; }
0071 void setIgnoreSilicon(bool val) { ignoreSilicon = val; }
0072 void setIgnoreTpc(bool val) { ignoreTpc = val; }
0073
0074 private:
0075
0076 std::string _outfile;
0077
0078
0079 int _event;
0080
0081
0082 int _trackID;
0083 int _layer;
0084 int _phiID;
0085 int _zID;
0086 int _localindX;
0087 int _localindY;
0088 int _isDead;
0089
0090
0091 bool useActsPropagator = true;
0092
0093 bool ignoreSilicon = false;
0094 bool ignoreTpc = false;
0095
0096 TrkrClusterContainer* _clustermap = nullptr;
0097 SvtxTrackMap* _trackmap = nullptr;
0098 SvtxVertexMap* _vertexmap = nullptr;
0099 ActsGeometry* _tGeometry = nullptr;
0100 PHG4CylinderGeomContainer* _inttGeom = nullptr;
0101
0102 std::array<std::vector<MissingSensor>,57> _dead_sensors;
0103
0104 TTree* _missing_sensors = nullptr;
0105
0106
0107 void GetNodes(PHCompositeNode *);
0108
0109 void get_dead_sensor_maps();
0110 void get_surfaces();
0111 bool is_dead(MissingSensor& sensor);
0112
0113 std::map<Acts::GeometryIdentifier,TrkrDefs::hitsetkey> _surface_map;
0114 std::vector<float> getFitParams(TrackSeed* seed);
0115 std::vector<int> get_missing_layers(SvtxTrack* track);
0116 std::vector<MissingSpacePoint> get_missing_space_points(SvtxTrack* track, std::vector<int> missing_layers);
0117 std::vector<MissingSensor> find_sensors(std::vector<MissingSpacePoint> &missing_space_points);
0118
0119 void find_dead_layers(PHCompositeNode *);
0120 };
0121
0122 #endif