]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSsimulationSDD.cxx
Fixes for Coverity warnings (M. van Leeuwen)
[u/mrichter/AliRoot.git] / ITS / AliITSsimulationSDD.cxx
index ac010de6edc6f46ef723a1a529cd09a3159c16c4..9739fd7091165bb81adae1660b0b959c8a745690 100644 (file)
@@ -35,6 +35,7 @@
 #include "AliITShit.h"
 #include "AliITSpList.h"
 #include "AliITSCalibrationSDD.h"
+#include "AliITSresponseSDD.h"
 #include "AliITSsimulationSDD.h"
 #include "AliLog.h"
 #include "AliRun.h"
@@ -398,7 +399,13 @@ void AliITSsimulationSDD::HitsToAnalogDigits( AliITSmodule *mod ) {
   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
@@ -453,6 +460,8 @@ void AliITSsimulationSDD::HitsToAnalogDigits( AliITSmodule *mod ) {
     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");
     }
@@ -468,17 +477,25 @@ void AliITSsimulationSDD::HitsToAnalogDigits( AliITSmodule *mod ) {
      
     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;
@@ -503,6 +520,7 @@ void AliITSsimulationSDD::HitsToAnalogDigits( AliITSmodule *mod ) {
       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) {
@@ -517,7 +535,8 @@ void AliITSsimulationSDD::HitsToAnalogDigits( AliITSmodule *mod ) {
       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 !!!!
@@ -527,6 +546,7 @@ void AliITSsimulationSDD::HitsToAnalogDigits( AliITSmodule *mod ) {
        (timeStep*eVpairs*2.*acos(-1.));
       chargeloss = 1.-cHloss*driftPath/1000.;
       amplitude *= chargeloss;
+      amplitude *= adcscale;
       width  = 2.*nsigma/(nlookups-1);
       // Spread the charge 
       nsplitAn = 4; 
@@ -729,10 +749,6 @@ void AliITSsimulationSDD::ApplyCrosstalk(Int_t mod) {
   
     // 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++ ) {
@@ -761,11 +777,6 @@ void AliITSsimulationSDD::ApplyCrosstalk(Int_t mod) {
                         // 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 ) 
@@ -900,18 +911,16 @@ void AliITSsimulationSDD::StoreAllDigits(){
 } 
 //______________________________________________________________________
 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(){