ROOT logo
/**************************************************************************
 * Copyright(c) 2007, 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$ */

// Base class for the PHOS reconstruction parameters.
// Do not use in the reconstruction; use derivative classes instead.
// Author: Boris Polichtchouk.

// --- AliRoot header files ---
#include "AliCDBManager.h"
#include "AliCDBEntry.h"
#include "AliLog.h"
#include "AliPHOSRecoParam.h"

ClassImp(AliPHOSRecoParam)

TObjArray* AliPHOSRecoParam::fgkMaps =0; //ALTRO mappings
TObject*   AliPHOSRecoParam::fgkTrigParams =0; // Trigger parameters

//-----------------------------------------------------------------------------
AliPHOSRecoParam::AliPHOSRecoParam() :
  AliDetectorRecoParam(),
  fNonLinearityParams(3),
  fEMCClusteringThreshold(0.2),
  fEMCLocMaxCut(0.03),
  fEMCRawDigitThreshold(2),
  fEMCMinE(0.012),
  fEMCW0(4.5),
  fEMCSampleQualityCut(1.),
  fTimeGateAmpThresh(10.),
  fTimeGateLow(1.e-6),
  fTimeGateHigh(1.e-6),
  fEMCEcoreRadius(3.),
  fEMCEcore2ESD(kFALSE),
  fEMCSubtractPedestals(kTRUE),
  fEMCUnfold(kTRUE),
  fEMCEnergyCorrectionOn(kTRUE),
  fEMCFitterVersion(""),
  fNonlinearityCorrVersion(""),
  fGlobalAltroOffset(0),
  fGlobalAltroThreshold(0),
  fCPVClusteringThreshold(0.0),
  fCPVLocMaxCut(0.03),
  fCPVMinE(0.0),
  fCPVW0(4.0),
  fCPVUnfold(kTRUE)
{
  //Default constructor.
  SetNonlinearityCorrectionVersion("Gustavo2005") ;
}

//-----------------------------------------------------------------------------
AliPHOSRecoParam::AliPHOSRecoParam(const AliPHOSRecoParam& ):
  AliDetectorRecoParam(),
  fNonLinearityParams(3),
  fEMCClusteringThreshold(0.2),
  fEMCLocMaxCut(0.03),
  fEMCRawDigitThreshold(2),
  fEMCMinE(0.012),
  fEMCW0(4.5),
  fEMCSampleQualityCut(1.),
  fTimeGateAmpThresh(10.),
  fTimeGateLow(1.e-6),
  fTimeGateHigh(1.e-6),
  fEMCEcoreRadius(3.),
  fEMCEcore2ESD(kFALSE),
  fEMCSubtractPedestals(kTRUE),
  fEMCUnfold(kTRUE),
  fEMCEnergyCorrectionOn(kTRUE),
  fEMCFitterVersion(""),
  fNonlinearityCorrVersion(""),
  fGlobalAltroOffset(0),
  fGlobalAltroThreshold(0),
  fCPVClusteringThreshold(0.0),
  fCPVLocMaxCut(0.03),
  fCPVMinE(0.0),
  fCPVW0(4.0),
  fCPVUnfold(kTRUE)
{
  //Copy constructor.
}

