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