Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

BDSwicDevice.cxx

Go to the documentation of this file.
00001 #include "BDSwicDevice.h"
00002 #include "BDSwicCalibrator.h"
00003 
00004 #include <RawData/RawBeamData.h>
00005 #include <Conventions/Munits.h>
00006 
00007 #include <MessageService/MsgService.h>
00008 CVSID("$Id: BDSwicDevice.cxx,v 1.9 2005/08/22 15:40:44 bishai Exp $");
00009 
00010 
00011 #include <string>
00012 using namespace std;
00013 
00014 BDSwicDevice::BDSwicDevice()
00015     : RawBeamSwicData()
00016     , fPeds(96,0)
00017     , fMask(96,1)
00018     , fNoise(96,0.1)
00019     , fMvPerADC(-0.30518)
00020     , fScale(1.0)
00021     , fGain(1.0)
00022     , fCap(0)
00023     , fType(kUnknown)
00024 
00025 {
00026 }
00027 
00028 BDSwicDevice::BDSwicDevice(const RawBeamData& swic_data)
00029     : RawBeamSwicData(swic_data)
00030     , fPeds(96,0)
00031     , fMask(96,1)
00032     , fNoise(96,0.1)
00033     , fMvPerADC(-0.30518)
00034     , fScale(1.0)
00035     , fGain(1.0)
00036     , fCap(0)
00037     , fType(kUnknown)
00038 {
00039     this->RawBeamSwicData::UnscaledWireData(fData);
00040     this->UpdateType();
00041     BDSwicCalibrator::Get().AddDevice(*this);
00042 }
00043 
00044 BDSwicDevice::~BDSwicDevice()
00045 {
00046     BDSwicCalibrator::Get().RemoveDevice(*this);
00047 }
00048 void BDSwicDevice::SetData(const RawBeamData& swic_data)
00049 {
00050     this->RawBeamSwicData::SetData(swic_data);
00051 
00052     if (!this->IsValid())
00053         MSG("BDU",Msg::kInfo) << swic_data.GetName() << " given invalid data\n";
00054 
00055 
00056     fData.clear();
00057     this->RawBeamSwicData::UnscaledWireData(fData);
00058 
00059     this->UpdateType();
00060     BDSwicCalibrator::Get().AddDevice(*this);
00061 }
00062 void BDSwicDevice::UpdateType()
00063 {
00064     if (!this->IsValid()) {
00065         MSG("BDU",Msg::kWarning)
00066             << "BDSwicDevice: Attempt to update with invalid data\n";
00067         fType = kUnknown;
00068         return;
00069     }
00070     string name = this->GetData().GetName();
00071     if (name == "E:HADMDS") {
00072         fType = kHadron;
00073         return;
00074     }
00075     if (name == "E:MMA1DS" || name == "E:MMA2DS" || name == "E:MMA3DS") {
00076         fType = kMuon;
00077         return;
00078     }
00079     if (name == "E:M117DS") {
00080         fType = kWire;
00081         return;
00082     }
00083     fType = kProfile;           // should do explicit check.  meh.
00084 }
00085 
00086 bool BDSwicDevice::SetPeds(const std::vector<double>& peds)
00087 {
00088     if (peds.size() != 96) return false;
00089     fPeds = peds;
00090     return true;
00091 }
00092 bool BDSwicDevice::SetMask(const std::vector<double>& mask)
00093 {
00094     if (mask.size() != 96) return false;
00095     fMask = mask;
00096     return true;
00097 }
00098 
00099 bool BDSwicDevice::SetNoise(const std::vector<double>& noise)
00100 {
00101     if (noise.size() != 96) return false;
00102     fNoise = noise;
00103     return true;
00104 }
00105 
00106 
00107 void BDSwicDevice::SetScale(double scale)
00108 {
00109     fScale = scale;
00110 }
00111 void BDSwicDevice::SetMvPerADC(double mvperadc)
00112 {
00113     fMvPerADC = mvperadc;
00114 }
00115 void BDSwicDevice::SetGainCorrection(double gain)
00116 {
00117     fGain = gain;
00118 }
00119 void BDSwicDevice::SetCapacitance(double cap)
00120 {
00121     fCap = cap;    
00122 }
00123 
00124 
00125 double BDSwicDevice::GetVoltage(int index) const
00126 {
00127     if (!fData.size() || index < 0 || index >= 96) {
00128         MSG("BDU",Msg::kWarning)
00129             << "BDSwicDevice::GetVoltage given bad index: " << index << endl;
00130         return 0;
00131     }
00132     return fScale*fMvPerADC*(fData[index] - fPeds[index])*fMask[index]*Munits::millivolt;
00133 }
00134 
00135 
00136 double BDSwicDevice::GetNoise(int index) const
00137 {
00138     if (!fData.size() || index < 0 || index >= 96) {
00139         MSG("BDU",Msg::kWarning)
00140             << "BDSwicDevice::GetNoise given bad index: " << index << endl;
00141         return 0;
00142     }
00143     return fScale*fMvPerADC*fNoise[index]*Munits::millivolt;
00144 }
00145 
00146 double BDSwicDevice::GetTotalVoltage()
00147 {
00148     if (!fData.size()) return 0.0;
00149     double ret=0;
00150     for (int ind=0; ind<96; ++ind)
00151         ret += (fData[ind] - fPeds[ind])*fMask[ind];
00152     ret *= fScale*fMvPerADC*Munits::millivolt;
00153     return ret;
00154 }
00155 double BDSwicDevice::GetCharge(int index) const
00156 {
00157     return this->GetVoltage(index)*fCap;
00158 }
00159 double BDSwicDevice::GetTotalCharge()
00160 {
00161     if (fCap == 0.0) {
00162         MSG("BDU",Msg::kWarning)
00163             << "BDSwicDevice::GetTotalCharge called but capacitance is zero\n";
00164         return 0;
00165     }
00166     return this->GetTotalVoltage() * fCap;
00167 }

Generated on Sat Nov 21 22:45:30 2009 for loon by  doxygen 1.3.9.1