ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

//----------------------------------------------------------------------------
//  Author:   Marian Ivanov
//
//  Implementation of class AliH2F
//
//-----------------------------------------------------------------------------

#include <TClonesArray.h>
#include <TMath.h>
#include <TRandom.h>

#include "AliH2F.h"


ClassImp(AliH2F)
//***********************************************************************
//***********************************************************************
//***********************************************************************
//***********************************************************************
AliH2F::AliH2F():TH2F() 
{
  //
 
}
AliH2F::AliH2F(const Text_t *name,const Text_t *title,
		       Int_t nbinsx,Axis_t xlow,Axis_t xup
		       ,Int_t nbinsy,Axis_t ylow,Axis_t yup):
  TH2F(name,title,nbinsx,xlow,xup
       ,nbinsy,ylow,yup)
{
  //
  
}
     
AliH2F::~AliH2F() 
{
  //
}

AliH2F::AliH2F(const AliH2F &his) :
  TH2F(his)
{
  //
  
}

AliH2F & AliH2F::operator = (const AliH2F & /*his*/) 
{
  //
  return *this;
}

/*
TClonesArray * AliH2F::FindPeaks(Float_t threshold, Float_t noise)
{
  //find peaks and write it in form of AliTPCcluster to array
    
  //firstly we need to create object for cluster finding
  //and fill it with contents of histogram
  AliTPCClusterFinder cfinder;
  cfinder.SetThreshold(threshold);
  cfinder.SetNoise(noise);
  cfinder.GetHisto(this);
  return cfinder.FindPeaks3();
}
*/

void AliH2F::ClearSpectrum()
{
  //clera histogram
  Int_t dimx =  fXaxis.GetNbins();
  Int_t dimy =  fYaxis.GetNbins();
  for (Int_t i = 0 ;i<dimx;i++)
    for (Int_t j = 0 ;j<dimy;j++) 
      {
	SetBinContent(GetBin(i,j),0);
	SetBinError(GetBin(i,j),0);
      }
}


void AliH2F::AddNoise(Float_t sn)
{
  // add gauss noise with sigma sn
  Int_t dimx =  fXaxis.GetNbins();
  Int_t dimy =  fYaxis.GetNbins();
  for (Int_t i = 0 ;i<dimx;i++)
    for (Int_t j = 0 ;j<dimy;j++) 
      {
        Float_t noise = gRandom->Gaus(0,sn);
	Float_t oldv  =GetBinContent(GetBin(i,j));
	Float_t olds  =GetBinError(GetBin(i,j));
	if (noise >0)
	  {
	    SetBinContent(GetBin(i,j),noise+oldv);
	    SetBinError(GetBin(i,j),TMath::Sqrt((noise*noise+olds*olds)));
	  }
      }
}
void AliH2F::AddGauss(Float_t x, Float_t y, 
			  Float_t sx, Float_t sy, Float_t max)
{  
  //transform to histogram coordinata  
  Int_t dimx =  fXaxis.GetNbins();
  Int_t dimy =  fYaxis.GetNbins();
  Float_t dx =(GetXaxis()->GetXmax()-GetXaxis()->GetXmin())/Float_t(dimx);
  Float_t dy =(GetYaxis()->GetXmax()-GetYaxis()->GetXmin())/Float_t(dimy);  
  //  x=(x-GetXaxis()->GetXmin())/dx;
  //y=(y-GetYaxis()->GetXmin())/dy;
  sx/=dx;
  sy/=dy;

  
  for (Int_t i = 0 ;i<dimx;i++)
    for (Int_t j = 0 ;j<dimy;j++) 
      {
	Float_t x2 =GetXaxis()->GetBinCenter(i+1);
	Float_t y2 =GetYaxis()->GetBinCenter(j+1);
	Float_t dx2 = (x2-x)*(x2-x);
        Float_t dy2 = (y2-y)*(y2-y);
        Float_t amp =max*exp(-(dx2/(2*sx*sx)+dy2/(2*sy*sy)));
	//Float_t oldv  =GetBinContent(GetBin(i+1,j+1));
	//	SetBinContent(GetBin(i+1,j+1),amp+oldv);
	Fill(x2,y2,amp);
      }
}

