ROOT logo
///////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                           //
//     DIGReadoutmap                                                                         //
//                                                                                           //
//       final output of the event                                                           //
//          -list of pixels with a collected charge >0                                       //
//          -Analog charge list                                                              //
//          -Digital charge list                                                             //
//                                                                                           //
//                                                                                           //
//                                                                                           //
///////////////////////////////////////////////////////////////////////////////////////////////
#include <digreadoutmap.h>


#include <TROOT.h> // for gROOT object
#include <TMath.h>
#include <TMatrixD.h>
#include <TCanvas.h>
#include <TGraph.h>
#include <TAxis.h>
#include <TRandom3.h>
#include <TFile.h>
#include <TTree.h>
#include <TBranch.h>
#include <TClonesArray.h>

//include other classes.h:
#include "digplane.h"
#include "digadc.h"


using namespace std;

//==============================================================================
ClassImp(DIGReadoutmap)
//______________________________________________________________________________
//  
DIGReadoutmap::DIGReadoutmap()  
{
  fNpixels=0;
  //
  // default constructor
  //
}  
//______________________________________________________________________________
//  
DIGReadoutmap::DIGReadoutmap(Int_t Npixels)  
{
  fNpixels = Npixels;
  fPixelMap.resize(fNpixels);
  fAnalogChargeMap.resize(fNpixels);
  fDigitalChargeMap.resize(fNpixels);
}  
//______________________________________________________________________________
//  
DIGReadoutmap::~DIGReadoutmap() {  
  //
  // virtual destructor

}
//______________________________________________________________________________
//  
DIGReadoutmap::DIGReadoutmap(DIGReadoutmap & adigreadoutmap)  : TObject()
{
  //copy constructor:
  fNpixels = adigreadoutmap.GetNpixels();
  fPixelMap.resize(fNpixels);
  fAnalogChargeMap.resize(fNpixels);
  fDigitalChargeMap.resize(fNpixels);
  for (Int_t i=0 ; i<fNpixels ; i++){
    fPixelMap[i] = adigreadoutmap.GetPixelMap()[i];
    fAnalogChargeMap[i] = adigreadoutmap.GetAnalogCharge()[i];
    fDigitalChargeMap[i] = adigreadoutmap.GetDigitalCharge()[i];
  }
}
//______________________________________________________________________________
//  
void DIGReadoutmap::Clear(const Option_t *) 
{
  //  delete pointers.  fDIGParticleArray->Clear("C");

}
//______________________________________________________________________________
//  
void DIGReadoutmap::PrintInfo() {
  std::cout<<"---------DIGReadoutmap properties------------- "<<endl;
  std::cout<<fNpixels<<" fNpixels map analog digital "<<endl;
  if(fNpixels>0){
    std::cout<<" size vectors "<<  fPixelMap.size()<<" "<<fAnalogChargeMap.size()<<" "<<fDigitalChargeMap.size()<<endl;
    for (Int_t i=0 ; i<fNpixels ; i++){
      std::cout<<i<<" "<<fPixelMap[i]<<" "<<fAnalogChargeMap[i]<<" "<<fDigitalChargeMap[i]<<endl;
    } 
  }
  std::cout<<"---------END OF DIGReadoutmap properties------------- "<<endl;
}
//______________________________________________________________________________
//  
void DIGReadoutmap::PrintOuput(Int_t Nx ,Int_t Ny) {
  std::cout<<"---------DIGReadoutmap PrintOuput------------- "<<endl;
  std::cout<<fNpixels<<" fNpixels  "<<endl;
  if(fNpixels>0){    
    std::cout<<" size vectors "<<  fPixelMap.size()<<" "<<fAnalogChargeMap.size()<<" "<<fDigitalChargeMap.size()<<endl;
    for (Int_t iy=0 ; iy<Ny ; iy++){
      for (Int_t ix=0 ; ix<Nx ; ix++){
	//search pixel:
	Int_t Npixel = ix+Nx*iy;
	Bool_t found = false;
	Int_t j=0;
	while((!found)&&(j<fNpixels)){
	  if(Npixel==fPixelMap[j]){
	    found=true;
	    cout<<" "<<fDigitalChargeMap[j];
	  }else{
	    j++;
	  }
	}
	if(!found){
	  cout<<" -";
	}
      }
      cout<<endl;
    }
  }
  
  std::cout<<"---------END OF DIGReadoutmap PrintOuput------------- "<<endl;
}
//______________________________________________________________________________
//  
void DIGReadoutmap::AddPixel(Float_t AnalogCharge, Int_t PixelNumber) {
  fNpixels++;
  fPixelMap.push_back(PixelNumber);
  fAnalogChargeMap.push_back(AnalogCharge);
  fDigitalChargeMap.push_back(0);
}
//______________________________________________________________________________
//  
void DIGReadoutmap::UpdatePixel(Float_t AnalogCharge, Int_t PixelNumber) {
  Bool_t found = false;
  Int_t i=0;
  while((!found)&&(i<fNpixels)){
    if(PixelNumber==fPixelMap[i]){
      found=true;
      fAnalogChargeMap[i]+=AnalogCharge;
    }
    i++;
  }
  if(!found){
    AddPixel(AnalogCharge, PixelNumber);
  } 
}

