Back to home page

Project CMSSW displayed by LXR

 
 

    


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();  //special mode --> use only seeds which generated cmssw reco track
0036     int clean_cms_simtracks();
0037     int clean_cms_seedtracks(
0038         TrackVec *seed_ptr = nullptr);    //operates on seedTracks_; returns the number of cleaned seeds
0039     int clean_cms_seedtracks_badlabel();  //operates on seedTracks_, removes those with label == -1;
0040     void relabel_bad_seedtracks();
0041     void relabel_cmsswtracks_from_seeds();
0042 
0043     int select_tracks_iter(unsigned int n = 0);  //for cmssw input
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_;  // XXXX Read/Write of BeamSpot + file-version bump or extra-section to be added.
0057     std::vector<HitVec> layerHits_;
0058     std::vector<std::vector<uint64_t>> layerHitMasks_;  //aligned with layerHits_
0059     MCHitInfoVec simHitsInfo_;
0060 
0061     TrackVec simTracks_, seedTracks_, candidateTracks_, fitTracks_;
0062     TrackVec cmsswTracks_;
0063     // validation sets these, so needs to be mutable
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;  //last update with ph2 geom
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);  //override nevents in the header and close
0122   };
0123 
0124   void print(std::string pfx, int itrack, const Track &trk, const Event &ev);
0125 
0126 }  // end namespace mkfit
0127 #endif