ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

//_________________________________________________________________________
// Class for the management by the CPV reconstruction.
////                  
//*-- Author   : Boris Polichtchouk (IHEP, Protvino) 6 Mar 2001
//
// --- ROOT system ---

#include <TMath.h>

// --- Standard library ---

// --- AliRoot header files ---

#include "AliPHOSRecCpvManager.h"
#include "AliPHOSGeometry.h" 

ClassImp(AliPHOSRecCpvManager) 

//____________________________________________________________________________
AliPHOSRecCpvManager::AliPHOSRecCpvManager() :
  fOneGamChisqCut(3.),
  fOneGamInitialStep(0.00005),
  fOneGamChisqMin(1.),
  fOneGamStepMin(0.0005),
  fOneGamNumOfIterations(50),
  fTwoGamInitialStep(0.00005),
  fTwoGamChisqMin(1.),
  fTwoGamEmin(0.1),
  fTwoGamStepMin(0.00005),
  fTwoGamNumOfIterations(50),  
  fThr0(0.),
  fSqdCut(0.) 
{
  // Put a comment here
  SetTitle("Cpv Reconstruction Manager");
}

AliPHOSRecCpvManager::~AliPHOSRecCpvManager(void) 
{
  // Put a comment here
}

Float_t AliPHOSRecCpvManager::Dispersion(Float_t etot, Float_t ai) const
{
  //"Dispresion" of energy deposition in the cell.
  // etot is the total shower energy, ai is the
  // calculated cell response,
  // ei is the measured cell response.

  const Float_t kConst = 1.5;
  return kConst*ai*(1.-ai/etot);
}

Float_t AliPHOSRecCpvManager::OneGamChi2(Float_t ai, Float_t ei, Float_t etot, Float_t& Gi) const
{
  //"Chi2" for one cell.
  // etot is the total "shower" energy, ai is the
  // calculated cell response,
  // ei is the measured cell response.

  const Float_t kConst = 1.5;

  Float_t da = ai - ei;
  Float_t d = kConst*ai*(1.-ai/etot);

  Float_t dd = da/d;
  Gi = dd*(2.- dd*kConst*(1.-2.*ai/etot));

  Info("OneGamChi2", " OneGamChi2 (ai,ei,etot,&Gi,chi2) %f %f %f %f %f", ai, ei, etot, Gi, da*da/d );

  return da*da/d;

}

Float_t AliPHOSRecCpvManager::TwoGamChi2(Float_t ai, Float_t ei, Float_t etot, Float_t& gi) const 
{
  // Put a comment here

  const Float_t kConst = 1.5;

  Float_t da = ai - ei;
  Float_t d = kConst*ai*(1.-ai/etot);

  Float_t dd = da/d;
  gi = dd*(2.- dd*kConst*(1.-2.*ai/etot));

  return da*da/d;
 
}

void AliPHOSRecCpvManager::AG(Float_t ei, Float_t xi, Float_t yi, Float_t& ai, Float_t& gxi, Float_t& gyi )
{
  //Calculates amplitude (ai) and gradients (gxi, gyi) of CPV pad response.
  //Integrated response (total "shower energy") is e, 
  //xi and yi are the distances along x and y from reference point 
  // to the pad center.

  AliPHOSGeometry * geom =  AliPHOSGeometry::GetInstance() ;

  Float_t celZ = geom->GetPadSizeZ();
  Float_t celY = geom->GetPadSizePhi();

//  //    Info("AG", "celZ: %f celY: %f", celZ, celY) ;

  Float_t dx = celZ/2.;
  Float_t dy = celY/2.;

//  //    Float_t x = xi*celZ;
//  //    Float_t y = yi*celZ;

  Float_t x = xi*celZ;
  Float_t y = yi*celY;

  Float_t e = ei;

  Float_t a = Fcml(x+dx,y+dy) - Fcml(x+dx,y-dy) - Fcml(x-dx,y+dy) + Fcml(x-dx,y-dy);
  ai = a*e;


  Float_t gx = GradX(x+dx,y+dy) - GradX(x+dx,y-dy) - GradX(x-dx,y+dy) + GradX(x-dx,y-dy);
  gxi = gx*e*e;

  Float_t gy = GradY(x+dx,y+dy) - GradY(x+dx,y-dy) - GradY(x-dx,y+dy) + GradY(x-dx,y-dy);
  gyi = gy*e*e;

}

