]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSCalibrationSDD.cxx
bugfix: undeleted characters in data type id from previous data type setting
[u/mrichter/AliRoot.git] / ITS / AliITSCalibrationSDD.cxx
index 225c3dc82262a341ae296bd43f96be95701ca785..fc97b6b51f422aa43f2bd4f57aba1582fceb706f 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.              *
@@ -13,6 +13,7 @@
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
+/* $Id$ */
 
 #include <Riostream.h>
 #include <TRandom.h>
@@ -41,7 +42,11 @@ fDeadChips(0),
 fDeadChannels(0),
 fMinVal(fgkMinValDefault),
 fIsDead(kFALSE),
-fBadChannels()
+fBadChannels(),
+fMapAW0(0),
+fMapAW1(0),
+fMapTW0(0),
+fMapTW1(0)
 {
   // default constructor
 
@@ -60,11 +65,11 @@ fBadChannels()
   SetThresholds(fgkMinValDefault,0.);
   SetTemperature(fgkTemperatureDefault);
   SetDataType();
-  for(Int_t i=0;i<fgkChips*fgkChannels;i++){
-    for(Int_t j=0;j<fgkMapTimeNBin;j++){
-      fMapA[i][j]=0;
-      fMapT[i][j]=0;
-    }
+  fDriftVelParW0[0]= AliITSresponseSDD::DefaultDriftSpeed();
+  fDriftVelParW1[0]= AliITSresponseSDD::DefaultDriftSpeed();
+  for(Int_t i=1;i<4;i++){
+    fDriftVelParW0[i]=0.;
+    fDriftVelParW1[i]=0.;
   }
  }
 //______________________________________________________________________
@@ -74,7 +79,11 @@ fDeadChips(0),
 fDeadChannels(0),
 fMinVal(fgkMinValDefault),
 fIsDead(kFALSE),
-fBadChannels(){
+fBadChannels(),
+fMapAW0(0),
+fMapAW1(0),
+fMapTW0(0),
+fMapTW1(0){
   // constructor
 
   SetDeadChannels();
@@ -93,15 +102,23 @@ fBadChannels(){
   SetThresholds(fgkMinValDefault,0.);
   SetTemperature(fgkTemperatureDefault);
   SetDataType(dataType);
-  for(Int_t i=0;i<fgkChips*fgkChannels;i++){
-    for(Int_t j=0;j<fgkMapTimeNBin;j++){
-      fMapA[i][j]=0;
-      fMapT[i][j]=0;
-    }
+  fDriftVelParW0[0]= AliITSresponseSDD::DefaultDriftSpeed();
+  fDriftVelParW1[0]= AliITSresponseSDD::DefaultDriftSpeed();
+  for(Int_t i=1;i<4;i++){
+    fDriftVelParW0[i]=0.;
+    fDriftVelParW1[i]=0.;
   }
-
  }
+//_____________________________________________________________________
+AliITSCalibrationSDD::~AliITSCalibrationSDD(){
 
+  //destructor
+  if(fMapAW0) delete fMapAW0;
+  if(fMapAW1) delete fMapAW1;
+  if(fMapTW0) delete fMapTW0;
+  if(fMapTW1) delete fMapTW1;
+
+}
 
 //______________________________________________________________________
 void AliITSCalibrationSDD::GiveCompressParam(Int_t  cp[8],Int_t ian) const {
@@ -131,18 +148,34 @@ void AliITSCalibrationSDD::SetBadChannel(Int_t i,Int_t anode){
   fGain[wing][chip][channel]=0;
 }
 //_____________________________________________________________________
-Bool_t AliITSCalibrationSDD::IsBadChannel(Int_t anode){
-  //returns kTRUE if the anode i (0-512) has fGain=0
-  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;
-  if(fGain[wing][chip][channel]==0) return kTRUE;
-  else return kFALSE;
-} 
+void AliITSCalibrationSDD::SetDriftSpeedParam(Int_t iWing, Float_t* p){
+  // Sets coefficients of pol3 fit to drift speed vs. anode
+  if(iWing==0){
+    for(Int_t i=0;i<4;i++) fDriftVelParW0[i]=p[i];
+  }else{
+    for(Int_t i=0;i<4;i++) fDriftVelParW1[i]=p[i];
+  }
+}
+
+//_____________________________________________________________________
+Float_t AliITSCalibrationSDD::GetDriftSpeedAtAnode(Float_t nAnode) const {
+  // Calculates drift speed for given position along anodes
+  if(nAnode<256){
+    return fDriftVelParW0[0]+fDriftVelParW0[1]*nAnode+fDriftVelParW0[2]*nAnode*nAnode+fDriftVelParW0[3]*nAnode*nAnode*nAnode;
+  }else{
+    nAnode-=256;
+    return fDriftVelParW1[0]+fDriftVelParW1[1]*nAnode+fDriftVelParW1[2]*nAnode*nAnode+fDriftVelParW1[3]*nAnode*nAnode*nAnode;
+  }
+}
+
+//______________________________________________________________________
+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){
@@ -226,6 +259,8 @@ void AliITSCalibrationSDD::SetDeadChannels(Int_t nchip, Int_t nchan){
   delete [] channelChip;
 }
 */
+
+
 //______________________________________________________________________
 void AliITSCalibrationSDD::PrintGains() const{
   //
@@ -249,6 +284,7 @@ void AliITSCalibrationSDD::PrintGains() const{
              ", Channel " << v+1 << " = " << fGain[t][u][v] << endl;
        }
 }
+
 //______________________________________________________________________
 void AliITSCalibrationSDD::Print(){
   // Print SDD response Parameters