Modified treatment of SDD gain in simulation: single anode gain normalized to average...
authorprino <prino@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 25 Feb 2010 18:30:21 +0000 (18:30 +0000)
committerprino <prino@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 25 Feb 2010 18:30:21 +0000 (18:30 +0000)
ITS/AliITSDetTypeSim.cxx
ITS/AliITSDetTypeSim.h
ITS/AliITSsimulationSDD.cxx

index 819680f..bc7a8a3 100644 (file)
@@ -89,6 +89,7 @@ fRunNumber(0),   //! Run number (to access DB)
 fDigits(),       //! [NMod][NDigits]
 fSimuPar(0),
 fDDLMapSDD(0),
+fAveGainSDD(0),
 fkDigClassName(), // String with digit class name.
 fLoader(0),      // local pointer to loader
 fFirstcall(kTRUE),
@@ -177,6 +178,7 @@ fRunNumber(source.fRunNumber),   //! Run number (to access DB)
 fDigits(source.fDigits),       //! [NMod][NDigits]
 fSimuPar(source.fSimuPar),
 fDDLMapSDD(source.fDDLMapSDD),
+fAveGainSDD(source.fAveGainSDD),
 fkDigClassName(), // String with digit class name.
 fLoader(source.fLoader),      // local pointer to loader
 fFirstcall(source.fFirstcall),
@@ -611,6 +613,8 @@ if(!deadSPD || !noisySPD || !foEffSPD || !foNoiSPD
   fFOGenerator.SetNoise(calFoNoiSPD); // this cal object is used only by the generator
   
   fDDLMapSDD->SetDDLMap(ddlsdd);
+  Float_t avegain=0.;
+  Float_t nGdAnodes=0;
   Bool_t oldMapFormat=kFALSE;
   TObject* objmap=(TObject*)mapT->At(0);
   TString cname(objmap->ClassName());
@@ -635,6 +639,11 @@ if(!deadSPD || !noisySPD || !foEffSPD || !foNoiSPD
       AliWarning(Form("SDD module %d not present in DDL map: set it as dead",iMod));
     }else{
       cal = (AliITSCalibration*) calSDD->At(i);
+      for(Int_t iAnode=0;iAnode< ((AliITSCalibrationSDD*)cal)->NOfAnodes(); iAnode++){
+       if(((AliITSCalibrationSDD*)cal)->IsBadChannel(iAnode)) continue;
+       avegain+= ((AliITSCalibrationSDD*)cal)->GetChannelGain(iAnode);
+       nGdAnodes++;
+      }
       Int_t i0=2*i;
       Int_t i1=1+2*i;
       AliITSDriftSpeedArraySDD* arr0 = (AliITSDriftSpeedArraySDD*) drSp->At(i0);
@@ -658,7 +667,8 @@ if(!deadSPD || !noisySPD || !foEffSPD || !foNoiSPD
       SetCalibrationModel(iMod, cal);
     }
   }
-
+  if(nGdAnodes) fAveGainSDD=avegain/nGdAnodes;
+  AliDebug(3,Form("SDD average gain=%f\n",fAveGainSDD));
   fSSDCalibration->SetNoise(noiseSSD);
   fSSDCalibration->SetGain(gainSSD);
   fSSDCalibration->SetBadChannels(badChannelsSSD);
index 6f7fa79..000cc48 100644 (file)
@@ -111,6 +111,10 @@ class AliITSDetTypeSim : public TObject {
     virtual void ProcessNoiseForFastOr() {fFOGenerator.ProcessNoise();}
     virtual AliITSFOSignalsSPD* GetFOSignals() {return fFOGenerator.GetFOSignals();}
     virtual void WriteFOSignals();
+    virtual Float_t GetAverageGainSDD() const {
+      if(fAveGainSDD>0.) return fAveGainSDD;
+      else return 1.;
+    }
 
 
  protected:
@@ -146,13 +150,14 @@ class AliITSDetTypeSim : public TObject {
     TObjArray     *fDigits;      //! [NMod][NDigits]
     AliITSSimuParam *fSimuPar;   //! detector simulation parameters
     AliITSDDLModuleMapSDD *fDDLMapSDD; //! mapping DDL/module -> SDD module number
+    Float_t       fAveGainSDD;    //! Average gain of SDD good anodes
     const Char_t*       fkDigClassName[3]; //! String with digit class name.
     AliITSLoader* fLoader;          //! loader  
     Bool_t        fFirstcall;       //! flag
     AliITSFOGeneratorSPD fFOGenerator; //! Fast-OR generator object
     AliITSTriggerConditions* fTriggerConditions; //! Trigger conditions 
        
-    ClassDef(AliITSDetTypeSim,11) // ITS Simulation structure
+    ClassDef(AliITSDetTypeSim,12) // ITS Simulation structure
  
 };
 
index 783b624..d3ce9b6 100644 (file)
@@ -670,7 +670,7 @@ void AliITSsimulationSDD::ChargeToSignal(Int_t mod,Bool_t bAddNoise, Bool_t bAdd
     if( !fAnodeFire[i] ) continue;
     baseline = res->GetBaseline(i);
     noise = res->GetNoise(i);
-    gain = res->GetChannelGain(i);
+    gain = res->GetChannelGain(i)/fDetType->GetAverageGainSDD();
     if(res->IsBad()) gain=0.;
     if( res->IsChipBad(res->GetChip(i)) )gain=0.;
     for(k=0; k<fScaleSize*fMaxNofSamples; k++) {