er  dev
ERNeuRadDigiPar.cxx
1 #include "ERNeuRadDigiPar.h"
2 
3 #include "FairParamList.h"
4 #include "FairDetParIo.h"
5 #include "FairParIo.h"
6 #include "FairGenericParAsciiFileIo.h"
7 #include "FairGenericParRootFileIo.h"
8 #include "FairParAsciiFileIo.h"
9 #include "FairParRootFileIo.h"
10 
11 #include "TString.h"
12 #include "TMath.h"
13 
14 #include <iostream>
15 
16 // ----- Standard constructor ------------------------------------------
18  const char* title,
19  const char* context)
20  : FairParGenericSet(name, title, context),
21  fNofPixels(-1),
22  fNofModules(-1),
23  fUseCrosstalks(kFALSE),
24  fRowNofFibers(-1),
25  fPixelQuantumEfficiency(NULL),
26  fPixelGain(NULL),
27  fPixelSigma(NULL),
28  fPixelCrosstalks(NULL),
29  fFiberCrosstalks(NULL)
30 {
31  std::cout << "ERNeuRadDigiPar" << std::endl;
32 }
33 
34 // ----- Destructor ----------------------------------------------------
36 {
37  clear();
38 }
39 
40 // ----- Public method clear -------------------------------------------
42 {
43  status = kFALSE;
44  resetInputVersions();
45 }
46 
47 // ----- Public method print ---------------------------------------
49 {
50  fRowNofFibers = (Int_t)TMath::Sqrt(fNofPixels);
51 
52  std::cout << "*****************************************" << std::endl;
53  std::cout << " ERNeuRadDigiPar " << std::endl;
54  std::cout << "*****************************************" << std::endl;
55  std::cout << " ERNeuRadNofModules: " << fNofModules << std::endl;
56  std::cout << " ERNeuRadNofPixels: " << fNofPixels << std::endl;
57  std::cout << " ERNeuRadPixelQuantumEfficiency: " << std::endl;
58  for (Int_t iFiber = 0; iFiber < fRowNofFibers; iFiber++){
59  std::cout << " ";
60  for (Int_t jFiber = 0; jFiber < fRowNofFibers; jFiber++)
61  std::cout <<(*fPixelQuantumEfficiency)[iFiber*fRowNofFibers + jFiber] << "\t";
62  std::cout << std::endl;
63  }
64  std::cout << "*****************************************" << std::endl;
65 
66  std::cout << " ERNeuRadPixelGain: " << std::endl;
67  for (Int_t iFiber = 0; iFiber < fRowNofFibers; iFiber++){
68  std::cout << " ";
69  for (Int_t jFiber = 0; jFiber < fRowNofFibers; jFiber++)
70  std::cout <<(*fPixelGain)[iFiber*fRowNofFibers + jFiber] << "\t";
71  std::cout << std::endl;
72  }
73  std::cout << "*****************************************" << std::endl;
74 
75  std::cout << " ERNeuRadPixelSigma: " << std::endl;
76  for (Int_t iFiber = 0; iFiber < fRowNofFibers; iFiber++){
77  std::cout << " ";
78  for (Int_t jFiber = 0; jFiber < fRowNofFibers; jFiber++)
79  std::cout <<(*fPixelSigma)[iFiber*fRowNofFibers + jFiber] << "\t";
80  std::cout << std::endl;
81  }
82 
83  std::cout << "*****************************************" << std::endl;
84 }
85 
86 //------------------------------------------------------
87 void ERNeuRadDigiPar::putParams(FairParamList* l)
88 {
89 }
90 
91 //------------------------------------------------------
92 Bool_t ERNeuRadDigiPar::getParams(FairParamList* l)
93 {
94  std::cout << "ERNeuRadDigiPar Filling ..." << std::endl;
95 
96  ERNeuRadSetup* setup = ERNeuRadSetup::Instance();
97  fNofPixels = setup->RowNofPixels()*setup->RowNofPixels();
98  fNofModules = setup->RowNofModules()*setup->RowNofModules();
99 
100  std::cout << "fNofPixels " << fNofPixels << std::endl;
101 
102  fPixelQuantumEfficiency = new TArrayF(fNofPixels);
103  fPixelGain = new TArrayF(fNofPixels);
104  fPixelSigma = new TArrayF(fNofPixels),
105  fPixelCrosstalks = new TArrayF(fNofPixels*9);
106  fFiberCrosstalks = new TArrayF(fNofPixels*9);
107 
108  if (!l) { return kFALSE; }
109  if ( ! l->fill("ERNeuRadPixelQuantumEfficiency", fPixelQuantumEfficiency) ) { return kFALSE; }
110  if ( ! l->fill("ERNeuRadPixelGain", fPixelGain) ) { return kFALSE; }
111  if ( ! l->fill("ERNeuRadPixelSigma", fPixelSigma) ) { return kFALSE; }
112  if ( ! l->fill("ERNeuRadPixelCrosstalks", fPixelCrosstalks) ) {
113  std::cerr << "ERNeuRadDigiPar: can`t find ERNeuRadPixelCrosstalks" << std::endl;
114  } else {
115  fUseCrosstalks = kTRUE;
116  }
117  if ( ! l->fill("ERNeuRadFiberCrosstalks", fFiberCrosstalks) ) {
118  std::cerr << "ERNeuRadDigiPar: can`t find ERNeuRadFiberCrosstalks" << std::endl;
119  } else {
120  fUseCrosstalks = kTRUE;
121  }
122 
123  fPixelQuantumEfficiency->Set(fNofPixels);
124  fPixelGain->Set(fNofPixels);
125  fPixelSigma->Set(fNofPixels),
126  fPixelCrosstalks->Set(fNofPixels*9);
127  fFiberCrosstalks->Set(fNofPixels*9);
128  std::cout << "fPixelQuantumEfficiency " << fPixelQuantumEfficiency->GetSize() << std::endl;
129  return kTRUE;
130 }
131 
132 //------------------------------------------------------
133 Bool_t ERNeuRadDigiPar::init(FairParIo* input){
134  std::cout << input->getFilename() << std::endl;
135  if ( TString(input->getFilename()).Contains(".digi")){
136  FairGenericParAsciiFileIo* p=new FairGenericParAsciiFileIo(((FairParAsciiFileIo*)input)->getFile());
137  return p->init(this);
138  }
139  if ( TString(input->getFilename()).Contains(".root")){
140  FairGenericParRootFileIo* p=new FairGenericParRootFileIo(((FairParRootFileIo*)input)->getParRootFile());
141  return p->init(this);
142  }
143  return kFALSE;
144 }
145 
146 //------------------------------------------------------
147 void ERNeuRadDigiPar::Crosstalks(Int_t iPixel, TArrayF& crosstalks) const {
148  //Возвращает матрицу три на три. Каждый элемент матрицы - кростолк к соответствующему соседу.
149  //Центральая ячейка - вероятность фотонов, которые останутся в волокне.
150  //Вне зависимости от того, что написано в файле параметров потом пересчитывается, чтобы суммарная вероятнсть была равна 1
151  crosstalks.Set(9);
152  Int_t shift = iPixel*9;
153  for (Int_t i = 0; i < 9; i++){
154  crosstalks[i] = (*fPixelCrosstalks)[shift + i]+(*fFiberCrosstalks)[shift + i];
155  }
156 }
157 
158 ClassImp(ERNeuRadDigiPar)
virtual ~ERNeuRadDigiPar()
virtual Bool_t init(FairParIo *input)
virtual void clear()
ERNeuRadDigiPar(const char *name="ERNeuRadDigiPar", const char *title="ERNeuRad Digitization Parameters", const char *context="Default")
virtual void print()