/**************************************************************************
- * 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>
fDeadChannels(0),
fMinVal(fgkMinValDefault),
fIsDead(kFALSE),
-fBadChannels()
+fBadChannels(),
+fMapAW0(0),
+fMapAW1(0),
+fMapTW0(0),
+fMapTW1(0)
{
// default constructor
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.;
}
}
//______________________________________________________________________
fDeadChannels(0),
fMinVal(fgkMinValDefault),
fIsDead(kFALSE),
-fBadChannels(){
+fBadChannels(),
+fMapAW0(0),
+fMapAW1(0),
+fMapTW0(0),
+fMapTW1(0){
// constructor
SetDeadChannels();
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 {
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){
delete [] channelChip;
}
*/
+
+
//______________________________________________________________________
void AliITSCalibrationSDD::PrintGains() const{
//
", Channel " << v+1 << " = " << fGain[t][u][v] << endl;
}
}
+
//______________________________________________________________________
void AliITSCalibrationSDD::Print(){
// Print SDD response Parameters