CMS 3D CMS Logo

List of all members | Public Member Functions
scaleFunctionType50< T > Class Template Reference

#include <Functions.h>

Inheritance diagram for scaleFunctionType50< T >:
scaleFunctionBase< T >

Public Member Functions

void resetParameters (std::vector< double > *scaleVec) const override
 This method is used to reset the scale parameters to neutral values (useful for iterations > 0) More...
 
double scale (const double &pt, const double &eta, const double &phi, const int chg, const T &parScale) const override
 
 scaleFunctionType50 ()
 
void setParameters (double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const T &parScale, const std::vector< int > &parScaleOrder, const int muonType) override
 This method is used to differentiate parameters among the different functions. More...
 
void setParameters (double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const T &parScale, const std::vector< int > &parScaleOrder, const std::vector< double > &parStep, const std::vector< double > &parMin, const std::vector< double > &parMax, const int muonType) override
 
- Public Member Functions inherited from scaleFunctionBase< T >
virtual int parNum () const
 
virtual int parNum () const
 
virtual ~scaleFunctionBase ()=0
 
virtual ~scaleFunctionBase ()=0
 

Additional Inherited Members

- Protected Member Functions inherited from scaleFunctionBase< T >
virtual void setPar (double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const T &parResol, const std::vector< int > &parResolOrder, const std::vector< ParSet > &parSet)
 
virtual void setPar (double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const T &parScale, const std::vector< int > &parScaleOrder, double *thisStep, double *thisMini, double *thisMaxi, TString *thisParName)
 This method sets the parameters. More...
 
virtual void setPar (double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const T &parResol, const std::vector< int > &parResolOrder, const std::vector< ParameterSet > &parSet)
 
- Protected Attributes inherited from scaleFunctionBase< T >
int parNum_
 

Detailed Description

template<class T>
class scaleFunctionType50< T >

Definition at line 124 of file Functions.h.

Constructor & Destructor Documentation

template<class T >
scaleFunctionType50< T >::scaleFunctionType50 ( )
inline

Definition at line 126 of file Functions.h.

126 { this->parNum_ = 27; }

Member Function Documentation

template<class T >
void scaleFunctionType50< T >::resetParameters ( std::vector< double > *  scaleVec) const
inlineoverridevirtual

This method is used to reset the scale parameters to neutral values (useful for iterations > 0)

Reimplemented from scaleFunctionBase< T >.

Definition at line 161 of file Functions.h.

References mps_fire::i.

161  {
162  // scaleVec->push_back(1);
163  for( int i=0; i<this->parNum_; ++i ) {
164  scaleVec->push_back(0);
165  }
166  }
template<class T >
double scaleFunctionType50< T >::scale ( const double &  pt,
const double &  eta,
const double &  phi,
const int  chg,
const T parScale 
) const
inlineoverridevirtual

Implements scaleFunctionBase< T >.

Definition at line 127 of file Functions.h.

References PVValHelper::eta, runGCPTkAlMap::phase, and funct::sin().

127  {
128  double ampl(0), phase(0), twist(0), ampl2(0), freq2(0), phase2(0);
129 
130 // very bwd bin
131  if ( eta < parScale[4] ) {
132  ampl = parScale[1]; phase = parScale[2]; ampl2 = parScale[21]; freq2 = parScale[22]; phase2 = parScale[23];
133  twist = parScale[3]*(eta-parScale[4])+parScale[7]*(parScale[4]-parScale[8])+parScale[11]*parScale[8];
134 // bwd bin
135  } else if ( parScale[4] <= eta && eta < parScale[8] ) {
136  ampl = parScale[5]; phase = parScale[6];
137  twist = parScale[7]*(eta-parScale[8])+parScale[11]*parScale[8] ;
138 // barrel bin
139  } else if ( parScale[8] <= eta && eta < parScale[12] ) {
140  ampl = parScale[9]; phase = parScale[10];
141  twist = parScale[11]*eta;
142 // fwd bin
143  } else if ( parScale[12] <= eta && eta < parScale[16] ) {
144  ampl = parScale[13]; phase = parScale[14];
145  twist = parScale[15]*(eta-parScale[12])+parScale[11]*parScale[12];
146 // very fwd bin
147  } else if ( parScale[16] < eta ) {
148  ampl = parScale[17]; phase = parScale[18]; ampl2 = parScale[24]; freq2 = parScale[25]; phase2 = parScale[26];
149  twist = parScale[19]*(eta-parScale[16])+parScale[15]*(parScale[16]-parScale[12])+parScale[11]*parScale[12];
150  }
151 
152 // apply the correction
153  double curv = (1.+parScale[0])*((double)chg/pt
154  -twist
155  -ampl*sin(phi+phase)
156  -ampl2*sin((int)freq2*phi+phase2)
157  -0.5*parScale[20]);
158  return 1./((double)chg*curv);
159  }
const float chg[109]
Definition: CoreSimTrack.cc:5
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
template<class T >
void scaleFunctionType50< T >::setParameters ( double *  Start,
double *  Step,
double *  Mini,
double *  Maxi,
int *  ind,
TString *  parname,
const T parScale,
const std::vector< int > &  parScaleOrder,
const int  muonType 
)
inlineoverridevirtual

