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$ */


#include <Riostream.h>
#include <TMath.h>
#include "AliITSetfSDD.h"

////////////////////////////////////////////////////////////////////////
// Version: 0
// Written by Piergiorgio Cerello
// November 23 1999
// Revised to comply with coding conventions: Nov, 21 2003 m.m.
//_____________________________________________________________________________

using std::endl;
using std::cout;
ClassImp(AliITSetfSDD)

const Int_t AliITSetfSDD::AliITSetfSDDparam::fgkMaxNofPoles = 5;
const Int_t AliITSetfSDD::AliITSetfSDDparam::fgkMaxNofSamples = 1024;

AliITSetfSDD::AliITSetfSDD():
fTimeDelay(0),
fSamplingTime(0),
fT0(0),
fDf(0.),
fA0(0.) ,
fZeroM(0),
fZeroR(0),
fZeroI(0),
fPoleM(0),
fPoleR(0),
fPoleI(0),
fTfR(0),
fTfI(0),
fWR(0),
fWI(0){
  // Default constructor
}

AliITSetfSDD::AliITSetfSDD(Double_t timestep, Int_t amplif):
fTimeDelay(0),
fSamplingTime(0),
fT0(0),
fDf(0.),
fA0(0.) ,
fZeroM(0),
fZeroR(0),
fZeroI(0),
fPoleM(0),
fPoleR(0),
fPoleI(0),
fTfR(0),
fTfI(0),
fWR(0),
fWI(0)
{
  // Standard constructor. sampling time in ns

  /*
  cout<<"Number of poles: "<<AliITSetfSDDparam::NumberOfPoles()<<endl;
  cout<<"Number of samples: "<<AliITSetfSDDparam::NumberOfSamples()<<endl;
  */
  fTimeDelay = 53.5;
  if(amplif == 2) fTimeDelay = 35.5;
  fSamplingTime = timestep;
  Double_t xGiga=1.0E+9;
  fT0 = 0.;
  fDf = xGiga/(AliITSetfSDDparam::NumberOfSamples()*fSamplingTime);
  Int_t i,j;
  fZeroM = new Double_t[AliITSetfSDDparam::NumberOfPoles()];
  fZeroR = new Double_t [AliITSetfSDDparam::NumberOfPoles()];
  fZeroI = new Double_t [AliITSetfSDDparam::NumberOfPoles()];
  fPoleM = new Double_t [AliITSetfSDDparam::NumberOfPoles()];
  fPoleR = new Double_t [AliITSetfSDDparam::NumberOfPoles()];
  fPoleI = new Double_t [AliITSetfSDDparam::NumberOfPoles()];
  fTfR = new Double_t [AliITSetfSDDparam::NumberOfSamples()];
  fTfI = new Double_t [AliITSetfSDDparam::NumberOfSamples()];
  fWR = new Double_t [AliITSetfSDDparam::NumberOfSamples()];
  fWI = new Double_t [AliITSetfSDDparam::NumberOfSamples()];

  for(i=0; i<AliITSetfSDDparam::NumberOfPoles(); i++) {
    fZeroM[i] = 0.;
    fZeroR[i] = 0.;
    fZeroI[i] = 0.;
    fPoleM[i] = 0.;
    fPoleR[i] = 0.;
    fPoleI[i] = 0.;
  }
  // Alice

  // PASCAL amplif
  fA0 = 5.53269815e+11; 
  fPoleM[0] = 3.;
  fPoleR[0] = -8280000.; 
  fPoleI[0] = 0.; 

  if(amplif == 2) { // OLA amplif.
    fA0 = 24000.;
    fPoleM[0] = 1.;
    fPoleR[0] = -3000000.;
    fPoleI[0] = 4000000.;
    fPoleM[1] = 1.;
    fPoleR[1] = fPoleR[0];
    fPoleI[1] = -fPoleI[0]; 
  }

  if( amplif == 3 ) { // old PASCAL
    fA0 = 16500.; // AL: 16500.;  // TB: 24000.; // 26000.; // 24000.; // 18000.; 
    fPoleM[0] = 1.;
    fPoleR[0] = -4140000.; // AL: -4140000.; // TB: -3000000.; // -3750000.; // -3500000; // -3000000.; 
    fPoleI[0] = 0.; // AL: 0.; // TB: 4000000.; // 3750000.; // 3500000.; // 3000000.; 
    fPoleM[1] = 1.;
    fPoleR[1] = fPoleR[0];
    fPoleI[1] = -fPoleI[0]; 
  }

  //cout << "fA0: " << fA0 << endl;
  //cout << "fTimeDelay: " << fTimeDelay << endl;
  
  // Compute Transfer Function

  Double_t pigr = acos(-1.);
  for(i=0; i<=AliITSetfSDDparam::NumberOfSamples()/2; i++) {
    Double_t frequency = fDf*i;
    Double_t vVM = fA0;
    Double_t vVA = 0.;
    for(Int_t k=0; k<AliITSetfSDDparam::NumberOfPoles(); k++) {
      if(fZeroM[k]) {
        Double_t vVZR = -fZeroR[k];
        Double_t vVZI = frequency - fZeroI[k];
        Double_t vVZM = TMath::Sqrt(vVZR*vVZR+vVZI*vVZI);
        Double_t vVZA = TMath::ATan2(vVZI,vVZR);
	//	cout << "VZM: " << vVZM << ", VZA: " << vVZA << endl;
	//	cout << "VZR: " << vVZR << ", VZI: " << vVZI << endl;
        for(j=1; j<= (Int_t) fZeroM[k]; j++) {
          vVM *= vVZM;
          vVA += vVZA;
          if(vVA >= pigr) vVA -= (2.*pigr);
          if(vVA <= -pigr) vVA += (2.*pigr);
	  //cout << "vVM: " << vVM << ", VA: " << vVA << endl;
        }
      }

      if(fPoleM[k]) {
        Double_t vVPR = -fPoleR[k];
        Double_t vVPI = frequency - fPoleI[k];
	Double_t vVPM = TMath::Sqrt(vVPR*vVPR+vVPI*vVPI);
	Double_t vVPA = TMath::ATan2(vVPI,vVPR);
	//cout << "VPM: " << vVPM << ", VPA: " << vVPA << endl;
	//cout << "VPR: " << vVPR << ", VPI: " << vVPI << endl;
        for(j=1; j<= (Int_t) fPoleM[k]; j++) {
          vVM /= vVPM;
          vVA -= vVPA;
          if(vVA >= pigr) vVA -= (2.*pigr);
          if(vVA <= -pigr) vVA += (2.*pigr);
	  //cout << "VM: " << vVM << ", vVA: " << vVA << endl;
        }
      }
      Double_t vVR = vVM*cos(vVA);
      Double_t vVI = vVM*sin(vVA);
      //cout << "VM: " << vVM << ", VA: " << vVA << endl;
      //cout << "VR: " << vVR << ", VI: " << vVI << endl;
      fTfR[i] = vVR*xGiga;
      fTfI[i] = vVI*xGiga;
      //cout << "fTfR[" << i << "] = " << fTfR[i] << endl;
      //cout << "fTfI[" << i << "] = " << fTfI[i] << endl;
      if(i) {
        fTfR[AliITSetfSDDparam::NumberOfSamples()-i] = fTfR[i];
        fTfI[AliITSetfSDDparam::NumberOfSamples()-i] = -fTfI[i];
      }
    }
  }
  
  // Compute Fourier Weights

  for(i=0; i<=AliITSetfSDDparam::NumberOfSamples()/2; i++) {
    fWR[i] = cos(-2.*pigr*i/AliITSetfSDDparam::NumberOfSamples());
    fWI[i] = sin(-2.*pigr*i/AliITSetfSDDparam::NumberOfSamples());
    if(i) {
      fWR[AliITSetfSDDparam::NumberOfSamples()-i] = fWR[i];
      fWI[AliITSetfSDDparam::NumberOfSamples()-i] = -fWI[i];
    }
  }

}


