// #include "AliITS.h"
#include "AliITSgeom.h"
#include "AliITSgeomSDD.h"
-#include "AliITSresponse.h"
-
+#include "AliITSresponseSDD.h"
//////////////////////////////////////////////////////
// Segmentation class for //
// drift detectors //
ClassImp(AliITSsegmentationSDD)
//----------------------------------------------------------------------
-AliITSsegmentationSDD::AliITSsegmentationSDD(AliITSgeom* geom,
- AliITSresponse *resp){
+AliITSsegmentationSDD::AliITSsegmentationSDD(AliITSgeom* geom):
+fNsamples(0),
+fNanodes(0),
+fPitch(0),
+fTimeStep(0),
+fDriftSpeed(0),
+fSetDriftSpeed(0){
// constructor
fGeom=geom;
- fDriftSpeed=resp->DriftSpeed();
+ fDriftSpeed=AliITSresponseSDD::DefaultDriftSpeed();
fCorr=0;
SetDetSize(fgkDxDefault,fgkDzDefault,fgkDyDefault);
SetPadSize(fgkPitchDefault,fgkClockDefault);
}
//______________________________________________________________________
-AliITSsegmentationSDD::AliITSsegmentationSDD() : AliITSsegmentation(){
+AliITSsegmentationSDD::AliITSsegmentationSDD() : AliITSsegmentation(),
+fNsamples(0),
+fNanodes(0),
+fPitch(0),
+fTimeStep(0),
+fDriftSpeed(0),
+fSetDriftSpeed(0){
// Default constructor
fDriftSpeed=0;
SetDetSize(fgkDxDefault,fgkDzDefault,fgkDyDefault);
((AliITSsegmentationSDD& ) obj).fPitch = fPitch;
((AliITSsegmentationSDD& ) obj).fTimeStep = fTimeStep;
((AliITSsegmentationSDD& ) obj).fDriftSpeed = fDriftSpeed;
+ ((AliITSsegmentationSDD& ) obj).fSetDriftSpeed = fSetDriftSpeed;
}
//______________________________________________________________________
//____________________________________________________________________________
AliITSsegmentationSDD::AliITSsegmentationSDD(const AliITSsegmentationSDD &source) :
- AliITSsegmentation(source){
+ AliITSsegmentation(source),
+fNsamples(0),
+fNanodes(0),
+fPitch(0),
+fTimeStep(0),
+fDriftSpeed(0),
+fSetDriftSpeed(0){
// copy constructor
source.Copy(*this);
}
timebin+=1;
anode+=1;
+ if(!fSetDriftSpeed){
+ timebin=-999;
+ Warning("GetPadIxz","Drift speed not set: timebin is dummy");
+ }
}
//----------------------------------------------------------------------
else x = -(fDx-driftpath)/kconv;
if (anode >= na) anode-=na;
z=((anode+0.5)*fPitch-fDz/2)/kconv;
+ if(!fSetDriftSpeed){
+ x=-9999.;
+ Warning("GetPadCxz","Drift speed not set: x coord. is dummy");
+ }
}
//----------------------------------------------------------------------
x=driftpath/fDriftSpeed/fTimeStep;
z=kconv*z/fPitch + (float)na/2;
if (x0 < 0) x = -x;
-
+ if(!fSetDriftSpeed){
+ x=-9999.;
+ Warning("GetPadTxz","Drift speed not set: x coord. is dummy");
+ }
}
//----------------------------------------------------------------------
void AliITSsegmentationSDD::GetLocal(Int_t module,Float_t *g ,Float_t *l) const {
}
//______________________________________________________________________
-void AliITSsegmentationSDD::LocalToDet(Float_t x,Float_t z,Int_t &ix,Int_t &iz) const {
+Bool_t AliITSsegmentationSDD::LocalToDet(Float_t x,Float_t z,
+ Int_t &ix,Int_t &iz) const {
// Transformation from Geant detector centered local coordinates (cm) to
// time bucket numbers ix and anode number iz.
// Input:
dz = -0.5*kconv*Dz(); // lower left edge in cm.
if(x<dx || x>-dx) {
Warning("LocalToDet","input argument %f out of range (%f, %f)",x,dx,-dx);
- return; // outside of defined volume.
+ return kFALSE; // outside of defined volume.
}
if(z<dz || z>-dz) {
Warning("LocalToDet","input argument %f out of range (%f, %f)",z,dz,-dz);
- return; // outside of defined volume.
+ return kFALSE; // outside of defined volume.
}
tb = fDriftSpeed*fTimeStep*kconv; // compute size of time bin.
if(x>0) dx = -(dx + x)/tb; // distance from + side in time bin units
ix = (Int_t) dx; // time bin
iz = (Int_t) dz; // anode
if(x>0) iz += Npz()/2; // if x>0 then + side anodes values.
- return; // Found ix and iz, return.
+ if(!fSetDriftSpeed){
+ tb=-999;
+ Warning("LocalToDet","Drift speed not set: timebin is dummy");
+ return kFALSE;
+ }
+ return kTRUE; // Found ix and iz, return.
}
//______________________________________________________________________
void AliITSsegmentationSDD::DetToLocal(Int_t ix,Int_t iz,Float_t &x,Float_t &z) const
if(iz>=Npz()/2) iz -=Npz()/2;// If +x side don't count anodes from -x side.
for(j=0;j<iz;j++) z += kconv*fPitch; // sum up cell iz-1
z += 0.5*kconv*fPitch; // add 1/2 of cell iz for center location.
+ if(!fSetDriftSpeed){
+ x=-9999.;
+ Warning("LocalToDet","Drift speed not set: x coord. is dummy");
+ }
return; // Found x and z, return.
}