Second set of modifications to include SDD time zero in simulations. The time zero...
authorprino <prino@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 6 Oct 2010 18:08:07 +0000 (18:08 +0000)
committerprino <prino@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 6 Oct 2010 18:08:07 +0000 (18:08 +0000)
ITS/AliITSDetTypeSim.cxx
ITS/AliITSDetTypeSim.h
ITS/AliITSSimuParam.cxx
ITS/AliITSsimulationSDD.cxx

index e8c5202..d4aff4d 100644 (file)
@@ -63,6 +63,7 @@
 #include "AliITSsimulationSPD.h"
 #include "AliITSsimulationSDD.h"
 #include "AliITSsimulationSSD.h"
+#include "AliITSresponseSDD.h"
 #include "AliITSDDLModuleMapSDD.h"
 #include "AliITSTriggerConditions.h"
 #include "AliBaseLoader.h"
@@ -89,6 +90,7 @@ fRunNumber(0),   //! Run number (to access DB)
 fDigits(),       //! [NMod][NDigits]
 fSimuPar(0),
 fDDLMapSDD(0),
+fRespSDD(0),
 fAveGainSDD(0),
 fkDigClassName(), // String with digit class name.
 fLoader(0),      // local pointer to loader
@@ -157,6 +159,7 @@ AliITSDetTypeSim::~AliITSDetTypeSim(){
       }
     }
     if(fSimuPar) delete fSimuPar;
+    if(fRespSDD) delete fRespSDD;
     if(fDDLMapSDD) delete fDDLMapSDD;
     if(fNDigits) delete [] fNDigits;
     fNDigits = 0;
@@ -183,6 +186,7 @@ fRunNumber(source.fRunNumber),   //! Run number (to access DB)
 fDigits(source.fDigits),       //! [NMod][NDigits]
 fSimuPar(source.fSimuPar),
 fDDLMapSDD(source.fDDLMapSDD),
+fRespSDD(source.fRespSDD),
 fAveGainSDD(source.fAveGainSDD),
 fkDigClassName(), // String with digit class name.
 fLoader(source.fLoader),      // local pointer to loader