Float_t AliPHOSRecCpvManager::Fcml(Float_t x, Float_t y)
{
  //Cumulative function

  const Float_t ka = 1.0;
  const Float_t kb = 0.70;

  Float_t fff  = TMath::ATan(x*y/(  kb*TMath::Sqrt(  (kb*kb) + x*x+y*y)))
    - TMath::ATan(x*y/(3*kb*TMath::Sqrt((3*kb)*(3*kb) + x*x+y*y)))
    + TMath::ATan(x*y/(5*kb*TMath::Sqrt((5*kb)*(5*kb) + x*x+y*y))) 
    - TMath::ATan(x*y/(7*kb*TMath::Sqrt((7*kb)*(7*kb) + x*x+y*y)))
    + TMath::ATan(x*y/(9*kb*TMath::Sqrt((9*kb)*(9*kb) + x*x+y*y))); 
  
  Float_t fcml = ka*fff/TMath::TwoPi();
//    Info("Fcml", "fcml: %f", fcml) ;
  return fcml;

}


Float_t AliPHOSRecCpvManager::GradX(Float_t x, Float_t y)
{
  // Put a comment here

  const Float_t ka = 1.0;
  const Float_t kb = 0.70;

  Float_t skv      = kb*kb + x*x + y*y;

  Float_t sqskv=TMath::Sqrt(skv);
  Float_t yxskv=y*(1.-x/sqskv)*(1.+x/sqskv);
  
  Float_t gradient = 
      yxskv*  kb*sqskv/( kb*kb*skv+x*x*y*y)
    - yxskv*3*kb*sqskv/((3*kb)*(3*kb)*skv+x*x*y*y)
    + yxskv*5*kb*sqskv/((5*kb)*(5*kb)*skv+x*x*y*y)
    - yxskv*7*kb*sqskv/((7*kb)*(7*kb)*skv+x*x*y*y)
    + yxskv*9*kb*sqskv/((9*kb)*(9*kb)*skv+x*x*y*y);
      
  Float_t grad    = ka*gradient/TMath::TwoPi();
  return grad;
}


