ROOT logo
/////////////////////////////////////////////////////////////////////
// Author: Henrik Tydesjo                                          //
//                                                                 //
// This class is used to generate Fast-OR signals from SPD chips.  //
//                                                                 //
// This procedure is meant to be used during the digitization,     //
// and will be based on the number of pixels firing in each chip.  //
// The method 'ProcessPixelHit' should be used for each fired      //
// pixel. An efficiency value on Fast-Or signal creation upon a    //
// single fired pixel will then be used. Optionally, there may be  //
// one value per chip or even one value per column. These values   //
// are taken from the class AliITSFOEfficiencySPD, normally placed //
// in OCDB.                                                        //
//                                                                 //
// Through a similar class, AliITSFONoiseSPD, there is a           //
// possibility to apply random noise to the generation of fast-or  //
// signals. This will then be performed by method 'ProcessNoise',  //
// normally called after the processing of the fired pixels.       //
//                                                                 //
// The output signals are represented by the AliITSFOsignalsSPD    //
// class. Basically, it contains a bit map with all the 1200 pixel //
// chips.                                                          //
/////////////////////////////////////////////////////////////////////

#include "AliITSFOGeneratorSPD.h"
#include "AliITSRawStreamSPD.h"
#include <TRandom.h>

AliITSFOGeneratorSPD::AliITSFOGeneratorSPD() :
  fSignals(), fOCDBEff(NULL), fOCDBNoise(NULL)
{
  // default constructor
}
//______________________________________________________________________
AliITSFOGeneratorSPD::AliITSFOGeneratorSPD(AliITSFOEfficiencySPD* ocdbEff, AliITSFONoiseSPD* ocdbNoise) :
    fSignals(), fOCDBEff(ocdbEff), fOCDBNoise(ocdbNoise)
{
  // constructor
}
//______________________________________________________________________
AliITSFOGeneratorSPD::AliITSFOGeneratorSPD(const AliITSFOGeneratorSPD& handle): 
  fSignals(handle.fSignals), fOCDBEff(handle.fOCDBEff), fOCDBNoise(handle.fOCDBNoise)
{
  // copy constructor
}
//______________________________________________________________________
AliITSFOGeneratorSPD::~AliITSFOGeneratorSPD() {
  // destructor
}
//______________________________________________________________________
AliITSFOGeneratorSPD& AliITSFOGeneratorSPD::operator=(const AliITSFOGeneratorSPD& handle) {
  // assignment operator
  if (this!=&handle) {
    fSignals = handle.fSignals;
    fOCDBEff = handle.fOCDBEff;
    fOCDBNoise = handle.fOCDBNoise;
  }
  return *this;
}
//______________________________________________________________________
void AliITSFOGeneratorSPD::SetEfficiencyAndNoise(AliITSFOEfficiencySPD* ocdbEff, AliITSFONoiseSPD* ocdbNoise) {
  // Method to give pointers to the OCDB entries, needed by methods ProcessPixelHit and ProcessNoise
  SetEfficiency(ocdbEff);
  SetNoise(ocdbNoise);
}
//______________________________________________________________________
void AliITSFOGeneratorSPD::SetEfficiency(AliITSFOEfficiencySPD* ocdbEff) {
  // Method to give pointer to the OCDB efficiency entry
  fOCDBEff = ocdbEff;
}
//______________________________________________________________________
void AliITSFOGeneratorSPD::SetNoise(AliITSFONoiseSPD* ocdbNoise) {
  // Method to give pointer to the OCDB noise entry
  fOCDBNoise = ocdbNoise;
}
//______________________________________________________________________
void AliITSFOGeneratorSPD::ProcessPixelHit(UInt_t eq, UInt_t hs, UInt_t chip, UInt_t col, UInt_t row) {
  // Here it will be decided wether a fired pixel will give rise to a fast-or signal or not
  if (eq>=20 || hs>=6 || chip>=10 || col>=32 || row>=256) {
    Error("AliITSFOGeneratorSPD::ProcessPixelHit", "eq,hs,chip,col,row (%d,%d,%d,%d,%d) out of bounds.",
	  eq,hs,chip,col,row);
    return;
  }
  if (fOCDBEff==NULL) {
    Error("AliITSFOGeneratorSPD::ProcessPixelHit", "No AliITSFOEfficiencySPD entry has been provided.");
    return;
  }
  // simulate if this fired pixel gives rise to a fast-or signal:
  if (gRandom->Rndm() < fOCDBEff->GetColumnEfficiency(eq,hs,chip,col)) {
    fSignals.SetSignal(eq,hs,chip);
  }
}
//______________________________________________________________________
void AliITSFOGeneratorSPD::ProcessPixelHitM(UInt_t module, UInt_t colM, UInt_t rowM) {
  // Converts offline coordinates to online, and calls ProcessPixelHit
  if (module>=240 || colM>=160 || rowM>=256) {
    Error("AliITSFOGeneratorSPD::ProcessPixelHitM", "module,colM,rowM (%d,%d,%d) out of bounds.",
	  module,colM,rowM);
    return;
  }
  UInt_t eq,hs,chip,col,row;
  if (AliITSRawStreamSPD::OfflineToOnline(module,colM,rowM,eq,hs,chip,col,row)) {
    ProcessPixelHit(eq,hs,chip,col,row);
  }
}
//______________________________________________________________________
void AliITSFOGeneratorSPD::ProcessNoise() {
  // 
  if (fOCDBNoise==NULL) {
    Error("AliITSFOGeneratorSPD::ProcessNoise", "No AliITSFONoiseSPD entry has been provided.");
    return;
  }
  // simulate if each pixel chip will give rise to a random noise induced fast-or signal:
  for (UInt_t eq=0; eq<20; eq++) {
    for (UInt_t hs=0; hs<6; hs++) {
      for (UInt_t chip=0; chip<10; chip++) {
	if (gRandom->Rndm() < fOCDBNoise->GetChipNoise(eq,hs,chip)) {
	  fSignals.SetSignal(eq,hs,chip);
	}
      }
    }
  }
}
 AliITSFOGeneratorSPD.cxx:1
 AliITSFOGeneratorSPD.cxx:2
 AliITSFOGeneratorSPD.cxx:3
 AliITSFOGeneratorSPD.cxx:4
 AliITSFOGeneratorSPD.cxx:5
 AliITSFOGeneratorSPD.cxx:6
 AliITSFOGeneratorSPD.cxx:7
 AliITSFOGeneratorSPD.cxx:8
 AliITSFOGeneratorSPD.cxx:9
 AliITSFOGeneratorSPD.cxx:10
 AliITSFOGeneratorSPD.cxx:11
 AliITSFOGeneratorSPD.cxx:12
 AliITSFOGeneratorSPD.cxx:13
 AliITSFOGeneratorSPD.cxx:14
 AliITSFOGeneratorSPD.cxx:15
 AliITSFOGeneratorSPD.cxx:16
 AliITSFOGeneratorSPD.cxx:17
 AliITSFOGeneratorSPD.cxx:18
 AliITSFOGeneratorSPD.cxx:19
 AliITSFOGeneratorSPD.cxx:20
 AliITSFOGeneratorSPD.cxx:21
 AliITSFOGeneratorSPD.cxx:22
 AliITSFOGeneratorSPD.cxx:23
 AliITSFOGeneratorSPD.cxx:24
 AliITSFOGeneratorSPD.cxx:25
 AliITSFOGeneratorSPD.cxx:26
 AliITSFOGeneratorSPD.cxx:27
 AliITSFOGeneratorSPD.cxx:28
 AliITSFOGeneratorSPD.cxx:29
 AliITSFOGeneratorSPD.cxx:30
 AliITSFOGeneratorSPD.cxx:31
 AliITSFOGeneratorSPD.cxx:32
 AliITSFOGeneratorSPD.cxx:33
 AliITSFOGeneratorSPD.cxx:34
 AliITSFOGeneratorSPD.cxx:35
 AliITSFOGeneratorSPD.cxx:36
 AliITSFOGeneratorSPD.cxx:37
 AliITSFOGeneratorSPD.cxx:38
 AliITSFOGeneratorSPD.cxx:39
 AliITSFOGeneratorSPD.cxx:40
 AliITSFOGeneratorSPD.cxx:41
 AliITSFOGeneratorSPD.cxx:42
 AliITSFOGeneratorSPD.cxx:43
 AliITSFOGeneratorSPD.cxx:44
 AliITSFOGeneratorSPD.cxx:45
 AliITSFOGeneratorSPD.cxx:46
 AliITSFOGeneratorSPD.cxx:47
 AliITSFOGeneratorSPD.cxx:48
 AliITSFOGeneratorSPD.cxx:49
 AliITSFOGeneratorSPD.cxx:50
 AliITSFOGeneratorSPD.cxx:51
 AliITSFOGeneratorSPD.cxx:52
 AliITSFOGeneratorSPD.cxx:53
 AliITSFOGeneratorSPD.cxx:54
 AliITSFOGeneratorSPD.cxx:55
 AliITSFOGeneratorSPD.cxx:56
 AliITSFOGeneratorSPD.cxx:57
 AliITSFOGeneratorSPD.cxx:58
 AliITSFOGeneratorSPD.cxx:59
 AliITSFOGeneratorSPD.cxx:60
 AliITSFOGeneratorSPD.cxx:61
 AliITSFOGeneratorSPD.cxx:62
 AliITSFOGeneratorSPD.cxx:63
 AliITSFOGeneratorSPD.cxx:64
 AliITSFOGeneratorSPD.cxx:65
 AliITSFOGeneratorSPD.cxx:66
 AliITSFOGeneratorSPD.cxx:67
 AliITSFOGeneratorSPD.cxx:68
 AliITSFOGeneratorSPD.cxx:69
 AliITSFOGeneratorSPD.cxx:70
 AliITSFOGeneratorSPD.cxx:71
 AliITSFOGeneratorSPD.cxx:72
 AliITSFOGeneratorSPD.cxx:73
 AliITSFOGeneratorSPD.cxx:74
 AliITSFOGeneratorSPD.cxx:75
 AliITSFOGeneratorSPD.cxx:76
 AliITSFOGeneratorSPD.cxx:77
 AliITSFOGeneratorSPD.cxx:78
 AliITSFOGeneratorSPD.cxx:79
 AliITSFOGeneratorSPD.cxx:80
 AliITSFOGeneratorSPD.cxx:81
 AliITSFOGeneratorSPD.cxx:82
 AliITSFOGeneratorSPD.cxx:83
 AliITSFOGeneratorSPD.cxx:84
 AliITSFOGeneratorSPD.cxx:85
 AliITSFOGeneratorSPD.cxx:86
 AliITSFOGeneratorSPD.cxx:87
 AliITSFOGeneratorSPD.cxx:88
 AliITSFOGeneratorSPD.cxx:89
 AliITSFOGeneratorSPD.cxx:90
 AliITSFOGeneratorSPD.cxx:91
 AliITSFOGeneratorSPD.cxx:92
 AliITSFOGeneratorSPD.cxx:93
 AliITSFOGeneratorSPD.cxx:94
 AliITSFOGeneratorSPD.cxx:95
 AliITSFOGeneratorSPD.cxx:96
 AliITSFOGeneratorSPD.cxx:97
 AliITSFOGeneratorSPD.cxx:98
 AliITSFOGeneratorSPD.cxx:99
 AliITSFOGeneratorSPD.cxx:100
 AliITSFOGeneratorSPD.cxx:101
 AliITSFOGeneratorSPD.cxx:102
 AliITSFOGeneratorSPD.cxx:103
 AliITSFOGeneratorSPD.cxx:104
 AliITSFOGeneratorSPD.cxx:105
 AliITSFOGeneratorSPD.cxx:106
 AliITSFOGeneratorSPD.cxx:107
 AliITSFOGeneratorSPD.cxx:108
 AliITSFOGeneratorSPD.cxx:109
 AliITSFOGeneratorSPD.cxx:110
 AliITSFOGeneratorSPD.cxx:111
 AliITSFOGeneratorSPD.cxx:112
 AliITSFOGeneratorSPD.cxx:113
 AliITSFOGeneratorSPD.cxx:114
 AliITSFOGeneratorSPD.cxx:115
 AliITSFOGeneratorSPD.cxx:116
 AliITSFOGeneratorSPD.cxx:117
 AliITSFOGeneratorSPD.cxx:118
 AliITSFOGeneratorSPD.cxx:119
 AliITSFOGeneratorSPD.cxx:120
 AliITSFOGeneratorSPD.cxx:121
 AliITSFOGeneratorSPD.cxx:122
 AliITSFOGeneratorSPD.cxx:123