void AliH2F::ClearUnderTh(Int_t threshold)
{
  //clear histogram for bin under threshold
  Int_t dimx =  fXaxis.GetNbins();
  Int_t dimy =  fYaxis.GetNbins();
  for (Int_t i = 0 ;i<=dimx;i++)
    for (Int_t j = 0 ;j<=dimy;j++) 
      {	
	Float_t oldv  =GetBinContent(GetBin(i,j));
        if (oldv <threshold)
	  SetBinContent(GetBin(i,j),0);
      }
}

void AliH2F::Round()
{
  //round float to integer 
  Int_t dimx =  fXaxis.GetNbins();
  Int_t dimy =  fYaxis.GetNbins();
  for (Int_t i = 0 ;i<=dimx;i++)
    for (Int_t j = 0 ;j<=dimy;j++) 
      {	
	Float_t oldv  =GetBinContent(GetBin(i,j));
        oldv=(Int_t)oldv;
	SetBinContent(GetBin(i,j),oldv);
      }
}



AliH2F *AliH2F::GetSubrange2d(Float_t xmin, Float_t xmax, 
				      Float_t ymin, Float_t ymax)
{
  //this function return pointer to the new created 
  //histogram which is subhistogram of the 
  //calculate number
  //subhistogram range must be inside histogram

  if (xmax<=xmin) {
    xmin=fXaxis.GetXmin();
    xmax=fXaxis.GetXmax();
  }
  if (ymax<=ymin) {
     ymin=fYaxis.GetXmin();
     ymax=fYaxis.GetXmax();
  }

  Int_t nx = Int_t((xmax-xmin)/(fXaxis.GetXmax()-fXaxis.GetXmin())  * 
		   Float_t(fXaxis.GetNbins()));
  Int_t ny = Int_t((ymax-ymin)/(fYaxis.GetXmax()-fYaxis.GetXmin())  * 
		   Float_t(fYaxis.GetNbins()));
  TString  t1 = fName ;
  TString  t2 = fTitle ;
  t1+="_subrange";
  t2+="_subrange";
  const Text_t *ktt1 = t1;
  const Text_t *ktt2 = t2;
  
  AliH2F * sub = new AliH2F(ktt1,ktt2,nx,xmin,xmax,ny,ymin,ymax); 
  
  Int_t i1 = Int_t( Float_t(fXaxis.GetNbins())*(xmin-fXaxis.GetXmin())/
		    (fXaxis.GetXmax()-fXaxis.GetXmin()) ) ;
  Int_t i2 = Int_t( Float_t(fYaxis.GetNbins())*(ymin-fYaxis.GetXmin())/
		    (fYaxis.GetXmax()-fYaxis.GetXmin()) ) ;
  for (Int_t i=0;i<nx;i++)
    for (Int_t j=0;j<ny;j++)
      {
	Int_t index1 = GetBin(i1+i,i2+j);
	//        Int_t index2 = sub->GetBin(i,j);
        Float_t val = GetBinContent(index1);
	//        sub->SetBinContent(index2,val);
	//        Float_t err = GetBinError(index1);
        //sub->SetBinError(index2,GetBinError(index1));
        sub->SetBinContent(GetBin(i,j),val);
      }  
   return sub;
}

TH1F *AliH2F::GetAmplitudes(Float_t zmin, Float_t zmax, Float_t th, Float_t xmin, Float_t xmax, 
				      Float_t ymin, Float_t ymax)
{
  //this function return pointer to the new created 
  //histogram which is subhistogram of the 
  //calculate number
  //subhistogram range must be inside histogram
 
  if (xmax<=xmin) {
    xmin=fXaxis.GetXmin();
    xmax=fXaxis.GetXmax();
  }
  if (ymax<=ymin) {
     ymin=fYaxis.GetXmin();
     ymax=fYaxis.GetXmax();
  }
  Int_t nx = Int_t((xmax-xmin)/(fXaxis.GetXmax()-fXaxis.GetXmin())  * 
		   Float_t(fXaxis.GetNbins()));
  Int_t ny = Int_t((ymax-ymin)/(fYaxis.GetXmax()-fYaxis.GetXmin())  * 
		   Float_t(fYaxis.GetNbins()));
  TString  t1 = fName ;
  TString  t2 = fTitle ;
  t1+="_amplitudes";
  t2+="_amplitudes";
  const  Text_t *ktt1 = t1;
  const Text_t *ktt2 = t2;
  
  TH1F * h = new TH1F(ktt1,ktt2,100,zmin,zmax); 
  
  Int_t i1 = Int_t( Float_t(fXaxis.GetNbins())*(xmin-fXaxis.GetXmin())/
		    (fXaxis.GetXmax()-fXaxis.GetXmin()) ) ;
  Int_t i2 = Int_t( Float_t(fYaxis.GetNbins())*(ymin-fYaxis.GetXmin())/
		    (fYaxis.GetXmax()-fYaxis.GetXmin()) ) ;
  for (Int_t i=0;i<nx;i++)
    for (Int_t j=0;j<ny;j++)
      {
	Int_t index1 = GetBin(i1+i,i2+j);
        Float_t val = GetBinContent(index1);
        if (val>th) h->Fill(val);
      }  
   return h;
}