AliITSetfSDD::~AliITSetfSDD(){
  // Destructor
  if(fZeroM) delete []fZeroM;
  if(fZeroR) delete []fZeroR;
  if(fZeroI) delete []fZeroI;
  if(fPoleM) delete []fPoleM;
  if(fPoleR) delete []fPoleR;
  if(fPoleI) delete []fPoleI;
  if(fTfR) delete []fTfR;
  if(fTfI) delete []fTfI;
  if(fWR) delete []fWR;
  if(fWI) delete []fWI;
}

void AliITSetfSDD::PrintElectronics() const {
  // Printout of the parameters defining the f.e. electronics

  cout << "Time Delay " << fTimeDelay << endl;
  cout << "Sampling Time " << fSamplingTime << endl;
  cout << "Number of Time Samples " << AliITSetfSDDparam::NumberOfSamples() << endl;
  cout << "fT0 " << fT0 << endl;
  cout << "fDf " << fDf << endl;
  cout << "fA0 " << fA0 << endl;

  cout << "Zero's and Pole's" << endl;
  cout << "fZeroM " << endl;
  Int_t i;
  for(i=0; i<AliITSetfSDDparam::NumberOfPoles(); i++) cout << fZeroM[i] << endl;
  cout << "fZero_R " << endl;
  for(i=0; i<AliITSetfSDDparam::NumberOfPoles(); i++) cout << fZeroR[i] << endl;
  cout << "fZeroI " << endl;
  for(i=0; i<AliITSetfSDDparam::NumberOfPoles(); i++) cout << fZeroI[i] << endl;
  cout << "fPoleM " << endl;
  for(i=0; i<AliITSetfSDDparam::NumberOfPoles(); i++) cout << fPoleM[i] << endl;
  cout << "fPoleR " << endl;
  for(i=0; i<AliITSetfSDDparam::NumberOfPoles(); i++) cout << fPoleR[i] << endl;
  cout << "fPoleI " << endl;
  for(i=0; i<AliITSetfSDDparam::NumberOfPoles(); i++) cout << fPoleI[i] << endl;

  cout << "Transfer function" << endl;
  cout << "Real Part" << endl;
  for(i=0; i<AliITSetfSDDparam::NumberOfSamples(); i++) cout << fTfR[i] << endl;
  cout << "Imaginary Part " << endl;
  for(i=0; i<AliITSetfSDDparam::NumberOfSamples(); i++) cout << fTfI[i] << endl;

  cout << "Fourier Weights" << endl;
  cout << "Real Part" << endl;
  for(i=0; i<AliITSetfSDDparam::NumberOfSamples(); i++) cout << fWR[i] << endl;
  cout << "Imaginary Part " << endl;
  for(i=0; i<AliITSetfSDDparam::NumberOfSamples(); i++) cout << fWI[i] << endl;
}








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