ROOT logo
//
// This class contains the secondary correction 
// for the central region
//
#include "AliCentralCorrSecondaryMap.h"
#include <TBrowser.h>
#include <TH2D.h>
#include <AliLog.h>
#include <iostream>

//____________________________________________________________________
AliCentralCorrSecondaryMap::AliCentralCorrSecondaryMap()
  : fArray(), 
    fVertexAxis(0,0,0)
{
  // 
  // Default constructor 
  //
  fArray.SetOwner(kTRUE);
  fArray.SetName("rings");
  fVertexAxis.SetName("vtxAxis");
  fVertexAxis.SetTitle("v_{z} [cm]");
  
}
//____________________________________________________________________
AliCentralCorrSecondaryMap::AliCentralCorrSecondaryMap(const 
					       AliCentralCorrSecondaryMap& o)
  : TObject(o), 
    fArray(o.fArray), 
    fVertexAxis(o.fVertexAxis.GetNbins(), o.fVertexAxis.GetXmin(), 
		o.fVertexAxis.GetXmax())
{
  // 
  // Copy constructor 
  // 
  // Parameters:
  //    o Object to copy from 
  //
  fVertexAxis.SetName("vtxAxis");
  fVertexAxis.SetTitle("v_{z} [cm]");
}
//____________________________________________________________________
AliCentralCorrSecondaryMap::~AliCentralCorrSecondaryMap()
{
  //
  // Destructor 
  // 
  //
  fArray.Clear();
}
//____________________________________________________________________
AliCentralCorrSecondaryMap&
AliCentralCorrSecondaryMap::operator=(const AliCentralCorrSecondaryMap& o)
{
  // 
  // Assignment operator 
  // 
  // Parameters:
  //    o Object to assign from 
  // 
  // Return:
  //    Reference to this object 
  //
  fArray        = o.fArray;
  SetVertexAxis(o.fVertexAxis);

  return *this;
}
//____________________________________________________________________
TH2D*
AliCentralCorrSecondaryMap::GetCorrection(Double_t v) const
{
  // 
  // Get the acceptance correction @f$ a_{r,v}@f$ 
  // 
  // Parameters:
  //    d  Detector number (1-3)
  //    r  Ring identifier (I or O)
  //    v  Primary interaction point @f$z@f$ coordinate
  // 
  // Return:
  //    The correction @f$ a_{r,v}@f$ 
  //
  Int_t b = FindVertexBin(v);
  if (b <= 0) return 0;
  return GetCorrection(UShort_t(b));
}
//____________________________________________________________________
TH2D*
AliCentralCorrSecondaryMap::GetCorrection(UShort_t b) const
{
  // 
  // Get the acceptance correction @f$ a_{r,v}@f$ 
  // 
  // Parameters:
  //    d  Detector number (1-3)
  //    r  Ring identifier (I or O)
  //    b  Bin corresponding to the primary interaction point 
  //           @f$z@f$ coordinate (1 based)
  // 
  // Return:
  //    The correction @f$ a_{r,v}@f$ 
  //
  
  TObject* o = fArray.At(b-1);
  if (!o) { 
    AliWarning(Form("No dead channels map found for SPD in vertex bin %d",
		    b));
    return 0;
  }
  return static_cast<TH2D*>(o);
}
  
//____________________________________________________________________
Int_t
AliCentralCorrSecondaryMap::FindVertexBin(Double_t v) const
{
  // 
  // Find the vertex bin that corresponds to the passed vertex 
  // 
  // Parameters:
  //    vertex The interaction points @f$z@f$-coordinate 
  // 
  // Return:
  //    Vertex bin in @f$[1,N_{\mbox{vertex}}]@f$ or negative if 
  // out of range 
  //
  if (fVertexAxis.GetNbins() <= 0) { 
    AliWarning("No vertex array defined");
    return 0;
  }
  Int_t bin = const_cast<TAxis&>(fVertexAxis).FindBin(v);
  if (bin <= 0 || bin > fVertexAxis.GetNbins()) { 
    AliWarning(Form("vertex %+8.4f out of range [%+8.4f,%+8.4f]",
		    v, fVertexAxis.GetXmin(), fVertexAxis.GetXmax()));
    return 0;
  }
  return bin;
}