//-----------------------------------------------------------------------------
AliPHOSRecoParam& AliPHOSRecoParam::operator = (const AliPHOSRecoParam& recoParam)
{
  //Assignment operator.

  if(this != &recoParam) {
    fNonLinearityParams     = recoParam.fNonLinearityParams;
    fEMCClusteringThreshold = recoParam.fEMCClusteringThreshold;
    fEMCLocMaxCut           = recoParam.fEMCLocMaxCut;
    fEMCRawDigitThreshold   = recoParam.fEMCRawDigitThreshold;
    fEMCMinE                = recoParam.fEMCMinE;
    fEMCW0                  = recoParam.fEMCW0;
    fEMCSampleQualityCut    = recoParam.fEMCSampleQualityCut;
    fTimeGateAmpThresh      = recoParam.fTimeGateAmpThresh ;
    fTimeGateLow            = recoParam.fTimeGateLow ;
    fTimeGateHigh           = recoParam.fTimeGateHigh ;
    fEMCEcoreRadius         = recoParam.fEMCEcoreRadius;
    fEMCEcore2ESD           = recoParam.fEMCEcore2ESD;
    fEMCSubtractPedestals   = recoParam.fEMCSubtractPedestals;
    fEMCUnfold              = recoParam.fEMCUnfold;
    fEMCEnergyCorrectionOn  = recoParam.fEMCEnergyCorrectionOn;
    fEMCFitterVersion       = recoParam.fEMCFitterVersion;
    fNonlinearityCorrVersion= recoParam.fNonlinearityCorrVersion;
    fGlobalAltroOffset      = recoParam.fGlobalAltroOffset;
    fGlobalAltroThreshold   = recoParam.fGlobalAltroThreshold;
    fCPVClusteringThreshold = recoParam.fCPVClusteringThreshold;
    fCPVLocMaxCut           = recoParam.fCPVLocMaxCut;
    fCPVMinE                = recoParam.fCPVMinE;
    fCPVW0                  = recoParam.fCPVW0;
    fCPVUnfold              = recoParam.fCPVUnfold;
    fNonLinearityParams     = recoParam.fNonLinearityParams ;
  }

  return *this;
}

//-----------------------------------------------------------------------------
void AliPHOSRecoParam::Print(Option_t * /*option*/) const
{
  AliDebug(2,Form("PHOS reconstruction parameters:\n"
		  "\tEMCClusteringThreshold = %f\n"
		  "\tEMCLocMaxCut           = %f\n"
		  "\tEMCRawDigitThreshold   = %f\n"
		  "\tEMCMinE                = %f\n"
		  "\tEMCW0                  = %f\n"
		  "\tEMCSampleQualityCut    = %f\n"
		  "\tEMCEcoreRadius         = %f\n"
		  "\tEMCEcore2ESD           = %d\n"
		  "\tEMCSubtractPedestals   = %d\n"
		  "\tEMCUnfold              = %d\n"
		  "\tEMCEnergyCorrectionOn  = %d\n"
		  "\tEMCFitterVersion       = \"%s\"\n"
		  "\tGlobalAltroOffset      = %d\n"
		  "\tGlobalAltroThreshold   = %d",
		  fEMCClusteringThreshold,
		  fEMCLocMaxCut,
		  fEMCRawDigitThreshold,
		  fEMCMinE,
		  fEMCW0,
		  fEMCSampleQualityCut,
		  fEMCEcoreRadius,
		  fEMCEcore2ESD,
		  fEMCSubtractPedestals,
		  fEMCUnfold,
		  fEMCEnergyCorrectionOn,
		  fEMCFitterVersion.Data(),
		  fGlobalAltroOffset,
		  fGlobalAltroThreshold));

}

//-----------------------------------------------------------------------------
AliPHOSRecoParam* AliPHOSRecoParam::GetDefaultParameters()
{
  //Default parameters for the reconstruction

  AliPHOSRecoParam* params = new AliPHOSRecoParam();
  return params;
}

//-----------------------------------------------------------------------------
const TObjArray* AliPHOSRecoParam::GetMappings()
{
  //Returns array of AliAltroMappings for RCU0..RCU3.
  //If not found, read it from OCDB.

  //Quick check as follows:
  //  root [0] AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
  //  root [1] AliCDBManager::Instance()->SetRun(1);
  //  root [2] TObjArray* maps = AliPHOSRecoParam::GetMappings();
  //  root [3] maps->Print();
  
  if(fgkMaps) return fgkMaps;
  
  AliCDBEntry* entry = AliCDBManager::Instance()->Get("PHOS/Calib/Mapping");
  if(entry)
    fgkMaps = (TObjArray*)entry->GetObject();
  
  return fgkMaps;
  
}
//-----------------------------------------------------------------------------
void AliPHOSRecoParam::SetNonlinearityCorrectionVersion(const char * ver){
  //Set non-linearity correction version and adjust parameters

  if(strcmp(ver,"NoCorrection")==0){
    fNonLinearityParams.Set(1) ;
    fNonLinearityParams.AddAt(0.,0) ;
    fNonlinearityCorrVersion=ver ;
    return ;
  }
  if(strcmp(ver,"Henrik2010")==0){
    Float_t pars[7]={1.051,2.54e-003,-1.737e-002,5.69e-002,3.3e-001,1.42e-001,1.50e-002} ;
    fNonLinearityParams.Set(7,pars) ;
    fNonlinearityCorrVersion=ver ;
    return ;
  }
  if(strcmp(ver,"Gustavo2005")==0){
    Float_t pars[3]={0.0241, 1.0504, 0.000249} ;
    fNonLinearityParams.Set(3,pars) ;
    fNonlinearityCorrVersion=ver ;
    return ;
  }
  AliError(Form("Non known correction version: %s, still using default \n",ver)) ;


}