Float_t   AliH2F::GetOccupancy(Float_t th , Float_t xmin, Float_t xmax, 
			     Float_t ymin, Float_t ymax)
{
  //this function return pointer to the new created 
  //histogram which is subhistogram of the 
  //calculate number
  //subhistogram range must be inside histogram
 
  if (xmax<=xmin) {
    xmin=fXaxis.GetXmin();
    xmax=fXaxis.GetXmax();
  }
  if (ymax<=ymin) {
     ymin=fYaxis.GetXmin();
     ymax=fYaxis.GetXmax();
  }
  Int_t nx = Int_t((xmax-xmin)/(fXaxis.GetXmax()-fXaxis.GetXmin())  * 
		   Float_t(fXaxis.GetNbins()));
  Int_t ny = Int_t((ymax-ymin)/(fYaxis.GetXmax()-fYaxis.GetXmin())  * 
		   Float_t(fYaxis.GetNbins()));
 
  Int_t over =0; 
  Int_t i1 = Int_t( Float_t(fXaxis.GetNbins())*(xmin-fXaxis.GetXmin())/
		    (fXaxis.GetXmax()-fXaxis.GetXmin()) ) ;
  Int_t i2 = Int_t( Float_t(fYaxis.GetNbins())*(ymin-fYaxis.GetXmin())/
		    (fYaxis.GetXmax()-fYaxis.GetXmin()) ) ;
  for (Int_t i=0;i<nx;i++)
    for (Int_t j=0;j<ny;j++)
      {
	Int_t index1 = GetBin(i1+i,i2+j);
        Float_t val = GetBinContent(index1);
        if (val>th) over++;
      }  
  Int_t  all = nx*ny;
  if (all>0)  return Float_t(over)/Float_t(all);
  else 
    return 0;
}
 AliH2F.cxx:1
 AliH2F.cxx:2
 AliH2F.cxx:3
 AliH2F.cxx:4
 AliH2F.cxx:5
 AliH2F.cxx:6
 AliH2F.cxx:7
 AliH2F.cxx:8
 AliH2F.cxx:9
 AliH2F.cxx:10
 AliH2F.cxx:11
 AliH2F.cxx:12
 AliH2F.cxx:13
 AliH2F.cxx:14
 AliH2F.cxx:15
 AliH2F.cxx:16
 AliH2F.cxx:17
 AliH2F.cxx:18
 AliH2F.cxx:19
 AliH2F.cxx:20
 AliH2F.cxx:21
 AliH2F.cxx:22
 AliH2F.cxx:23
 AliH2F.cxx:24
 AliH2F.cxx:25
 AliH2F.cxx:26
 AliH2F.cxx:27
 AliH2F.cxx:28
 AliH2F.cxx:29
 AliH2F.cxx:30
 AliH2F.cxx:31
 AliH2F.cxx:32
 AliH2F.cxx:33
 AliH2F.cxx:34
 AliH2F.cxx:35
 AliH2F.cxx:36
 AliH2F.cxx:37
 AliH2F.cxx:38
 AliH2F.cxx:39
 AliH2F.cxx:40
 AliH2F.cxx:41
 AliH2F.cxx:42
 AliH2F.cxx:43
 AliH2F.cxx:44
 AliH2F.cxx:45
 AliH2F.cxx:46
 AliH2F.cxx:47
 AliH2F.cxx:48
 AliH2F.cxx:49
 AliH2F.cxx:50
 AliH2F.cxx:51
 AliH2F.cxx:52
 AliH2F.cxx:53
 AliH2F.cxx:54
 AliH2F.cxx:55
 AliH2F.cxx:56
 AliH2F.cxx:57
 AliH2F.cxx:58
 AliH2F.cxx:59
 AliH2F.cxx:60
 AliH2F.cxx:61
 AliH2F.cxx:62
 AliH2F.cxx:63
 AliH2F.cxx:64
 AliH2F.cxx:65
 AliH2F.cxx:66
 AliH2F.cxx:67
 AliH2F.cxx:68
 AliH2F.cxx:69
 AliH2F.cxx:70
 AliH2F.cxx:71
 AliH2F.cxx:72
 AliH2F.cxx:73
 AliH2F.cxx:74
 AliH2F.cxx:75
 AliH2F.cxx:76
 AliH2F.cxx:77
 AliH2F.cxx:78
 AliH2F.cxx:79
 AliH2F.cxx:80
 AliH2F.cxx:81
 AliH2F.cxx:82
 AliH2F.cxx:83
 AliH2F.cxx:84
 AliH2F.cxx:85
 AliH2F.cxx:86
 AliH2F.cxx:87
 AliH2F.cxx:88
 AliH2F.cxx:89
 AliH2F.cxx:90
 AliH2F.cxx:91
 AliH2F.cxx:92
 AliH2F.cxx:93
 AliH2F.cxx:94
 AliH2F.cxx:95
 AliH2F.cxx:96
 AliH2F.cxx:97
 AliH2F.cxx:98
 AliH2F.cxx:99
 AliH2F.cxx:100
 AliH2F.cxx:101
 AliH2F.cxx:102
 AliH2F.cxx:103
 AliH2F.cxx:104
 AliH2F.cxx:105
 AliH2F.cxx:106
 AliH2F.cxx:107
 AliH2F.cxx:108
 AliH2F.cxx:109
 AliH2F.cxx:110
 AliH2F.cxx:111
 AliH2F.cxx:112
 AliH2F.cxx:113
 AliH2F.cxx:114
 AliH2F.cxx:115
 AliH2F.cxx:116
 AliH2F.cxx:117
 AliH2F.cxx:118
 AliH2F.cxx:119
 AliH2F.cxx:120
 AliH2F.cxx:121
 AliH2F.cxx:122
 AliH2F.cxx:123
 AliH2F.cxx:124
 AliH2F.cxx:125
 AliH2F.cxx:126
 AliH2F.cxx:127
 AliH2F.cxx:128
 AliH2F.cxx:129
 AliH2F.cxx:130
 AliH2F.cxx:131
 AliH2F.cxx:132
 AliH2F.cxx:133
 AliH2F.cxx:134
 AliH2F.cxx:135
 AliH2F.cxx:136
 AliH2F.cxx:137
 AliH2F.cxx:138
 AliH2F.cxx:139
 AliH2F.cxx:140
 AliH2F.cxx:141
 AliH2F.cxx:142
 AliH2F.cxx:143
 AliH2F.cxx:144
 AliH2F.cxx:145
 AliH2F.cxx:146
 AliH2F.cxx:147
 AliH2F.cxx:148
 AliH2F.cxx:149
 AliH2F.cxx:150
 AliH2F.cxx:151
 AliH2F.cxx:152
 AliH2F.cxx:153
 AliH2F.cxx:154
 AliH2F.cxx:155
 AliH2F.cxx:156
 AliH2F.cxx:157
 AliH2F.cxx:158
 AliH2F.cxx:159
 AliH2F.cxx:160
 AliH2F.cxx:161
 AliH2F.cxx:162
 AliH2F.cxx:163
 AliH2F.cxx:164
 AliH2F.cxx:165
 AliH2F.cxx:166
 AliH2F.cxx:167
 AliH2F.cxx:168
 AliH2F.cxx:169
 AliH2F.cxx:170
 AliH2F.cxx:171
 AliH2F.cxx:172
 AliH2F.cxx:173
 AliH2F.cxx:174
 AliH2F.cxx:175
 AliH2F.cxx:176
 AliH2F.cxx:177
 AliH2F.cxx:178
 AliH2F.cxx:179
 AliH2F.cxx:180
 AliH2F.cxx:181
 AliH2F.cxx:182
 AliH2F.cxx:183
 AliH2F.cxx:184
 AliH2F.cxx:185
 AliH2F.cxx:186
 AliH2F.cxx:187
 AliH2F.cxx:188
 AliH2F.cxx:189
 AliH2F.cxx:190
 AliH2F.cxx:191
 AliH2F.cxx:192
 AliH2F.cxx:193
 AliH2F.cxx:194
 AliH2F.cxx:195
 AliH2F.cxx:196
 AliH2F.cxx:197
 AliH2F.cxx:198
 AliH2F.cxx:199
 AliH2F.cxx:200
 AliH2F.cxx:201
 AliH2F.cxx:202
 AliH2F.cxx:203
 AliH2F.cxx:204
 AliH2F.cxx:205
 AliH2F.cxx:206
 AliH2F.cxx:207
 AliH2F.cxx:208
 AliH2F.cxx:209
 AliH2F.cxx:210
 AliH2F.cxx:211
 AliH2F.cxx:212
 AliH2F.cxx:213
 AliH2F.cxx:214
 AliH2F.cxx:215
 AliH2F.cxx:216
 AliH2F.cxx:217
 AliH2F.cxx:218
 AliH2F.cxx:219
 AliH2F.cxx:220
 AliH2F.cxx:221
 AliH2F.cxx:222
 AliH2F.cxx:223
 AliH2F.cxx:224
 AliH2F.cxx:225
 AliH2F.cxx:226
 AliH2F.cxx:227
 AliH2F.cxx:228
 AliH2F.cxx:229
 AliH2F.cxx:230
 AliH2F.cxx:231
 AliH2F.cxx:232
 AliH2F.cxx:233
 AliH2F.cxx:234
 AliH2F.cxx:235
 AliH2F.cxx:236
 AliH2F.cxx:237
 AliH2F.cxx:238
 AliH2F.cxx:239
 AliH2F.cxx:240
 AliH2F.cxx:241
 AliH2F.cxx:242
 AliH2F.cxx:243
 AliH2F.cxx:244
 AliH2F.cxx:245
 AliH2F.cxx:246
 AliH2F.cxx:247
 AliH2F.cxx:248
 AliH2F.cxx:249
 AliH2F.cxx:250
 AliH2F.cxx:251
 AliH2F.cxx:252
 AliH2F.cxx:253
 AliH2F.cxx:254
 AliH2F.cxx:255
 AliH2F.cxx:256
 AliH2F.cxx:257
 AliH2F.cxx:258
 AliH2F.cxx:259
 AliH2F.cxx:260
 AliH2F.cxx:261
 AliH2F.cxx:262
 AliH2F.cxx:263
 AliH2F.cxx:264
 AliH2F.cxx:265
 AliH2F.cxx:266
 AliH2F.cxx:267
 AliH2F.cxx:268
 AliH2F.cxx:269
 AliH2F.cxx:270
 AliH2F.cxx:271
 AliH2F.cxx:272
 AliH2F.cxx:273
 AliH2F.cxx:274
 AliH2F.cxx:275
 AliH2F.cxx:276
 AliH2F.cxx:277
 AliH2F.cxx:278
 AliH2F.cxx:279
 AliH2F.cxx:280
 AliH2F.cxx:281
 AliH2F.cxx:282
 AliH2F.cxx:283
 AliH2F.cxx:284
 AliH2F.cxx:285
 AliH2F.cxx:286
 AliH2F.cxx:287
 AliH2F.cxx:288
 AliH2F.cxx:289
 AliH2F.cxx:290
 AliH2F.cxx:291
 AliH2F.cxx:292
 AliH2F.cxx:293
 AliH2F.cxx:294
 AliH2F.cxx:295
 AliH2F.cxx:296
 AliH2F.cxx:297
 AliH2F.cxx:298
 AliH2F.cxx:299
 AliH2F.cxx:300
 AliH2F.cxx:301
 AliH2F.cxx:302
 AliH2F.cxx:303