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.                  *
**************************************************************************/
//
// Container for TRD Threshold parameters stored in the OADB
//
// Author: Markus Fasel <M.Fasel@gsi.de>
//
#include <TMath.h>
#include <TSortedList.h>

#include "AliLog.h"

#include "AliHFEOADBThresholdsTRD.h"

ClassImp(AliHFEOADBThresholdsTRD)

const Double_t AliHFEOADBThresholdsTRD::fgkVerySmall = 1e-5;

//____________________________________________________________
AliHFEOADBThresholdsTRD::AliHFEOADBThresholdsTRD():
  TNamed(),
  fEntries(NULL)
{
  //
  // Dummy constructor
  //
}

//____________________________________________________________
AliHFEOADBThresholdsTRD::AliHFEOADBThresholdsTRD(const char *name) :
  TNamed(name, ""),
  fEntries(NULL)
{
  //
  // Default constructor
  //
  fEntries = new TSortedList;
}

//____________________________________________________________
AliHFEOADBThresholdsTRD::~AliHFEOADBThresholdsTRD(){
  //
  // Destructor
  //
  delete fEntries;
}

//____________________________________________________________
Bool_t AliHFEOADBThresholdsTRD::GetThresholdParameters(Int_t ntracklets, Double_t efficiency, Double_t *params){
  //
  // Retrieve params
  // Use IsEqual definition
  //
  AliHFEthresholdParamsTRD test(ntracklets, efficiency);
  TObject *result = fEntries->FindObject(&test);
  if(!result){ 
    AliDebug(1, Form("No threshold params found for %d tracklets and an electron efficiency of %f", ntracklets, efficiency));
    return kFALSE;
  }
  AliHFEthresholdParamsTRD *parResult = static_cast<AliHFEthresholdParamsTRD *>(result);
  AliDebug(1, Form("Threshold params found: NTracklets %d, Electron Efficiency %f", parResult->GetNTracklets(), parResult->GetElectronEfficiency()));
  memcpy(params, parResult->GetThresholdParams(), sizeof(Double_t) * 4);
  return kTRUE;
}

//____________________________________________________________
void AliHFEOADBThresholdsTRD::SetThresholdParameters(Int_t ntracklets, Double_t efficiency, Double_t *params){
  // 
  // Store new Params in the Object
  //
  AliDebug(1, Form("Save Parameters for %d tracklets at and electron efficiency of %f", ntracklets, efficiency));
  fEntries->Add(new AliHFEthresholdParamsTRD(ntracklets, efficiency, params));
}

//____________________________________________________________
void AliHFEOADBThresholdsTRD::Print(Option_t *) const {
  //
  // Print thresholds
  //
  printf("Available thresholds:\n");
  printf("_________________________________________\n");
  TIter objects(fEntries);
  AliHFEthresholdParamsTRD *par;
  while((par = dynamic_cast<AliHFEthresholdParamsTRD *>(objects()))){
    printf("Number of tracklets %d, Electron efficiency %f\n", par->GetNTracklets(), par->GetElectronEfficiency());
  }
}

//____________________________________________________________
AliHFEOADBThresholdsTRD::AliHFEthresholdParamsTRD::AliHFEthresholdParamsTRD():
  TObject(),
  fNTracklets(0),
  fEfficiency(0.)
{
   // 
   // Default constructor
   //
   memset(fParams, 0, sizeof(Double_t) * 4);
}

//____________________________________________________________
AliHFEOADBThresholdsTRD::AliHFEthresholdParamsTRD::AliHFEthresholdParamsTRD(Int_t nTracklets, Double_t eff, Double_t *params) :
  TObject(),
  fNTracklets(nTracklets),
  fEfficiency(eff)
{
  //
  // Default Constructor
  //
  if(params) memcpy(fParams, params, sizeof(Double_t) * 4);
  else memset(fParams, 0, sizeof(Double_t) * 4);
}

//____________________________________________________________
AliHFEOADBThresholdsTRD::AliHFEthresholdParamsTRD::AliHFEthresholdParamsTRD(const AliHFEthresholdParamsTRD &ref) :
  TObject(ref),
  fNTracklets(ref.fNTracklets),
  fEfficiency(ref.fEfficiency)
{
  //
  // Copy constructor
  //
  memcpy(fParams, ref.fParams, sizeof(Double_t) * 4);
}

