#include "AliITShit.h"
#include "AliITSpList.h"
#include "AliITSCalibrationSDD.h"
+#include "AliITSresponseSDD.h"
#include "AliITSsimulationSDD.h"
#include "AliLog.h"
#include "AliRun.h"
Double_t nsigma = simpar->GetNSigmaIntegration(); //
Int_t nlookups = simpar->GetGausNLookUp(); //
Float_t jitter = simpar->GetSDDJitterError(); //
- Float_t trigDelay = simpar->GetSDDTrigDelay();
+ Float_t mapsmear = simpar->GetSDDCorrMapPrecision(); //
+ Float_t trigDelay = simpar->GetSDDTrigDelay(); // compensation for MC time zero
+ if(res->IsAMAt20MHz()) trigDelay+=12.5; // compensation for discretization step
+
+ Float_t timeZero=fDetType->GetResponseSDD()->GetTimeZero(fModule);
+ Float_t adcscale = fDetType->GetResponseSDD()->GetADCtokeV(fModule);
+ adcscale/=simpar->GetSDDkeVtoADC();
// Piergiorgio's part (apart for few variables which I made float
// when i thought that can be done
Float_t zloc=xL[2]+0.5*dxL[2];
zAnode=seg->GetAnodeFromLocal(xloc,zloc); // anode number in the range 0.-511.
driftSpeed = res->GetDriftSpeedAtAnode(zAnode);
+ driftSpeed+= fDetType->GetResponseSDD()->GetDeltaVDrift(fModule,zAnode>255);
+
if(timeStep*fMaxNofSamples < sddLength/driftSpeed) {
AliWarning("Time Interval > Allowed Time Interval");
}
tof=0.;
AliITShit* h=(AliITShit*)hits->At(ii);
- if(h) tof=h->GetTOF()*1E9;
- AliDebug(1,Form("TOF for hit %d on mod %d (particle %d)=%g",ii,fModule,h->Track(),tof));
-
+ if(h){
+ tof=h->GetTOF()*1E9;
+ AliDebug(1,Form("TOF for hit %d on mod %d (particle %d)=%g",ii,fModule,h->Track(),tof));
+ }
+
+ Float_t corrx=0, corrz=0;
+ res->GetShiftsForSimulation(xL[2],xL[0],corrz,corrx,seg);
+ xL[2]-=corrz;
+ xL[0]-=corrx;
+ xL[0] += 0.0001*gRandom->Gaus( 0, mapsmear); //
xL[0] += 0.0001*gRandom->Gaus( 0, jitter ); //
+
pathInSDD = TMath::Sqrt(dxL[0]*dxL[0]+dxL[1]*dxL[1]+dxL[2]*dxL[2]);
if (fFlag && pathInSDD) { depEnergy *= (0.03/pathInSDD); }
drPath = TMath::Abs(10000.*(dxL[0]+2.*xL[0])*0.5);
drPath = sddLength-drPath;
if(drPath < 0) {
- AliDebug(1, // this should be fixed at geometry level
+ AliInfo( // this should be fixed at geometry level
Form("negative drift path drPath=%e sddLength=%e dxL[0]=%e xL[0]=%e",
drPath,sddLength,dxL[0],xL[0]));
continue;
theAverage+=avAnode;
zAnode = seg->GetAnodeFromLocal(avDrft,avAnode);
driftSpeed = res->GetDriftSpeedAtAnode(zAnode);
+ driftSpeed+= fDetType->GetResponseSDD()->GetDeltaVDrift(fModule,zAnode>255);
driftPath = TMath::Abs(10000.*avDrft);
driftPath = sddLength-driftPath;
if(driftPath < 0) {
sigT = sigA/driftSpeed;
drTime+=tof; // take into account Time Of Flight from production point
- drTime+=trigDelay;
+ drTime-=trigDelay;
+ drTime+=timeZero;
timeSample = (Int_t) (fScaleSize*drTime/timeStep + 1.001); // time bin in range 1-256 !!!
if(zAnode>nofAnodes) zAnode-=nofAnodes; // to have the anode number between 0. and 256.
iAnode = (Int_t) (1.001+zAnode); // iAnode in range 1-256 !!!!
(timeStep*eVpairs*2.*acos(-1.));
chargeloss = 1.-cHloss*driftPath/1000.;
amplitude *= chargeloss;
+ amplitude *= adcscale;
width = 2.*nsigma/(nlookups-1);
// Spread the charge
nsplitAn = 4;
// create and inizialice crosstalk map
Float_t* ctk = new Float_t[fNofMaps*fMaxNofSamples+1];
- if( ctk == NULL ) {
- Error( "ApplyCrosstalk", "no memory for temporal map: exit " );
- return;
- }
memset( ctk, 0, sizeof(Float_t)*(fNofMaps*fMaxNofSamples+1) );
AliITSCalibrationSDD* calibr = (AliITSCalibrationSDD*)GetCalibrationModel(mod);
for( Int_t z=0; z<fNofMaps; z++ ) {
// make smooth derivative
Float_t* dev = new Float_t[fMaxNofSamples+1];
memset( dev, 0, sizeof(Float_t)*(fMaxNofSamples+1) );
- if( ctk == NULL ) {
- Error( "ApplyCrosstalk",
- "no memory for temporal array: exit " );
- return;
- }
for( Int_t i=tstart; i<tstop; i++ ) {
if( i > 2 && i < fMaxNofSamples-2 )
dev[i] = -0.2*fHitMap2->GetSignal( z,i-2 )
}
//______________________________________________________________________
void AliITSsimulationSDD::CreateHistograms(Int_t scale){
- // Creates histograms of maps for debugging
- Int_t i;
-
- fHis=new TObjArray(fNofMaps);
- for (i=0;i<fNofMaps;i++) {
- TString sddName("sdd_");
- Char_t candNum[4];
- sprintf(candNum,"%d",i+1);
- sddName.Append(candNum);
- fHis->AddAt(new TH1F(sddName.Data(),"SDD maps",scale*fMaxNofSamples,
- 0.,(Float_t) scale*fMaxNofSamples), i);
- } // end for i
+ // Creates histograms of maps for debugging
+ Int_t i;
+
+ fHis=new TObjArray(fNofMaps);
+ for (i=0;i<fNofMaps;i++) {
+ TString sddName;
+ sddName.Form("sdd_%d",i+1);
+ fHis->AddAt(new TH1F(sddName.Data(),"SDD maps",scale*fMaxNofSamples,
+ 0.,(Float_t) scale*fMaxNofSamples), i);
+ } // end for i
}
//______________________________________________________________________
void AliITSsimulationSDD::FillHistograms(){