//____________________________________________________________________
Bool_t
AliCentralCorrSecondaryMap::SetCorrection(UShort_t b, TH2D*  h) 
{
  // 
  // Set the acceptance correction @f$ a_{r,v}(\eta)@f$ 
  // Note, that the object takes ownership of the passed pointer.
  // 
  // Parameters:
  //    d    Detector number (1-3)
  //    r    Ring identifier (I or O)
  //    b    Bin corresponding to the primary interaction point 
  //             @f$z@f$ coordinate  (1 based)
  //    h    @f$ a_{r,v}(\eta)@f$ 
  // 
  // Return:
  //    true if operation succeeded 
  //
  
  if (b <= 0 || b > fVertexAxis.GetNbins()) { 
    AliWarning(Form("Vertex bin %3d out of range [1,%3d]", 
		    b, fVertexAxis.GetNbins()));
    return false;
  }
  h->SetName(Form("sec_vtxbin%03d", b));
  h->SetTitle(Form("Secondary correction [%+5.1f<v_{z}<%+5.1f]", 
		   fVertexAxis.GetBinLowEdge(b), 
		   fVertexAxis.GetBinUpEdge(b)));
  h->SetXTitle("#eta");
  h->SetYTitle("#varphi [radians]");
  h->SetZTitle("dN_{ch}/d#eta / #sum_{i} N_{ch,i}");
  h->SetFillStyle(3001);
  h->SetFillColor(kRed+1);
  h->SetMarkerStyle(20);
  h->SetMarkerColor(kRed+1);
  h->SetDirectory(0);
  h->SetStats(0);
  fArray.AddAtAndExpand(h, b-1);
  return kTRUE;
}
//____________________________________________________________________
Bool_t
AliCentralCorrSecondaryMap::SetCorrection(Double_t v, TH2D*  h) 
{
  // 
  // Set the acceptance correction @f$ a_{r,v}(\eta)@f$.
  // Note, that the object takes ownership of the passed pointer.
  // 
  // Parameters:
  //    d    Detector number (1-3)
  //    r    Ring identifier (I or O)
  //    v    Primary interaction point @f$z@f$ coordinate  
  //    h    @f$ a_{r,v}(\eta)@f$ 
  // 
  // Return:
  //    true if operation succeeded 
  //
  Int_t b = FindVertexBin(v);
  if (b <= 0 || b > fVertexAxis.GetNbins()) { 
    AliWarning(Form("Vertex %+8.4f out of range [%+8.4f,%+8.4f]", 
		    v, fVertexAxis.GetXmin(), fVertexAxis.GetXmax()));
    return false;
  }
  return SetCorrection( UShort_t(b), h);
}
//____________________________________________________________________
void
AliCentralCorrSecondaryMap::Browse(TBrowser* b)
{
  // 
  // Browse this object in the browser
  // 
  // Parameters:
  //    b 
  //
  b->Add(&fArray);
  b->Add(&fVertexAxis);
}
//____________________________________________________________________
void
AliCentralCorrSecondaryMap::Print(Option_t* /* option */) const
{
  // 
  // Print this object 
  // 
  // Parameters:
  //    option 
  //  
  std::cout << "  SecondaryMap correction\n" 
	    << "   # of vertex bins: "  << fVertexAxis.GetNbins() << "\n"
	    << "   Vertex range:     [" << fVertexAxis.GetXmin() 
	    << "," << fVertexAxis.GetXmax() << "]\n" 
	    << "   Histograms:\n"
	    << "    ";
  TIter next(&fArray);
  TObject* o = 0;
  while ((o = next())) std::cout << o->GetName() << " ";
  std::cout << std::endl;
}
    
