]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSsimulationSDD.cxx
In Open() and GotoEvent() try the ESD operations first, fallback to run-loader.
[u/mrichter/AliRoot.git] / ITS / AliITSsimulationSDD.cxx
index c3796133fba905382cc73b80014ee56b0b45c135..4c71d589940e160ca14f2c00f9c653604dd2f4c2 100644 (file)
@@ -18,7 +18,7 @@
 #include <Riostream.h>
 #include <stdlib.h>
 #include <stdio.h>
-#include <string.h>
+#include <cstring>
 
 #include <TCanvas.h>
 #include <TF1.h>
@@ -33,7 +33,6 @@
 #include "AliITSetfSDD.h"
 #include "AliITSmodule.h"
 #include "AliITSpList.h"
-#include "AliITSresponseSDD.h"
 #include "AliITSCalibrationSDD.h"
 #include "AliITSsegmentationSDD.h"
 #include "AliITSsimulationSDD.h"
@@ -152,7 +151,7 @@ void AliITSsimulationSDD::Init(){
 
     AliITSsegmentationSDD* seg = (AliITSsegmentationSDD*)GetSegmentationModel(1);
     
-    AliITSresponseSDD* res = (AliITSresponseSDD*)fDetType->GetResponse(1);
+    AliITSSimuParam* simpar = fDetType->GetSimuParam();
     fpList = new AliITSpList( seg->Npz(),
                               fScaleSize*seg->Npx() );
     fHitSigMap2 = new AliITSMapA2(seg,fScaleSize,1);
@@ -175,10 +174,8 @@ void AliITSsimulationSDD::Init(){
 
 
     fElectronics = new AliITSetfSDD(timeStep/fScaleSize,
-                                    res->Electronics());
+                                    simpar->GetSDDElectronics());
 
-    char opt1[20], opt2[20];
-    res->ParamOptions(opt1,opt2);
 
     fITS       = (AliITS*)gAlice->GetModule("ITS");
  
@@ -304,9 +301,9 @@ void AliITSsimulationSDD::SDigitiseModule(AliITSmodule *mod,Int_t md,Int_t ev){
 Bool_t AliITSsimulationSDD::AddSDigitsToModule(TClonesArray *pItemArray,
                                                Int_t mask ) {
     // Add Summable digits to module maps.
-   AliITSresponseSDD* res = (AliITSresponseSDD*)fDetType->GetResponse(1);
+    AliITSSimuParam* simpar = fDetType->GetSimuParam();
     Int_t    nItems = pItemArray->GetEntries();
-    Double_t maxadc = res->MaxAdc();
+    Double_t maxadc = simpar->GetSDDMaxAdc();
     Bool_t sig = kFALSE;
     
     // cout << "Adding "<< nItems <<" SDigits to module " << fModule << endl;
@@ -378,8 +375,8 @@ void AliITSsimulationSDD::FinishDigits() {
     if( fCrosstalkFlag ) ApplyCrosstalk(fModule);
 
     AliITSCalibrationSDD* res = (AliITSCalibrationSDD*)GetCalibrationModel(fModule);
-    const char *kopt = res->GetZeroSuppOption();
-    if (strstr(kopt,"ZS")) Compress2D();
+    Bool_t isZeroSupp = res->GetZeroSupp();
+    if (isZeroSupp) Compress2D();
     else StoreAllDigits();
 }
 //______________________________________________________________________
@@ -387,6 +384,8 @@ void AliITSsimulationSDD::HitsToAnalogDigits( AliITSmodule *mod ) {
     // create maps to build the lists of tracks for each digit
   AliITSsegmentationSDD* seg = (AliITSsegmentationSDD*)GetSegmentationModel(1);
   AliITSCalibrationSDD* res = (AliITSCalibrationSDD*)GetCalibrationModel(fModule);
+  AliITSSimuParam* simpar = fDetType->GetSimuParam();
+
   TObjArray *hits     = mod->GetHits();
     Int_t      nhits    = hits->GetEntriesFast();
 
@@ -397,16 +396,15 @@ void AliITSsimulationSDD::HitsToAnalogDigits( AliITSmodule *mod ) {
     Double_t  anodePitch = seg->Dpz(0);
     Double_t  timeStep   = seg->Dpx(0);
     Double_t  driftSpeed ;  // drift velocity (anode dependent)
-    //Float_t   maxadc     = res->GetMaxAdc();    
-    //Float_t   topValue   = res->GetDynamicRange();
-    Double_t  norm       = res->GetMaxAdc()/res->GetDynamicRange(); //   maxadc/topValue;
-    Double_t  cHloss     = res->GetChargeLoss();
-    Float_t   dfCoeff, s1; res->DiffCoeff(dfCoeff,s1); // Signal 2d Shape
-    Double_t  eVpairs    = res->GetGeVToCharge()*1.0E9; // 3.6 eV by def.
-    Double_t  nsigma     = res->GetNSigmaIntegration(); //
-    Int_t     nlookups   = res->GetGausNLookUp();       //
-    Float_t   jitter     = res->GetJitterError(); // 
-
+    Double_t  norm       = simpar->GetSDDMaxAdc()/simpar->GetSDDDynamicRange(); //   maxadc/topValue;
+    Double_t  cHloss     = simpar->GetSDDChargeLoss();
+    Float_t   dfCoeff, s1; 
+    simpar->GetSDDDiffCoeff(dfCoeff,s1); // Signal 2d Shape
+    Double_t  eVpairs    = simpar->GetGeVToCharge()*1.0E9; // 3.6 eV by def.
+    Double_t  nsigma     = simpar->GetNSigmaIntegration(); //
+    Int_t     nlookups   = simpar->GetGausNLookUp();       //
+    Float_t   jitter     = simpar->GetSDDJitterError(); // 
+    
     // Piergiorgio's part (apart for few variables which I made float
     // when i thought that can be done
     // Fill detector maps with GEANT hits
@@ -589,7 +587,7 @@ void AliITSsimulationSDD::HitsToAnalogDigits( AliITSmodule *mod ) {
          if(TMath::Abs(aExpo) > nsigma)  anodeAmplitude = 0.;
          else {
            Int_t theBin = (Int_t) ((aExpo+nsigma)/width+0.5);
-           anodeAmplitude = amplitude*res->GetGausLookUp(theBin);
+           anodeAmplitude = amplitude*simpar->GetGausLookUp(theBin);
          } // end if TMath::Abs(aEspo) > nsigma
          // index starts from 0
          index = iWing*nofAnodes+ia-1;
@@ -606,7 +604,7 @@ void AliITSsimulationSDD::HitsToAnalogDigits( AliITSmodule *mod ) {
              if(TMath::Abs(tExpo) > nsigma) timeAmplitude = 0.;
              else {
                Int_t theBin = (Int_t) ((tExpo+nsigma)/width+0.5);
-               timeAmplitude = anodeAmplitude*res->GetGausLookUp(theBin);
+               timeAmplitude = anodeAmplitude*simpar->GetGausLookUp(theBin);
              } // end if TMath::Abs(tExpo) > nsigma
              // build the list of Sdigits for this module        
              //                    arg[0]     = index;
@@ -678,15 +676,14 @@ void AliITSsimulationSDD::ChargeToSignal(Int_t mod,Bool_t bAddNoise, Bool_t bAdd
   // add baseline, noise, gain, electronics and ADC saturation effects
   // apply dead channels
 
-  char opt1[20], opt2[20];
   AliITSCalibrationSDD* res = (AliITSCalibrationSDD*)GetCalibrationModel(mod);
-  res->GetParamOptions(opt1,opt2);
   Double_t baseline=0; 
   Double_t noise=0; 
   Double_t gain=0; 
   Float_t contrib=0;
   Int_t i,k,kk;
-  Float_t maxadc = res->GetMaxAdc();    
+  AliITSSimuParam* simpar = fDetType->GetSimuParam();
+  Float_t maxadc = simpar->GetSDDMaxAdc();    
 
   for (i=0;i<fNofMaps;i++) {
     if( !fAnodeFire[i] ) continue;
@@ -749,11 +746,7 @@ void AliITSsimulationSDD::ChargeToSignal(Int_t mod,Bool_t bAddNoise, Bool_t bAdd
 void AliITSsimulationSDD::ApplyCrosstalk(Int_t mod) {
     // function add the crosstalk effect to signal
     // temporal function, should be checked...!!!
-    AliITSsegmentationSDD* seg = (AliITSsegmentationSDD*)GetSegmentationModel(1);
   
-    Int_t fNofMaps = seg->Npz();
-    Int_t fMaxNofSamples = seg->Npx();
-
     // create and inizialice crosstalk map
     Float_t* ctk = new Float_t[fNofMaps*fMaxNofSamples+1];
     if( ctk == NULL ) {
@@ -915,22 +908,15 @@ void AliITSsimulationSDD::Compress2D(){
 
 //______________________________________________________________________
 void AliITSsimulationSDD::StoreAllDigits(){
-  // if non-zero-suppressed data
-  AliITSCalibrationSDD* res = (AliITSCalibrationSDD*)GetCalibrationModel(fModule);
-
-  Int_t i, j, digits[3];
-
-  for (i=0; i<fNofMaps; i++) {
-    for (j=0; j<fMaxNofSamples; j++) {
-      Int_t signal=(Int_t)(fHitMap2->GetSignal(i,j));
-      signal = Convert10to8(signal);
-      signal = Convert8to10(signal);
-      digits[0] = i;
-      digits[1] = j;
-      digits[2] = signal;
-      fITS->AddRealDigit(1,digits);
-    } // end for j
-  } // end for i
+  // store digits for non-zero-suppressed data
+  for (Int_t ian=0; ian<fNofMaps; ian++) {
+    for (Int_t itb=0; itb<fMaxNofSamples; itb++){
+      Int_t signal=(Int_t)(fHitMap2->GetSignal(ian,itb));
+      Int_t signalc = Convert10to8(signal);
+      Int_t signale = Convert8to10(signalc);
+      AddDigit(ian,itb,signalc,signale);  
+    } 
+  }
 } 
 //______________________________________________________________________
 void AliITSsimulationSDD::CreateHistograms(Int_t scale){