Back to home page

sPhenix code displayed by LXR

 
 

    


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 //Forward declerations
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 // dNdEta pp analysis module
0051 class TrackDeadLayerTagging: public SubsysReco
0052 {
0053  public: 
0054   //Default constructor
0055   TrackDeadLayerTagging(const std::string &name="TrackDeadLayerTagging");
0056 
0057   //Initialization, called for initialization
0058   int Init(PHCompositeNode *);
0059 
0060   //Process Event, called for each event
0061   int process_event(PHCompositeNode *);
0062 
0063   //End, write and close files
0064   int End(PHCompositeNode *);
0065 
0066   //Change output filename
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   //output filename
0076   std::string _outfile;
0077    
0078   //Event counter
0079   int _event;
0080 
0081   //Branches
0082   int _trackID;
0083   int _layer;
0084   int _phiID;
0085   int _zID;
0086   int _localindX;
0087   int _localindY;
0088   int _isDead;
0089 
0090   // if false, use helix propagation instead of ACTS propagator
0091   bool useActsPropagator = true;
0092   // flags to ignore silicon or TPC missing sensors, if doing seed-specific studies
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; // per layer
0103   
0104   TTree* _missing_sensors = nullptr;
0105 
0106   //Get all the nodes
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 //* __TRACKDEADLAYERTAGGING_H__ *//