53 const vector< vector< int > >* pvPermutations )
const 58 info +=
"::calcAmplitudeAll";
59 VT_TRACER( info.c_str() );
62 complex< GDouble > cRes;
64 int iPermutation, iNPermutations = pvPermutations->size();
65 assert( iNPermutations );
67 int iNParticles = pvPermutations->at(0).size();
68 assert( iNParticles );
86 for( iEvent=0; iEvent<iNEvents; iEvent++ ){
88 for( iPermutation = 0; iPermutation < iNPermutations; iPermutation++ ){
90 m_currentPermutation = (*pvPermutations)[iPermutation];
92 for( i = 0; i < iNParticles; i++ ){
94 int j = (*pvPermutations)[iPermutation][i];
95 pKin[i] = &(pdData[4*iNParticles*iEvent+4*j]);
106 pdAmps[2*iNEvents*iPermutation+2*iEvent] = cRes.real();
107 pdAmps[2*iNEvents*iPermutation+2*iEvent+1] = cRes.imag();
118 vector<int> permutation;
120 vector<TLorentzVector> particleList = pKin->
particleList();
122 for (
int i = 0; i < particleList.size(); i++){
123 permutation.push_back(i);
135 string info =
name();
136 info +=
"::calcAmplitude";
137 VT_TRACER( info.c_str() );
140 vector<TLorentzVector> particleList = pKin->
particleList();
144 if (particleList.size() != permutation.size()) assert(
false);
146 for (
int i = 0; i < particleList.size(); i++){
148 pData[i][0] = particleList[permutation[i]].E();
149 pData[i][1] = particleList[permutation[i]].Px();
150 pData[i][2] = particleList[permutation[i]].Py();
151 pData[i][3] = particleList[permutation[i]].Pz();
156 for (
int i = 0; i < particleList.size(); i++){
166 #ifdef GPU_ACCELERATION 169 const vector< int >& perm )
const {
171 string info =
name();
172 info +=
"::calcAmplitudeGPU";
173 VT_TRACER( info.c_str() );
176 m_currentPermutation = perm;
185 bool hasFreeParam =
false;
187 for( vector< AmpParameter* >::const_iterator parItr = m_registeredParams.begin();
188 parItr != m_registeredParams.end();
191 if( (**parItr).hasExternalPtr() ) hasFreeParam =
true;
200 bool foundPar =
false;
202 for( vector< AmpParameter* >::const_iterator parItr = m_registeredParams.begin();
203 parItr != m_registeredParams.end();
206 if( (**parItr).name().compare( name ) == 0 ){
209 (**parItr).setExternalValue( ptr );
224 bool foundPar =
false;
226 for( vector< AmpParameter* >::const_iterator parItr = m_registeredParams.begin();
227 parItr != m_registeredParams.end();
230 if( (**parItr).name().compare( name ) == 0 ){
233 (**parItr).setValue( val );
249 string info = (*this).name();
250 info +=
"::updatePar [";
251 info += name.c_str();
253 VT_TRACER( info.c_str() );
257 bool foundPar =
false;
259 for( vector< AmpParameter* >::const_iterator parItr = m_registeredParams.begin();
260 parItr != m_registeredParams.end();
263 if( (**parItr).name().compare( name ) == 0 ){
282 m_registeredParams.push_back( &par );
virtual void launchGPUKernel(dim3 dimGrid, dim3 dimBlock, GPU_AMP_PROTO) const
void registerParameter(AmpParameter &par)
bool setParValue(const string &name, double val) const
virtual string name() const =0
virtual void calcAmplitudeGPU(dim3 dimGrid, dim3 dimBlock, GPU_AMP_PROTO, const vector< int > &perm) const
virtual void updatePar(const AmpParameter &par)
const vector< TLorentzVector > & particleList() const
bool containsFreeParameters() const
bool setParPtr(const string &name, const double *ptr) const
virtual complex< GDouble > calcAmplitude(GDouble **pKin) const =0
virtual void calcAmplitudeAll(GDouble *pdData, GDouble *pdAmps, int iNEvents, const vector< vector< int > > *pvPermutations) const