Latest SDD changes to speed up the SDD simulation code.
authornilsen <nilsen@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 7 Jun 2002 16:32:28 +0000 (16:32 +0000)
committernilsen <nilsen@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 7 Jun 2002 16:32:28 +0000 (16:32 +0000)
ITS/AliITSsimulationSDD.cxx
ITS/AliITSsimulationSDD.h

index e3a3e752e14e60d865c722864d1caa8b413b07d4..ec00dc2cb981aa8275bebcea899c5ca2a84078fc 100644 (file)
 /*
   $Id$
   $Log$
+  Revision 1.33  2002/04/24 22:02:31  nilsen
+  New SDigits and Digits routines, and related changes,  (including new
+  noise values).
+
  */
 
 #include <iostream.h>
@@ -158,6 +162,7 @@ AliITSsimulationSDD::AliITSsimulationSDD(){
     fMaxNofSamples = 0;
     fITS           = 0;
     fTreeB         = 0;
+    fAnodeFire     = 0;
     SetScaleFourier();
     SetPerpendTracksFlag();
     SetCrosstalkFlag();
@@ -228,7 +233,8 @@ void AliITSsimulationSDD::Init(AliITSsegmentationSDD *seg,
 
     fNofMaps = fSegmentation->Npz();
     fMaxNofSamples = fSegmentation->Npx();
-
+    fAnodeFire = new Bool_t [fNofMaps];
+    
     Float_t sddLength = fSegmentation->Dx();
     Float_t sddWidth  = fSegmentation->Dz();
 
@@ -322,6 +328,7 @@ AliITSsimulationSDD::~AliITSsimulationSDD() {
     if(fInZI)  delete [] fInZI;        
     if(fOutZR) delete [] fOutZR;
     if(fOutZI) delete [] fOutZI;
+    if(fAnodeFire) delete [] fAnodeFire;
 }
 //______________________________________________________________________
 void AliITSsimulationSDD::InitSimulationModule( Int_t module, Int_t event ) {
@@ -329,6 +336,7 @@ void AliITSsimulationSDD::InitSimulationModule( Int_t module, Int_t event ) {
     fModule = module;
     fEvent  = event;
     ClearMaps();
+    memset(fAnodeFire,0,sizeof(Bool_t)*fNofMaps);    
 }
 //______________________________________________________________________
 void AliITSsimulationSDD::ClearMaps() {
@@ -360,7 +368,7 @@ Bool_t AliITSsimulationSDD::AddSDigitsToModule( TClonesArray *pItemArray, Int_t
     // Add Summable digits to module maps.
     Int_t    nItems = pItemArray->GetEntries();
     Double_t maxadc = fResponse->MaxAdc();
-    Bool_t sig = kFALSE;
+    //Bool_t sig = kFALSE;
     
     // cout << "Adding "<< nItems <<" SDigits to module " << fModule << endl;
     for( Int_t i=0; i<nItems; i++ ) {
@@ -369,10 +377,11 @@ Bool_t AliITSsimulationSDD::AddSDigitsToModule( TClonesArray *pItemArray, Int_t
             Error( "AliITSsimulationSDD",
                    "Error reading, SDigits module %d != current module %d: exit\n",
                     pItem->GetModule(), fModule );
-            return sig;
+            return kFALSE;
         } // end if
 
-       if(pItem->GetSignal()>0.0 ) sig = kTRUE;
+      //  if(pItem->GetSignal()>0.0 ) sig = kTRUE;
+        
         fpList->AddItemTo( mask, pItem ); // Add SignalAfterElect + noise
         AliITSpListItem * pItem2 = fpList->GetpListItem( pItem->GetIndex() );
         Double_t sigAE = pItem2->GetSignalAfterElect();
@@ -381,8 +390,9 @@ Bool_t AliITSsimulationSDD::AddSDigitsToModule( TClonesArray *pItemArray, Int_t
         Int_t it;
         fpList->GetMapIndex( pItem->GetIndex(), ia, it );
         fHitMap2->SetHit( ia, it, sigAE );
+        fAnodeFire[ia] = kTRUE;
     }
-    return sig;
+    return kTRUE;
 }
 //______________________________________________________________________
 void AliITSsimulationSDD::FinishSDigitiseModule() {
@@ -689,6 +699,7 @@ void AliITSsimulationSDD::HitsToAnalogDigits( AliITSmodule *mod ) {
                     fHitMap2->SetHit(index, it-1, charge);
                     fpList->AddSignal(index,it-1,itrack,ii-1,
                                      mod->GetIndex(),timeAmplitude);
+                    fAnodeFire[index] = kTRUE;                 
                 } // end if anodeAmplitude and loop over time in window
             } // loop over anodes in window
         } // end loop over "sub-hits"
@@ -970,6 +981,7 @@ void AliITSsimulationSDD::ChargeToSignal(Bool_t bAddNoise) {
     Float_t maxadc = fResponse->MaxAdc();    
     if(!fDoFFT) {
         for (i=0;i<fNofMaps;i++) {
+            if( !fAnodeFire[i] ) continue;
             if (read && i<fNofMaps) GetAnodeBaseline(i,baseline,noise);
             for(k=0; k<fScaleSize*fMaxNofSamples; k++) {
                 fInZR[k]  = fHitMap2->GetSignal(i,k);
@@ -998,6 +1010,7 @@ void AliITSsimulationSDD::ChargeToSignal(Bool_t bAddNoise) {
     } // end if DoFFT
 
     for (i=0;i<fNofMaps;i++) {
+        if( !fAnodeFire[i] ) continue;
         if  (read && i<fNofMaps) GetAnodeBaseline(i,baseline,noise);
         for(k=0; k<fScaleSize*fMaxNofSamples; k++) {
             fInZR[k]  = fHitMap2->GetSignal(i,k);
@@ -1503,6 +1516,7 @@ void AliITSsimulationSDD::Compress1D(){
         for (i=0; i<fNofMaps/2; i++) {
             Bool_t firstSignal=kTRUE;
             Int_t idx=i+k*fNofMaps/2;
+            if( !fAnodeFire[idx] ) continue;
             CompressionParam(idx,decr,thres); 
             for (j=0; j<fMaxNofSamples; j++) {
                 Int_t signal=(Int_t)(fHitMap2->GetSignal(idx,j));
@@ -1720,6 +1734,7 @@ void AliITSsimulationSDD::WriteSDigits(){
     static AliITS *aliITS = (AliITS*)gAlice->GetModule("ITS");
 
     for( Int_t i=0; i<fNofMaps; i++ ) {
+        if( !fAnodeFire[i] ) continue;
         for( Int_t j=0; j<fMaxNofSamples; j++ ) {
             Double_t sig = fHitMap2->GetSignal( i, j );
             if( sig > 0.2 ) {
index 91d4fd98f399614f7bcc97f81228ea2e64391a00..a1f5cf99ef8eaf2ea32044232adaa4cce45894f9 100644 (file)
@@ -164,6 +164,7 @@ class AliITSsimulationSDD : public AliITSsimulation {
                                    // output of the real part of FFT
     Double_t       *fOutZI;        //! [fScaleSize*fMaxNofSamples] 
                                    // output of the imaginary part of FFT
+    Bool_t         *fAnodeFire;     //! [#of anodes] Flag if there is a signal
 
     TObjArray *fHis;          // just in case for histogramming
     TArrayI    fD;            // decrease values for baseline eq.