#include <TMath.h>
#include "AliITSresponseSDD.h"
+#include <AliITSgeomTGeo.h>
const Float_t AliITSresponseSDD::fgkTimeOffsetDefault = 54.30;
const Float_t AliITSresponseSDD::fgkADC2keVDefault = 5.243;
fTimeOffset(fgkTimeOffsetDefault),
fADC2keV(fgkADC2keVDefault){
// default constructor
+ for(Int_t i=0; i<kNSDDmods;i++){
+ fTimeZero[i]=fgkTimeOffsetDefault;
+ }
+}
+//_________________________________________________________________________
+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);
+ }
+}
+//_________________________________________________________________________
+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);
+ }
}
-
-
#include <TObject.h>
+#include <AliLog.h>
/* $Id$ */
AliITSresponseSDD();
virtual ~AliITSresponseSDD(){};
+ virtual void SetSideATimeZero(Float_t tzero){
+ SetLayer3ATimeZero(tzero);
+ SetLayer4ATimeZero(tzero);
+ }
+ virtual void SetSideCTimeZero(Float_t tzero){
+ SetLayer3CTimeZero(tzero);
+ SetLayer4CTimeZero(tzero);
+ }
+ virtual void SetLayer3ATimeZero(Float_t tzero){
+ for(Int_t iLad=1; iLad<=kNLaddersLay3; iLad++) SetHalfLadderATimeZero(3,iLad,tzero);
+ }
+ virtual void SetLayer3CTimeZero(Float_t tzero){
+ for(Int_t iLad=1; iLad<=kNLaddersLay3; iLad++) SetHalfLadderCTimeZero(3,iLad,tzero);
+ }
+ virtual void SetLayer4ATimeZero(Float_t tzero){
+ for(Int_t iLad=1; iLad<=kNLaddersLay4; iLad++) SetHalfLadderATimeZero(4,iLad,tzero);
+ }
+ virtual void SetLayer4CTimeZero(Float_t tzero){
+ for(Int_t iLad=1; iLad<=kNLaddersLay4; iLad++) SetHalfLadderCTimeZero(4,iLad,tzero);
+ }
+ virtual void SetHalfLadderATimeZero(Int_t lay, Int_t lad, Float_t tzero);
+ virtual void SetHalfLadderCTimeZero(Int_t lay, Int_t lad, Float_t tzero);
+ virtual void SetModuleTimeZero(Int_t modIndex, Float_t tzero){
+ if(modIndex<kNSPDmods || modIndex>kNSPDmods+kNSDDmods) AliError(Form("SDD module number %d out of range",modIndex));
+ fTimeZero[modIndex-kNSPDmods]=tzero;
+ }
virtual void SetTimeOffset(Float_t to){fTimeOffset = to;}
virtual Float_t GetTimeOffset()const {return fTimeOffset;}
+ virtual Float_t GetTimeZero(Int_t modIndex){
+ if(modIndex<kNSPDmods || modIndex>kNSPDmods+kNSDDmods){
+ AliError(Form("SDD module number %d out of range",modIndex));
+ return 0.;
+ }
+ return fTimeZero[modIndex-kNSPDmods];
+ }
static Float_t DefaultTimeOffset() {return fgkTimeOffsetDefault;}
virtual void SetADC2keV(Float_t conv){fADC2keV=conv;}
protected:
+ enum {kNSPDmods = 240};
+ enum {kNSDDmods = 260};
+ enum {kNLaddersLay3 = 14};
+ enum {kNLaddersLay4 = 22};
+
+
static const Float_t fgkTimeOffsetDefault; // default for fTimeOffset
static const Float_t fgkADC2keVDefault; // default for fADC2keV
static const Float_t fgkCarlosRXClockPeriod; // clock period for CarlosRX
- Float_t fTimeOffset; // Time offset due to electronic delays
- Float_t fADC2keV; // Conversion factor from ADC to keV
+ Float_t fTimeOffset; // Time offset due to electronic delays
+ // --> obsolete, kept for backw. comp.
+ Float_t fTimeZero[kNSDDmods]; // Time Zero for each module
+ Float_t fADC2keV; // Conversion factor from ADC to keV
private:
AliITSresponseSDD(const AliITSresponseSDD &ob); // copy constructor
AliITSresponseSDD& operator=(const AliITSresponseSDD & /* source */); // ass. op.
- ClassDef(AliITSresponseSDD,15)
+ ClassDef(AliITSresponseSDD,16)
};
#endif
AliCDBId idRespSDD("ITS/Calib/RespSDD",firstRun, lastRun);
AliITSresponseSDD* rd = new AliITSresponseSDD();
- rd->SetTimeOffset(54.3);
+ rd->SetSideATimeZero(54.3);
+ rd->SetSideCTimeZero(54.3);
+// rd->SetLayer3ATimeZero(235);
+// rd->SetLayer3CTimeZero(287);
+// rd->SetLayer4ATimeZero(202);
+// rd->SetLayer4CTimeZero(230);
AliCDBManager::Instance()->GetDefaultStorage()->Put(rd, idRespSDD, md);
}