File indexing completed on 2023-03-17 11:22:41
0001 #ifndef RecoTracker_MkFitCore_standalone_Event_h
0002 #define RecoTracker_MkFitCore_standalone_Event_h
0003
0004 #include "RecoTracker/MkFitCore/interface/Track.h"
0005 #include "Validation.h"
0006 #include "RecoTracker/MkFitCore/interface/Config.h"
0007
0008 #include <mutex>
0009
0010 namespace mkfit {
0011
0012 struct DataFile;
0013
0014 class Event {
0015 public:
0016 explicit Event(int evtID, int nLayers);
0017 Event(Validation &v, int evtID, int nLayers);
0018
0019 void reset(int evtID);
0020 void validate();
0021 void printStats(const TrackVec &, TrackExtraVec &);
0022
0023 int evtID() const { return evtID_; }
0024 void resetLayerHitMap(bool resetSimHits);
0025
0026 void write_out(DataFile &data_file);
0027 void read_in(DataFile &data_file, FILE *in_fp = 0);
0028 int write_tracks(FILE *fp, const TrackVec &tracks);
0029 int read_tracks(FILE *fp, TrackVec &tracks, bool skip_reading = false);
0030
0031 void setInputFromCMSSW(std::vector<HitVec> hits, TrackVec seeds);
0032
0033 void kludge_cms_hit_errors();
0034
0035 int use_seeds_from_cmsswtracks();
0036 int clean_cms_simtracks();
0037 int clean_cms_seedtracks(
0038 TrackVec *seed_ptr = nullptr);
0039 int clean_cms_seedtracks_badlabel();
0040 void relabel_bad_seedtracks();
0041 void relabel_cmsswtracks_from_seeds();
0042
0043 int select_tracks_iter(unsigned int n = 0);
0044
0045 void fill_hitmask_bool_vectors(int track_algo, std::vector<std::vector<bool>> &layer_masks);
0046 void fill_hitmask_bool_vectors(std::vector<int> &track_algo_vec, std::vector<std::vector<bool>> &layer_masks);
0047
0048 void print_tracks(const TrackVec &tracks, bool print_hits) const;
0049
0050 Validation &validation_;
0051
0052 private:
0053 int evtID_;
0054
0055 public:
0056 BeamSpot beamSpot_;
0057 std::vector<HitVec> layerHits_;
0058 std::vector<std::vector<uint64_t>> layerHitMasks_;
0059 MCHitInfoVec simHitsInfo_;
0060
0061 TrackVec simTracks_, seedTracks_, candidateTracks_, fitTracks_;
0062 TrackVec cmsswTracks_;
0063
0064 mutable TrackExtraVec simTracksExtra_, seedTracksExtra_, candidateTracksExtra_, fitTracksExtra_;
0065 mutable TrackExtraVec cmsswTracksExtra_;
0066
0067 TSVec simTrackStates_;
0068 static std::mutex printmutex;
0069 };
0070
0071 typedef std::vector<Event> EventVec;
0072
0073 struct DataFileHeader {
0074 int f_magic = 0xBEEF;
0075 int f_format_version = 7;
0076 int f_sizeof_track = sizeof(Track);
0077 int f_sizeof_hit = sizeof(Hit);
0078 int f_sizeof_hot = sizeof(HitOnTrack);
0079 int f_n_layers = -1;
0080 int f_n_events = -1;
0081
0082 int f_extra_sections = 0;
0083
0084 DataFileHeader() = default;
0085 };
0086
0087 struct DataFile {
0088 enum ExtraSection {
0089 ES_SimTrackStates = 0x1,
0090 ES_Seeds = 0x2,
0091 ES_CmsswTracks = 0x4,
0092 ES_HitIterMasks = 0x8,
0093 ES_BeamSpot = 0x10
0094 };
0095
0096 FILE *f_fp = 0;
0097 long f_pos = sizeof(DataFileHeader);
0098
0099 DataFileHeader f_header;
0100
0101 std::mutex f_next_ev_mutex;
0102
0103
0104
0105 bool hasSimTrackStates() const { return f_header.f_extra_sections & ES_SimTrackStates; }
0106 bool hasSeeds() const { return f_header.f_extra_sections & ES_Seeds; }
0107 bool hasCmsswTracks() const { return f_header.f_extra_sections & ES_CmsswTracks; }
0108 bool hasHitIterMasks() const { return f_header.f_extra_sections & ES_HitIterMasks; }
0109 bool hasBeamSpot() const { return f_header.f_extra_sections & ES_BeamSpot; }
0110
0111 int openRead(const std::string &fname, int expected_n_layers);
0112 void openWrite(const std::string &fname, int n_layers, int n_ev, int extra_sections = 0);
0113
0114 void rewind();
0115
0116 int advancePosToNextEvent(FILE *fp);
0117
0118 void skipNEvents(int n_to_skip);
0119
0120 void close();
0121 void CloseWrite(int n_written);
0122 };
0123
0124 void print(std::string pfx, int itrack, const Track &trk, const Event &ev);
0125
0126 }
0127 #endif