20 #include "TFitResult.h"
28 int main(
int argc ,
char** argv){
34 bool overwriteDetector;
45 catch(
const exception &error) {
46 ERROR(error.what() << endl);
57 TFile in(inputFiles.c_str() ,
"read");
61 string outFile_root = outFile+
".root";
62 string outFile_csv = outFile+
".csv";
63 string outFile_det = outFile+
"_det.csv";
65 TFile output(outFile_root.c_str(),
"RECREATE");
66 cout <<
" Writing histograms to: " << outFile_root << endl;
69 ofstream out_csv(outFile_csv.c_str());
70 cout <<
" Writing fitting data to: " << outFile_csv << endl;
71 out_csv <<
"String,Ref_floor,Tgt_floor,T0,Error" << endl;
79 for(
int j = 1;
j<=num_of_strings;
j++){
80 vmap.insert( make_pair(
j,base_vector) );
83 for(JDetector::iterator module =
detector.begin(); module !=
detector.end(); ++module){
90 for(
int i = 1; i <= Neighbours; i++){
91 int ref_floor = tgt_floor - i;
93 if(ref_floor < 1){
continue; }
97 if( in.GetListOfKeys()->Contains(hist_str.c_str()) ){
99 in.GetObject( hist_str.c_str(), h2D );
102 int bin = c.
getIndex(tgt_floor - 1, ref_floor - 1 ) + 1;
104 hist_name =
"S"+hist_str+
"F"+
to_string(ref_floor)+
"_S"+hist_str+
"F"+
to_string(tgt_floor);
105 TH1D* h1D = h2D->ProjectionY( hist_name.c_str(), bin, bin );
106 if( h1D->GetEntries() < 1 ){
continue; }
109 T0s.push_back( fitresult->Parameter(1) );
110 Errors.push_back( fitresult->ParError(1) );
113 out_csv << string_no <<
"," << ref_floor <<
"," << tgt_floor <<
"," << fitresult->Parameter(1) <<
"," << fitresult->ParError(1) << endl;
115 if(!outFile.empty()){
122 double weighted_T0 = 0;
124 double Sum_of_Weight = 0;
125 for(
size_t i = 0, max = T0s.size(); i != max; ++i ){
126 Weight = 1/Errors[i];
127 weighted_T0 += T0s[i]*Weight;
128 Sum_of_Weight += Weight;
130 if(Sum_of_Weight != 0){
131 weighted_T0 /= Sum_of_Weight;
135 map_type::iterator map_iterator = vmap.find(string_no);
136 map_iterator->second[tgt_floor-1] = weighted_T0;
141 for(
int j = 1;
j<=num_of_strings;
j++){
142 map_type::iterator map_iterator = vmap.find(
j);
144 int n = map_iterator->second.size();
145 double average =
accumulate( map_iterator->second.begin(), map_iterator->second.end(), 0.0)/
n;
147 for(
int j = 0;
j<
n;
j++ ){
148 map_iterator->second[
j] = map_iterator->second[
j] - average;
152 ofstream out_det(outFile_det.c_str());
153 cout <<
" Writing det changes to: " << outFile_det << endl;
154 out_det <<
"String,Floor,T0" << endl;
157 for(JDetector::iterator module =
detector.begin(); module !=
detector.end(); ++module){
161 map_type::iterator map_iterator = vmap.find(string_no);
162 double weighted_T0 = map_iterator->second[tgt_floor-1];
164 if(overwriteDetector){
166 module->getPMT(pmt).addT0(weighted_T0);
169 out_det << string_no <<
"," << tgt_floor <<
"," << weighted_T0 << endl;
173 if(overwriteDetector){
174 cout <<
" Overwriting the detectorfile" << endl;
KM3NeT DAQ constants, bit handling, etc.
Data structure for detector geometry and calibration.
int main(int argc, char **argv)
Direct access to module in detector data structure.
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
int getFloor() const
Get floor number.
int getString() const
Get string number.
Router for direct addressing of module data in detector data structure.
const JModule & getModule(const JObjectID &id) const
Get module parameters.
Utility class to parse command line options.
int getNumberOfFloors(const JDetector &detector)
Get number of floors.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
void store(const std::string &file_name, const JDetector &detector)
Store detector to output file.
static const JStringCounter getNumberOfStrings
Function object to count unique strings.
std::string to_string(const T &value)
Convert value to string.
TFitResultPtr Fit(TH1D *h)
bool comparepair(const pair_type &A, const pair_type &B)
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
KM3NeT DAQ data structures and auxiliaries.
static const int NUMBER_OF_PMTS
Total number of PMTs in module.
std::map< int, range_type > map_type