00001 #ifndef DETECTORPROPERTIES_CC 00002 #define DETECTORPROPERTIES_CC 00003 00004 #include "DetectorProperties.hh" 00005 00006 namespace larutil { 00007 00008 DetectorProperties* DetectorProperties::_me = 0; 00009 00010 DetectorProperties::DetectorProperties(bool default_load) : LArUtilBase() 00011 { 00012 _name = "DetectorProperties"; 00013 if(default_load) { 00014 _file_name = Form("%s/LArUtil/dat/%s", 00015 getenv("LARLIGHT_CORE_DIR"), 00016 kUTIL_DATA_FILENAME[LArUtilConfig::Detector()].c_str()); 00017 _tree_name = kTREENAME_DETECTORPROPERTIES; 00018 LoadData(); 00019 } 00020 } 00021 00022 void DetectorProperties::ClearData() 00023 { 00024 fSamplingRate = larlight::DATA::INVALID_DOUBLE; 00025 fTriggerOffset = larlight::DATA::INVALID_INT; 00026 fElectronsToADC = larlight::DATA::INVALID_DOUBLE; 00027 fNumberTimeSamples = larlight::DATA::INVALID_UINT; 00028 fReadOutWindowSize = larlight::DATA::INVALID_UINT; 00029 00030 fTimeOffsetU = larlight::DATA::INVALID_DOUBLE; 00031 fTimeOffsetV = larlight::DATA::INVALID_DOUBLE; 00032 fTimeOffsetZ = larlight::DATA::INVALID_DOUBLE; 00033 00034 fXTicksCoefficient = larlight::DATA::INVALID_DOUBLE; 00035 fXTicksOffsets.clear(); 00036 00037 } 00038 00039 bool DetectorProperties::ReadTree() 00040 { 00041 00042 ClearData(); 00043 TChain *ch = new TChain(_tree_name.c_str()); 00044 ch->AddFile(_file_name.c_str()); 00045 00046 std::string error_msg(""); 00047 if(!(ch->GetBranch("fSamplingRate"))) error_msg += " fSamplingRate\n"; 00048 if(!(ch->GetBranch("fTriggerOffset"))) error_msg += " fTriggerOffset\n"; 00049 if(!(ch->GetBranch("fElectronsToADC"))) error_msg += " fElectronsToADC\n"; 00050 if(!(ch->GetBranch("fNumberTimeSamples"))) error_msg += " fNumberTimeSamples\n"; 00051 if(!(ch->GetBranch("fReadOutWindowSize"))) error_msg += " fReadOutWindowSize\n"; 00052 if(!(ch->GetBranch("fTimeOffsetU"))) error_msg += " fTimeOffsetU\n"; 00053 if(!(ch->GetBranch("fTimeOffsetV"))) error_msg += " fTimeOffsetV\n"; 00054 if(!(ch->GetBranch("fTimeOffsetZ"))) error_msg += " fTimeOffsetZ\n"; 00055 if(!(ch->GetBranch("fXTicksCoefficient"))) error_msg += " fXTicksCoefficient\n"; 00056 if(!(ch->GetBranch("fXTicksOffsets"))) error_msg += " fXTicksOffsets\n"; 00057 if(!error_msg.empty()) { 00058 00059 throw LArUtilException(Form("Missing following TBranches...\n%s",error_msg.c_str())); 00060 00061 return false; 00062 } 00063 00064 ch->SetBranchAddress("fSamplingRate",&fSamplingRate); 00065 ch->SetBranchAddress("fTriggerOffset",&fTriggerOffset); 00066 ch->SetBranchAddress("fElectronsToADC",&fElectronsToADC); 00067 ch->SetBranchAddress("fNumberTimeSamples",&fNumberTimeSamples); 00068 ch->SetBranchAddress("fReadOutWindowSize",&fReadOutWindowSize); 00069 ch->SetBranchAddress("fTimeOffsetU",&fTimeOffsetU); 00070 ch->SetBranchAddress("fTimeOffsetV",&fTimeOffsetV); 00071 ch->SetBranchAddress("fTimeOffsetZ",&fTimeOffsetZ); 00072 ch->SetBranchAddress("fXTicksCoefficient",&fXTicksCoefficient); 00073 00074 std::vector<Double_t> *pXTicksOffsets=nullptr; 00075 ch->SetBranchAddress("fXTicksOffsets",&pXTicksOffsets); 00076 00077 ch->GetEntry(0); 00078 00079 for(size_t i=0; i<pXTicksOffsets->size(); ++i) 00080 fXTicksOffsets.push_back(pXTicksOffsets->at(i)); 00081 00082 delete ch; 00083 return true; 00084 } 00085 00086 } 00087 00088 #endif