10 string current_string = environ[iTer++];
11 auto key_position = current_string.find(search_key);
12 auto key_length = search_key.size();
13 if ( key_position < current_string.size() && key_position == 0 && current_string.substr(key_length,1) ==
"=" ) {
14 result = current_string.substr(key_length+key_position+1);
75int eo2do[32] = {22, 20, 18, 16, 24, 26, 28, 30, 25, 27, 29, 31, 23, 21, 19, 17, 9, 11, 13, 15, 7, 5, 3, 1, 6, 4, 2, 0, 8, 10, 12, 14};
78 "alcdaq.fifo_0.root",
"alcdaq.fifo_1.root",
"alcdaq.fifo_2.root",
"alcdaq.fifo_3.root",
79 "alcdaq.fifo_4.root",
"alcdaq.fifo_5.root",
"alcdaq.fifo_6.root",
"alcdaq.fifo_7.root",
80 "alcdaq.fifo_8.root",
"alcdaq.fifo_9.root",
"alcdaq.fifo_10.root",
"alcdaq.fifo_11.root",
81 "alcdaq.fifo_12.root",
"alcdaq.fifo_13.root",
"alcdaq.fifo_14.root",
"alcdaq.fifo_15.root"
84 "alcdaq.fifo_16.root",
"alcdaq.fifo_17.root",
"alcdaq.fifo_18.root",
"alcdaq.fifo_19.root",
85 "alcdaq.fifo_20.root",
"alcdaq.fifo_21.root",
"alcdaq.fifo_22.root",
"alcdaq.fifo_23.root"
90std::vector<std::string>
all_filenames = {
"alcdaq.fifo_0.root",
"alcdaq.fifo_1.root",
"alcdaq.fifo_2.root",
"alcdaq.fifo_3.root",
91 "alcdaq.fifo_4.root",
"alcdaq.fifo_5.root",
"alcdaq.fifo_6.root",
"alcdaq.fifo_7.root",
92 "alcdaq.fifo_8.root",
"alcdaq.fifo_9.root",
"alcdaq.fifo_10.root",
"alcdaq.fifo_11.root",
93 "alcdaq.fifo_12.root",
"alcdaq.fifo_13.root",
"alcdaq.fifo_14.root",
"alcdaq.fifo_15.root",
94 "alcdaq.fifo_16.root",
"alcdaq.fifo_17.root",
"alcdaq.fifo_18.root",
"alcdaq.fifo_19.root",
95 "alcdaq.fifo_20.root",
"alcdaq.fifo_21.root",
"alcdaq.fifo_22.root",
"alcdaq.fifo_23.root",
96 "alcdaq.fifo_24.root"};
106std::pair<int, int>
get_index (
int pixel,
int column );
108int get_global_index (
int fifo,
int pixel,
int column,
int tdc,
bool kUseFIFO =
true );
109std::tuple<Int_t,Int_t,Int_t,Int_t>
121 (
int pixel,
int column ) {
122 int eoch = pixel + 4 * column;
123 int doch =
eo2do[eoch];
129 (
int pixel,
int column ) {
138(
int fifo,
int pixel,
int column,
int tdc,
bool kUseFIFO =
true ) {
142 Bool_t kSkipCorrupted =
false;
143 if ( fifo < 0 ) kSkipCorrupted =
true;
144 if ( pixel < 0 ) kSkipCorrupted =
true;
145 if ( column < 0 ) kSkipCorrupted =
true;
146 if ( tdc < 0 ) kSkipCorrupted =
true;
147 if ( kSkipCorrupted ) {
148 std::cout <<
"[ERROR] Invalid negative value given, failed to determine global index!" << std::endl;
151 int chip = kUseFIFO ? fifo / 4 : fifo;
152 int index = tdc + 4 * pixel + 16 * column + 128 * chip;
156std::tuple<Int_t,Int_t,Int_t,Int_t>
160 std::tuple<Int_t,Int_t,Int_t,Int_t> kResult;
161 get<0>(kResult) = (iIndex/128)%6;
162 get<1>(kResult) = (iIndex/4)%4;
163 get<2>(kResult) = (iIndex/16)%8;
164 get<3>(kResult) = iIndex%4;
173 return (itime < jtime);
178( TTree* kInputTree,
data_t &kReadData ) {
179 if ( !kInputTree ) { std::cout <<
"[ERROR] analysis_utils::load_tree for data_t: Invalid Tree given" << std::endl;
return; }
180 kInputTree->SetBranchAddress(
"fifo", &kReadData.
fifo );
181 kInputTree->SetBranchAddress(
"type", &kReadData.
type );
182 kInputTree->SetBranchAddress(
"counter", &kReadData.
counter );
183 kInputTree->SetBranchAddress(
"column", &kReadData.
column );
184 kInputTree->SetBranchAddress(
"pixel", &kReadData.
pixel );
185 kInputTree->SetBranchAddress(
"tdc", &kReadData.
tdc );
186 kInputTree->SetBranchAddress(
"rollover", &kReadData.
rollover );
187 kInputTree->SetBranchAddress(
"coarse", &kReadData.
coarse );
188 kInputTree->SetBranchAddress(
"fine", &kReadData.
fine );
195 bool has_data =
false;
199 for (
const auto filename : filenames) {
204 const auto pathname = dirname +
"/" + filename;
207 std::cout <<
" --- opening decoded file: " << pathname << std::endl;
208 auto fin = TFile::Open(pathname.c_str());
209 if (!fin || !fin->IsOpen())
continue;
213 auto tin = (TTree *)fin->Get(
"alcor");
214 auto nev = tin->GetEntries();
215 std::cout <<
" --- found " << nev <<
" entries in tree " << std::endl;
216 tin->SetBranchAddress(
"fifo", &data.
fifo);
217 tin->SetBranchAddress(
"type", &data.
type);
218 tin->SetBranchAddress(
"counter", &data.
counter);
219 tin->SetBranchAddress(
"column", &data.
column);
220 tin->SetBranchAddress(
"pixel", &data.
pixel);
221 tin->SetBranchAddress(
"tdc", &data.
tdc);
222 tin->SetBranchAddress(
"rollover", &data.
rollover);
223 tin->SetBranchAddress(
"coarse", &data.
coarse);
224 tin->SetBranchAddress(
"fine", &data.
fine);
228 for (
int iev =
_next_spill[filename]; iev < nev; ++iev) {
239 auto chip = data.
fifo / 4;
243 framed_data[spill][frame][chip][doch].push_back(data);
249 auto &frames = framed_data[spill];
250 for (
auto &frame_data : frames) {
251 auto &chips = frame_data.second;
252 for (
auto &chip_data : chips) {
253 auto &channels = chip_data.second;
254 for (
auto &channel_data : channels) {
255 auto &hits = channel_data.second;
256 std::sort(hits.begin(), hits.end(),
sort_data);
278(
int kVerboseLevel = 4 ) {
279 switch ( kVerboseLevel ) {
string get_environment_variable(string search_key)
Definition analysis_utils.h:5
Definition analysis_utils.h:20
std::vector< std::string > timing_filenames
Definition analysis_utils.h:83
type_t
— Datatype Structure --------------------------------------------------------------------------------...
Definition analysis_utils.h:36
@ kAlcorHit
Definition analysis_utils.h:37
@ kTriggerTag
Definition analysis_utils.h:38
@ kStartSpill
Definition analysis_utils.h:39
@ kEndSpill
Definition analysis_utils.h:40
bool kVerboseWarning
Definition analysis_utils.h:99
const int frame_size
Variables -------------------------------------------------------------------------------------------...
Definition analysis_utils.h:53
std::vector< std::string > data_filenames
— Filenames
Definition analysis_utils.h:77
int get_dochannel(int pixel, int column)
— Implementation — — Getter & Setters
Definition analysis_utils.h:121
bool sort_data(data_t i, data_t j)
— — Data handling
Definition analysis_utils.h:170
std::map< int, channel_data_t > chip_data_t
Definition analysis_utils.h:45
bool kVerboseFatal
Definition analysis_utils.h:101
const TString output_preprocess_directory
Definition analysis_utils.h:63
int get_eochannel(int pixel, int column)
int eo2do[32]
— — Electronics-Detector conversions
Definition analysis_utils.h:75
std::vector< std::string > extra_filenames
Definition analysis_utils.h:87
void load_tree(TTree *kInputTree, data_t &kReadData)
Definition analysis_utils.h:178
bool populate_framed_data(framed_data_t &framed_data, std::string dirname, std::vector< std::string > filenames=all_filenames, int frame_size=1024)
Definition analysis_utils.h:192
const TString intput_rawdata_directory
Definition analysis_utils.h:60
std::map< std::string, int > _next_spill
Definition analysis_utils.h:57
void set_verbose_level(int kVerboseLevel)
Definition analysis_utils.h:278
std::tuple< Int_t, Int_t, Int_t, Int_t > get_full_info(Int_t iIndex)
Definition analysis_utils.h:158
std::vector< std::string > all_filenames
Definition analysis_utils.h:90
const Int_t kGlobalIndexTiming_End
Definition analysis_utils.h:56
const TString intput_rawdata_decoded_file_dir
Definition analysis_utils.h:61
const double rollover_to_us
Definition analysis_utils.h:72
std::map< int, chip_data_t > frame_data_t
Definition analysis_utils.h:46
const Int_t kGlobalIndexRange
Definition analysis_utils.h:54
const Int_t kFineRange
— Finetune analysis
Definition analysis_utils.h:59
const double rollover_to_ns
Definition analysis_utils.h:73
int get_global_index(int fifo, int pixel, int column, int tdc, bool kUseFIFO=true)
Definition analysis_utils.h:138
const TString intput_rawdata_decoded_file
Definition analysis_utils.h:62
std::vector< data_t > channel_data_t
Analysis types --------------------------------------------------------------------------------------...
Definition analysis_utils.h:44
const double coarse_to_ns
Definition analysis_utils.h:68
std::tuple< TString, int > global_identifier_t
Definition analysis_utils.h:49
std::map< int, frame_data_t > spill_data_t
Definition analysis_utils.h:47
const int rollover_to_coarse
— — Rollover
Definition analysis_utils.h:70
std::map< int, spill_data_t > framed_data_t
Definition analysis_utils.h:48
const double rollover_to_s
Definition analysis_utils.h:71
bool kVerboseInfo
— Verbose levels
Definition analysis_utils.h:98
const Int_t kGlobalIndexTiming_Start
Definition analysis_utils.h:55
const double coarse_to_s
— Convertion — — Coarse
Definition analysis_utils.h:66
std::pair< int, int > get_index(int pixel, int column)
Functions -------------------------------------------------------------------------------------------...
Definition analysis_utils.h:129
const double coarse_to_us
Definition analysis_utils.h:67
bool kVerboseError
Definition analysis_utils.h:100
Data Structures — ALCOR output structure.
Definition analysis_utils.h:23
int fifo
Definition analysis_utils.h:24
int pixel
Definition analysis_utils.h:28
int counter
Definition analysis_utils.h:26
int type
Definition analysis_utils.h:25
int column
Definition analysis_utils.h:27
int tdc
Definition analysis_utils.h:29
int coarse
Definition analysis_utils.h:31
int fine
Definition analysis_utils.h:32
int rollover
Definition analysis_utils.h:30