-
Notifications
You must be signed in to change notification settings - Fork 15
/
Event.h
130 lines (95 loc) · 3.67 KB
/
Event.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#ifndef _event_
#define _event_
#include "Track.h"
#include "Validation.h"
#include "Config.h"
#include <mutex>
namespace mkfit {
struct DataFile;
class Event
{
public:
explicit Event(int evtID);
Event(Validation& v, int evtID);
void Reset(int evtID);
void Validate();
void PrintStats(const TrackVec&, TrackExtraVec&);
int evtID() const {return evtID_;}
void resetLayerHitMap(bool resetSimHits);
void write_out(DataFile &data_file);
void read_in (DataFile &data_file, FILE *in_fp=0);
int write_tracks(FILE *fp, const TrackVec& tracks);
int read_tracks (FILE *fp, TrackVec& tracks, bool skip_reading = false);
void setInputFromCMSSW(std::vector<HitVec> hits, TrackVec seeds);
void kludge_cms_hit_errors();
int use_seeds_from_cmsswtracks(); //special mode --> use only seeds which generated cmssw reco track
int clean_cms_simtracks();
int clean_cms_seedtracks(TrackVec *seed_ptr = nullptr); //operates on seedTracks_; returns the number of cleaned seeds
int clean_cms_seedtracks_badlabel(); //operates on seedTracks_, removes those with label == -1;
void relabel_bad_seedtracks();
void relabel_cmsswtracks_from_seeds();
int select_tracks_iter(unsigned int n=0);//for cmssw input
void fill_hitmask_bool_vectors(int track_algo, std::vector<std::vector<bool>> &layer_masks);
void fill_hitmask_bool_vectors(std::vector<int> &track_algo_vec, std::vector<std::vector<bool>> &layer_masks);
void print_tracks(const TrackVec& tracks, bool print_hits) const;
Validation& validation_;
private:
int evtID_;
public:
BeamSpot beamSpot_; // XXXX Read/Write of BeamSpot + file-version bump or extra-section to be added.
std::vector<HitVec> layerHits_;
std::vector<std::vector<uint64_t> > layerHitMasks_;//aligned with layerHits_
MCHitInfoVec simHitsInfo_;
TrackVec simTracks_, seedTracks_, candidateTracks_, fitTracks_;
TrackVec cmsswTracks_;
// validation sets these, so needs to be mutable
mutable TrackExtraVec simTracksExtra_, seedTracksExtra_, candidateTracksExtra_, fitTracksExtra_;
mutable TrackExtraVec cmsswTracksExtra_;
TSVec simTrackStates_;
static std::mutex printmutex;
};
typedef std::vector<Event> EventVec;
struct DataFileHeader
{
int f_magic = 0xBEEF;
int f_format_version = 6;
int f_sizeof_track = sizeof(Track);
int f_sizeof_hit = sizeof(Hit);
int f_sizeof_hot = sizeof(HitOnTrack);
int f_n_layers = -1;
int f_n_events = -1;
int f_extra_sections = 0;
DataFileHeader()
{
f_n_layers = Config::nTotalLayers;
}
};
struct DataFile
{
enum ExtraSection
{
ES_SimTrackStates = 0x1,
ES_Seeds = 0x2,
ES_CmsswTracks = 0x4,
ES_HitIterMasks = 0x8,
ES_BeamSpot = 0x10
};
FILE *f_fp = 0;
long f_pos = sizeof(DataFileHeader);
DataFileHeader f_header;
std::mutex f_next_ev_mutex;
// ----------------------------------------------------------------
bool HasSimTrackStates() const { return f_header.f_extra_sections & ES_SimTrackStates; }
bool HasSeeds() const { return f_header.f_extra_sections & ES_Seeds; }
bool HasCmsswTracks() const { return f_header.f_extra_sections & ES_CmsswTracks; }
bool HasHitIterMasks() const { return f_header.f_extra_sections & ES_HitIterMasks; }
bool HasBeamSpot() const { return f_header.f_extra_sections & ES_BeamSpot; }
int OpenRead (const std::string& fname, bool set_n_layers = false);
void OpenWrite(const std::string& fname, int nev, int extra_sections=0);
int AdvancePosToNextEvent(FILE *fp);
void SkipNEvents(int n_to_skip);
void Close();
void CloseWrite(int n_written); //override nevents in the header and close
};
} // end namespace mkfit
#endif