1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
17 ///////////////////////////////////////////////////////////////////////////////
19 // Calibration base class for a single ROC //
20 // Contains one float value per pad //
21 // mapping of the pads taken form AliTPCROC //
23 ///////////////////////////////////////////////////////////////////////////////
25 #include "AliTPCCalROC.h"
30 ClassImp(AliTPCCalROC)
33 //_____________________________________________________________________________
34 AliTPCCalROC::AliTPCCalROC()
43 // Default constructor
48 //_____________________________________________________________________________
49 AliTPCCalROC::AliTPCCalROC(UInt_t sector)
58 // Constructor that initializes a given sector
61 fNChannels = AliTPCROC::Instance()->GetNChannels(fSector);
62 fNRows = AliTPCROC::Instance()->GetNRows(fSector);
63 fIndexes = AliTPCROC::Instance()->GetRowIndexes(fSector);
64 fData = new Float_t[fNChannels];
65 for (UInt_t idata = 0; idata< fNChannels; idata++) fData[idata] = 0.;
68 //_____________________________________________________________________________
69 AliTPCCalROC::AliTPCCalROC(const AliTPCCalROC &c)
78 // AliTPCCalROC copy constructor
81 fNChannels = AliTPCROC::Instance()->GetNChannels(fSector);
82 fNRows = AliTPCROC::Instance()->GetNRows(fSector);
83 fIndexes = AliTPCROC::Instance()->GetRowIndexes(fSector);
85 fData = new Float_t[fNChannels];
86 for (UInt_t idata = 0; idata< fNChannels; idata++) fData[idata] = c.fData[idata];
88 //____________________________________________________________________________
89 AliTPCCalROC & AliTPCCalROC::operator =(const AliTPCCalROC & param)
92 // assignment operator - dummy
99 //_____________________________________________________________________________
100 AliTPCCalROC::~AliTPCCalROC()
103 // AliTPCCalROC destructor
113 void AliTPCCalROC::Streamer(TBuffer &R__b)
115 // Stream an object of class AliTPCCalROC.
116 if (R__b.IsReading()) {
117 AliTPCCalROC::Class()->ReadBuffer(R__b, this);
118 fIndexes = AliTPCROC::Instance()->GetRowIndexes(fSector);
120 AliTPCCalROC::Class()->WriteBuffer(R__b,this);
126 void AliTPCCalROC::Draw(Option_t* option){
128 // create histogram with values and draw it
131 for (UInt_t irow=0; irow<fNRows; irow++){
132 if (GetNPads(irow)>maxPad) maxPad = GetNPads(irow);
135 sprintf(name,"%s ROC%d",GetTitle(),fSector);
136 TH2F * his = new TH2F(name,name,fNRows+10,-5, fNRows+5, maxPad+10, -(Int_t(maxPad/2))-5, maxPad/2+5);
137 for (UInt_t irow=0; irow<fNRows; irow++){
138 UInt_t npads = (Int_t)GetNPads(irow);
139 for (UInt_t ipad=0; ipad<=npads; ipad++){
140 his->Fill(irow+0.5,Int_t(ipad)-Int_t(npads/2)+0.5,GetValue(irow,ipad));
147 void AliTPCCalROC::Test(){
149 // example function to show functionality and tes AliTPCCalROC
151 AliTPCCalROC roc0(0);
152 for (UInt_t irow = 0; irow <roc0.GetNrows(); irow++){
153 for (UInt_t ipad = 0; ipad <roc0.GetNPads(irow); ipad++){
154 Float_t value = irow+ipad/1000.;
155 roc0.SetValue(irow,ipad,value);
159 AliTPCCalROC roc1(roc0);
160 for (UInt_t irow = 0; irow <roc1.GetNrows(); irow++){
161 for (UInt_t ipad = 0; ipad <roc1.GetNPads(irow); ipad++){
162 Float_t value = irow+ipad/1000.;
163 if (roc1.GetValue(irow,ipad)!=value){
164 printf("Read/Write error\trow=%d\tpad=%d\n",irow,ipad);
168 TFile f("calcTest.root","recreate");
170 AliTPCCalROC * roc2 = (AliTPCCalROC*)f.Get("Roc0");
173 for (UInt_t irow = 0; irow <roc0.GetNrows(); irow++){
174 if (roc0.GetNPads(irow)!=roc2->GetNPads(irow))
175 printf("NPads - Read/Write error\trow=%d\n",irow);
176 for (UInt_t ipad = 0; ipad <roc1.GetNPads(irow); ipad++){
177 Float_t value = irow+ipad/1000.;
178 if (roc2->GetValue(irow,ipad)!=value){
179 printf("Read/Write error\trow=%d\tpad=%d\n",irow,ipad);