This method is used to differentiate parameters among the different functions.

Implements scaleFunctionBase< T >.

Definition at line 167 of file Functions.h.

168  {
169 
170  double thisStep[] = {0.000001,
171  0.000001, 0.01, 0.000001, 0.01,
172  0.000001, 0.01, 0.000001, 0.01,
173  0.000001, 0.01, 0.000001, 0.01,
174  0.000001, 0.01, 0.000001, 0.01,
175  0.000001, 0.01, 0.000001,
176  0.000001,
177  0.000001, 0.01, 0.01,
178  0.000001, 0.01, 0.01};
179 
180  TString thisParName[] = { "Curv global scale"
181  , "Phi ampl eta vbwd" , "Phi phase eta vbwd" , "Twist eta vbwd", "vbwd/bwd bndry"
182  , "Phi ampl eta bwd" , "Phi phase eta bwd" , "Twist eta bwd", "bwd/bar bndry"
183  , "Phi ampl eta bar" , "Phi phase eta bar" , "Twist eta bar", "bar/fwd bndry"
184  , "Phi ampl eta fwd" , "Phi phase eta fwd" , "Twist eta fwd", "fwd/vfwd bndry"
185  , "Phi ampl eta vfwd" , "Phi phase eta vfwd" , "Twist eta vfwd"
186  , "Charge depend bias"
187  , "Phi ampl eta vbwd (2nd harmon.)", "Phi freq. eta vbwd (2nd harmon.)", "Phi phase eta vbwd (2nd harmon.)"
188  , "Phi ampl eta vfwd (2nd harmon.)", "Phi freq. eta vfwd (2nd harmon.)", "Phi phase eta vfwd (2nd harmon.)"};
189 
190  if( muonType == 1 ) {
191  double thisMini[] = {-0.1, -0.3, -3.1416, -0.3, -2.6, -0.3, -3.1416, -0.3, -2.6, -0.3, -3.1416, -0.3, 0., -0.3, -3.1416, -0.3, 0. , -0.3, -3.1416, -0.3, -0.1, -0.3, 1., -3.1416, -0.3, 1., -3.1416};
192  double thisMaxi[] = { 0.1, 0.3, 3.1416, 0.3, 0. , 0.3, 3.1416, 0.3, 0. , 0.3, 3.1416, 0.3, 2.6 , 0.3, 3.1416, 0.3, 2.6 , 0.3, 3.1416, 0.3, 0.1, 0.3, 5., 3.1416, 0.3, 5., 3.1416};
193  this->setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
194  } else {
195  double thisMini[] = {-0.1, -0.3, -3.1416, -0.3, -2.6, -0.3, -3.1416, -0.3, -2.6, -0.3, -3.1416, -0.3, 0., -0.3, -3.1416, -0.3, 0. , -0.3, -3.1416, -0.3, -0.1, -0.3, 1., -3.1416, -0.3, 1., -3.1416};
196  double thisMaxi[] = { 0.1, 0.3, 3.1416, 0.3, 0. , 0.3, 3.1416, 0.3, 0. , 0.3, 3.1416, 0.3, 2.6 , 0.3, 3.1416, 0.3, 2.6 , 0.3, 3.1416, 0.3, 0.1, 0.3, 5., 3.1416, 0.3, 5., 3.1416};
197  this->setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, thisStep, thisMini, thisMaxi, thisParName );
198  }
199  }
virtual void setPar(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const T &parScale, const std::vector< int > &parScaleOrder, double *thisStep, double *thisMini, double *thisMaxi, TString *thisParName)
This method sets the parameters.
Definition: Functions.h:70
template<class T >
void scaleFunctionType50< T >::setParameters ( double *  Start,
double *  Step,
double *  Mini,
double *  Maxi,
int *  ind,
TString *  parname,
const T parScale,
const std::vector< int > &  parScaleOrder,
const std::vector< double > &  parStep,
const std::vector< double > &  parMin,
const std::vector< double > &  parMax,
const int  muonType 
)
inlineoverridevirtual

Reimplemented from scaleFunctionBase< T >.

Definition at line 200 of file Functions.h.

References gather_cfg::cout, cmsRelvalreport::exit, mps_fire::i, createfilelist::int, and ParameterSet::ParameterSet().