//______________________________________________________________________________
//  
void DIGReadoutmap::AnalogToDigitalconversion(DIGADC *myDIGADC,  DIGPlane *myDIGPlane ){
  Double_t Noisefix = myDIGPlane->GetNoiseElectrons();
  if(Noisefix<=0.0){
    std::cout <<"<---- DIGReadoutmap::AnalogToDigitalconversion --->"<<endl;
    std::cout<<"WARNING negative or null Noise is not physical, please correct the input file"<<endl; 
    Noisefix = 1.0;
  }
  for (Int_t i = 0; i < fNpixels ; i++){
    if (fAnalogChargeMap[i]<=0.0){
      fDigitalChargeMap[i]=0;
    }else{
      Bool_t thresholdfound = false;
      Int_t ithres = 0;      
      fDigitalChargeMap[i]=0;
      while((thresholdfound==false)&&(ithres< (myDIGADC->GetNThresholds()) )){
	if( (fAnalogChargeMap[i]/Noisefix) < myDIGADC->GetADC_thresholds()[ithres] ){
	  thresholdfound = true;
	}else{
	  fDigitalChargeMap[i]++;
	  ithres++;
	}
      }
    }
  }

}
//______________________________________________________________________________
//   
 digreadoutmap.cxx:1
 digreadoutmap.cxx:2
 digreadoutmap.cxx:3
 digreadoutmap.cxx:4
 digreadoutmap.cxx:5
 digreadoutmap.cxx:6
 digreadoutmap.cxx:7
 digreadoutmap.cxx:8
 digreadoutmap.cxx:9
 digreadoutmap.cxx:10
 digreadoutmap.cxx:11
 digreadoutmap.cxx:12
 digreadoutmap.cxx:13
 digreadoutmap.cxx:14
 digreadoutmap.cxx:15
 digreadoutmap.cxx:16
 digreadoutmap.cxx:17
 digreadoutmap.cxx:18
 digreadoutmap.cxx:19
 digreadoutmap.cxx:20
 digreadoutmap.cxx:21
 digreadoutmap.cxx:22
 digreadoutmap.cxx:23
 digreadoutmap.cxx:24
 digreadoutmap.cxx:25
 digreadoutmap.cxx:26
 digreadoutmap.cxx:27
 digreadoutmap.cxx:28
 digreadoutmap.cxx:29
 digreadoutmap.cxx:30
 digreadoutmap.cxx:31
 digreadoutmap.cxx:32
 digreadoutmap.cxx:33
 digreadoutmap.cxx:34
 digreadoutmap.cxx:35
 digreadoutmap.cxx:36
 digreadoutmap.cxx:37
 digreadoutmap.cxx:38
 digreadoutmap.cxx:39
 digreadoutmap.cxx:40
 digreadoutmap.cxx:41
 digreadoutmap.cxx:42
 digreadoutmap.cxx:43
 digreadoutmap.cxx:44
 digreadoutmap.cxx:45
 digreadoutmap.cxx:46
 digreadoutmap.cxx:47
 digreadoutmap.cxx:48
 digreadoutmap.cxx:49
 digreadoutmap.cxx:50
 digreadoutmap.cxx:51
 digreadoutmap.cxx:52
 digreadoutmap.cxx:53
 digreadoutmap.cxx:54
 digreadoutmap.cxx:55
 digreadoutmap.cxx:56
 digreadoutmap.cxx:57
 digreadoutmap.cxx:58
 digreadoutmap.cxx:59
 digreadoutmap.cxx:60
 digreadoutmap.cxx:61
 digreadoutmap.cxx:62
 digreadoutmap.cxx:63
 digreadoutmap.cxx:64
 digreadoutmap.cxx:65
 digreadoutmap.cxx:66
 digreadoutmap.cxx:67
 digreadoutmap.cxx:68
 digreadoutmap.cxx:69
 digreadoutmap.cxx:70
 digreadoutmap.cxx:71
 digreadoutmap.cxx:72
 digreadoutmap.cxx:73
 digreadoutmap.cxx:74
 digreadoutmap.cxx:75
 digreadoutmap.cxx:76
 digreadoutmap.cxx:77
 digreadoutmap.cxx:78
 digreadoutmap.cxx:79
 digreadoutmap.cxx:80
 digreadoutmap.cxx:81
 digreadoutmap.cxx:82
 digreadoutmap.cxx:83
 digreadoutmap.cxx:84
 digreadoutmap.cxx:85
 digreadoutmap.cxx:86
 digreadoutmap.cxx:87
 digreadoutmap.cxx:88
 digreadoutmap.cxx:89
 digreadoutmap.cxx:90
 digreadoutmap.cxx:91
 digreadoutmap.cxx:92
 digreadoutmap.cxx:93
 digreadoutmap.cxx:94
 digreadoutmap.cxx:95
 digreadoutmap.cxx:96
 digreadoutmap.cxx:97
 digreadoutmap.cxx:98
 digreadoutmap.cxx:99
 digreadoutmap.cxx:100
 digreadoutmap.cxx:101
 digreadoutmap.cxx:102
 digreadoutmap.cxx:103
 digreadoutmap.cxx:104
 digreadoutmap.cxx:105
 digreadoutmap.cxx:106
 digreadoutmap.cxx:107
 digreadoutmap.cxx:108
 digreadoutmap.cxx:109
 digreadoutmap.cxx:110
 digreadoutmap.cxx:111
 digreadoutmap.cxx:112
 digreadoutmap.cxx:113
 digreadoutmap.cxx:114
 digreadoutmap.cxx:115
 digreadoutmap.cxx:116
 digreadoutmap.cxx:117
 digreadoutmap.cxx:118
 digreadoutmap.cxx:119
 digreadoutmap.cxx:120
 digreadoutmap.cxx:121
 digreadoutmap.cxx:122
 digreadoutmap.cxx:123
 digreadoutmap.cxx:124
 digreadoutmap.cxx:125
 digreadoutmap.cxx:126
 digreadoutmap.cxx:127
 digreadoutmap.cxx:128
 digreadoutmap.cxx:129
 digreadoutmap.cxx:130
 digreadoutmap.cxx:131
 digreadoutmap.cxx:132
 digreadoutmap.cxx:133
 digreadoutmap.cxx:134
 digreadoutmap.cxx:135
 digreadoutmap.cxx:136
 digreadoutmap.cxx:137
 digreadoutmap.cxx:138
 digreadoutmap.cxx:139
 digreadoutmap.cxx:140
 digreadoutmap.cxx:141
 digreadoutmap.cxx:142
 digreadoutmap.cxx:143
 digreadoutmap.cxx:144
 digreadoutmap.cxx:145
 digreadoutmap.cxx:146
 digreadoutmap.cxx:147
 digreadoutmap.cxx:148
 digreadoutmap.cxx:149
 digreadoutmap.cxx:150
 digreadoutmap.cxx:151
 digreadoutmap.cxx:152
 digreadoutmap.cxx:153
 digreadoutmap.cxx:154
 digreadoutmap.cxx:155
 digreadoutmap.cxx:156
 digreadoutmap.cxx:157
 digreadoutmap.cxx:158
 digreadoutmap.cxx:159
 digreadoutmap.cxx:160
 digreadoutmap.cxx:161
 digreadoutmap.cxx:162
 digreadoutmap.cxx:163
 digreadoutmap.cxx:164
 digreadoutmap.cxx:165
 digreadoutmap.cxx:166
 digreadoutmap.cxx:167
 digreadoutmap.cxx:168
 digreadoutmap.cxx:169
 digreadoutmap.cxx:170
 digreadoutmap.cxx:171
 digreadoutmap.cxx:172
 digreadoutmap.cxx:173
 digreadoutmap.cxx:174
 digreadoutmap.cxx:175
 digreadoutmap.cxx:176
 digreadoutmap.cxx:177
 digreadoutmap.cxx:178
 digreadoutmap.cxx:179
 digreadoutmap.cxx:180
 digreadoutmap.cxx:181
 digreadoutmap.cxx:182