/**************************************************************************
- * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
* *
* Author: The ALICE Off-line Project. *
* Contributors are mentioned in the code where appropriate. *
* provided "as is" without express or implied warranty. *
**************************************************************************/
+/* $Id$ */
#include <Riostream.h>
#include <TRandom.h>
#include "AliITSCalibrationSDD.h"
+#include "AliLog.h"
//////////////////////////////////////////////////////
// Calibration class for set:ITS //
// //
//////////////////////////////////////////////////////
-const Double_t AliITSCalibrationSDD::fgkTemperatureDefault = 296.;
-const Double_t AliITSCalibrationSDD::fgkNoiseDefault = 10.;
-const Double_t AliITSCalibrationSDD::fgkBaselineDefault = 20.;
-const Double_t AliITSCalibrationSDD::fgkMinValDefault = 4;
+const Float_t AliITSCalibrationSDD::fgkTemperatureDefault = 296.;
+const Float_t AliITSCalibrationSDD::fgkNoiseDefault = 10.;
+const Float_t AliITSCalibrationSDD::fgkGainDefault = 1.;
+const Float_t AliITSCalibrationSDD::fgkBaselineDefault = 20.;
+const Float_t AliITSCalibrationSDD::fgkMinValDefault = 4;
//______________________________________________________________________
ClassImp(AliITSCalibrationSDD)
- AliITSCalibrationSDD::AliITSCalibrationSDD(){
+AliITSCalibrationSDD::AliITSCalibrationSDD():
+AliITSCalibration(),
+fDeadChips(0),
+fDeadChannels(0),
+fMinVal(fgkMinValDefault),
+fIsDead(kFALSE),
+fBadChannels(),
+fMapAW0(0),
+fMapAW1(0),
+fMapTW0(0),
+fMapTW1(0),
+fDrSpeed0(0),
+fDrSpeed1(0)
+{
// default constructor
SetDeadChannels();
- fBaseline=0;
- fNoise=0;
-
- SetNoiseParam(fgkNoiseDefault,fgkBaselineDefault);
- SetNoiseAfterElectronics();
+ for(Int_t ian=0;ian<fgkWings*fgkChannels*fgkChips;ian++){
+ fBaseline[ian]=fgkBaselineDefault;
+ fNoise[ian]=fgkNoiseDefault;
+ SetNoiseAfterElectronics(ian);
+ }
+ for(Int_t iw=0;iw<fgkWings;iw++){
+ for(Int_t icp=0;icp<fgkChips;icp++){
+ for(Int_t ich=0;ich<fgkChannels;ich++)
+ fGain[iw][icp][ich]=1.;
+ }
+ }
SetThresholds(fgkMinValDefault,0.);
SetTemperature(fgkTemperatureDefault);
SetDataType();
- fCPar[1]=(Int_t) fBaseline;
- fCPar[2]=(Int_t)(2.*fNoiseAfterEl + 0.5);
- fCPar[3]=(Int_t)(2.*fNoiseAfterEl + 0.5);
- fCPar[4]=0;
- fCPar[5]=0;
- fCPar[6]=0;
- fCPar[7]=0;
}
//______________________________________________________________________
-AliITSCalibrationSDD::AliITSCalibrationSDD(const char *dataType){
+AliITSCalibrationSDD::AliITSCalibrationSDD(const char *dataType):
+AliITSCalibration(),
+fDeadChips(0),
+fDeadChannels(0),
+fMinVal(fgkMinValDefault),
+fIsDead(kFALSE),
+fBadChannels(),
+fMapAW0(0),
+fMapAW1(0),
+fMapTW0(0),
+fMapTW1(0),
+fDrSpeed0(0),
+fDrSpeed1(0)
+{
// constructor
SetDeadChannels();
- fBaseline=0;
- fNoise=0;
+ for(Int_t ian=0;ian<fgkWings*fgkChannels*fgkChips;ian++){
+ fBaseline[ian]=fgkBaselineDefault;
+ fNoise[ian]=fgkNoiseDefault;
+ SetNoiseAfterElectronics(ian);
+ }
+ for(Int_t iw=0;iw<fgkWings;iw++){
+ for(Int_t icp=0;icp<fgkChips;icp++){
+ for(Int_t ich=0;ich<fgkChannels;ich++)
+ fGain[iw][icp][ich]=1.;
+ }
+ }
- SetNoiseParam(fgkNoiseDefault,fgkBaselineDefault);
- SetNoiseAfterElectronics();
SetThresholds(fgkMinValDefault,0.);
SetTemperature(fgkTemperatureDefault);
SetDataType(dataType);
- fCPar[0]=(Int_t) fBaseline;
- fCPar[1]=(Int_t) fBaseline;
- fCPar[2]=(Int_t)(2.*fNoiseAfterEl + 0.5);
- fCPar[3]=(Int_t)(2.*fNoiseAfterEl + 0.5);
- fCPar[4]=0;
- fCPar[5]=0;
- fCPar[6]=0;
- fCPar[7]=0;
}
-//______________________________________________________________________
-AliITSCalibrationSDD::AliITSCalibrationSDD(const AliITSCalibrationSDD &ob) : AliITSCalibration(ob) {
- // Copy constructor
- // Copies are not allowed. The method is protected to avoid misuse.
- Error("AliITSCalibrationSDD","Copy constructor not allowed\n");
-}
+//_____________________________________________________________________
+AliITSCalibrationSDD::~AliITSCalibrationSDD(){
-//______________________________________________________________________
-AliITSCalibrationSDD& AliITSCalibrationSDD::operator=(const AliITSCalibrationSDD& /* ob */){
- // Assignment operator
- // Assignment is not allowed. The method is protected to avoid misuse.
- Error("= operator","Assignment operator not allowed\n");
- return *this;
+ //destructor
+ if(fMapAW0) delete fMapAW0;
+ if(fMapAW1) delete fMapAW1;
+ if(fMapTW0) delete fMapTW0;
+ if(fMapTW1) delete fMapTW1;
+ if(fDrSpeed0) delete fDrSpeed0;
+ if(fDrSpeed1) delete fDrSpeed1;
}
//______________________________________________________________________
-void AliITSCalibrationSDD::SetCompressParam(Int_t cp[8]){
- // set compression param
-
- Int_t i;
- for (i=0; i<8; i++) {
- fCPar[i]=cp[i];
- //printf("\n CompressPar %d %d \n",i,fCPar[i]);
- } // end for i
-}
-//______________________________________________________________________
-void AliITSCalibrationSDD::GiveCompressParam(Int_t cp[8]) const {
+void AliITSCalibrationSDD::GiveCompressParam(Int_t cp[8],Int_t ian) const {
// give compression param
- Int_t i;
- for (i=0; i<8; i++) {
- cp[i]=fCPar[i];
- } // end for i
+ cp[0]=(Int_t) fBaseline[ian];
+ cp[1]=(Int_t) fBaseline[ian];
+ cp[2]=(Int_t)(2.*fNoiseAfterEl[ian] + 0.5);
+ cp[3]=(Int_t)(2.*fNoiseAfterEl[ian] + 0.5);
+ cp[4]=0;
+ cp[5]=0;
+ cp[6]=0;
+ cp[7]=0;
}
+//_____________________________________________________________________
+void AliITSCalibrationSDD::SetBadChannel(Int_t i,Int_t anode){
+ //Set bad anode (set gain=0 for these channels);
+ if(anode<0 || anode >fgkChannels*fgkChips*fgkWings-1)AliError("Wrong anode number");
+ Int_t wing=0;
+ Int_t chip,channel;
+ chip=anode/fgkChannels;
+ channel=anode-(chip*fgkChannels);
+ if(anode>=fgkChips*fgkChannels) wing=1;
+ if(wing==1)chip-=fgkChips;
+ fBadChannels[i]=anode;
+ fGain[wing][chip][channel]=0;
+}
+//______________________________________________________________________
+Float_t AliITSCalibrationSDD::GetChannelGain(Int_t anode) const{
+ // returns gain for givenanode
+ Int_t iWing=GetWing(anode);
+ Int_t iChip=GetChip(anode);
+ Int_t iChan=GetChipChannel(anode);
+ return fGain[iWing][iChip][iChan];
+}
+/*
//______________________________________________________________________
void AliITSCalibrationSDD::SetDeadChannels(Int_t nchip, Int_t nchan){
// Set fGain to zero to simulate a random distribution of
//fDeadModules = nmod;
fDeadChips = nchip;
fDeadChannels = nchan;
-
+ fBadChannels.Set(fDeadChannels);
// nothing to do
//if( nmod == 0 && nchip == 0 && nchan == 0 ) 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.+fgkModules*gran->Uniform());
- cout << i+1 << ": Dead module nr: " << mod[i] << endl;
- for(Int_t n=0; n<fResponseSDD->Chips(); n++)
- for(Int_t p=0; p<fResponseSDD->Channels(); p++)
- fGain[mod[i]-1][n][p] = 0.;
- }
- */
// cout << "chips" << endl;
Int_t * chip = new Int_t[nchip];
Int_t i = 0;
delete [] channel;
delete [] channelChip;
}
+*/
+
+
//______________________________________________________________________
void AliITSCalibrationSDD::PrintGains() const{
//
", Channel " << v+1 << " = " << fGain[t][u][v] << endl;
}
}
+
//______________________________________________________________________
void AliITSCalibrationSDD::Print(){
// Print SDD response Parameters
cout << " Silicon Drift Detector Response Parameters " << endl;
cout << "**************************************************" << endl;
cout << "Hardware compression parameters: " << endl;
- for(Int_t i=0; i<8; i++) cout << "fCPar[" << i << "] = " << fCPar[i] <<endl;
- cout << "Noise before electronics (arbitrary units): " << fNoise << endl;
- cout << "Baseline (ADC units): " << fBaseline << endl;
- cout << "Noise after electronics (ADC units): " << fNoiseAfterEl << endl;
+ cout << "Noise before electronics (arbitrary units): " << fNoise[0] << endl;
+ cout << "Baseline (ADC units): " << fBaseline[0] << endl;
+ cout << "Noise after electronics (ADC units): " << fNoiseAfterEl[0] << endl;
cout << "Temperature: " << Temperature() << " K " << endl;
cout << "Min. Value: " << fMinVal << endl;
PrintGains();
}
-
-
-