1 #ifndef _mdet_BackEndSiPM_h
2 #define _mdet_BackEndSiPM_h
4 #include <mdet/MComponentGroup.h>
5 #include <mdet/MDetectorComponent.h>
7 #include <utl/Validated.h>
14 struct ComponentUpdater;
105 return "(x*TMath::TwoPi()*10^6*[0]*pow(10,27)*([3]*pow(10,27)*x*TMath::TwoPi()*10^6-[1]*pow(10,10)*(x*TMath::TwoPi()*10^6)^3))/"
106 "(((x*TMath::TwoPi()*10^6)^4-[2]*pow(10,19)*(x*TMath::TwoPi()*10^6)^2+[4]*pow(10,32))^2+"
107 "([3]*pow(10,27)*x*TMath::TwoPi()*10^6-[1]*pow(10,10)*(x*TMath::TwoPi()*10^6)^3)^2)";
111 return "(x*TMath::TwoPi()*10^6*[0]*pow(10,27)*((x*TMath::TwoPi()*10^6)^4-[2]*pow(10,19)*(x*TMath::TwoPi()*10^6)^2+[4]*pow(10,32)))/"
112 "(((x*TMath::TwoPi()*10^6)^4-[2]*pow(10,19)*(x*TMath::TwoPi()*10^6)^2+[4]*pow(10,32))^2+"
113 "([3]*pow(10,27)*x*TMath::TwoPi()*10^6-[1]*pow(10,10)*(x*TMath::TwoPi()*10^6)^3)^2)";
127 return "(x*TMath::TwoPi()*10^6*[0]*pow(10,27)*([3]*pow(10,27)*x*TMath::TwoPi()*10^6-[1]*pow(10,9)*(x*TMath::TwoPi()*10^6)^3))/"
128 "(((x*TMath::TwoPi()*10^6)^4-[2]*pow(10,19)*(x*TMath::TwoPi()*10^6)^2+[4]*pow(10,31))^2+"
129 "([3]*pow(10,27)*x*TMath::TwoPi()*10^6-[1]*pow(10,9)*(x*TMath::TwoPi()*10^6)^3)^2)";
133 return "(x*TMath::TwoPi()*10^6*[0]*pow(10,27)*((x*TMath::TwoPi()*10^6)^4-[2]*pow(10,19)*(x*TMath::TwoPi()*10^6)^2+[4]*pow(10,31)))/"
134 "(((x*TMath::TwoPi()*10^6)^4-[2]*pow(10,19)*(x*TMath::TwoPi()*10^6)^2+[4]*pow(10,31))^2+"
135 "([3]*pow(10,27)*x*TMath::TwoPi()*10^6-[1]*pow(10,9)*(x*TMath::TwoPi()*10^6)^3)^2)";
153 return "-1*[9]*(-(x*TMath::TwoPi()*10^6)^2*[0]*pow(10,54)*(-[2]*pow(10,10)*(x*TMath::TwoPi()*10^6)^6+[4]*pow(10,36)*"
154 "(x*TMath::TwoPi()*10^6)^4-[6]*pow(10,54)*(x*TMath::TwoPi()*10^6)^2+[8]*pow(10,64))+(x*TMath::TwoPi()*10^6)*[1]*pow(10,59)*"
155 "([3]*pow(10,25)*(x*TMath::TwoPi()*10^6)^5-[5]*pow(10,45)*(x*TMath::TwoPi()*10^6)^3+(x*TMath::TwoPi()*10^6)*"
156 "[7]*pow(10,59)))/((-[2]*pow(10,10)*(x*TMath::TwoPi()*10^6)^6+[4]*pow(10,36)*(x*TMath::TwoPi()*10^6)^4-[6]*pow(10,54)*"
157 "(x*TMath::TwoPi()*10^6)^2+[8])^2+([3]*pow(10,25)*(x*TMath::TwoPi()*10^6)^5-[5]*pow(10,45)*(x*TMath::TwoPi()*10^6)^3+"
158 "(x*TMath::TwoPi()*10^6)*[7]*pow(10,59))^2)";
163 return "-1*[9]*((x*TMath::TwoPi()*10^6)*[1]*pow(10,59)*(-[2]*pow(10,10)*(x*TMath::TwoPi()*10^6)^6+[4]*"
164 "pow(10,36)*(x*TMath::TwoPi()*10^6)^4-[6]*pow(10,54)*(x*TMath::TwoPi()*10^6)^2+[8]*pow(10,64))+"
165 "(x*TMath::TwoPi()*10^6)^2*[0]*pow(10,54)*([3]*pow(10,25)*(x*TMath::TwoPi()*10^6)^5-[5]*pow(10,45)*"
166 "(x*TMath::TwoPi()*10^6)^3+(x*TMath::TwoPi()*10^6)*[7]*pow(10,59)))/((-[2]*pow(10,10)*(x*TMath::TwoPi()*10^6)^6+"
167 "[4]*pow(10,36)*(x*TMath::TwoPi()*10^6)^4-[6]*pow(10,54)*(x*TMath::TwoPi()*10^6)^2+[8])^2+([3]*pow(10,25)*"
168 "(x*TMath::TwoPi()*10^6)^5-[5]*pow(10,45)*(x*TMath::TwoPi()*10^6)^3+(x*TMath::TwoPi()*10^6)*[7]*pow(10,59))^2)";
188 return "-1*[9]*(-(x*TMath::TwoPi()*10^6)^2*[0]*pow(10,53)*(-[2]*pow(10,10)*(x*TMath::TwoPi()*10^6)^6+"
189 "(x*TMath::TwoPi()*10^6)^4*[4]*pow(10,35)-[6]*pow(10,53)*(x*TMath::TwoPi()*10^6)^2+[8]*pow(10,63))+"
190 "(x*TMath::TwoPi()*10^6)*[1]*pow(10,59)*([3]*pow(10,24)*(x*TMath::TwoPi()*10^6)^5-[5]*pow(10,44)*"
191 "(x*TMath::TwoPi()*10^6)^3+(x*TMath::TwoPi()*10^6)*[7]*pow(10,58)))/((-[2]*pow(10,10)*(x*TMath::TwoPi()*10^6)^6+"
192 "(x*TMath::TwoPi()*10^6)^4*[4]*pow(10,35)-[6]*pow(10,53)*(x*TMath::TwoPi()*10^6)^2+[8]*pow(10,63))^2+([3]*pow(10,24)*"
193 "(x*TMath::TwoPi()*10^6)^5-[5]*pow(10,44)*(x*TMath::TwoPi()*10^6)^3+(x*TMath::TwoPi()*10^6)*[7]*pow(10,58))^2)";
198 return "-1*[9]*(((x*TMath::TwoPi()*10^6)*[1]*pow(10,59)*(-[2]*pow(10,10)*(x*TMath::TwoPi()*10^6)^6+"
199 "(x*TMath::TwoPi()*10^6)^4*[4]*pow(10,35)-[6]*pow(10,53)*(x*TMath::TwoPi()*10^6)^2+[8]*pow(10,63))+"
200 "(x*TMath::TwoPi()*10^6)^2*[0]*pow(10,53)*([3]*pow(10,24)*(x*TMath::TwoPi()*10^6)^5-[5]*pow(10,44)*"
201 "(x*TMath::TwoPi()*10^6)^3+(x*TMath::TwoPi()*10^6)*[7]*pow(10,58)))/((-[2]*pow(10,10)*(x*TMath::TwoPi()*10^6)^6+"
202 "(x*TMath::TwoPi()*10^6)^4*[4]*pow(10,35)-[6]*pow(10,53)*(x*TMath::TwoPi()*10^6)^2+[8]*pow(10,63))^2+([3]*pow(10,24)*"
203 "(x*TMath::TwoPi()*10^6)^5-[5]*pow(10,44)*(x*TMath::TwoPi()*10^6)^3+(x*TMath::TwoPi()*10^6)*[7]*pow(10,58))^2))";
229 return "(-[0]*(x*TMath::TwoPi()*10^6)^2*([5]-[3]*(x*TMath::TwoPi()*10^6)^2)+[1]*(x*TMath::TwoPi()*10^6)*"
230 "((x*TMath::TwoPi()*10^6)*[4]-[2]*(x*TMath::TwoPi()*10^6)^3))/(([5]-[3]*(x*TMath::TwoPi()*10^6)^2)^2+"
231 "((x*TMath::TwoPi()*10^6)*[4]-[2]*(x*TMath::TwoPi()*10^6)^3)^2)";
235 return "([0]*(x*TMath::TwoPi()*10^6)^2*((x*TMath::TwoPi()*10^6)*[4]-[2]*(x*TMath::TwoPi()*10^6)^3)+"
236 "[1]*(x*TMath::TwoPi()*10^6)*([5]-[3]*(x*TMath::TwoPi()*10^6)^2))/(([5]-[3]*(x*TMath::TwoPi()*10^6)^2)^2+"
237 "((x*TMath::TwoPi()*10^6)*[4]-[2]*(x*TMath::TwoPi()*10^6)^3)^2)";
269 template<
class A1,
class A2,
class A3,
class A4>
304 friend struct det::ComponentUpdater;
378 #endif // _mdet_BackEndSiPM_h
double GetLowGainAmplifierPar9() const
const Module & GetModule() const
The shared electronic frontend of this backend.
const char * GetADCFunctionIm() const
double GetHighGainAmplifierPar4() const
utl::Validated< double > fADCSaturationUp
utl::Validated< double > fSecondAdderOffset
pointer with built-in initialization, deletion, deep copying
double GetADCPar3() const
double GetADCPar2() const
double GetSecondAdderOffset() const
double GetSimplifiedGainLG() const
Simplified transfer functions (low-passs active filter)
const char * Get2ndAdderFunctionReal() const
utl::Validated< double > fADCPar2
utl::Validated< double > fFirstAdderPar4
const char * Get2ndAdderFunctionIm() const
double GetSecondAdderPar3() const
utl::Validated< double > fFirstAdderSaturationUp
double GetLowGainAmplifierPar5() const
utl::Validated< double > fADCPar3
double GetHighGainAmplifierPar1() const
double GetHighGainAmplifierAdjustFactor() const
utl::Validated< double > fADCPar1
utl::Validated< double > fLowGainAmplifierPar6
double GetHighGainAmplifierOffset() const
double GetFirstAdderPar4() const
double GetLowGainAmplifierPar7() const
utl::Validated< double > fSecondAdderSaturationDown
friend void boost::checked_delete(T *) BOOST_NOEXCEPT
Friendship for destruction.
utl::Validated< double > fLowGainAmplifierPar8
const char * GetAmplifierHGFunctionIm() const
double ApplySaturation(double value, TransferStep step) const
double GetADCPar5() const
Defines within it the common (templated) type for muon detector hierarchy components.
utl::Validated< double > fLowGainAmplifierSaturationDown
double GetHighGainAmplifierPar2() const
utl::Validated< double > fSecondAdderPar5
double GetHighGainAmplifierSaturationUp() const
double GetLowGainAmplifierPar2() const
double GetHighGainAmplifierPar5() const
const char * GetAmplifierHGFunctionReal() const
std::complex< double > ComputeTransfer(double freq, TransferStep step) const
double GetFirstAdderPar3() const
double GetADCSaturationDown() const
~BackEndSiPM()
Destructor (!).
static const char *const kComponentName
double GetLowGainAmplifierSaturationDown() const
double GetFirstAdderSaturationDown() const
double ApplySaturationSecondAdder(double v) const
double GetADCPar6() const
utl::Validated< double > fHighGainAmplifierOffset
static const char *const kComponentId
const char * GetADCFunctionReal() const
ADC transfer function.
utl::Validated< double > fHighGainAmplifierSaturationUp
double GetLowGainAmplifierPar4() const
const char * Get1stAdderFunctionReal() const
First and second adder transfer function:
double GetLowGainAmplifierOffset() const
utl::Validated< double > fLowGainAmplifierPar7
double GetHighGainAmplifierPar6() const
double GetHighGainAmplifierPar3() const
double GetHighGainAmplifierPar8() const
utl::Validated< double > fNumberOfChannelsToGroup
utl::Validated< double > fHighGainAmplifierPar8
short GetNumberOfChannelsToGroup() const
utl::Validated< double > fHighGainAmplifierPar9
double GetFirstAdderOffset() const
utl::Validated< double > fLowGainAmplifierSaturationUp
utl::Validated< double > fADCPar5
utl::Validated< double > fSimplifiedGainLG
utl::Validated< double > fHighGainAmplifierPar5
const char * GetAmplifierLGFunctionIm() const
double GetLowGainAmplifierPar3() const
utl::Validated< double > fFirstAdderPar2
utl::Validated< double > fADCOffset
utl::Validated< double > fHighGainAmplifierSaturationDown
double GetLowGainAmplifierAdjustmentFactor() const
utl::Validated< double > fLowGainAmplifierPar9
double GetSecondAdderSaturationDown() const
utl::Validated< double > fSecondAdderPar2
double GetLowGainAmplifierPar6() const
utl::Validated< double > fSecondAdderSaturationUp
utl::Validated< double > fSimplifiedGainHG
double GetADCOffset() const
std::complex< double > ComputeTransferLowGainAmplifier(double freq) const
utl::Validated< double > fHighGainAmplifierPar7
std::complex< double > ComputeTransferSimplifiedLG(double freq) const
utl::Validated< double > fFirstAdderOffset
utl::Validated< double > fLowGainAmplifierAdjustmentFactor
utl::Validated< double > fADCPar4
double GetLowGainAmplifierAdjustFactor() const
std::string const
Returns the message that identifies this component.
utl::Validated< double > fSecondAdderPar3
utl::Validated< double > fFirstAdderSaturationDown
Base class for group of detector components.
double GetLowGainAmplifierPar1() const
double GetLowGainAmplifierPar8() const
std::complex< double > ComputeTransferFirstAdder(double freq) const
utl::Validated< double > fLowGainAmplifierOffset
double GetSecondAdderPar4() const
double GetSimplifiedGainHG() const
utl::Validated< double > fHighGainAmplifierPar2
std::map< std::string, std::string > IndexMap
utl::Validated< double > fHighGainAmplifierPar4
double GetFirstAdderPar5() const
utl::Validated< double > fHighGainAmplifierAdjustmentFactor
double GetHighGainAmplifierPar7() const
std::complex< double > ComputeTransferHighGainAmplifier(double freq) const
double GetADCPar4() const
double GetFirstAdderSaturationUp() const
utl::Validated< double > fLowGainAmplifierPar5
std::complex< double > ComputeTransferSecondAdder(double freq) const
utl::Validated< double > fLowGainAmplifierPar3
utl::Validated< double > fHighGainAmplifierPar1
double ApplySaturationADC(double v) const
double GetHighGainAmplifierPar9() const
double ApplySaturationLowGainAmplifier(double v) const
const char * Get1stAdderFunctionIm() const
std::complex< double > ComputeTransferADC(double freq) const
double GetSecondAdderPar1() const
utl::Validated< double > fADCPar6
utl::Validated< double > fADCSaturationDown
double GetSecondAdderPar5() const
utl::Validated< double > fSimplifiedTime
double GetSecondAdderSaturationUp() const
utl::Validated< double > fLowGainAmplifierPar4
double GetSecondAdderPar2() const
Type
The type of file that we are acutally opening.
std::complex< double > ComputeTransferSimplifiedHG(double freq) const
double GetLowGainAmplifierSaturationUp() const
double GetADCSaturationUp() const
double GetFirstAdderPar2() const
utl::Validated< double > fHighGainAmplifierPar6
utl::Validated< double > fFirstAdderPar5
double ApplySaturationHighGainAmplifier(double v) const
double GetHighGainAmplifierAdjustmentFactor() const
utl::Validated< double > fLowGainAmplifierPar2
double GetADCPar1() const
double GetHighGainAmplifierSaturationDown() const
double GetFirstAdderPar1() const
BackEndSiPM(int cId, const det::VManager::IndexMap &parentMap, const Module &parent)
Constructs the electronic BackEndSiPM.
utl::Validated< double > fFirstAdderPar3
utl::Validated< double > fSecondAdderPar1
utl::Validated< double > fSecondAdderPar4
utl::Validated< double > fFirstAdderPar1
double ApplySaturationFirstAdder(double v) const
utl::Validated< double > fLowGainAmplifierPar1
The child the information from the parent upon construction.
const char * GetAmplifierLGFunctionReal() const
High gain and low gain Amplifier transfer function.
utl::Validated< double > fHighGainAmplifierPar3
double GetSimplifiedTime() const