Float_t AliPHOSRecCpvManager::GradY(Float_t x, Float_t y)
{
  // Put a comment here
  
  const Float_t ka = 1.0;
  const Float_t kb = 0.70;
 
  Float_t skv      = kb*kb + x*x + y*y;

  Float_t sqskv=TMath::Sqrt(skv);
  Float_t xyskv=x*(1.-y/sqskv)*(1.+y/sqskv);

  Float_t gradient = 
      xyskv*  kb*sqskv/( kb*kb*skv+x*x*y*y)
    - xyskv*3*kb*sqskv/((3*kb)*(3*kb)*skv+x*x*y*y)
    + xyskv*5*kb*sqskv/((5*kb)*(5*kb)*skv+x*x*y*y)
    - xyskv*7*kb*sqskv/((7*kb)*(7*kb)*skv+x*x*y*y)
    + xyskv*9*kb*sqskv/((9*kb)*(9*kb)*skv+x*x*y*y);
  
  Float_t grad    = ka*gradient/TMath::TwoPi();
  return grad;
}


 AliPHOSRecCpvManager.cxx:1
 AliPHOSRecCpvManager.cxx:2
 AliPHOSRecCpvManager.cxx:3
 AliPHOSRecCpvManager.cxx:4
 AliPHOSRecCpvManager.cxx:5
 AliPHOSRecCpvManager.cxx:6
 AliPHOSRecCpvManager.cxx:7
 AliPHOSRecCpvManager.cxx:8
 AliPHOSRecCpvManager.cxx:9
 AliPHOSRecCpvManager.cxx:10
 AliPHOSRecCpvManager.cxx:11
 AliPHOSRecCpvManager.cxx:12
 AliPHOSRecCpvManager.cxx:13
 AliPHOSRecCpvManager.cxx:14
 AliPHOSRecCpvManager.cxx:15
 AliPHOSRecCpvManager.cxx:16
 AliPHOSRecCpvManager.cxx:17
 AliPHOSRecCpvManager.cxx:18
 AliPHOSRecCpvManager.cxx:19
 AliPHOSRecCpvManager.cxx:20
 AliPHOSRecCpvManager.cxx:21
 AliPHOSRecCpvManager.cxx:22
 AliPHOSRecCpvManager.cxx:23
 AliPHOSRecCpvManager.cxx:24
 AliPHOSRecCpvManager.cxx:25
 AliPHOSRecCpvManager.cxx:26
 AliPHOSRecCpvManager.cxx:27
 AliPHOSRecCpvManager.cxx:28
 AliPHOSRecCpvManager.cxx:29
 AliPHOSRecCpvManager.cxx:30
 AliPHOSRecCpvManager.cxx:31
 AliPHOSRecCpvManager.cxx:32
 AliPHOSRecCpvManager.cxx:33
 AliPHOSRecCpvManager.cxx:34
 AliPHOSRecCpvManager.cxx:35
 AliPHOSRecCpvManager.cxx:36
 AliPHOSRecCpvManager.cxx:37
 AliPHOSRecCpvManager.cxx:38
 AliPHOSRecCpvManager.cxx:39
 AliPHOSRecCpvManager.cxx:40
 AliPHOSRecCpvManager.cxx:41
 AliPHOSRecCpvManager.cxx:42
 AliPHOSRecCpvManager.cxx:43
 AliPHOSRecCpvManager.cxx:44
 AliPHOSRecCpvManager.cxx:45
 AliPHOSRecCpvManager.cxx:46
 AliPHOSRecCpvManager.cxx:47
 AliPHOSRecCpvManager.cxx:48
 AliPHOSRecCpvManager.cxx:49
 AliPHOSRecCpvManager.cxx:50
 AliPHOSRecCpvManager.cxx:51
 AliPHOSRecCpvManager.cxx:52
 AliPHOSRecCpvManager.cxx:53
 AliPHOSRecCpvManager.cxx:54
 AliPHOSRecCpvManager.cxx:55
 AliPHOSRecCpvManager.cxx:56
 AliPHOSRecCpvManager.cxx:57
 AliPHOSRecCpvManager.cxx:58
 AliPHOSRecCpvManager.cxx:59
 AliPHOSRecCpvManager.cxx:60
 AliPHOSRecCpvManager.cxx:61
 AliPHOSRecCpvManager.cxx:62
 AliPHOSRecCpvManager.cxx:63
 AliPHOSRecCpvManager.cxx:64
 AliPHOSRecCpvManager.cxx:65
 AliPHOSRecCpvManager.cxx:66
 AliPHOSRecCpvManager.cxx:67
 AliPHOSRecCpvManager.cxx:68
 AliPHOSRecCpvManager.cxx:69
 AliPHOSRecCpvManager.cxx:70
 AliPHOSRecCpvManager.cxx:71
 AliPHOSRecCpvManager.cxx:72
 AliPHOSRecCpvManager.cxx:73
 AliPHOSRecCpvManager.cxx:74
 AliPHOSRecCpvManager.cxx:75
 AliPHOSRecCpvManager.cxx:76
 AliPHOSRecCpvManager.cxx:77
 AliPHOSRecCpvManager.cxx:78
 AliPHOSRecCpvManager.cxx:79
 AliPHOSRecCpvManager.cxx:80
 AliPHOSRecCpvManager.cxx:81
 AliPHOSRecCpvManager.cxx:82
 AliPHOSRecCpvManager.cxx:83
 AliPHOSRecCpvManager.cxx:84
 AliPHOSRecCpvManager.cxx:85
 AliPHOSRecCpvManager.cxx:86
 AliPHOSRecCpvManager.cxx:87
 AliPHOSRecCpvManager.cxx:88
 AliPHOSRecCpvManager.cxx:89
 AliPHOSRecCpvManager.cxx:90
 AliPHOSRecCpvManager.cxx:91
 AliPHOSRecCpvManager.cxx:92
 AliPHOSRecCpvManager.cxx:93
 AliPHOSRecCpvManager.cxx:94
 AliPHOSRecCpvManager.cxx:95
 AliPHOSRecCpvManager.cxx:96
 AliPHOSRecCpvManager.cxx:97
 AliPHOSRecCpvManager.cxx:98
 AliPHOSRecCpvManager.cxx:99
 AliPHOSRecCpvManager.cxx:100
 AliPHOSRecCpvManager.cxx:101
 AliPHOSRecCpvManager.cxx:102
 AliPHOSRecCpvManager.cxx:103
 AliPHOSRecCpvManager.cxx:104
 AliPHOSRecCpvManager.cxx:105
 AliPHOSRecCpvManager.cxx:106
 AliPHOSRecCpvManager.cxx:107
 AliPHOSRecCpvManager.cxx:108
 AliPHOSRecCpvManager.cxx:109
 AliPHOSRecCpvManager.cxx:110
 AliPHOSRecCpvManager.cxx:111
 AliPHOSRecCpvManager.cxx:112
 AliPHOSRecCpvManager.cxx:113
 AliPHOSRecCpvManager.cxx:114
 AliPHOSRecCpvManager.cxx:115
 AliPHOSRecCpvManager.cxx:116
 AliPHOSRecCpvManager.cxx:117
 AliPHOSRecCpvManager.cxx:118
 AliPHOSRecCpvManager.cxx:119
 AliPHOSRecCpvManager.cxx:120
 AliPHOSRecCpvManager.cxx:121
 AliPHOSRecCpvManager.cxx:122
 AliPHOSRecCpvManager.cxx:123
 AliPHOSRecCpvManager.cxx:124
 AliPHOSRecCpvManager.cxx:125
 AliPHOSRecCpvManager.cxx:126
 AliPHOSRecCpvManager.cxx:127
 AliPHOSRecCpvManager.cxx:128
 AliPHOSRecCpvManager.cxx:129
 AliPHOSRecCpvManager.cxx:130
 AliPHOSRecCpvManager.cxx:131
 AliPHOSRecCpvManager.cxx:132
 AliPHOSRecCpvManager.cxx:133
 AliPHOSRecCpvManager.cxx:134
 AliPHOSRecCpvManager.cxx:135
 AliPHOSRecCpvManager.cxx:136
 AliPHOSRecCpvManager.cxx:137
 AliPHOSRecCpvManager.cxx:138
 AliPHOSRecCpvManager.cxx:139
 AliPHOSRecCpvManager.cxx:140
 AliPHOSRecCpvManager.cxx:141
 AliPHOSRecCpvManager.cxx:142
 AliPHOSRecCpvManager.cxx:143
 AliPHOSRecCpvManager.cxx:144
 AliPHOSRecCpvManager.cxx:145
 AliPHOSRecCpvManager.cxx:146
 AliPHOSRecCpvManager.cxx:147
 AliPHOSRecCpvManager.cxx:148
 AliPHOSRecCpvManager.cxx:149
 AliPHOSRecCpvManager.cxx:150
 AliPHOSRecCpvManager.cxx:151
 AliPHOSRecCpvManager.cxx:152
 AliPHOSRecCpvManager.cxx:153
 AliPHOSRecCpvManager.cxx:154
 AliPHOSRecCpvManager.cxx:155
 AliPHOSRecCpvManager.cxx:156
 AliPHOSRecCpvManager.cxx:157
 AliPHOSRecCpvManager.cxx:158
 AliPHOSRecCpvManager.cxx:159
 AliPHOSRecCpvManager.cxx:160
 AliPHOSRecCpvManager.cxx:161
 AliPHOSRecCpvManager.cxx:162
 AliPHOSRecCpvManager.cxx:163
 AliPHOSRecCpvManager.cxx:164
 AliPHOSRecCpvManager.cxx:165
 AliPHOSRecCpvManager.cxx:166
 AliPHOSRecCpvManager.cxx:167
 AliPHOSRecCpvManager.cxx:168
 AliPHOSRecCpvManager.cxx:169
 AliPHOSRecCpvManager.cxx:170
 AliPHOSRecCpvManager.cxx:171
 AliPHOSRecCpvManager.cxx:172
 AliPHOSRecCpvManager.cxx:173
 AliPHOSRecCpvManager.cxx:174
 AliPHOSRecCpvManager.cxx:175
 AliPHOSRecCpvManager.cxx:176
 AliPHOSRecCpvManager.cxx:177
 AliPHOSRecCpvManager.cxx:178
 AliPHOSRecCpvManager.cxx:179
 AliPHOSRecCpvManager.cxx:180
 AliPHOSRecCpvManager.cxx:181
 AliPHOSRecCpvManager.cxx:182
 AliPHOSRecCpvManager.cxx:183
 AliPHOSRecCpvManager.cxx:184
 AliPHOSRecCpvManager.cxx:185
 AliPHOSRecCpvManager.cxx:186
 AliPHOSRecCpvManager.cxx:187
 AliPHOSRecCpvManager.cxx:188
 AliPHOSRecCpvManager.cxx:189
 AliPHOSRecCpvManager.cxx:190
 AliPHOSRecCpvManager.cxx:191
 AliPHOSRecCpvManager.cxx:192
 AliPHOSRecCpvManager.cxx:193
 AliPHOSRecCpvManager.cxx:194
 AliPHOSRecCpvManager.cxx:195
 AliPHOSRecCpvManager.cxx:196
 AliPHOSRecCpvManager.cxx:197
 AliPHOSRecCpvManager.cxx:198
 AliPHOSRecCpvManager.cxx:199
 AliPHOSRecCpvManager.cxx:200
 AliPHOSRecCpvManager.cxx:201
 AliPHOSRecCpvManager.cxx:202
 AliPHOSRecCpvManager.cxx:203
 AliPHOSRecCpvManager.cxx:204
 AliPHOSRecCpvManager.cxx:205
 AliPHOSRecCpvManager.cxx:206
 AliPHOSRecCpvManager.cxx:207
 AliPHOSRecCpvManager.cxx:208
 AliPHOSRecCpvManager.cxx:209
 AliPHOSRecCpvManager.cxx:210
 AliPHOSRecCpvManager.cxx:211
 AliPHOSRecCpvManager.cxx:212