/**************************************************************************
* 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. *
* *
* provided "as is" without express or implied warranty. *
**************************************************************************/
-#include <TMath.h>
+/* $Id$ */
-#include "AliITSgeom.h"
-#include "AliITSresponseSDD.h"
-#include "AliITS.h"
-#include "AliRun.h"
+//////////////////////////////////////////////////////
+// Base response class forITS //
+// It is used to set static data members //
+// connected to parameters equal for all //
+// the modules //
+// //
+// //
+//////////////////////////////////////////////////////
-class AliITS;
+#include <TMath.h>
-//___________________________________________
-ClassImp(AliITSresponseSDD)
+#include "AliITSresponseSDD.h"
+#include <AliITSgeomTGeo.h>
-AliITSresponseSDD::AliITSresponseSDD()
-{
- // constructor
- SetMaxAdc();
- SetDiffCoeff();
- SetQref();
- SetDriftSpeed();
- // SetClock();
- SetNoiseParam();
- SetMagicValue();
- SetMinVal();
- SetParamOptions();
- SetZeroSupp();
- SetDataType();
- SetFilenames();
- SetOutputOption();
+const Float_t AliITSresponseSDD::fgkTimeOffsetDefault = 54.30;
+const Float_t AliITSresponseSDD::fgkADC2keVDefault = 3.34;
+const Float_t AliITSresponseSDD::fgkChargevsTimeDefault = 0.00355;
+const Float_t AliITSresponseSDD::fgkCarlosRXClockPeriod = 25.;
+ClassImp(AliITSresponseSDD)
+//_________________________________________________________________________
+AliITSresponseSDD::AliITSresponseSDD():
+TObject(),
+ fTimeOffset(fgkTimeOffsetDefault),
+ fADC2keV(fgkADC2keVDefault),
+ fChargevsTime(fgkChargevsTimeDefault){
+ // default constructor
+ for(Int_t i=0; i<kNSDDmods;i++){
+ fTimeZero[i]=fgkTimeOffsetDefault;
+ fDeltaVDrift[i] = fDeltaVDrift[i+kNSDDmods] = 0.;
+ fADCtokeV[i]=fgkADC2keVDefault;
+ }
+ SetVDCorr2Side(kTRUE); // default for new objects will be separate corrections for 2 sides (bwd compatible)
+ // SetVDCorrMult(kTRUE); // default for new objects will have multiplicative correction v'=(1+corr)*v (bwd compatible)
}
-
-//__________________________________________________________________________
-AliITSresponseSDD::AliITSresponseSDD(const AliITSresponseSDD &source){
- // Copy Constructor
- Int_t i;
- if(&source == this) return;
- for(i=0,i<8,i++){this->fCPar[i] = source.fCPar[i];}
- this->fNoise = source.fNoise;
- this->fBaseline = source.fBaseline;
- this->fTopValue = source.fTopValue;
- this->fTemperature = source.fTemperature;
- this->fDriftSpeed = source.fDriftSpeed;
- this->fMaxAdc = source.fMaxAdc;
- this->fDiffCoeff = source.fDiffCoeff;
- this->fQref = source.fQref;
- this->fZeroSuppFlag = source.fZeroSuppFlag;
- this->fMinVal = source.fMinVal;
- this->fWrite = source.fWrite;
- this->fOption = source.fOption;
- this->fParam1 = source.fParam1;
- return;
+//_________________________________________________________________________
+void AliITSresponseSDD::SetHalfLadderATimeZero(Int_t lay, Int_t lad, Float_t tzero){
+ // Sets time Zero for all modules of a ladder on side A (Z>0)
+ Int_t minMod,maxMod;
+ if(lay==3){
+ minMod=1;
+ maxMod=3;
+ if(lad>kNLaddersLay3){
+ AliError(Form("Ladder number %d out of range",lad));
+ return;
+ }
+ }else if(lay==4){
+ minMod=1;
+ maxMod=4;
+ if(lad>kNLaddersLay4){
+ AliError(Form("Ladder number %d out of range",lad));
+ return;
+ }
+ }else{
+ AliError(Form("Layer number %d out of range",lay));
+ return;
+ }
+ for(Int_t iMod=minMod; iMod<=maxMod; iMod++){
+ Int_t modIndex=AliITSgeomTGeo::GetModuleIndex(lay,lad,iMod);
+ SetModuleTimeZero(modIndex,tzero);
+ }
}
-
//_________________________________________________________________________
-AliITSresponseSDD&
- AliITSresponseSDD::operator=(const AliITSresponseSDD &source) {
- // Assignment operator
- Int_t i;
- if(&source == this) return *this;
- for(i=0,i<8,i++){this->fCPar[i] = source.fCPar[i];}
- this->fNoise = source.fNoise;
- this->fBaseline = source.fBaseline;
- this->fTopValue = source.fTopValue;
- this->fTemperature = source.fTemperature;
- this->fDriftSpeed = source.fDriftSpeed;
- this->fMaxAdc = source.fMaxAdc;
- this->fDiffCoeff = source.fDiffCoeff;
- this->fQref = source.fQref;
- this->fZeroSuppFlag = source.fZeroSuppFlag;
- this->fMinVal = source.fMinVal;
- this->fWrite = source.fWrite;
- this->fOption = source.fOption;
- this->fParam1 = source.fParam1;
- return *this;
+void AliITSresponseSDD::SetHalfLadderCTimeZero(Int_t lay, Int_t lad, Float_t tzero){
+ // Sets time Zero for all modules of a ladder on side C (Z<0)
+ Int_t minMod,maxMod;
+ if(lay==3){
+ minMod=4;
+ maxMod=6;
+ if(lad>kNLaddersLay3){
+ AliError(Form("Ladder number %d out of range",lad));
+ return;
+ }
+ }else if(lay==4){
+ minMod=5;
+ maxMod=8;
+ if(lad>kNLaddersLay4){
+ AliError(Form("Ladder number %d out of range",lad));
+ return;
+ }
+ }else{
+ AliError(Form("Layer number %d out of range",lay));
+ return;
+ }
+ for(Int_t iMod=minMod; iMod<=maxMod; iMod++){
+ Int_t modIndex=AliITSgeomTGeo::GetModuleIndex(lay,lad,iMod);
+ SetModuleTimeZero(modIndex,tzero);
+ }
}
-
-void AliITSresponseSDD::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]);
-
+//_________________________________________________________________________
+void AliITSresponseSDD::PrintChargeCalibrationParams() const{
+ //
+ printf("ADC vs. drift time corr=%f\n",GetChargevsTime());
+ printf("-------------------------------------\n");
+ printf("Layer 3\n");
+ for(Int_t ilad=1; ilad<=14; ilad++){
+ for(Int_t idet=1; idet<=6;idet++){
+ Int_t modIndex=AliITSgeomTGeo::GetModuleIndex(3,ilad,idet);
+ Float_t tz=GetADCtokeV(modIndex);
+ printf("%7.2f ",tz);
}
+ printf("\n");
+ }
+ printf("\n");
+ printf("Layer 4\n");
+ for(Int_t ilad=1; ilad<=22; ilad++){
+ for(Int_t idet=1; idet<=8;idet++){
+ Int_t modIndex=AliITSgeomTGeo::GetModuleIndex(4,ilad,idet);
+ Float_t tz=GetADCtokeV(modIndex);
+ printf("%7.2f ",tz);
+ }
+ printf("\n");
+ }
}
-void AliITSresponseSDD::GiveCompressParam(Int_t cp[8])
-{
- // give compression param
- Int_t i;
- for(i=0; i<8; i++) {
- cp[i]=fCPar[i];
+//_________________________________________________________________________
+void AliITSresponseSDD::PrintTimeZeroes() const{
+ //
+ printf("Layer 3\n");
+ for(Int_t ilad=1; ilad<=14; ilad++){
+ for(Int_t idet=1; idet<=6;idet++){
+ Int_t modIndex=AliITSgeomTGeo::GetModuleIndex(3,ilad,idet);
+ Float_t tz=GetTimeZero(modIndex);
+ printf("%7.2f ",tz);
+ }
+ printf("\n");
+ }
+ printf("\n");
+ printf("Layer 4\n");
+ for(Int_t ilad=1; ilad<=22; ilad++){
+ for(Int_t idet=1; idet<=8;idet++){
+ Int_t modIndex=AliITSgeomTGeo::GetModuleIndex(4,ilad,idet);
+ Float_t tz=GetTimeZero(modIndex);
+ printf("%7.2f ",tz);
}
+ printf("\n");
+ }
+
}
-//______________________________________________________________________________
-void AliITSresponseSDD::Streamer(TBuffer &R__b)
-{
- // Stream an object of class AliITSresponseSDD.
-
- if (R__b.IsReading()) {
- Version_t R__v = R__b.ReadVersion(); if (R__v) { }
- AliITSresponse::Streamer(R__b);
- R__b.ReadStaticArray(fCPar);
- R__b >> fNoise;
- R__b >> fBaseline;
- R__b >> fTopValue;
- R__b >> fTemperature;
- R__b >> fDriftSpeed;
- R__b >> fMaxAdc;
- R__b >> fDiffCoeff;
- R__b >> fQref;
- R__b >> fZeroSuppFlag;
- R__b >> fMinVal;
- R__b >> fWrite;
- //R__b.ReadArray(fOption); // Not to be printed out?
- //R__b.ReadArray(fParam1); // Not to be printed out?
- //R__b.ReadArray(fParam2); // Not to be printed out?
- fDataType.Streamer(R__b);
- fFileName1.Streamer(R__b);
- fFileName2.Streamer(R__b);
- fFileName3.Streamer(R__b);
- } else {
- R__b.WriteVersion(AliITSresponseSDD::IsA());
- AliITSresponse::Streamer(R__b);
- R__b.WriteArray(fCPar, 8);
- R__b << fNoise;
- R__b << fBaseline;
- R__b << fTopValue;
- R__b << fTemperature;
- R__b << fDriftSpeed;
- R__b << fMaxAdc;
- R__b << fDiffCoeff;
- R__b << fQref;
- R__b << fZeroSuppFlag;
- R__b << fMinVal;
- R__b << fWrite;
- //R__b.WriteArray(fOption, __COUNTER__); // Not to be printed out?
- //R__b.WriteArray(fParam1, __COUNTER__); // Not to be printed out?
- //R__b.WriteArray(fParam2, __COUNTER__); // Not to be printed out?
- fDataType.Streamer(R__b);
- fFileName1.Streamer(R__b);
- fFileName2.Streamer(R__b);
- fFileName3.Streamer(R__b);
- }
+//_________________________________________________________________________
+void AliITSresponseSDD::PrintVdriftCorerctions() const{
+ //
+ for(Int_t iMod=240; iMod<500; iMod++){
+ printf("Module %d dVleft=%f dVright=%f\n",iMod,GetDeltaVDrift(iMod,0),GetDeltaVDrift(iMod,1));
+ }
}