//-----------------------------------------------------------------------------
const TObject* AliPHOSRecoParam::GetTriggerParameters()
{
  //Returns trigger parameters.

  //Quick check as follows:
  //  root [0] AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
  //  root [1] AliCDBManager::Instance()->SetRun(158171);
  //  root [2] TObject* parameters = AliPHOSRecoParam::GetTriggerParameters();
  //  root [3] parameters->Print();
  
  if(fgkTrigParams) return fgkTrigParams;
  
  AliCDBEntry* entry = AliCDBManager::Instance()->Get("PHOS/Trigger/Parameters");
  if(entry)
    fgkTrigParams = entry->GetObject();
  
  return fgkTrigParams;
  
}
 AliPHOSRecoParam.cxx:1
 AliPHOSRecoParam.cxx:2
 AliPHOSRecoParam.cxx:3
 AliPHOSRecoParam.cxx:4
 AliPHOSRecoParam.cxx:5
 AliPHOSRecoParam.cxx:6
 AliPHOSRecoParam.cxx:7
 AliPHOSRecoParam.cxx:8
 AliPHOSRecoParam.cxx:9
 AliPHOSRecoParam.cxx:10
 AliPHOSRecoParam.cxx:11
 AliPHOSRecoParam.cxx:12
 AliPHOSRecoParam.cxx:13
 AliPHOSRecoParam.cxx:14
 AliPHOSRecoParam.cxx:15
 AliPHOSRecoParam.cxx:16
 AliPHOSRecoParam.cxx:17
 AliPHOSRecoParam.cxx:18
 AliPHOSRecoParam.cxx:19
 AliPHOSRecoParam.cxx:20
 AliPHOSRecoParam.cxx:21
 AliPHOSRecoParam.cxx:22
 AliPHOSRecoParam.cxx:23
 AliPHOSRecoParam.cxx:24
 AliPHOSRecoParam.cxx:25
 AliPHOSRecoParam.cxx:26
 AliPHOSRecoParam.cxx:27
 AliPHOSRecoParam.cxx:28
 AliPHOSRecoParam.cxx:29
 AliPHOSRecoParam.cxx:30
 AliPHOSRecoParam.cxx:31
 AliPHOSRecoParam.cxx:32
 AliPHOSRecoParam.cxx:33
 AliPHOSRecoParam.cxx:34
 AliPHOSRecoParam.cxx:35
 AliPHOSRecoParam.cxx:36
 AliPHOSRecoParam.cxx:37
 AliPHOSRecoParam.cxx:38
 AliPHOSRecoParam.cxx:39
 AliPHOSRecoParam.cxx:40
 AliPHOSRecoParam.cxx:41
 AliPHOSRecoParam.cxx:42
 AliPHOSRecoParam.cxx:43
 AliPHOSRecoParam.cxx:44
 AliPHOSRecoParam.cxx:45
 AliPHOSRecoParam.cxx:46
 AliPHOSRecoParam.cxx:47
 AliPHOSRecoParam.cxx:48
 AliPHOSRecoParam.cxx:49
 AliPHOSRecoParam.cxx:50
 AliPHOSRecoParam.cxx:51
 AliPHOSRecoParam.cxx:52
 AliPHOSRecoParam.cxx:53
 AliPHOSRecoParam.cxx:54
 AliPHOSRecoParam.cxx:55
 AliPHOSRecoParam.cxx:56
 AliPHOSRecoParam.cxx:57
 AliPHOSRecoParam.cxx:58
 AliPHOSRecoParam.cxx:59
 AliPHOSRecoParam.cxx:60
 AliPHOSRecoParam.cxx:61
 AliPHOSRecoParam.cxx:62
 AliPHOSRecoParam.cxx:63
 AliPHOSRecoParam.cxx:64
 AliPHOSRecoParam.cxx:65
 AliPHOSRecoParam.cxx:66
 AliPHOSRecoParam.cxx:67
 AliPHOSRecoParam.cxx:68
 AliPHOSRecoParam.cxx:69
 AliPHOSRecoParam.cxx:70
 AliPHOSRecoParam.cxx:71
 AliPHOSRecoParam.cxx:72
 AliPHOSRecoParam.cxx:73
 AliPHOSRecoParam.cxx:74
 AliPHOSRecoParam.cxx:75
 AliPHOSRecoParam.cxx:76
 AliPHOSRecoParam.cxx:77
 AliPHOSRecoParam.cxx:78
 AliPHOSRecoParam.cxx:79
 AliPHOSRecoParam.cxx:80
 AliPHOSRecoParam.cxx:81
 AliPHOSRecoParam.cxx:82
 AliPHOSRecoParam.cxx:83
 AliPHOSRecoParam.cxx:84
 AliPHOSRecoParam.cxx:85
 AliPHOSRecoParam.cxx:86
 AliPHOSRecoParam.cxx:87
 AliPHOSRecoParam.cxx:88
 AliPHOSRecoParam.cxx:89
 AliPHOSRecoParam.cxx:90
 AliPHOSRecoParam.cxx:91
 AliPHOSRecoParam.cxx:92
 AliPHOSRecoParam.cxx:93
 AliPHOSRecoParam.cxx:94
 AliPHOSRecoParam.cxx:95
 AliPHOSRecoParam.cxx:96
 AliPHOSRecoParam.cxx:97
 AliPHOSRecoParam.cxx:98
 AliPHOSRecoParam.cxx:99
 AliPHOSRecoParam.cxx:100
 AliPHOSRecoParam.cxx:101
 AliPHOSRecoParam.cxx:102
 AliPHOSRecoParam.cxx:103
 AliPHOSRecoParam.cxx:104
 AliPHOSRecoParam.cxx:105
 AliPHOSRecoParam.cxx:106
 AliPHOSRecoParam.cxx:107
 AliPHOSRecoParam.cxx:108
 AliPHOSRecoParam.cxx:109
 AliPHOSRecoParam.cxx:110
 AliPHOSRecoParam.cxx:111
 AliPHOSRecoParam.cxx:112
 AliPHOSRecoParam.cxx:113
 AliPHOSRecoParam.cxx:114
 AliPHOSRecoParam.cxx:115
 AliPHOSRecoParam.cxx:116
 AliPHOSRecoParam.cxx:117
 AliPHOSRecoParam.cxx:118
 AliPHOSRecoParam.cxx:119
 AliPHOSRecoParam.cxx:120
 AliPHOSRecoParam.cxx:121
 AliPHOSRecoParam.cxx:122
 AliPHOSRecoParam.cxx:123
 AliPHOSRecoParam.cxx:124
 AliPHOSRecoParam.cxx:125
 AliPHOSRecoParam.cxx:126
 AliPHOSRecoParam.cxx:127
 AliPHOSRecoParam.cxx:128
 AliPHOSRecoParam.cxx:129
 AliPHOSRecoParam.cxx:130
 AliPHOSRecoParam.cxx:131
 AliPHOSRecoParam.cxx:132
 AliPHOSRecoParam.cxx:133
 AliPHOSRecoParam.cxx:134
 AliPHOSRecoParam.cxx:135
 AliPHOSRecoParam.cxx:136
 AliPHOSRecoParam.cxx:137
 AliPHOSRecoParam.cxx:138
 AliPHOSRecoParam.cxx:139
 AliPHOSRecoParam.cxx:140
 AliPHOSRecoParam.cxx:141
 AliPHOSRecoParam.cxx:142
 AliPHOSRecoParam.cxx:143
 AliPHOSRecoParam.cxx:144
 AliPHOSRecoParam.cxx:145
 AliPHOSRecoParam.cxx:146
 AliPHOSRecoParam.cxx:147
 AliPHOSRecoParam.cxx:148
 AliPHOSRecoParam.cxx:149
 AliPHOSRecoParam.cxx:150
 AliPHOSRecoParam.cxx:151
 AliPHOSRecoParam.cxx:152
 AliPHOSRecoParam.cxx:153
 AliPHOSRecoParam.cxx:154
 AliPHOSRecoParam.cxx:155
 AliPHOSRecoParam.cxx:156
 AliPHOSRecoParam.cxx:157
 AliPHOSRecoParam.cxx:158
 AliPHOSRecoParam.cxx:159
 AliPHOSRecoParam.cxx:160
 AliPHOSRecoParam.cxx:161
 AliPHOSRecoParam.cxx:162
 AliPHOSRecoParam.cxx:163
 AliPHOSRecoParam.cxx:164
 AliPHOSRecoParam.cxx:165
 AliPHOSRecoParam.cxx:166
 AliPHOSRecoParam.cxx:167
 AliPHOSRecoParam.cxx:168
 AliPHOSRecoParam.cxx:169
 AliPHOSRecoParam.cxx:170
 AliPHOSRecoParam.cxx:171
 AliPHOSRecoParam.cxx:172
 AliPHOSRecoParam.cxx:173
 AliPHOSRecoParam.cxx:174
 AliPHOSRecoParam.cxx:175
 AliPHOSRecoParam.cxx:176
 AliPHOSRecoParam.cxx:177
 AliPHOSRecoParam.cxx:178
 AliPHOSRecoParam.cxx:179
 AliPHOSRecoParam.cxx:180
 AliPHOSRecoParam.cxx:181
 AliPHOSRecoParam.cxx:182
 AliPHOSRecoParam.cxx:183
 AliPHOSRecoParam.cxx:184
 AliPHOSRecoParam.cxx:185
 AliPHOSRecoParam.cxx:186
 AliPHOSRecoParam.cxx:187
 AliPHOSRecoParam.cxx:188
 AliPHOSRecoParam.cxx:189
 AliPHOSRecoParam.cxx:190
 AliPHOSRecoParam.cxx:191
 AliPHOSRecoParam.cxx:192
 AliPHOSRecoParam.cxx:193
 AliPHOSRecoParam.cxx:194
 AliPHOSRecoParam.cxx:195
 AliPHOSRecoParam.cxx:196
 AliPHOSRecoParam.cxx:197
 AliPHOSRecoParam.cxx:198
 AliPHOSRecoParam.cxx:199
 AliPHOSRecoParam.cxx:200
 AliPHOSRecoParam.cxx:201
 AliPHOSRecoParam.cxx:202
 AliPHOSRecoParam.cxx:203
 AliPHOSRecoParam.cxx:204
 AliPHOSRecoParam.cxx:205
 AliPHOSRecoParam.cxx:206
 AliPHOSRecoParam.cxx:207
 AliPHOSRecoParam.cxx:208
 AliPHOSRecoParam.cxx:209
 AliPHOSRecoParam.cxx:210
 AliPHOSRecoParam.cxx:211
 AliPHOSRecoParam.cxx:212
 AliPHOSRecoParam.cxx:213
 AliPHOSRecoParam.cxx:214
 AliPHOSRecoParam.cxx:215
 AliPHOSRecoParam.cxx:216
 AliPHOSRecoParam.cxx:217
 AliPHOSRecoParam.cxx:218
 AliPHOSRecoParam.cxx:219
 AliPHOSRecoParam.cxx:220
 AliPHOSRecoParam.cxx:221
 AliPHOSRecoParam.cxx:222
 AliPHOSRecoParam.cxx:223
 AliPHOSRecoParam.cxx:224
 AliPHOSRecoParam.cxx:225
 AliPHOSRecoParam.cxx:226
 AliPHOSRecoParam.cxx:227
 AliPHOSRecoParam.cxx:228
 AliPHOSRecoParam.cxx:229
 AliPHOSRecoParam.cxx:230
 AliPHOSRecoParam.cxx:231
 AliPHOSRecoParam.cxx:232
 AliPHOSRecoParam.cxx:233
 AliPHOSRecoParam.cxx:234
 AliPHOSRecoParam.cxx:235
 AliPHOSRecoParam.cxx:236
 AliPHOSRecoParam.cxx:237
 AliPHOSRecoParam.cxx:238
 AliPHOSRecoParam.cxx:239
 AliPHOSRecoParam.cxx:240
 AliPHOSRecoParam.cxx:241
 AliPHOSRecoParam.cxx:242
 AliPHOSRecoParam.cxx:243