ROOT logo
#include <TMath.h>
#include <TH2.h>
#include <TProfile.h>

#include <iostream>

using namespace std;

const Double_t eMass  = 0.000511;               //electron mass
const Double_t piMass = 0.13957;               //pion mass
const Double_t kMass  = 0.493676999999999977;  //kaon mass
const Double_t pMass  = 0.938271999999999995;  //proton mass


Double_t fitf3G(Double_t* xx, Double_t* par);
Double_t FitFunc(Double_t* x, Double_t *par);
Double_t SigmaFunc(Double_t* x, Double_t *par);

TH2D* hDeDxVsP = 0;
TProfile* hMeanP = 0;
Double_t fixMIP     = 50.0;
Double_t fixPlateau = 75.0;


class DeDxFitInfo : public TObject
{
 public:
  
  DeDxFitInfo();
  void Print(Option_t* option="") const;

  Double_t MIP;
  Double_t plateau;

  Int_t optionDeDx;
  Int_t nDeDxPar;
  Double_t parDeDx[8];

  Int_t optionSigma;
  Int_t nSigmaPar;
  Double_t parSigma[8];

  TString calibFileName;

  ClassDef(DeDxFitInfo, 1);    // Help class
};

//_____________________________________________________________________________
ClassImp(DeDxFitInfo)

DeDxFitInfo::DeDxFitInfo():
TObject(),
  MIP(0),
  plateau(0),
  optionDeDx(-1),
  nDeDxPar(-1),
  optionSigma(-1),
  nSigmaPar(-1),
  calibFileName("")
{
  // default constructor
  for(Int_t i = 0; i < 8; i++) {
    parDeDx[i]  = 0;
    parSigma[i] = 0;
  }
}

//_________________________________________________________
void DeDxFitInfo::Print(Option_t* option) const
{
  if(option) 
    cout << "Option: " << option << endl;

  cout << ClassName() << " : " << GetName() << endl  
       << "MIP: " << MIP << endl
       << "Plateau: " << plateau << endl
       << "OptionDeDx: " << optionDeDx << endl
       << "nDeDxPar: " << nDeDxPar << endl;
  for(Int_t i = 0; i < nDeDxPar; i++) {
    
    cout << "parDeDx[" << i << "] = " << parDeDx[i] << endl;
  }
  cout << "OptionSigma: " << optionSigma << endl
       << "nSigmaPar: " << nSigmaPar << endl;
  for(Int_t i = 0; i < nSigmaPar; i++) {
    
    cout << "parSigma[" << i << "] = " << parSigma[i] << endl;
  }
  
  if(calibFileName.IsNull()) {
    cout << "No eta calibration file." << endl; 
  } else {
    cout << "Eta calibration file: " << calibFileName.Data() << endl; 
  }
}

//______________________________________________________________________________
Double_t fitf3G(Double_t* xx, Double_t* par)
{
  //
  // Could speed up fit by forcing it to use <p>. In that way the parameters
  // could be amde statis cand only changed when going to a new p bin
  //
  Double_t p = xx[0];
  Double_t dedx = xx[1];

  const Int_t bin = hDeDxVsP->GetXaxis()->FindBin(p);
  
  if(hMeanP) {
    //    cout << "p before: " << p;
    p = hMeanP->GetBinContent(bin);
    //    cout << ", p after: " << p << endl;
  }
  const Int_t binStart = Int_t(par[0]);
  const Int_t binStop  = Int_t(par[1]);

  if(bin<binStart || bin>binStop) {
    
    cout << "Error: bin " << bin << " not inside inteval [" << binStart 
	 << "; " << binStop << "]" << endl;
    return 0;
  }

  const Int_t nParDeDx = Int_t(par[2]);
  
  Double_t* parDeDx = &par[3];

  Int_t offset = 4 + nParDeDx; // binStart + binStop + nParDeDx + optionDedx + nParDeDx parameters

  const Int_t nParSigma = Int_t(par[offset]);
  offset += 1; // nParSigma

  Double_t* parSigma = &par[offset];
  offset += 1 + nParSigma; // optionSigma + nParSigma parameters
  
  Double_t piMean = FitFunc(&p, parDeDx);
  Double_t pKeff = p*piMass/kMass; // corresponding p of a pion with same dE/dx
  Double_t kMean  = FitFunc(&pKeff, parDeDx);
  Double_t pPeff = p*piMass/pMass; // corresponding p of a pion with same dE/dx
  Double_t pMean  = FitFunc(&pPeff, parDeDx);

  const Double_t piSigma = SigmaFunc(&piMean, parSigma);
  const Double_t kSigma  = SigmaFunc(&kMean,  parSigma);
  const Double_t pSigma  = SigmaFunc(&pMean,  parSigma);


  const Int_t j = bin - binStart;
  const Double_t piYield   = par[j * 3 + offset + 0];
  const Double_t kYield    = par[j * 3 + offset + 1];
  const Double_t pYield    = par[j * 3 + offset + 2];
  
  return piYield* TMath::Gaus(dedx, piMean, piSigma, kTRUE)
    +    kYield * TMath::Gaus(dedx, kMean,  kSigma,  kTRUE)
    +    pYield * TMath::Gaus(dedx, pMean,  pSigma,  kTRUE);
}


