]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSCalibrationSDD.cxx
Bug fix (Marek)
[u/mrichter/AliRoot.git] / ITS / AliITSCalibrationSDD.cxx
index 567f1ff5aea377fe4a05820199dd2c6bc066f2a7..42c8c74bcff4cc3459292f8d8b4f3b4507ed111b 100644 (file)
@@ -1,5 +1,5 @@
 /**************************************************************************
- * 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 
@@ -123,7 +163,7 @@ void AliITSCalibrationSDD::SetDeadChannels(Int_t nchip, Int_t nchan){
   //fDeadModules  = nmod;  
   fDeadChips    = nchip;  
   fDeadChannels = nchan; 
-    
+  fBadChannels.Set(fDeadChannels);  
   // nothing to do
   //if( nmod == 0 && nchip == 0 && nchan == 0 ) return;
 
@@ -148,19 +188,6 @@ void AliITSCalibrationSDD::SetDeadChannels(Int_t nchip, Int_t nchan){
     }
   
   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;
@@ -204,6 +231,9 @@ void AliITSCalibrationSDD::SetDeadChannels(Int_t nchip, Int_t nchan){
   delete [] channel;
   delete [] channelChip;
 }
+*/
+
+
 //______________________________________________________________________
 void AliITSCalibrationSDD::PrintGains() const{
   //
@@ -227,6 +257,7 @@ void AliITSCalibrationSDD::PrintGains() const{
              ", Channel " << v+1 << " = " << fGain[t][u][v] << endl;
        }
 }
+
 //______________________________________________________________________
 void AliITSCalibrationSDD::Print(){
   // Print SDD response Parameters
@@ -235,15 +266,11 @@ void AliITSCalibrationSDD::Print(){
   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();
 
 }
-
-
-