62 m_intenManager( intenManager ),
64 m_dataReaderSignal( dataReaderSignal ),
65 m_dataReaderBkgnd( dataReaderBkgnd ),
66 m_firstDataCalc( true ),
67 m_firstNormIntCalc( true ),
73 m_hasBackground = ( dataReaderBkgnd !=
NULL );
79 m_prodFactorArray =
new double[2*intenManager.
getTermNames().size()];
86 delete[] m_prodFactorArray;
104 VT_TRACER(
"LikelihoodCalculator::normIntTerm" );
112 cout <<
"ERROR: IntensityManager has terms with floating parameters\n" 113 <<
" but NormIntInterface has not been provided with MC." << endl;
130 switch( m_intenManager.
type() ){
134 for(
int a = 0; a < n; ++a ){
135 for(
int b = 0; b <= a; ++b ){
143 double reVa = m_prodFactorArray[2*a];
144 double imVa = m_prodFactorArray[2*a+1];
145 double reVb = m_prodFactorArray[2*b];
146 double imVb = m_prodFactorArray[2*b+1];
147 double reNI = m_normIntArray[2*a*n+2*b];
148 double imNI = m_normIntArray[2*a*n+2*b+1];
150 thisTerm = ( reVa*reVb + imVa*imVb ) * reNI;
151 thisTerm -= ( imVa*reVb - reVa*imVb ) * imNI;
153 if( a != b ) thisTerm *= 2;
156 thisTerm /=
sqrt( m_ampIntArray[2*a*n+2*a] *
157 m_ampIntArray[2*b*n+2*b] );
160 normTerm += thisTerm;
171 cout <<
"LikelihoodCalculator ERROR: unkown IntensityManager type" << endl;
176 m_firstNormIntCalc =
false;
178 if( m_hasBackground ){
184 double nPred = normTerm + m_sumBkgWeights;
186 normTerm = ( m_numDataEvents - m_sumBkgWeights ) *
log( normTerm );
187 normTerm += nPred - ( m_numDataEvents *
log( nPred ) );
205 VT_TRACER(
"LikelihoodCalculator::dataTerm" );
208 if( m_firstDataCalc ) {
212 cout <<
"Allocating Data and Amplitude Array in LikelihoodCalculator for " 215 m_ampVecsSignal.
loadData( m_dataReaderSignal );
220 if( m_hasBackground ){
222 m_ampVecsBkgnd.
loadData( m_dataReaderBkgnd,
true );
229 cout <<
"\tDone." << endl;
234 if( m_hasBackground ){
239 m_firstDataCalc =
false;
string reactionName() const
void allocateTerms(const IntensityManager &intenMan, bool bAllocIntensity=false)
void prodFactorArray(double *array) const
virtual void forceCacheUpdate(bool normIntOnly=false) const
virtual bool hasTermWithFreeParam() const =0
const vector< string > & getTermNames() const
unsigned long long m_iNTrueEvents
bool hasAccessToMC() const
bool termsAreRenormalized() const
virtual Type type() const =0
const GDouble * normIntMatrix() const
virtual double calcSumLogIntensity(AmpVecs &Vecs) const =0
LikelihoodCalculator(const IntensityManager &intenManager, const NormIntInterface &normInt, DataReader *dataReaderSignal, DataReader *dataReaderBkgnd, const ParameterManager &parManager)
const GDouble * ampIntMatrix() const
void loadData(DataReader *pDataReader, bool bForceNegativeWeight=false)
virtual ~LikelihoodCalculator()