ROOT logo
///////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                           //
//     DIGEvent                                                                              //
//                                                                                           //
//        Event class                                                                        //
//        -> particle list, cluster list and digital output of the plane ( fDIGReadoutmap)   //
//                                                                                           //
//                                                                                           //
//                                                                                           //
//                                                                                           //
//                                                                                           //
///////////////////////////////////////////////////////////////////////////////////////////////
#include <digevent.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 "digparticle.h"
#include "digcluster.h"
#include "digreadoutmap.h"
#include "digplane.h"

using namespace std;

//==============================================================================
ClassImp(DIGEvent)
DIGEvent::DIGEvent()  
{
  //
  // default constructor
  //
  fNParticles=0;
  fDIGParticleArray=0;
  fDIGParticleArray  = new TClonesArray("DIGParticle", 10);
  fNClusters=0;
  fDIGClusterArray=0;
  fDIGClusterArray  = new TClonesArray("DIGCluster", 10);
  fDIGReadoutmap= new DIGReadoutmap();
}
//______________________________________________________________________________
//  
DIGEvent::DIGEvent(DIGEvent & adigevent)  : TObject()
{

  //----copy the particle array
  TClonesArray *particleArray2 = adigevent.GetParticle();
  Int_t npart =adigevent.GetNParticles();
  for (Int_t ipart = 0; ipart < npart ; ipart++){
    DIGParticle *papa = 0;
    papa = (DIGParticle*)particleArray2->At(ipart);
    AddParticle(*papa);
    delete papa;
  }
  //----copy the cluster array
  TClonesArray *clusterArray2 = adigevent.GetCluster();
  Int_t nclus =adigevent.GetNClusters();
  for (Int_t iclus = 0; iclus < nclus ; iclus++){
    DIGCluster *clus = 0;
    clus = (DIGCluster*)clusterArray2->At(iclus);
    AddCluster(*clus);
    delete clus;
  }


  //----copy the read out map object:
  DIGReadoutmap &adigreadout = *(adigevent.GetReadoutmap());
  fDIGReadoutmap= new DIGReadoutmap(adigreadout);


  fConfigurationNumber =adigevent.GetConfigurationNumber();
}
//______________________________________________________________________________
//  
DIGEvent::~DIGEvent() { // 
  // virtual destructor
  //
  //  delete fLayers;
  fDIGParticleArray->Clear("C");
  delete fDIGReadoutmap;
  //  fDIGReadoutmap=0;
  fNParticles=0;

  fDIGClusterArray->Clear("C");
  fNClusters=0;

}
//______________________________________________________________________________
//  
void DIGEvent::Clear(const Option_t *) 
{
  fDIGParticleArray->Clear("C");
  delete fDIGReadoutmap;
  fNParticles=0;
  fDIGClusterArray->Clear("C");
  fNClusters=0;
}

//______________________________________________________________________________
//  

void DIGEvent::PrintInfo() {
  std::cout<<"---------------------------Event properties------------- "<<endl;
  TClonesArray *particules   = GetParticle();
  DIGParticle *apart;
  std::cout<<" number of particles "<<fNParticles<<" "<<particules->GetLast()+1<<endl;
  for (Int_t i=0 ; i<(particules->GetLast()+1) ; i++){
    apart = (DIGParticle*)particules->At(i);
    apart->PrintInfo();
  }
  if( fNParticles != (particules->GetLast()+1)){
    cout<< "DIGEvent::PrintInfo WARNING PROBLEM IN PARTICLES RECORDING "<<fNParticles<<" != "<<particules->GetLast()+1<<endl;
  }

  TClonesArray *clusters   = GetCluster();
  DIGCluster *acluster;
  std::cout<<" number of clusters "<<fNClusters<<" "<<clusters->GetLast()+1<<endl;
  for (Int_t i=0 ; i<(clusters->GetLast()+1) ; i++){
    acluster = (DIGCluster*)clusters->At(i);
    acluster->PrintInfo();
  }
  if( fNClusters != (clusters->GetLast()+1)){
    cout<< "DIGEvent::PrintInfo WARNING PROBLEM IN CLUSTERS RECORDING "<<fNClusters<<" != "<<clusters->GetLast()+1<<endl;
  }

  GetReadoutmap()->PrintInfo();
}
//______________________________________________________________________________
//   
void  DIGEvent::SetNParticles(Int_t Nparticles){
  fNParticles = Nparticles;
}
//______________________________________________________________________________
//   
void DIGEvent::SetNClusters(Int_t NClusters){
  fNClusters=NClusters;
}
//______________________________________________________________________________
//   
void DIGEvent::SetConfigurationNumber(Int_t ConfigurationNumber){
  fConfigurationNumber = ConfigurationNumber;
}
//______________________________________________________________________________
//   
void DIGEvent::AddParticle(DIGParticle& particle)
{
  // fNParticles++;
   TClonesArray &particleArray = *fDIGParticleArray;
   new(particleArray[fNParticles++]) DIGParticle(particle); // utilise le copieur



}
//______________________________________________________________________________
//   
void DIGEvent::AddCluster(DIGCluster& cluster)
{
   TClonesArray &clusterArray = *fDIGClusterArray;
   new(clusterArray[fNClusters++]) DIGCluster(cluster); // utilise le copieur
}
//______________________________________________________________________________
//   
void DIGEvent::BuildTrueClusters(DIGPlane *myDIGPlane){
  // this method builds "monte carlo truth" clusters.
  // In others words, it takes the generated charge from the particles to build the clusters.
  // Its purpose is to compare other algorithms with ideal clustering reconstruction.

  TClonesArray *particules   = GetParticle();
  if( GetNParticles() != (particules->GetLast()+1)){
    cout<< "DIGEvent::BuildTrueClusters   WARNING PROBLEM IN PARTICLES RECORDING"<<endl;
  }



  DIGParticle *myparticle = 0;
  TClonesArray *particleArray = GetParticle();    
  DIGCluster *mycluster=0;
  for (Int_t i = 0; i < fNParticles ; i++){
    myparticle = (DIGParticle*)particleArray->At(i);
    //myparticle->PrintInfo();
    mycluster =  new DIGCluster();
    for (Int_t npix = 0; npix <  myparticle->GetNpixels() ; npix++){      
      if(myparticle->GetDigitalCharge()[npix]>0){
	mycluster->AddPixel(myparticle->GetDigitalCharge()[npix],myparticle->GetPixelMap()[npix]);
      }
    }
    mycluster->Compute_CoG(myDIGPlane);
    mycluster->Compute_SeedPixel(myDIGPlane);

    if(mycluster->GetNpixels()>0){
      //mycluster->PrintInfo();
    AddCluster(*mycluster); 
    }
  }

  TClonesArray *aclusterArray = GetCluster();    
  if(GetNClusters() != aclusterArray->GetLast()+1){
    cout<<" TEST cluster number "<<GetNClusters()<<" "<<aclusterArray->GetLast()+1<<endl;
  }
  delete mycluster;
}
//______________________________________________________________________________
//   

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