//______________________________________________________________________________
Double_t FitFunc(Double_t* x, Double_t *par)
{
  static const Double_t bgMIP    = 0.5/piMass;
  static const Double_t beta2MIP = bgMIP*bgMIP / (1.0+bgMIP*bgMIP);
  //  static const Double_t betapowMIP = TMath;
  static const Double_t logMIP   = TMath::Log(1+bgMIP);
  
  

  Int_t option = TMath::Nint(par[0]);
  Int_t specie = option;
  option = option%10;
  specie -= option;
  specie /= 10;


  Double_t bg = 0;
  switch (specie) {
    
  case 0: // pion
    bg = x[0]/piMass;
    break;
  case 1: // kaon
    bg = x[0]/kMass;
    break;
  case 2: // proton
    bg = x[0]/pMass;
    break;
  case 3: // electron
    bg = x[0]/eMass;
    break;
  case 4: // just use bg
    bg = x[0];
    break;
  default:
    cout << "Error in FitFunc: specie " << specie << " not supported!!!!!" << endl;
    return 0;
    break;
  }
    

  if(bg > 10000.0)
    bg = 10000.0;

  const Double_t beta2 = bg*bg / (1.0+bg*bg);
  
  switch (option) {
    
  case 1: // standard parametrisation
    {
      /*
	c0/beta^2 + c1 * log (1+x)
       */
      const Double_t c0 = par[1];
      const Double_t c1 = par[2];
      
      const Double_t value = c0/beta2 + c1*TMath::Log(1+bg);          
      return value;
    }
    break;
  case 2: // fix the dE/dx to 50 at 0.5 GeV/c
    {
      const Double_t c1 = par[1];
      const Double_t c0 = (fixMIP-par[1]*logMIP) * beta2MIP;
      
      const Double_t value = c0/beta2 + c1*TMath::Log(1+bg);          
      return value;
    }
    break;
  case 3: // fix the dE/dx to 50 at 0.5 GeV/c and the plateau to 75
    {
      /*
	a/beta^2 + b/c*log( (1+x)^c / (1 + d*(1+x)^c) )

	Assymptotic behavior:

	1) Small bg (and d small so that d*(1+x)^c << 1)

	a/beta^2 + b * log (1+x)
	
	So this is the same beavior as the standard expression. 

	2) Large bg where d*(1+x)^c >> 1
	a - b/c*log(d) = plateau
	-> d = exp(c*(a-plateau)/b)

       */
      const Double_t b = par[1];
      const Double_t a = (fixMIP-par[1]*logMIP) * beta2MIP;
      const Double_t c = par[2];
      const Double_t d = TMath::Exp(c*(a-fixPlateau)/b);

      //      cout << bg << ": " << a << ", " << b << ", " << c << ", " << d << endl;

      const Double_t powbg = TMath::Power(1.0+bg, c);

      const Double_t value = a/beta2 + b/c*TMath::Log(powbg/(1.0 + d*powbg));          
      return value;
    }
    break;
  case 4: // fix the dE/dx to 50 at 0.5 GeV/c and the plateau to 75
    {
      /*
	a/beta^2 + b/c*log( (1+x)^c / (1 + d*(1+x)^c) )

	Assymptotic behavior:

	1) Small bg (and d small so that d*(1+x)^c << 1)

	a/beta^2 + b * log (1+x)
	
	So this is the same beavior as the standard expression. 

	2) Large bg where d*(1+x)^c >> 1
	a - b/c*log(d) = plateau
	-> d = exp(c*(a-plateau)/b)

       */
      const Double_t a = par[1];
      const Double_t b = par[2];
      const Double_t c = par[3];
      const Double_t d = TMath::Exp(c*(a-fixPlateau)/b);

      //      cout << bg << ": " << a << ", " << b << ", " << c << ", " << d << endl;

      const Double_t powbg = TMath::Power(1.0+bg, c);

      const Double_t value = a/beta2 + b/c*TMath::Log(powbg/(1.0 + d*powbg));          
      return value;
    }
    break;
  case 5: // fix the dE/dx to 50 at 0.5 GeV/c and the plateau to 75
    {
      /*
	a/beta^2 + b/c*log( (1+x)^c / (1 + d*(1+x)^c) )

	Assymptotic behavior:

	1) Small bg (and d small so that d*(1+x)^c << 1)

	a/beta^2 + b * log (1+x)
	
	So this is the same beavior as the standard expression. 

	2) Large bg where d*(1+x)^c >> 1
	a - b/c*log(d) = plateau
	-> d = exp(c*(a-plateau)/b)

       */
      const Double_t a = par[1];
      const Double_t b = par[2];
      const Double_t c = par[3];
      const Double_t d = TMath::Exp(c*(a-fixPlateau)/b);
      const Double_t e = par[4];

      //      cout << bg << ": " << a << ", " << b << ", " << c << ", " << d << endl;

      const Double_t powbg = TMath::Power(1.0+bg, c);

      const Double_t value = a/TMath::Power(beta2,e) + b/c*TMath::Log(powbg/(1.0 + d*powbg));          
      return value;
    }
    break;
  case 6:
    {
      /*
	a/beta^(e/2) + b/c*log( (1+x)^c / (1 + d*(1+x)^c) )

	Assymptotic behavior:

	1) Small bg (and d small so that d*(1+x)^c << 1)

	a/beta^(e/2) + b * log (1+x)
	
	So this is the same beavior as the standard expression. 

	2) Large bg where d*(1+x)^c >> 1
	a - b/c*log(d) = plateau
	-> d = exp(c*(a-plateau)/b)

	In this version we have 2 plateaus!!!!
	Plateau 1 = electrons!

       */
      if(specie==3)
	return fixPlateau;

      const Double_t a = par[1];
      const Double_t b = par[2];
      const Double_t c = par[3];
      const Double_t d = TMath::Exp(c*(a-par[5])/b);
      const Double_t e = par[4];
      
      //      cout << bg << ": " << a << ", " << b << ", " << c << ", " << d << endl;

      const Double_t powbg = TMath::Power(1.0+bg, c);

      const Double_t value = a/TMath::Power(beta2,e) + b/c*TMath::Log(powbg/(1.0 + d*powbg));          
      return value;
    }
    break;
  case 7: 
    {
      /*
	a/beta^(d/2) - b*log( c + 1.0/(1.0+x) )

	Assymptotic behavior:

	1) Small bg (and d small so that d*(1+x)^c << 1)

	a/beta^(d/2) - b * log (1+x)
	
	So this is the same beavior as the standard expression. 

	2) Large bg where c << 1
	-b*log(c) = plateau-a
	-> c = exp((a-plateau)/b)

       */
      const Double_t a = par[1];
      const Double_t b = par[2];
      const Double_t c = TMath::Exp((a-fixPlateau)/b);
      const Double_t d = par[3];
 
      //      cout << bg << ": " << a << ", " << b << ", " << c << ", " << d << endl;

      const Double_t value = a/TMath::Power(beta2,d) - b*TMath::Log(c + 1.0/(1.0+bg));          
      return value;
    }
  case 8: 
    {
      /*
	a/beta^(d/2) - b*log( c + 1.0/(1.0+x^e) )

	Assymptotic behavior:

	1) Small bg (and d small so that d*(1+x)^c << 1)

	a/beta^(d/2) - b * log (1+x^e)
	
	So this is the same beavior as the standard expression. 

	2) Large bg where c << 1
	-b*log(c) = plateau-a
	-> c = exp((a-plateau)/b)

       */
      const Double_t a = par[1];
      const Double_t b = par[2];
      const Double_t c = TMath::Exp((a-fixPlateau)/b);
      const Double_t d = par[3];
      const Double_t e = par[4];

      //      cout << bg << ": " << a << ", " << b << ", " << c << ", " << d << endl;

      const Double_t value = a/TMath::Power(beta2,d) - b*TMath::Log(c + 1.0/(1.0+bg) + e/(1.0+TMath::Power(bg, 2)));          
      return value;
    }
    break;
    // case 3: // fix the dE/dx to 50 at 0.5 GeV/c + powerlaw
    
    //   static const bgMIP    = 0.5/piMass;
    //   static const beta2MIP = bgMIP*bgMIP / (1.0+bgMIP*bgMIP);
    //   static const logMIP   = TMath::Log(1+bgMIP);
    
    //   const Double_t c1 = par[1];
    //   const Double_t c2 = par[2]; // expect it to be 0.75 from Bichsel (beta**-1.5 instead of -2)
    //   const Double_t c0 = (50.0-par[1]*logMIP) * beta2MIP;
    
    //   const Double_t value = TMathh::Power(c0/beta2, c2) + c1*TMath::Log(1+bg);          
    //   return value;
    
  default:
    break;
  }
  
  cout << "Error in FitFunc: option " << option << " not supported!!!!!" << endl;
  return 0;
}