//____________________________________________________________________
//
// EOF
//
 AliCentralCorrSecondaryMap.cxx:1
 AliCentralCorrSecondaryMap.cxx:2
 AliCentralCorrSecondaryMap.cxx:3
 AliCentralCorrSecondaryMap.cxx:4
 AliCentralCorrSecondaryMap.cxx:5
 AliCentralCorrSecondaryMap.cxx:6
 AliCentralCorrSecondaryMap.cxx:7
 AliCentralCorrSecondaryMap.cxx:8
 AliCentralCorrSecondaryMap.cxx:9
 AliCentralCorrSecondaryMap.cxx:10
 AliCentralCorrSecondaryMap.cxx:11
 AliCentralCorrSecondaryMap.cxx:12
 AliCentralCorrSecondaryMap.cxx:13
 AliCentralCorrSecondaryMap.cxx:14
 AliCentralCorrSecondaryMap.cxx:15
 AliCentralCorrSecondaryMap.cxx:16
 AliCentralCorrSecondaryMap.cxx:17
 AliCentralCorrSecondaryMap.cxx:18
 AliCentralCorrSecondaryMap.cxx:19
 AliCentralCorrSecondaryMap.cxx:20
 AliCentralCorrSecondaryMap.cxx:21
 AliCentralCorrSecondaryMap.cxx:22
 AliCentralCorrSecondaryMap.cxx:23
 AliCentralCorrSecondaryMap.cxx:24
 AliCentralCorrSecondaryMap.cxx:25
 AliCentralCorrSecondaryMap.cxx:26
 AliCentralCorrSecondaryMap.cxx:27
 AliCentralCorrSecondaryMap.cxx:28
 AliCentralCorrSecondaryMap.cxx:29
 AliCentralCorrSecondaryMap.cxx:30
 AliCentralCorrSecondaryMap.cxx:31
 AliCentralCorrSecondaryMap.cxx:32
 AliCentralCorrSecondaryMap.cxx:33
 AliCentralCorrSecondaryMap.cxx:34
 AliCentralCorrSecondaryMap.cxx:35
 AliCentralCorrSecondaryMap.cxx:36
 AliCentralCorrSecondaryMap.cxx:37
 AliCentralCorrSecondaryMap.cxx:38
 AliCentralCorrSecondaryMap.cxx:39
 AliCentralCorrSecondaryMap.cxx:40
 AliCentralCorrSecondaryMap.cxx:41
 AliCentralCorrSecondaryMap.cxx:42
 AliCentralCorrSecondaryMap.cxx:43
 AliCentralCorrSecondaryMap.cxx:44
 AliCentralCorrSecondaryMap.cxx:45
 AliCentralCorrSecondaryMap.cxx:46
 AliCentralCorrSecondaryMap.cxx:47
 AliCentralCorrSecondaryMap.cxx:48
 AliCentralCorrSecondaryMap.cxx:49
 AliCentralCorrSecondaryMap.cxx:50
 AliCentralCorrSecondaryMap.cxx:51
 AliCentralCorrSecondaryMap.cxx:52
 AliCentralCorrSecondaryMap.cxx:53
 AliCentralCorrSecondaryMap.cxx:54
 AliCentralCorrSecondaryMap.cxx:55
 AliCentralCorrSecondaryMap.cxx:56
 AliCentralCorrSecondaryMap.cxx:57
 AliCentralCorrSecondaryMap.cxx:58
 AliCentralCorrSecondaryMap.cxx:59
 AliCentralCorrSecondaryMap.cxx:60
 AliCentralCorrSecondaryMap.cxx:61
 AliCentralCorrSecondaryMap.cxx:62
 AliCentralCorrSecondaryMap.cxx:63
 AliCentralCorrSecondaryMap.cxx:64
 AliCentralCorrSecondaryMap.cxx:65
 AliCentralCorrSecondaryMap.cxx:66
 AliCentralCorrSecondaryMap.cxx:67
 AliCentralCorrSecondaryMap.cxx:68
 AliCentralCorrSecondaryMap.cxx:69
 AliCentralCorrSecondaryMap.cxx:70
 AliCentralCorrSecondaryMap.cxx:71
 AliCentralCorrSecondaryMap.cxx:72
 AliCentralCorrSecondaryMap.cxx:73
 AliCentralCorrSecondaryMap.cxx:74
 AliCentralCorrSecondaryMap.cxx:75
 AliCentralCorrSecondaryMap.cxx:76
 AliCentralCorrSecondaryMap.cxx:77
 AliCentralCorrSecondaryMap.cxx:78
 AliCentralCorrSecondaryMap.cxx:79
 AliCentralCorrSecondaryMap.cxx:80
 AliCentralCorrSecondaryMap.cxx:81
 AliCentralCorrSecondaryMap.cxx:82
 AliCentralCorrSecondaryMap.cxx:83
 AliCentralCorrSecondaryMap.cxx:84
 AliCentralCorrSecondaryMap.cxx:85
 AliCentralCorrSecondaryMap.cxx:86
 AliCentralCorrSecondaryMap.cxx:87
 AliCentralCorrSecondaryMap.cxx:88
 AliCentralCorrSecondaryMap.cxx:89
 AliCentralCorrSecondaryMap.cxx:90
 AliCentralCorrSecondaryMap.cxx:91
 AliCentralCorrSecondaryMap.cxx:92
 AliCentralCorrSecondaryMap.cxx:93
 AliCentralCorrSecondaryMap.cxx:94
 AliCentralCorrSecondaryMap.cxx:95
 AliCentralCorrSecondaryMap.cxx:96
 AliCentralCorrSecondaryMap.cxx:97
 AliCentralCorrSecondaryMap.cxx:98
 AliCentralCorrSecondaryMap.cxx:99
 AliCentralCorrSecondaryMap.cxx:100
 AliCentralCorrSecondaryMap.cxx:101
 AliCentralCorrSecondaryMap.cxx:102
 AliCentralCorrSecondaryMap.cxx:103
 AliCentralCorrSecondaryMap.cxx:104
 AliCentralCorrSecondaryMap.cxx:105
 AliCentralCorrSecondaryMap.cxx:106
 AliCentralCorrSecondaryMap.cxx:107
 AliCentralCorrSecondaryMap.cxx:108
 AliCentralCorrSecondaryMap.cxx:109
 AliCentralCorrSecondaryMap.cxx:110
 AliCentralCorrSecondaryMap.cxx:111
 AliCentralCorrSecondaryMap.cxx:112
 AliCentralCorrSecondaryMap.cxx:113
 AliCentralCorrSecondaryMap.cxx:114
 AliCentralCorrSecondaryMap.cxx:115
 AliCentralCorrSecondaryMap.cxx:116
 AliCentralCorrSecondaryMap.cxx:117
 AliCentralCorrSecondaryMap.cxx:118
 AliCentralCorrSecondaryMap.cxx:119
 AliCentralCorrSecondaryMap.cxx:120
 AliCentralCorrSecondaryMap.cxx:121
 AliCentralCorrSecondaryMap.cxx:122
 AliCentralCorrSecondaryMap.cxx:123
 AliCentralCorrSecondaryMap.cxx:124
 AliCentralCorrSecondaryMap.cxx:125
 AliCentralCorrSecondaryMap.cxx:126
 AliCentralCorrSecondaryMap.cxx:127
 AliCentralCorrSecondaryMap.cxx:128
 AliCentralCorrSecondaryMap.cxx:129
 AliCentralCorrSecondaryMap.cxx:130
 AliCentralCorrSecondaryMap.cxx:131
 AliCentralCorrSecondaryMap.cxx:132
 AliCentralCorrSecondaryMap.cxx:133
 AliCentralCorrSecondaryMap.cxx:134
 AliCentralCorrSecondaryMap.cxx:135
 AliCentralCorrSecondaryMap.cxx:136
 AliCentralCorrSecondaryMap.cxx:137
 AliCentralCorrSecondaryMap.cxx:138
 AliCentralCorrSecondaryMap.cxx:139
 AliCentralCorrSecondaryMap.cxx:140
 AliCentralCorrSecondaryMap.cxx:141
 AliCentralCorrSecondaryMap.cxx:142
 AliCentralCorrSecondaryMap.cxx:143
 AliCentralCorrSecondaryMap.cxx:144
 AliCentralCorrSecondaryMap.cxx:145
 AliCentralCorrSecondaryMap.cxx:146
 AliCentralCorrSecondaryMap.cxx:147
 AliCentralCorrSecondaryMap.cxx:148
 AliCentralCorrSecondaryMap.cxx:149
 AliCentralCorrSecondaryMap.cxx:150
 AliCentralCorrSecondaryMap.cxx:151
 AliCentralCorrSecondaryMap.cxx:152
 AliCentralCorrSecondaryMap.cxx:153
 AliCentralCorrSecondaryMap.cxx:154
 AliCentralCorrSecondaryMap.cxx:155
 AliCentralCorrSecondaryMap.cxx:156
 AliCentralCorrSecondaryMap.cxx:157
 AliCentralCorrSecondaryMap.cxx:158
 AliCentralCorrSecondaryMap.cxx:159
 AliCentralCorrSecondaryMap.cxx:160
 AliCentralCorrSecondaryMap.cxx:161
 AliCentralCorrSecondaryMap.cxx:162
 AliCentralCorrSecondaryMap.cxx:163
 AliCentralCorrSecondaryMap.cxx:164
 AliCentralCorrSecondaryMap.cxx:165
 AliCentralCorrSecondaryMap.cxx:166
 AliCentralCorrSecondaryMap.cxx:167
 AliCentralCorrSecondaryMap.cxx:168
 AliCentralCorrSecondaryMap.cxx:169
 AliCentralCorrSecondaryMap.cxx:170
 AliCentralCorrSecondaryMap.cxx:171
 AliCentralCorrSecondaryMap.cxx:172
 AliCentralCorrSecondaryMap.cxx:173
 AliCentralCorrSecondaryMap.cxx:174
 AliCentralCorrSecondaryMap.cxx:175
 AliCentralCorrSecondaryMap.cxx:176
 AliCentralCorrSecondaryMap.cxx:177
 AliCentralCorrSecondaryMap.cxx:178
 AliCentralCorrSecondaryMap.cxx:179
 AliCentralCorrSecondaryMap.cxx:180
 AliCentralCorrSecondaryMap.cxx:181
 AliCentralCorrSecondaryMap.cxx:182
 AliCentralCorrSecondaryMap.cxx:183
 AliCentralCorrSecondaryMap.cxx:184
 AliCentralCorrSecondaryMap.cxx:185
 AliCentralCorrSecondaryMap.cxx:186
 AliCentralCorrSecondaryMap.cxx:187
 AliCentralCorrSecondaryMap.cxx:188
 AliCentralCorrSecondaryMap.cxx:189
 AliCentralCorrSecondaryMap.cxx:190
 AliCentralCorrSecondaryMap.cxx:191
 AliCentralCorrSecondaryMap.cxx:192
 AliCentralCorrSecondaryMap.cxx:193
 AliCentralCorrSecondaryMap.cxx:194
 AliCentralCorrSecondaryMap.cxx:195
 AliCentralCorrSecondaryMap.cxx:196
 AliCentralCorrSecondaryMap.cxx:197
 AliCentralCorrSecondaryMap.cxx:198
 AliCentralCorrSecondaryMap.cxx:199
 AliCentralCorrSecondaryMap.cxx:200
 AliCentralCorrSecondaryMap.cxx:201
 AliCentralCorrSecondaryMap.cxx:202
 AliCentralCorrSecondaryMap.cxx:203
 AliCentralCorrSecondaryMap.cxx:204
 AliCentralCorrSecondaryMap.cxx:205
 AliCentralCorrSecondaryMap.cxx:206
 AliCentralCorrSecondaryMap.cxx:207
 AliCentralCorrSecondaryMap.cxx:208
 AliCentralCorrSecondaryMap.cxx:209
 AliCentralCorrSecondaryMap.cxx:210
 AliCentralCorrSecondaryMap.cxx:211
 AliCentralCorrSecondaryMap.cxx:212
 AliCentralCorrSecondaryMap.cxx:213
 AliCentralCorrSecondaryMap.cxx:214
 AliCentralCorrSecondaryMap.cxx:215
 AliCentralCorrSecondaryMap.cxx:216
 AliCentralCorrSecondaryMap.cxx:217
 AliCentralCorrSecondaryMap.cxx:218
 AliCentralCorrSecondaryMap.cxx:219
 AliCentralCorrSecondaryMap.cxx:220
 AliCentralCorrSecondaryMap.cxx:221
 AliCentralCorrSecondaryMap.cxx:222
 AliCentralCorrSecondaryMap.cxx:223
 AliCentralCorrSecondaryMap.cxx:224
 AliCentralCorrSecondaryMap.cxx:225
 AliCentralCorrSecondaryMap.cxx:226
 AliCentralCorrSecondaryMap.cxx:227
 AliCentralCorrSecondaryMap.cxx:228
 AliCentralCorrSecondaryMap.cxx:229
 AliCentralCorrSecondaryMap.cxx:230
 AliCentralCorrSecondaryMap.cxx:231
 AliCentralCorrSecondaryMap.cxx:232
 AliCentralCorrSecondaryMap.cxx:233
 AliCentralCorrSecondaryMap.cxx:234
 AliCentralCorrSecondaryMap.cxx:235
 AliCentralCorrSecondaryMap.cxx:236
 AliCentralCorrSecondaryMap.cxx:237
 AliCentralCorrSecondaryMap.cxx:238
 AliCentralCorrSecondaryMap.cxx:239
 AliCentralCorrSecondaryMap.cxx:240
 AliCentralCorrSecondaryMap.cxx:241
 AliCentralCorrSecondaryMap.cxx:242
 AliCentralCorrSecondaryMap.cxx:243
 AliCentralCorrSecondaryMap.cxx:244