ROOT logo
/**************************************************************************
 * Copyright(c) 2009-2011, 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 AliITSQASSDRefData
//                     ITS SSD reference values for the QA
//
//         Origin: Panos.Christakoglou@cern.ch, NIKHEF-Utrecht University
//-------------------------------------------------------------------------

#include <Riostream.h>
#include <fstream>
#include <TArray.h>
#include <TString.h>
#include <TObjString.h>
#include <TObjArray.h>

#include "AliLog.h"
#include "AliITSQASSDRefData.h"

using std::ifstream;
ClassImp(AliITSQASSDRefData)

//___________________________________________________________________________
AliITSQASSDRefData::AliITSQASSDRefData() :
  TObject(),
  fRefList(0),
  fNameList(0) { 
  //Default constructor
}

//___________________________________________________________________________
AliITSQASSDRefData::AliITSQASSDRefData(Int_t specie) :
  TObject(),
  fRefList(0),
  fNameList(0) { 
  //Default constructor
  SetDefault(specie);
}

//___________________________________________________________________________
AliITSQASSDRefData::AliITSQASSDRefData(const char* path) :
  TObject(),
  fRefList(0),
  fNameList(0) {
  //Constructor with the path of the ascii file as an argument
  SetReferenceData(path);
}

//___________________________________________________________________________
AliITSQASSDRefData::AliITSQASSDRefData(const AliITSQASSDRefData& refData):
TObject(),
fRefList(refData.fRefList),
fNameList(refData.fNameList) {
  //Copy constructor
}

//___________________________________________________________________________
AliITSQASSDRefData& AliITSQASSDRefData::operator = (const AliITSQASSDRefData& refData) {
  //assignment operator
  if(&refData != this) {
    fRefList = refData.fRefList;
    fNameList = refData.fNameList;
  }
  return *this ;
}

//___________________________________________________________________________
AliITSQASSDRefData::~AliITSQASSDRefData() { 
  //Destructor
  if(fRefList) delete fRefList;
  if(fNameList) delete fNameList;
}

//___________________________________________________________________________
void AliITSQASSDRefData::AddReference(const char* name="", 
				      Int_t id=-1, 
				      Double_t value=0) {
  //Adding a ref. value to the list
  //Printf("(AliITSQASSDRefData::AddReference) Name: %s - Id: %d - Value: %lf",name,id,value);
  if(id>-1&&id<fRefList->GetSize()) {
    AliError(Form("Reference with id %i already exists. Choose other id or use SetReferenceValue(Int_t, Double_t) to overwrite",id));
    return;
  }
  
  if( (strcmp(name,"")!=0) && GetID(name)!=-1) {
    AliError(Form("Reference with name %s already exists. Choose other name or use SetReferenceValue(const char*, Double_t) to overwrite",name));
    return;
  }
  
  if(id==-1) id=fRefList->GetSize();
  fRefList->Set(id+1);
  fRefList->AddAt(value,id);
  fNameList->AddAt(new TObjString(name),id);
}

//___________________________________________________________________________
Int_t AliITSQASSDRefData::GetID(const char* name) {
  //Get the id of the reference value
  Int_t status = -1;
  TString refName = "";
  TString stringName = name;
  TObjString *dummyString = 0;
  for (Int_t id=0; id<fNameList->GetEntriesFast(); id++){
    dummyString = static_cast <TObjString *>(fNameList->At(id));
    refName = dummyString->GetString();
    if(refName == stringName) {
      status = id;
    }
  }

  return status;
}

//___________________________________________________________________________
Double_t AliITSQASSDRefData::GetReferenceValue(const char* name) {
  //Returns the ref. value based on the given name
  TString refName = "";
  TObjString *dummyString = 0;
  for (Int_t id=0; id<fNameList->GetEntriesFast(); id++){
    dummyString = static_cast <TObjString *>(fNameList->At(id));
    refName = dummyString->GetString();

    if(refName.Data()==name) return fRefList->At(id);
  }
  AliError(Form("Reference name %s unknown",name));
  return -1;
}

//___________________________________________________________________________
Double_t AliITSQASSDRefData::GetReferenceValue(Int_t id) {
  //Returns the ref. value based on the given id
  if (id<0||id>fRefList->GetSize()-1){
    AliError("Reference ID out of range");
    return 0;
  }
  return fRefList->At(id);

}

//___________________________________________________________________________
void AliITSQASSDRefData::PrintTable() {
  //Prints the list of reference values
  Printf("___ SSD REFERENCE DATA ___ ");
  Printf("ID ----- Value ------- Name");
  Int_t id=0;
  TString refName = "";
  TObjString *dummyString = 0;
  for(id=0; id<fRefList->GetSize()-1; id++) {
    dummyString = static_cast <TObjString *>(fNameList->At(id));
    refName = dummyString->GetString();
    Printf("%i ------ %4.3g -------- %s",id,fRefList->At(id),refName.Data());
	   
  }

}

//___________________________________________________________________________
void AliITSQASSDRefData::SetDefault(Int_t specie) {
  //Sets the default values
  if(!fNameList) fNameList = new TObjArray();
  fNameList->Add(new TObjString("minSSDDataSize"));
  fNameList->Add(new TObjString("maxSSDDataSize"));
  fNameList->Add(new TObjString("minDDLDataSize"));
  fNameList->Add(new TObjString("maxDDLDataSize"));
  fNameList->Add(new TObjString("minLDCDataSize"));
  fNameList->Add(new TObjString("maxLDCDataSize"));
  fNameList->Add(new TObjString("minMeanDDLDataSize"));
  fNameList->Add(new TObjString("maxMeanDDLDataSize"));
  fNameList->Add(new TObjString("minMeanLDCDataSize"));
  fNameList->Add(new TObjString("maxMeanLDCDataSize"));
  fNameList->Add(new TObjString("maxOccupancy"));
  fNameList->SetOwner(kTRUE);
  
  //specie == 0 ==> Default
  Double_t refValues[11] = {0,0.0,0,0,0,0,0,0,0,0};
  //specie == 1 ==> Low multiplicity
  if(specie == 1) {
    refValues[0] = 0; refValues[1] = 500; refValues[2] = 0; refValues[3] = 50;
    refValues[4] = 0; refValues[5] = 100; refValues[6] = 0; refValues[7] = 50;
    refValues[8] = 0; refValues[9] = 100; refValues[10] = 5;
  }
  //specie == 2 ==> High multiplicity
  if(specie == 2) {
    refValues[0] = 0; refValues[1] = 500; refValues[2] = 0; refValues[3] = 50;
    refValues[4] = 0; refValues[5] = 100; refValues[6] = 0; refValues[7] = 50;
    refValues[8] = 0; refValues[9] = 100; refValues[10] = 5;
  }
  //specie == 3 ==> Cosmics
  if(specie == 3) {
    refValues[0] = 0; refValues[1] = 500; refValues[2] = 0; refValues[3] = 50;
    refValues[4] = 0; refValues[5] = 100; refValues[6] = 0; refValues[7] = 50;
    refValues[8] = 0; refValues[9] = 100; refValues[10] = 5;
  }
  //specie == 4 ==> Calibration
  if(specie == 4) {
    refValues[0] = 0; refValues[1] = 500; refValues[2] = 0; refValues[3] = 50;
    refValues[4] = 0; refValues[5] = 100; refValues[6] = 0; refValues[7] = 50;
    refValues[8] = 0; refValues[9] = 100; refValues[10] = 5;
  }

  if(!fRefList) fRefList = new TArrayD();
  fRefList->Set(11,refValues);
}

//___________________________________________________________________________
void AliITSQASSDRefData::SetReferenceData(const char* path) {
  //Parses an ascii file with the reference values
  if(!fRefList) fRefList = new TArrayD();
  if(!fNameList) fNameList = new TObjArray();

  ifstream file;
  file.open(path);
  
  if (!file) {
    AliWarning(Form("No file found at %s",path));
    SetDefault(0);
    return;
  }
  if(file.bad()){
    AliWarning("Reference data could not be read: Default values are used.");
    SetDefault(0);
    return;
  }
  
  fRefList->Set(0);
  Int_t id = 0, newid = -1;
  Double_t value = 0;
  TString name = "";
  
  while (!file.eof()) {
    //file >> newid;
    file >> name >> id >> value;
    //Printf("Name: %s - Id: %d - Value: %lf",name.Data(),id,value);
    
    if (newid==id) continue; //skip line if id is the same as previous
    AddReference(name.Data(), id, value);
    newid = id;
  }

  file.close();
}

//___________________________________________________________________________
void AliITSQASSDRefData::SetReferenceValue(Int_t id, Double_t value) {
  //Adding a single reference value by id
  if(id<0||id>fRefList->GetSize()-1) {
    AliWarning(Form("Reference ID %i out of range: value not set",id));
  }
  else fRefList->SetAt(value,id);

}

//___________________________________________________________________________
void AliITSQASSDRefData::SetReferenceValue(const char* name, Double_t value) {
  //Adding a single reference value by name
  Int_t id = GetID(name);
  //Printf("Name: %s - Id: %d",name,id);
  if(id == -1) {
    AliError(Form("Reference name %s unknown: value not set",name));
    return;
  }
   
  fRefList->SetAt(value,id);
}
 AliITSQASSDRefData.cxx:1
 AliITSQASSDRefData.cxx:2
 AliITSQASSDRefData.cxx:3
 AliITSQASSDRefData.cxx:4
 AliITSQASSDRefData.cxx:5
 AliITSQASSDRefData.cxx:6
 AliITSQASSDRefData.cxx:7
 AliITSQASSDRefData.cxx:8
 AliITSQASSDRefData.cxx:9
 AliITSQASSDRefData.cxx:10
 AliITSQASSDRefData.cxx:11
 AliITSQASSDRefData.cxx:12
 AliITSQASSDRefData.cxx:13
 AliITSQASSDRefData.cxx:14
 AliITSQASSDRefData.cxx:15
 AliITSQASSDRefData.cxx:16
 AliITSQASSDRefData.cxx:17
 AliITSQASSDRefData.cxx:18
 AliITSQASSDRefData.cxx:19
 AliITSQASSDRefData.cxx:20
 AliITSQASSDRefData.cxx:21
 AliITSQASSDRefData.cxx:22
 AliITSQASSDRefData.cxx:23
 AliITSQASSDRefData.cxx:24
 AliITSQASSDRefData.cxx:25
 AliITSQASSDRefData.cxx:26
 AliITSQASSDRefData.cxx:27
 AliITSQASSDRefData.cxx:28
 AliITSQASSDRefData.cxx:29
 AliITSQASSDRefData.cxx:30
 AliITSQASSDRefData.cxx:31
 AliITSQASSDRefData.cxx:32
 AliITSQASSDRefData.cxx:33
 AliITSQASSDRefData.cxx:34
 AliITSQASSDRefData.cxx:35
 AliITSQASSDRefData.cxx:36
 AliITSQASSDRefData.cxx:37
 AliITSQASSDRefData.cxx:38
 AliITSQASSDRefData.cxx:39
 AliITSQASSDRefData.cxx:40
 AliITSQASSDRefData.cxx:41
 AliITSQASSDRefData.cxx:42
 AliITSQASSDRefData.cxx:43
 AliITSQASSDRefData.cxx:44
 AliITSQASSDRefData.cxx:45
 AliITSQASSDRefData.cxx:46
 AliITSQASSDRefData.cxx:47
 AliITSQASSDRefData.cxx:48
 AliITSQASSDRefData.cxx:49
 AliITSQASSDRefData.cxx:50
 AliITSQASSDRefData.cxx:51
 AliITSQASSDRefData.cxx:52
 AliITSQASSDRefData.cxx:53
 AliITSQASSDRefData.cxx:54
 AliITSQASSDRefData.cxx:55
 AliITSQASSDRefData.cxx:56
 AliITSQASSDRefData.cxx:57
 AliITSQASSDRefData.cxx:58
 AliITSQASSDRefData.cxx:59
 AliITSQASSDRefData.cxx:60
 AliITSQASSDRefData.cxx:61
 AliITSQASSDRefData.cxx:62
 AliITSQASSDRefData.cxx:63
 AliITSQASSDRefData.cxx:64
 AliITSQASSDRefData.cxx:65
 AliITSQASSDRefData.cxx:66
 AliITSQASSDRefData.cxx:67
 AliITSQASSDRefData.cxx:68
 AliITSQASSDRefData.cxx:69
 AliITSQASSDRefData.cxx:70
 AliITSQASSDRefData.cxx:71
 AliITSQASSDRefData.cxx:72
 AliITSQASSDRefData.cxx:73
 AliITSQASSDRefData.cxx:74
 AliITSQASSDRefData.cxx:75
 AliITSQASSDRefData.cxx:76
 AliITSQASSDRefData.cxx:77
 AliITSQASSDRefData.cxx:78
 AliITSQASSDRefData.cxx:79
 AliITSQASSDRefData.cxx:80
 AliITSQASSDRefData.cxx:81
 AliITSQASSDRefData.cxx:82
 AliITSQASSDRefData.cxx:83
 AliITSQASSDRefData.cxx:84
 AliITSQASSDRefData.cxx:85
 AliITSQASSDRefData.cxx:86
 AliITSQASSDRefData.cxx:87
 AliITSQASSDRefData.cxx:88
 AliITSQASSDRefData.cxx:89
 AliITSQASSDRefData.cxx:90
 AliITSQASSDRefData.cxx:91
 AliITSQASSDRefData.cxx:92
 AliITSQASSDRefData.cxx:93
 AliITSQASSDRefData.cxx:94
 AliITSQASSDRefData.cxx:95
 AliITSQASSDRefData.cxx:96
 AliITSQASSDRefData.cxx:97
 AliITSQASSDRefData.cxx:98
 AliITSQASSDRefData.cxx:99
 AliITSQASSDRefData.cxx:100
 AliITSQASSDRefData.cxx:101
 AliITSQASSDRefData.cxx:102
 AliITSQASSDRefData.cxx:103
 AliITSQASSDRefData.cxx:104
 AliITSQASSDRefData.cxx:105
 AliITSQASSDRefData.cxx:106
 AliITSQASSDRefData.cxx:107
 AliITSQASSDRefData.cxx:108
 AliITSQASSDRefData.cxx:109
 AliITSQASSDRefData.cxx:110
 AliITSQASSDRefData.cxx:111
 AliITSQASSDRefData.cxx:112
 AliITSQASSDRefData.cxx:113
 AliITSQASSDRefData.cxx:114
 AliITSQASSDRefData.cxx:115
 AliITSQASSDRefData.cxx:116
 AliITSQASSDRefData.cxx:117
 AliITSQASSDRefData.cxx:118
 AliITSQASSDRefData.cxx:119
 AliITSQASSDRefData.cxx:120
 AliITSQASSDRefData.cxx:121
 AliITSQASSDRefData.cxx:122
 AliITSQASSDRefData.cxx:123
 AliITSQASSDRefData.cxx:124
 AliITSQASSDRefData.cxx:125
 AliITSQASSDRefData.cxx:126
 AliITSQASSDRefData.cxx:127
 AliITSQASSDRefData.cxx:128
 AliITSQASSDRefData.cxx:129
 AliITSQASSDRefData.cxx:130
 AliITSQASSDRefData.cxx:131
 AliITSQASSDRefData.cxx:132
 AliITSQASSDRefData.cxx:133
 AliITSQASSDRefData.cxx:134
 AliITSQASSDRefData.cxx:135
 AliITSQASSDRefData.cxx:136
 AliITSQASSDRefData.cxx:137
 AliITSQASSDRefData.cxx:138
 AliITSQASSDRefData.cxx:139
 AliITSQASSDRefData.cxx:140
 AliITSQASSDRefData.cxx:141
 AliITSQASSDRefData.cxx:142
 AliITSQASSDRefData.cxx:143
 AliITSQASSDRefData.cxx:144
 AliITSQASSDRefData.cxx:145
 AliITSQASSDRefData.cxx:146
 AliITSQASSDRefData.cxx:147
 AliITSQASSDRefData.cxx:148
 AliITSQASSDRefData.cxx:149
 AliITSQASSDRefData.cxx:150
 AliITSQASSDRefData.cxx:151
 AliITSQASSDRefData.cxx:152
 AliITSQASSDRefData.cxx:153
 AliITSQASSDRefData.cxx:154
 AliITSQASSDRefData.cxx:155
 AliITSQASSDRefData.cxx:156
 AliITSQASSDRefData.cxx:157
 AliITSQASSDRefData.cxx:158
 AliITSQASSDRefData.cxx:159
 AliITSQASSDRefData.cxx:160
 AliITSQASSDRefData.cxx:161
 AliITSQASSDRefData.cxx:162
 AliITSQASSDRefData.cxx:163
 AliITSQASSDRefData.cxx:164
 AliITSQASSDRefData.cxx:165
 AliITSQASSDRefData.cxx:166
 AliITSQASSDRefData.cxx:167
 AliITSQASSDRefData.cxx:168
 AliITSQASSDRefData.cxx:169
 AliITSQASSDRefData.cxx:170
 AliITSQASSDRefData.cxx:171
 AliITSQASSDRefData.cxx:172
 AliITSQASSDRefData.cxx:173
 AliITSQASSDRefData.cxx:174
 AliITSQASSDRefData.cxx:175
 AliITSQASSDRefData.cxx:176
 AliITSQASSDRefData.cxx:177
 AliITSQASSDRefData.cxx:178
 AliITSQASSDRefData.cxx:179
 AliITSQASSDRefData.cxx:180
 AliITSQASSDRefData.cxx:181
 AliITSQASSDRefData.cxx:182
 AliITSQASSDRefData.cxx:183
 AliITSQASSDRefData.cxx:184
 AliITSQASSDRefData.cxx:185
 AliITSQASSDRefData.cxx:186
 AliITSQASSDRefData.cxx:187
 AliITSQASSDRefData.cxx:188
 AliITSQASSDRefData.cxx:189
 AliITSQASSDRefData.cxx:190
 AliITSQASSDRefData.cxx:191
 AliITSQASSDRefData.cxx:192
 AliITSQASSDRefData.cxx:193
 AliITSQASSDRefData.cxx:194
 AliITSQASSDRefData.cxx:195
 AliITSQASSDRefData.cxx:196
 AliITSQASSDRefData.cxx:197
 AliITSQASSDRefData.cxx:198
 AliITSQASSDRefData.cxx:199
 AliITSQASSDRefData.cxx:200
 AliITSQASSDRefData.cxx:201
 AliITSQASSDRefData.cxx:202
 AliITSQASSDRefData.cxx:203
 AliITSQASSDRefData.cxx:204
 AliITSQASSDRefData.cxx:205
 AliITSQASSDRefData.cxx:206
 AliITSQASSDRefData.cxx:207
 AliITSQASSDRefData.cxx:208
 AliITSQASSDRefData.cxx:209
 AliITSQASSDRefData.cxx:210
 AliITSQASSDRefData.cxx:211
 AliITSQASSDRefData.cxx:212
 AliITSQASSDRefData.cxx:213
 AliITSQASSDRefData.cxx:214
 AliITSQASSDRefData.cxx:215
 AliITSQASSDRefData.cxx:216
 AliITSQASSDRefData.cxx:217
 AliITSQASSDRefData.cxx:218
 AliITSQASSDRefData.cxx:219
 AliITSQASSDRefData.cxx:220
 AliITSQASSDRefData.cxx:221
 AliITSQASSDRefData.cxx:222
 AliITSQASSDRefData.cxx:223
 AliITSQASSDRefData.cxx:224
 AliITSQASSDRefData.cxx:225
 AliITSQASSDRefData.cxx:226
 AliITSQASSDRefData.cxx:227
 AliITSQASSDRefData.cxx:228
 AliITSQASSDRefData.cxx:229
 AliITSQASSDRefData.cxx:230
 AliITSQASSDRefData.cxx:231
 AliITSQASSDRefData.cxx:232
 AliITSQASSDRefData.cxx:233
 AliITSQASSDRefData.cxx:234
 AliITSQASSDRefData.cxx:235
 AliITSQASSDRefData.cxx:236
 AliITSQASSDRefData.cxx:237
 AliITSQASSDRefData.cxx:238
 AliITSQASSDRefData.cxx:239
 AliITSQASSDRefData.cxx:240
 AliITSQASSDRefData.cxx:241
 AliITSQASSDRefData.cxx:242
 AliITSQASSDRefData.cxx:243
 AliITSQASSDRefData.cxx:244
 AliITSQASSDRefData.cxx:245
 AliITSQASSDRefData.cxx:246
 AliITSQASSDRefData.cxx:247
 AliITSQASSDRefData.cxx:248
 AliITSQASSDRefData.cxx:249
 AliITSQASSDRefData.cxx:250
 AliITSQASSDRefData.cxx:251
 AliITSQASSDRefData.cxx:252
 AliITSQASSDRefData.cxx:253
 AliITSQASSDRefData.cxx:254
 AliITSQASSDRefData.cxx:255
 AliITSQASSDRefData.cxx:256
 AliITSQASSDRefData.cxx:257
 AliITSQASSDRefData.cxx:258
 AliITSQASSDRefData.cxx:259
 AliITSQASSDRefData.cxx:260
 AliITSQASSDRefData.cxx:261
 AliITSQASSDRefData.cxx:262
 AliITSQASSDRefData.cxx:263
 AliITSQASSDRefData.cxx:264
 AliITSQASSDRefData.cxx:265
 AliITSQASSDRefData.cxx:266
 AliITSQASSDRefData.cxx:267
 AliITSQASSDRefData.cxx:268
 AliITSQASSDRefData.cxx:269
 AliITSQASSDRefData.cxx:270
 AliITSQASSDRefData.cxx:271
 AliITSQASSDRefData.cxx:272
 AliITSQASSDRefData.cxx:273
 AliITSQASSDRefData.cxx:274
 AliITSQASSDRefData.cxx:275
 AliITSQASSDRefData.cxx:276
 AliITSQASSDRefData.cxx:277
 AliITSQASSDRefData.cxx:278
 AliITSQASSDRefData.cxx:279
 AliITSQASSDRefData.cxx:280