//______________________________________________________________________________
Double_t SigmaFunc(Double_t* x, Double_t *par)
{
  Int_t option = Int_t(par[0]);
  
  switch (option) {
  case 1: // fixed sigma
    return par[1];
    break;
  case 2: // relative sigma
    return par[1]*x[0];
    break;
  case 3: // relative sigma + extrapolation
    return (par[1] + (x[0]-fixMIP)*par[2])*x[0];
    break;
  case 4: // relative sigma with dE/dx to some power close to 1
    return par[1]*TMath::Power(x[0], par[2]);
    break;
  case 5: // relative sigma with dE/dx to some power close to 1
    return TMath::Sqrt(par[1]*par[1]*x[0]*x[0] + par[2]*par[2]);
    break;
  case 6: // relative sigma with dE/dx to some power close to 1
    return par[1]*x[0]*TMath::Power(x[0]/50.0, par[2]);
    break;
  case 7: // 1/x^some power + constant
    return x[0]*(par[2]*TMath::Power(x[0], -par[3]) + par[1]);
    break;
  case 8: // for fitting relative sigma
    return par[2]*TMath::Power(x[0], -par[3]) + par[1];
    break;
  case 9: // for fitting relative sigma
    return par[1]+par[2]*x[0]+par[3]*x[0]*x[0];
    break;
  case 10: // for fitting relative sigma
    return par[1]+par[2]*x[0]+par[3]*x[0]*x[0]-par[4]/(x[0]*x[0]*x[0])-par[5]/(x[0]*x[0]);
    break;
  case 11: // for fitting relative sigma
    return x[0]*(par[1]+par[2]*x[0]+par[3]*x[0]*x[0]-par[4]/(x[0]*x[0]*x[0])-par[5]/(x[0]*x[0]));
    break;
  case 12: // for fitting relative sigma
    return par[1]+par[2]*x[0]+par[3]*x[0]*x[0];
    break;
  case 13: // for fitting relative sigma
    return x[0]*(par[1]+par[2]*x[0]+par[3]*x[0]*x[0]);
    break;
  case 14: // for fitting relative sigma
    return par[1]+par[2]*x[0];
    break;
  case 15: // for fitting relative sigma
    return x[0]*(par[1]+par[2]*x[0]);
    break;






  default:
    break;
  }
  
  cout << "Error in SigmaFunc: option " << option << " not supported!!!!!" << endl;
  return 0;
}
 my_functions.C:1
 my_functions.C:2
 my_functions.C:3
 my_functions.C:4
 my_functions.C:5
 my_functions.C:6
 my_functions.C:7
 my_functions.C:8
 my_functions.C:9
 my_functions.C:10
 my_functions.C:11
 my_functions.C:12
 my_functions.C:13
 my_functions.C:14
 my_functions.C:15
 my_functions.C:16
 my_functions.C:17
 my_functions.C:18
 my_functions.C:19
 my_functions.C:20
 my_functions.C:21
 my_functions.C:22
 my_functions.C:23
 my_functions.C:24
 my_functions.C:25
 my_functions.C:26
 my_functions.C:27
 my_functions.C:28
 my_functions.C:29
 my_functions.C:30
 my_functions.C:31
 my_functions.C:32
 my_functions.C:33
 my_functions.C:34
 my_functions.C:35
 my_functions.C:36
 my_functions.C:37
 my_functions.C:38
 my_functions.C:39
 my_functions.C:40
 my_functions.C:41
 my_functions.C:42
 my_functions.C:43
 my_functions.C:44
 my_functions.C:45
 my_functions.C:46
 my_functions.C:47
 my_functions.C:48
 my_functions.C:49
 my_functions.C:50
 my_functions.C:51
 my_functions.C:52
 my_functions.C:53
 my_functions.C:54
 my_functions.C:55
 my_functions.C:56
 my_functions.C:57
 my_functions.C:58
 my_functions.C:59
 my_functions.C:60
 my_functions.C:61
 my_functions.C:62
 my_functions.C:63
 my_functions.C:64
 my_functions.C:65
 my_functions.C:66
 my_functions.C:67
 my_functions.C:68
 my_functions.C:69
 my_functions.C:70
 my_functions.C:71
 my_functions.C:72
 my_functions.C:73
 my_functions.C:74
 my_functions.C:75
 my_functions.C:76
 my_functions.C:77
 my_functions.C:78
 my_functions.C:79
 my_functions.C:80
 my_functions.C:81
 my_functions.C:82
 my_functions.C:83
 my_functions.C:84
 my_functions.C:85
 my_functions.C:86
 my_functions.C:87
 my_functions.C:88
 my_functions.C:89
 my_functions.C:90
 my_functions.C:91
 my_functions.C:92
 my_functions.C:93
 my_functions.C:94
 my_functions.C:95
 my_functions.C:96
 my_functions.C:97
 my_functions.C:98
 my_functions.C:99
 my_functions.C:100
 my_functions.C:101
 my_functions.C:102
 my_functions.C:103
 my_functions.C:104
 my_functions.C:105
 my_functions.C:106
 my_functions.C:107
 my_functions.C:108
 my_functions.C:109
 my_functions.C:110
 my_functions.C:111
 my_functions.C:112
 my_functions.C:113
 my_functions.C:114
 my_functions.C:115
 my_functions.C:116
 my_functions.C:117
 my_functions.C:118
 my_functions.C:119
 my_functions.C:120
 my_functions.C:121
 my_functions.C:122
 my_functions.C:123
 my_functions.C:124
 my_functions.C:125
 my_functions.C:126
 my_functions.C:127
 my_functions.C:128
 my_functions.C:129
 my_functions.C:130
 my_functions.C:131
 my_functions.C:132
 my_functions.C:133
 my_functions.C:134
 my_functions.C:135
 my_functions.C:136
 my_functions.C:137
 my_functions.C:138
 my_functions.C:139
 my_functions.C:140
 my_functions.C:141
 my_functions.C:142
 my_functions.C:143
 my_functions.C:144
 my_functions.C:145
 my_functions.C:146
 my_functions.C:147
 my_functions.C:148
 my_functions.C:149
 my_functions.C:150
 my_functions.C:151
 my_functions.C:152
 my_functions.C:153
 my_functions.C:154
 my_functions.C:155
 my_functions.C:156
 my_functions.C:157
 my_functions.C:158
 my_functions.C:159
 my_functions.C:160
 my_functions.C:161
 my_functions.C:162
 my_functions.C:163
 my_functions.C:164
 my_functions.C:165
 my_functions.C:166
 my_functions.C:167
 my_functions.C:168
 my_functions.C:169
 my_functions.C:170
 my_functions.C:171
 my_functions.C:172
 my_functions.C:173
 my_functions.C:174
 my_functions.C:175
 my_functions.C:176
 my_functions.C:177
 my_functions.C:178
 my_functions.C:179
 my_functions.C:180
 my_functions.C:181
 my_functions.C:182
 my_functions.C:183
 my_functions.C:184
 my_functions.C:185
 my_functions.C:186
 my_functions.C:187
 my_functions.C:188
 my_functions.C:189
 my_functions.C:190
 my_functions.C:191
 my_functions.C:192
 my_functions.C:193
 my_functions.C:194
 my_functions.C:195
 my_functions.C:196
 my_functions.C:197
 my_functions.C:198
 my_functions.C:199
 my_functions.C:200
 my_functions.C:201
 my_functions.C:202
 my_functions.C:203
 my_functions.C:204
 my_functions.C:205
 my_functions.C:206
 my_functions.C:207
 my_functions.C:208
 my_functions.C:209
 my_functions.C:210
 my_functions.C:211
 my_functions.C:212
 my_functions.C:213
 my_functions.C:214
 my_functions.C:215
 my_functions.C:216
 my_functions.C:217
 my_functions.C:218
 my_functions.C:219
 my_functions.C:220
 my_functions.C:221
 my_functions.C:222
 my_functions.C:223
 my_functions.C:224
 my_functions.C:225
 my_functions.C:226
 my_functions.C:227
 my_functions.C:228
 my_functions.C:229
 my_functions.C:230
 my_functions.C:231
 my_functions.C:232
 my_functions.C:233
 my_functions.C:234
 my_functions.C:235
 my_functions.C:236
 my_functions.C:237
 my_functions.C:238
 my_functions.C:239
 my_functions.C:240
 my_functions.C:241
 my_functions.C:242
 my_functions.C:243
 my_functions.C:244
 my_functions.C:245
 my_functions.C:246
 my_functions.C:247
 my_functions.C:248
 my_functions.C:249
 my_functions.C:250
 my_functions.C:251
 my_functions.C:252
 my_functions.C:253
 my_functions.C:254
 my_functions.C:255
 my_functions.C:256
 my_functions.C:257
 my_functions.C:258
 my_functions.C:259
 my_functions.C:260
 my_functions.C:261
 my_functions.C:262
 my_functions.C:263
 my_functions.C:264
 my_functions.C:265
 my_functions.C:266
 my_functions.C:267
 my_functions.C:268
 my_functions.C:269
 my_functions.C:270
 my_functions.C:271
 my_functions.C:272
 my_functions.C:273
 my_functions.C:274
 my_functions.C:275
 my_functions.C:276
 my_functions.C:277
 my_functions.C:278
 my_functions.C:279
 my_functions.C:280
 my_functions.C:281
 my_functions.C:282
 my_functions.C:283
 my_functions.C:284
 my_functions.C:285
 my_functions.C:286
 my_functions.C:287
 my_functions.C:288
 my_functions.C:289
 my_functions.C:290
 my_functions.C:291
 my_functions.C:292
 my_functions.C:293
 my_functions.C:294
 my_functions.C:295
 my_functions.C:296
 my_functions.C:297
 my_functions.C:298
 my_functions.C:299
 my_functions.C:300
 my_functions.C:301
 my_functions.C:302
 my_functions.C:303
 my_functions.C:304
 my_functions.C:305
 my_functions.C:306
 my_functions.C:307
 my_functions.C:308
 my_functions.C:309
 my_functions.C:310
 my_functions.C:311
 my_functions.C:312
 my_functions.C:313
 my_functions.C:314
 my_functions.C:315
 my_functions.C:316
 my_functions.C:317
 my_functions.C:318
 my_functions.C:319
 my_functions.C:320
 my_functions.C:321
 my_functions.C:322
 my_functions.C:323
 my_functions.C:324
 my_functions.C:325
 my_functions.C:326
 my_functions.C:327
 my_functions.C:328
 my_functions.C:329
 my_functions.C:330
 my_functions.C:331
 my_functions.C:332
 my_functions.C:333
 my_functions.C:334
 my_functions.C:335
 my_functions.C:336
 my_functions.C:337
 my_functions.C:338
 my_functions.C:339
 my_functions.C:340
 my_functions.C:341
 my_functions.C:342
 my_functions.C:343
 my_functions.C:344
 my_functions.C:345
 my_functions.C:346
 my_functions.C:347
 my_functions.C:348
 my_functions.C:349
 my_functions.C:350
 my_functions.C:351
 my_functions.C:352
 my_functions.C:353
 my_functions.C:354
 my_functions.C:355
 my_functions.C:356
 my_functions.C:357
 my_functions.C:358
 my_functions.C:359
 my_functions.C:360
 my_functions.C:361
 my_functions.C:362
 my_functions.C:363
 my_functions.C:364
 my_functions.C:365
 my_functions.C:366
 my_functions.C:367
 my_functions.C:368
 my_functions.C:369
 my_functions.C:370
 my_functions.C:371
 my_functions.C:372
 my_functions.C:373
 my_functions.C:374
 my_functions.C:375
 my_functions.C:376
 my_functions.C:377
 my_functions.C:378
 my_functions.C:379
 my_functions.C:380
 my_functions.C:381
 my_functions.C:382
 my_functions.C:383
 my_functions.C:384
 my_functions.C:385
 my_functions.C:386
 my_functions.C:387
 my_functions.C:388
 my_functions.C:389
 my_functions.C:390
 my_functions.C:391
 my_functions.C:392
 my_functions.C:393
 my_functions.C:394
 my_functions.C:395
 my_functions.C:396
 my_functions.C:397
 my_functions.C:398
 my_functions.C:399
 my_functions.C:400
 my_functions.C:401
 my_functions.C:402
 my_functions.C:403
 my_functions.C:404
 my_functions.C:405
 my_functions.C:406
 my_functions.C:407
 my_functions.C:408
 my_functions.C:409
 my_functions.C:410
 my_functions.C:411
 my_functions.C:412
 my_functions.C:413
 my_functions.C:414
 my_functions.C:415
 my_functions.C:416
 my_functions.C:417
 my_functions.C:418
 my_functions.C:419
 my_functions.C:420
 my_functions.C:421
 my_functions.C:422
 my_functions.C:423
 my_functions.C:424
 my_functions.C:425
 my_functions.C:426
 my_functions.C:427
 my_functions.C:428
 my_functions.C:429
 my_functions.C:430
 my_functions.C:431
 my_functions.C:432
 my_functions.C:433
 my_functions.C:434
 my_functions.C:435
 my_functions.C:436
 my_functions.C:437
 my_functions.C:438
 my_functions.C:439
 my_functions.C:440
 my_functions.C:441
 my_functions.C:442
 my_functions.C:443
 my_functions.C:444
 my_functions.C:445
 my_functions.C:446
 my_functions.C:447
 my_functions.C:448
 my_functions.C:449
 my_functions.C:450
 my_functions.C:451
 my_functions.C:452
 my_functions.C:453
 my_functions.C:454
 my_functions.C:455
 my_functions.C:456
 my_functions.C:457
 my_functions.C:458
 my_functions.C:459
 my_functions.C:460
 my_functions.C:461
 my_functions.C:462
 my_functions.C:463
 my_functions.C:464
 my_functions.C:465
 my_functions.C:466
 my_functions.C:467
 my_functions.C:468
 my_functions.C:469
 my_functions.C:470
 my_functions.C:471
 my_functions.C:472
 my_functions.C:473
 my_functions.C:474
 my_functions.C:475
 my_functions.C:476
 my_functions.C:477
 my_functions.C:478
 my_functions.C:479
 my_functions.C:480
 my_functions.C:481
 my_functions.C:482
 my_functions.C:483
 my_functions.C:484
 my_functions.C:485
 my_functions.C:486
 my_functions.C:487
 my_functions.C:488
 my_functions.C:489
 my_functions.C:490
 my_functions.C:491
 my_functions.C:492
 my_functions.C:493
 my_functions.C:494
 my_functions.C:495
 my_functions.C:496
 my_functions.C:497
 my_functions.C:498
 my_functions.C:499
 my_functions.C:500
 my_functions.C:501
 my_functions.C:502
 my_functions.C:503