//____________________________________________________________
AliHFEOADBThresholdsTRD::AliHFEthresholdParamsTRD &AliHFEOADBThresholdsTRD::AliHFEthresholdParamsTRD::operator=(const AliHFEthresholdParamsTRD &ref){
  //
  // Assignment operator
  //
  if(this != &ref){
    TObject::operator=(ref);

    fNTracklets = ref.fNTracklets;
    fEfficiency = ref.fEfficiency;
    memcpy(fParams, ref.fParams, sizeof(Double_t) * 4);
  }
  return *this;
}
        
//____________________________________________________________
Int_t AliHFEOADBThresholdsTRD::AliHFEthresholdParamsTRD::Compare(const TObject *ref) const{
  //
  // Compares two objects
  // Order:
  //   First compare number of tracklets, if they are equal compare electron efficiency
  //
  const AliHFEthresholdParamsTRD *refObj = static_cast<const AliHFEthresholdParamsTRD *>(ref);
  if(fNTracklets < refObj->GetNTracklets()) return -1;
  else if(fNTracklets > refObj->GetNTracklets()) return 1;
  else{
    if(fEfficiency < refObj->GetElectronEfficiency()) return -1;
    else if(fEfficiency > refObj->GetElectronEfficiency()) return 1;
    else return 0;
  }
}

