/**************************************************************************
* 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. *
* *
**************************************************************************/
#include <TString.h>
+#include <TRandom.h>
#include "AliITSresponseSDD.h"
AliITSresponseSDD::AliITSresponseSDD()
{
// constructor
+ // fModules = 520;
+ // fChips = 4;
+ // fChannels = 64;
+ SetDeadChannels();
SetMaxAdc();
SetDiffCoeff();
SetDriftSpeed();
SetFilenames();
SetOutputOption();
SetDo10to8();
+ // set the default zero suppression parameters
+ fCPar[0]=0;
+ fCPar[1]=0;
+ fCPar[2]=(Int_t)(fBaseline + 2.*fNoiseAfterEl + 0.2);
+ fCPar[3]=(Int_t)(fBaseline + 2.*fNoiseAfterEl + 0.2);
+ fCPar[4]=0;
+ fCPar[5]=0;
+ fCPar[6]=0;
+ fCPar[7]=0;
}
-//__________________________________________________________________________
-AliITSresponseSDD::AliITSresponseSDD(const AliITSresponseSDD &source){
- // Copy Constructor
- if(&source == this) return;
- Int_t i;
- for(i=0;i<8;i++){this->fCPar[i] = source.fCPar[i];}
- this->fNoise = source.fNoise;
- this->fBaseline = source.fBaseline;
- this->fNoiseAfterEl = source.fNoiseAfterEl;
- this->fDynamicRange = source.fDynamicRange;
- this->fChargeLoss = source.fChargeLoss;
- this->fTemperature = source.fTemperature;
- this->fDriftSpeed = source.fDriftSpeed;
- this->fNsigmas = source.fNsigmas;
- this->fMaxAdc = source.fMaxAdc;
- this->fDiffCoeff = source.fDiffCoeff;
- this->fDiffCoeff1 = source.fDiffCoeff1;
- this->fZeroSuppFlag = source.fZeroSuppFlag;
- this->fMinVal = source.fMinVal;
- this->fWrite = source.fWrite;
- this->fBitComp = source.fBitComp;
- this->fOption = source.fOption;
- this->fParam1 = source.fParam1;
- return;
-}
+AliITSresponseSDD::~AliITSresponseSDD() {
+
+ if(fGaus) delete fGaus;
-//_________________________________________________________________________
-AliITSresponseSDD&
- AliITSresponseSDD::operator=(const AliITSresponseSDD &source) {
- // Assignment operator
- if(&source == this) return *this;
- Int_t i;
- for(i=0;i<8;i++){this->fCPar[i] = source.fCPar[i];}
- this->fNoise = source.fNoise;
- this->fBaseline = source.fBaseline;
- this->fNoiseAfterEl = source.fNoiseAfterEl;
- this->fDynamicRange = source.fDynamicRange;
- this->fChargeLoss = source.fChargeLoss;
- this->fTemperature = source.fTemperature;
- this->fDriftSpeed = source.fDriftSpeed;
- this->fNsigmas = source.fNsigmas;
- this->fMaxAdc = source.fMaxAdc;
- this->fDiffCoeff = source.fDiffCoeff;
- this->fDiffCoeff1 = source.fDiffCoeff1;
- this->fZeroSuppFlag = source.fZeroSuppFlag;
- this->fMinVal = source.fMinVal;
- this->fWrite = source.fWrite;
- this->fBitComp = source.fBitComp;
- this->fOption = source.fOption;
- this->fParam1 = source.fParam1;
- return *this;
}
void AliITSresponseSDD::SetCompressParam(Int_t cp[8])
}
}
+void AliITSresponseSDD::SetDeadChannels(Int_t nmod, Int_t nchip, Int_t nchan) {
+
+ for(Int_t m=0; m<fModules; m++)
+ for(Int_t n=0; n<fChips; n++)
+ for(Int_t p=0; p<fChannels; p++)
+ fGain[m][n][p] = 1.;
+
+ if(nmod < 0 || nmod > fModules) { cout << "Wrong number of dead modules: " << nmod << endl; return; }
+ Int_t nmax = (fModules-nmod)*fChips;
+ if(nchip < 0 || nchip > nmax) { cout << "Wrong number of dead chips: " << nchip << endl; return; }
+ nmax = ((fModules - nmod)*fChips - nchip)*fChannels;
+ if(nchan < 0 || nchan > nmax) { cout << "Wrong number of dead channels: " << nchan << endl; return; }
+
+ TRandom *gran = new TRandom();
+
+// cout << "modules" << endl;
+ Int_t * mod = new Int_t [nmod];
+ Int_t i; //loop variable
+ for(i=0;i<nmod;i++) {
+ mod[i] = (Int_t) (1.+fModules*gran->Uniform());
+ cout << i+1 << ": Dead module nr: " << mod[i] << endl;
+ for(Int_t n=0; n<fChips; n++)
+ for(Int_t p=0; p<fChannels; p++)
+ fGain[mod[i]-1][n][p] = 0.;
+ }
+
+// cout << "chips" << endl;
+ Int_t * chip = new Int_t[nchip];
+ Int_t * chip_mod = new Int_t[nchip];
+ i=0;
+ while(i<nchip) {
+ Int_t module = (Int_t) (fModules*gran->Uniform() + 1.);
+ if(module <=0 || module > fModules) cout << "Wrong module: " << module << endl;
+ Int_t flag_mod = 0;
+ for(Int_t k=0;k<nmod;k++) if(module == mod[k]) flag_mod = 1;
+ if(flag_mod == 1) continue;
+ Int_t chi = (Int_t) (fChips*gran->Uniform() + 1.);
+ if(chi <=0 || chi > fChips) cout << "Wrong chip: " << chi << endl;
+ i++;
+ chip[i-1] = chi;
+ chip_mod[i-1] = module;
+ for(Int_t m=0; m<fChannels; m++) fGain[module-1][chi-1][m] = 0.;
+ cout << i << ": Dead chip nr. " << chip[i-1] << " in module nr: " << chip_mod[i-1] << endl;
+ }
+
+// cout << "channels" << endl;
+ Int_t * channel = new Int_t[nchan];
+ Int_t * channel_chip = new Int_t[nchan];
+ Int_t * channel_mod = new Int_t[nchan];
+ i=0;
+ while(i<nchan) {
+ Int_t k; //loop variable
+ Int_t module = (Int_t) (fModules*gran->Uniform() + 1.);
+ if(module <=0 || module > fModules) cout << "Wrong module: " << module << endl;
+ Int_t flag_mod = 0;
+ for(k=0;k<nmod;k++) if(module == mod[k]) flag_mod = 1;
+ if(flag_mod == 1) continue;
+ Int_t chipp = (Int_t) (fChips*gran->Uniform() + 1.);
+ if(chipp <=0 || chipp > fChips) cout << "Wrong chip: " << chipp << endl;
+ Int_t flag_chip = 0;
+ for(k=0;k<nchip;k++) if(chipp == chip[k] && module == chip_mod[k]) flag_chip = 1;
+ if(flag_chip == 1) continue;
+ i++;
+ channel[i-1] = (Int_t) (fChannels*gran->Uniform() + 1.);
+ if(channel[i-1] <=0 || channel[i-1] > fChannels) cout << "Wrong channel: " << channel[i-1] << endl;
+ channel_chip[i-1] = chipp;
+ channel_mod[i-1] = module;
+ fGain[module-1][chipp-1][channel[i-1]-1] = 0.;
+ cout << i << ": Dead channel nr. " << channel[i-1] << " in chip nr. " << channel_chip[i-1] << " in module nr: " << channel_mod[i-1] << endl;
+ }
+
+ delete [] mod;
+ delete [] chip;
+ delete [] chip_mod;
+ delete [] channel;
+ delete [] channel_mod;
+ delete [] channel_chip;
+}
+
+void AliITSresponseSDD::PrintGains()
+{
+ // Print SDD electronic gains
+ for(Int_t t=0; t<fModules;t++)
+ for(Int_t u=0; u<fChips;u++)
+ for(Int_t v=0; v<fChannels;v++)
+ cout << "Gain for Module: " << t+1 << ", Chip " << u+1 << ", Channel " << v+1 << " = " << fGain[t][u][v] << endl;
+
+}
+
void AliITSresponseSDD::Print()
{
// Print SDD response Parameters
cout << "Max. ADC Value: " << fMaxAdc << endl;
cout << "Min. Value: " << fMinVal << endl;
- cout << "Zero suppression flag: " << fZeroSuppFlag << endl;
+ cout << "**************************************************" << endl;
+ cout << " Print Electronics Gains " << endl;
cout << "**************************************************" << endl;
-
-
+ PrintGains();
}