@@ -466,6 +470,7 @@ Bool_t AliITSDetTypeSim::GetCalibration() {
   AliCDBEntry *foEffSPD = AliCDBManager::Instance()->Get("ITS/Calib/SPDFOEfficiency", run);
   AliCDBEntry *foNoiSPD = AliCDBManager::Instance()->Get("ITS/Calib/SPDFONoise", run);
   AliCDBEntry *entrySDD = AliCDBManager::Instance()->Get("ITS/Calib/CalibSDD", run);
+  AliCDBEntry *entry2SDD = AliCDBManager::Instance()->Get("ITS/Calib/RespSDD");
   AliCDBEntry *drSpSDD = AliCDBManager::Instance()->Get("ITS/Calib/DriftSpeedSDD",run);
   AliCDBEntry *ddlMapSDD = AliCDBManager::Instance()->Get("ITS/Calib/DDLMapSDD",run);
   //AliCDBEntry *mapASDD = AliCDBManager::Instance()->Get("ITS/Calib/MapsAnodeSDD",run);
@@ -476,7 +481,7 @@ Bool_t AliITSDetTypeSim::GetCalibration() {
   AliCDBEntry *entryBadChannelsSSD = AliCDBManager::Instance()->Get("ITS/Calib/BadChannelsSSD");
 
 if(!deadSPD || !noisySPD || !foEffSPD || !foNoiSPD 
-     || !entrySDD || !entryNoiseSSD || !entryGainSSD || !entryBadChannelsSSD 
+     || !entrySDD  || !entry2SDD || !entryNoiseSSD || !entryGainSSD || !entryBadChannelsSSD 
      || !drSpSDD || !ddlMapSDD || !mapTSDD){
     AliFatal("Calibration object retrieval failed! ");
     return kFALSE;
@@ -503,6 +508,10 @@ if(!deadSPD || !noisySPD || !foEffSPD || !foNoiSPD
   if(!isCacheActive)entrySDD->SetObject(NULL);
   entrySDD->SetOwner(kTRUE);
 
+  AliITSresponseSDD *pSDD = (AliITSresponseSDD*)entry2SDD->GetObject();
+  if(!isCacheActive)entry2SDD->SetObject(NULL);
+  entry2SDD->SetOwner(kTRUE);
+
   TObjArray *drSp = (TObjArray *)drSpSDD->GetObject();
   if(!isCacheActive)drSpSDD->SetObject(NULL);
   drSpSDD->SetOwner(kTRUE);
@@ -585,6 +594,7 @@ if(!deadSPD || !noisySPD || !foEffSPD || !foNoiSPD
     delete foEffSPD;
     delete foNoiSPD;
     delete entrySDD;
+    delete entry2SDD;
     delete entryNoiseSSD;
     delete entryGainSSD;
     delete entryBadChannelsSSD;
@@ -597,7 +607,7 @@ if(!deadSPD || !noisySPD || !foEffSPD || !foNoiSPD
   AliCDBManager::Instance()->SetCacheFlag(origCacheStatus);
 
  if ((!calDeadSPD) || (!calNoisySPD) || (!calFoEffSPD) || (!calFoNoiSPD) 
-      || (!calSDD) || (!drSp) || (!ddlsdd)  
+      || (!calSDD) || (!pSDD)|| (!drSp) || (!ddlsdd)  
       || (!mapT) || (!noiseSSD)|| (!gainSSD)|| (!badChannelsSSD)) {
     AliWarning("Can not get calibration from calibration database !");
     return kFALSE;
@@ -621,6 +631,7 @@ if(!deadSPD || !noisySPD || !foEffSPD || !foNoiSPD
   fFOGenerator.SetNoise(calFoNoiSPD); // this cal object is used only by the generator
   
   fDDLMapSDD->SetDDLMap(ddlsdd);
+  fRespSDD=pSDD;
   Float_t avegain=0.;
   Float_t nGdAnodes=0;
   Bool_t oldMapFormat=kFALSE;
index 000cc48..4829a40 100644 (file)
@@ -31,6 +31,7 @@ class AliITSCalibrationSSD;
 class AliITSGainSSDv2;
 class AliITSBadChannelsSSDv2;
 class AliITSNoiseSSDv2;
+class AliITSresponseSDD;
 class AliITSDDLModuleMapSDD;
 class AliITSCalibration;
 class AliITSgeom;
@@ -71,6 +72,7 @@ class AliITSDetTypeSim : public TObject {
     virtual AliITSSimuParam* GetSimuParam() const {return fSimuPar;}
 
     virtual AliITSDDLModuleMapSDD* GetDDLModuleMapSDD()const { return fDDLMapSDD;}
+    virtual AliITSresponseSDD* GetResponseSDD() const { return fRespSDD;}
     TObjArray* GetCalibrationArray() const {return fCalibration;}
     TObjArray* GetSegmentation() const {return fSegmentation;}
     void ResetCalibrationArray();
@@ -150,6 +152,7 @@ class AliITSDetTypeSim : public TObject {
     TObjArray     *fDigits;      //! [NMod][NDigits]
     AliITSSimuParam *fSimuPar;   //! detector simulation parameters
     AliITSDDLModuleMapSDD *fDDLMapSDD; //! mapping DDL/module -> SDD module number
+    AliITSresponseSDD *fRespSDD;  //! SDD response parameters 
     Float_t       fAveGainSDD;    //! Average gain of SDD good anodes
     const Char_t*       fkDigClassName[3]; //! String with digit class name.
     AliITSLoader* fLoader;          //! loader  
@@ -157,7 +160,7 @@ class AliITSDetTypeSim : public TObject {
     AliITSFOGeneratorSPD fFOGenerator; //! Fast-OR generator object
     AliITSTriggerConditions* fTriggerConditions; //! Trigger conditions 
        
-    ClassDef(AliITSDetTypeSim,12) // ITS Simulation structure
+    ClassDef(AliITSDetTypeSim,13) // ITS Simulation structure
  
 };
 
index aeed144..a18184f 100644 (file)
@@ -39,7 +39,7 @@ const Float_t  AliITSSimuParam::fgkSDDJitterErrorDefault = 20.; // 20 um from be
 const Float_t  AliITSSimuParam::fgkSDDDynamicRangeDefault = 1400./2.5; // mV/MOhm = nA
 const Int_t    AliITSSimuParam::fgkSDDMaxAdcDefault = 1024;
 const Float_t  AliITSSimuParam::fgkSDDChargeLossDefault = 0.;
-const Float_t  AliITSSimuParam::fgkSDDTrigDelayDefault = 0.;
+const Float_t  AliITSSimuParam::fgkSDDTrigDelayDefault = 54.3;
 const Double_t AliITSSimuParam::fgkSSDCouplingPRDefault = 0.01;
 const Double_t AliITSSimuParam::fgkSSDCouplingPLDefault = 0.01;
 const Double_t AliITSSimuParam::fgkSSDCouplingNRDefault = 0.01;
index ac010de..ac17f9a 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,8 @@ 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   trigDelay  = simpar->GetSDDTrigDelay(); // compensation for MC time zero
+  Float_t   timeZero=fDetType->GetResponseSDD()->GetTimeZero(fModule);
 
   // Piergiorgio's part (apart for few variables which I made float
   // when i thought that can be done
@@ -517,7 +519,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 !!!!