//____________________________________________________________
Bool_t AliHFEOADBThresholdsTRD::AliHFEthresholdParamsTRD::IsEqual(const TObject *ref) const {
  //
  // Check for equality 
  // Tracklets and Efficiency are used
  //
  const AliHFEthresholdParamsTRD *refObj = dynamic_cast<const AliHFEthresholdParamsTRD *>(ref);
  if(!refObj) return kFALSE;
  return fNTracklets == refObj->GetNTracklets() && TMath::Abs(fEfficiency -  refObj->GetElectronEfficiency()) < fgkVerySmall;
}
 AliHFEOADBThresholdsTRD.cxx:1
 AliHFEOADBThresholdsTRD.cxx:2
 AliHFEOADBThresholdsTRD.cxx:3
 AliHFEOADBThresholdsTRD.cxx:4
 AliHFEOADBThresholdsTRD.cxx:5
 AliHFEOADBThresholdsTRD.cxx:6
 AliHFEOADBThresholdsTRD.cxx:7
 AliHFEOADBThresholdsTRD.cxx:8
 AliHFEOADBThresholdsTRD.cxx:9
 AliHFEOADBThresholdsTRD.cxx:10
 AliHFEOADBThresholdsTRD.cxx:11
 AliHFEOADBThresholdsTRD.cxx:12
 AliHFEOADBThresholdsTRD.cxx:13
 AliHFEOADBThresholdsTRD.cxx:14
 AliHFEOADBThresholdsTRD.cxx:15
 AliHFEOADBThresholdsTRD.cxx:16
 AliHFEOADBThresholdsTRD.cxx:17
 AliHFEOADBThresholdsTRD.cxx:18
 AliHFEOADBThresholdsTRD.cxx:19
 AliHFEOADBThresholdsTRD.cxx:20
 AliHFEOADBThresholdsTRD.cxx:21
 AliHFEOADBThresholdsTRD.cxx:22
 AliHFEOADBThresholdsTRD.cxx:23
 AliHFEOADBThresholdsTRD.cxx:24
 AliHFEOADBThresholdsTRD.cxx:25
 AliHFEOADBThresholdsTRD.cxx:26
 AliHFEOADBThresholdsTRD.cxx:27
 AliHFEOADBThresholdsTRD.cxx:28
 AliHFEOADBThresholdsTRD.cxx:29
 AliHFEOADBThresholdsTRD.cxx:30
 AliHFEOADBThresholdsTRD.cxx:31
 AliHFEOADBThresholdsTRD.cxx:32
 AliHFEOADBThresholdsTRD.cxx:33
 AliHFEOADBThresholdsTRD.cxx:34
 AliHFEOADBThresholdsTRD.cxx:35
 AliHFEOADBThresholdsTRD.cxx:36
 AliHFEOADBThresholdsTRD.cxx:37
 AliHFEOADBThresholdsTRD.cxx:38
 AliHFEOADBThresholdsTRD.cxx:39
 AliHFEOADBThresholdsTRD.cxx:40
 AliHFEOADBThresholdsTRD.cxx:41
 AliHFEOADBThresholdsTRD.cxx:42
 AliHFEOADBThresholdsTRD.cxx:43
 AliHFEOADBThresholdsTRD.cxx:44
 AliHFEOADBThresholdsTRD.cxx:45
 AliHFEOADBThresholdsTRD.cxx:46
 AliHFEOADBThresholdsTRD.cxx:47
 AliHFEOADBThresholdsTRD.cxx:48
 AliHFEOADBThresholdsTRD.cxx:49
 AliHFEOADBThresholdsTRD.cxx:50
 AliHFEOADBThresholdsTRD.cxx:51
 AliHFEOADBThresholdsTRD.cxx:52
 AliHFEOADBThresholdsTRD.cxx:53
 AliHFEOADBThresholdsTRD.cxx:54
 AliHFEOADBThresholdsTRD.cxx:55
 AliHFEOADBThresholdsTRD.cxx:56
 AliHFEOADBThresholdsTRD.cxx:57
 AliHFEOADBThresholdsTRD.cxx:58
 AliHFEOADBThresholdsTRD.cxx:59
 AliHFEOADBThresholdsTRD.cxx:60
 AliHFEOADBThresholdsTRD.cxx:61
 AliHFEOADBThresholdsTRD.cxx:62
 AliHFEOADBThresholdsTRD.cxx:63
 AliHFEOADBThresholdsTRD.cxx:64
 AliHFEOADBThresholdsTRD.cxx:65
 AliHFEOADBThresholdsTRD.cxx:66
 AliHFEOADBThresholdsTRD.cxx:67
 AliHFEOADBThresholdsTRD.cxx:68
 AliHFEOADBThresholdsTRD.cxx:69
 AliHFEOADBThresholdsTRD.cxx:70
 AliHFEOADBThresholdsTRD.cxx:71
 AliHFEOADBThresholdsTRD.cxx:72
 AliHFEOADBThresholdsTRD.cxx:73
 AliHFEOADBThresholdsTRD.cxx:74
 AliHFEOADBThresholdsTRD.cxx:75
 AliHFEOADBThresholdsTRD.cxx:76
 AliHFEOADBThresholdsTRD.cxx:77
 AliHFEOADBThresholdsTRD.cxx:78
 AliHFEOADBThresholdsTRD.cxx:79
 AliHFEOADBThresholdsTRD.cxx:80
 AliHFEOADBThresholdsTRD.cxx:81
 AliHFEOADBThresholdsTRD.cxx:82
 AliHFEOADBThresholdsTRD.cxx:83
 AliHFEOADBThresholdsTRD.cxx:84
 AliHFEOADBThresholdsTRD.cxx:85
 AliHFEOADBThresholdsTRD.cxx:86
 AliHFEOADBThresholdsTRD.cxx:87
 AliHFEOADBThresholdsTRD.cxx:88
 AliHFEOADBThresholdsTRD.cxx:89
 AliHFEOADBThresholdsTRD.cxx:90
 AliHFEOADBThresholdsTRD.cxx:91
 AliHFEOADBThresholdsTRD.cxx:92
 AliHFEOADBThresholdsTRD.cxx:93
 AliHFEOADBThresholdsTRD.cxx:94
 AliHFEOADBThresholdsTRD.cxx:95
 AliHFEOADBThresholdsTRD.cxx:96
 AliHFEOADBThresholdsTRD.cxx:97
 AliHFEOADBThresholdsTRD.cxx:98
 AliHFEOADBThresholdsTRD.cxx:99
 AliHFEOADBThresholdsTRD.cxx:100
 AliHFEOADBThresholdsTRD.cxx:101
 AliHFEOADBThresholdsTRD.cxx:102
 AliHFEOADBThresholdsTRD.cxx:103
 AliHFEOADBThresholdsTRD.cxx:104
 AliHFEOADBThresholdsTRD.cxx:105
 AliHFEOADBThresholdsTRD.cxx:106
 AliHFEOADBThresholdsTRD.cxx:107
 AliHFEOADBThresholdsTRD.cxx:108
 AliHFEOADBThresholdsTRD.cxx:109
 AliHFEOADBThresholdsTRD.cxx:110
 AliHFEOADBThresholdsTRD.cxx:111
 AliHFEOADBThresholdsTRD.cxx:112
 AliHFEOADBThresholdsTRD.cxx:113
 AliHFEOADBThresholdsTRD.cxx:114
 AliHFEOADBThresholdsTRD.cxx:115
 AliHFEOADBThresholdsTRD.cxx:116
 AliHFEOADBThresholdsTRD.cxx:117
 AliHFEOADBThresholdsTRD.cxx:118
 AliHFEOADBThresholdsTRD.cxx:119
 AliHFEOADBThresholdsTRD.cxx:120
 AliHFEOADBThresholdsTRD.cxx:121
 AliHFEOADBThresholdsTRD.cxx:122
 AliHFEOADBThresholdsTRD.cxx:123
 AliHFEOADBThresholdsTRD.cxx:124
 AliHFEOADBThresholdsTRD.cxx:125
 AliHFEOADBThresholdsTRD.cxx:126
 AliHFEOADBThresholdsTRD.cxx:127
 AliHFEOADBThresholdsTRD.cxx:128
 AliHFEOADBThresholdsTRD.cxx:129
 AliHFEOADBThresholdsTRD.cxx:130
 AliHFEOADBThresholdsTRD.cxx:131
 AliHFEOADBThresholdsTRD.cxx:132
 AliHFEOADBThresholdsTRD.cxx:133
 AliHFEOADBThresholdsTRD.cxx:134
 AliHFEOADBThresholdsTRD.cxx:135
 AliHFEOADBThresholdsTRD.cxx:136
 AliHFEOADBThresholdsTRD.cxx:137
 AliHFEOADBThresholdsTRD.cxx:138
 AliHFEOADBThresholdsTRD.cxx:139
 AliHFEOADBThresholdsTRD.cxx:140
 AliHFEOADBThresholdsTRD.cxx:141
 AliHFEOADBThresholdsTRD.cxx:142
 AliHFEOADBThresholdsTRD.cxx:143
 AliHFEOADBThresholdsTRD.cxx:144
 AliHFEOADBThresholdsTRD.cxx:145
 AliHFEOADBThresholdsTRD.cxx:146
 AliHFEOADBThresholdsTRD.cxx:147
 AliHFEOADBThresholdsTRD.cxx:148
 AliHFEOADBThresholdsTRD.cxx:149
 AliHFEOADBThresholdsTRD.cxx:150
 AliHFEOADBThresholdsTRD.cxx:151
 AliHFEOADBThresholdsTRD.cxx:152
 AliHFEOADBThresholdsTRD.cxx:153
 AliHFEOADBThresholdsTRD.cxx:154
 AliHFEOADBThresholdsTRD.cxx:155
 AliHFEOADBThresholdsTRD.cxx:156
 AliHFEOADBThresholdsTRD.cxx:157
 AliHFEOADBThresholdsTRD.cxx:158
 AliHFEOADBThresholdsTRD.cxx:159
 AliHFEOADBThresholdsTRD.cxx:160
 AliHFEOADBThresholdsTRD.cxx:161
 AliHFEOADBThresholdsTRD.cxx:162
 AliHFEOADBThresholdsTRD.cxx:163
 AliHFEOADBThresholdsTRD.cxx:164
 AliHFEOADBThresholdsTRD.cxx:165
 AliHFEOADBThresholdsTRD.cxx:166
 AliHFEOADBThresholdsTRD.cxx:167
 AliHFEOADBThresholdsTRD.cxx:168
 AliHFEOADBThresholdsTRD.cxx:169
 AliHFEOADBThresholdsTRD.cxx:170
 AliHFEOADBThresholdsTRD.cxx:171
 AliHFEOADBThresholdsTRD.cxx:172
 AliHFEOADBThresholdsTRD.cxx:173
 AliHFEOADBThresholdsTRD.cxx:174
 AliHFEOADBThresholdsTRD.cxx:175
 AliHFEOADBThresholdsTRD.cxx:176
 AliHFEOADBThresholdsTRD.cxx:177
 AliHFEOADBThresholdsTRD.cxx:178
 AliHFEOADBThresholdsTRD.cxx:179