206  {
207  if( (int(parStep.size()) != this->parNum_) || (int(parMin.size()) != this->parNum_) || (int(parMax.size()) != this->parNum_) ) {
208  std::cout << "Error: par step or min or max do not match with number of parameters" << std::endl;
209  std::cout << "parNum = " << this->parNum_ << std::endl;
210  std::cout << "parStep.size() = " << parStep.size() << std::endl;
211  std::cout << "parMin.size() = " << parMin.size() << std::endl;
212  std::cout << "parMax.size() = " << parMax.size() << std::endl;
213  exit(1);
214  }
215  std::vector<ParameterSet> parSet(this->parNum_);
216  // name, step, mini, maxi
217  parSet[0] = ParameterSet( "Curv global scale", parStep[0], parMin[0], parMax[0] );
218  parSet[1] = ParameterSet( "Phi ampl vbwd", parStep[1], parMin[1], parMax[1] );
219  parSet[2] = ParameterSet( "Phi phase vbwd", parStep[2], parMin[2], parMax[2] );
220  parSet[3] = ParameterSet( "Twist vbwd", parStep[3], parMin[3], parMax[3] );
221  parSet[4] = ParameterSet( "vbwd/bwd bndry", parStep[4], parMin[4], parMax[4] );
222  parSet[5] = ParameterSet( "Phi ampl bwd", parStep[5], parMin[5], parMax[5] );
223  parSet[6] = ParameterSet( "Phi phase bwd", parStep[6], parMin[6], parMax[6] );
224  parSet[7] = ParameterSet( "Twist bwd", parStep[7], parMin[7], parMax[7] );
225  parSet[8] = ParameterSet( "bwd/bar bndry", parStep[8], parMin[8], parMax[8] );
226  parSet[9] = ParameterSet( "Phi ampl bar", parStep[9], parMin[9], parMax[9] );
227  parSet[10] = ParameterSet( "Phi phase bar", parStep[10],parMin[10],parMax[10] );
228  parSet[11] = ParameterSet( "Twist bar", parStep[11],parMin[11],parMax[11] );
229  parSet[12] = ParameterSet( "bar/fwd bndry", parStep[12],parMin[12],parMax[12] );
230  parSet[13] = ParameterSet( "Phi ampl fwd", parStep[13],parMin[13],parMax[13] );
231  parSet[14] = ParameterSet( "Phi phase fwd", parStep[14],parMin[14],parMax[14] );
232  parSet[15] = ParameterSet( "Twist fwd", parStep[15],parMin[15],parMax[15] );
233  parSet[16] = ParameterSet( "fwd/vfwd bndry", parStep[16],parMin[16],parMax[16] );
234  parSet[17] = ParameterSet( "Phi ampl vfwd", parStep[17],parMin[17],parMax[17] );
235  parSet[18] = ParameterSet( "Phi phase vfwd", parStep[18],parMin[18],parMax[18] );
236  parSet[19] = ParameterSet( "Twist vfwd", parStep[19],parMin[19],parMax[19] );
237  parSet[20] = ParameterSet( "Charge depend bias", parStep[20],parMin[20],parMax[20] );
238  parSet[21] = ParameterSet( "Phi ampl vbwd (2nd)", parStep[21],parMin[21],parMax[21] );
239  parSet[22] = ParameterSet( "Phi freq vbwd (2nd)", parStep[22],parMin[22],parMax[22] );
240  parSet[23] = ParameterSet( "Phi phase vbwd (2nd)",parStep[23],parMin[23],parMax[23] );
241  parSet[24] = ParameterSet( "Phi ampl vfwd (2nd)", parStep[24],parMin[24],parMax[24] );
242  parSet[25] = ParameterSet( "Phi freq vfwd (2nd)", parStep[25],parMin[25],parMax[25] );
243  parSet[26] = ParameterSet( "Phi phase vfwd (2nd)",parStep[26],parMin[26],parMax[26] );
244 
245 
246  std::cout << "setting parameters" << std::endl;
247  for( int i=0; i<this->parNum_; ++i ) {
248  std::cout << "parStep["<<i<<"] = " << parStep[i]
249  << ", parMin["<<i<<"] = " << parMin[i]
250  << ", parMax["<<i<<"] = " << parMin[i] << std::endl;
251  }
252  this->setPar( Start, Step, Mini, Maxi, ind, parname, parScale, parScaleOrder, parSet );
253  }
virtual void setPar(double *Start, double *Step, double *Mini, double *Maxi, int *ind, TString *parname, const T &parScale, const std::vector< int > &parScaleOrder, double *thisStep, double *thisMini, double *thisMaxi, TString *thisParName)
This method sets the parameters.
Definition: Functions.h:70