Transition to NewIO
[u/mrichter/AliRoot.git] / TPC / AliTPCDigitsArray.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
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  **************************************************************************/
15
16 /* $Id$ */
17
18 ///////////////////////////////////////////////////////////////////////////////
19 //                                                                           //
20 //  Time Projection Chamber clusters objects                                //
21 //
22 //  Origin: Marian Ivanov , GSI Darmstadt
23 //                                                                           //
24 //                                                                           //
25 //                                                                          //
26 ///////////////////////////////////////////////////////////////////////////////
27 #include "AliTPCParam.h" 
28 #include "AliTPCPRF2D.h"
29
30 #include "TObjArray.h"
31 #include "AliSegmentID.h" 
32 #include "AliSegmentArray.h" 
33
34 #include "AliArrayI.h"
35 #include "AliArrayS.h"
36
37
38 #include "AliDigits.h"
39 #include "AliSimDigits.h"
40 #include "AliDigitsArray.h" 
41 #include "AliTPCDigitsArray.h"
42 #include <TDirectory.h>
43
44
45
46 //_____________________________________________________________________________
47
48 ClassImp(AliTPCDigitsArray) 
49
50 AliTPCDigitsArray::AliTPCDigitsArray(Bool_t sim)
51 {
52   //
53   //default constructor
54   fParam = 0;
55   fBSim = sim;
56   if ( sim == kTRUE) SetClass("AliSimDigits");
57   else
58     SetClass("AliDigits");
59   fParam = 0;
60   //  fPRF   = 0;
61   //fRF    = 0;  
62   fCompression = 1;
63   fTrackLevel = 3;
64 }
65
66 AliTPCDigitsArray::~AliTPCDigitsArray()
67 {
68   //
69   
70   //
71 }
72
73 AliDigits *  AliTPCDigitsArray::CreateRow(Int_t sector, Int_t row)
74 {
75   //
76   //create digits row  
77   //
78   //if row just exist - delete it
79   AliTPCParam * param = (AliTPCParam*)fParam;
80   Int_t index = param->GetIndex(sector,row);  
81   AliDigits * dig = (AliDigits *)(*this)[index];
82   if (dig !=0) delete dig;
83
84   dig = (AliDigits *) AddSegment(index);
85   if (dig == 0) return 0;
86   dig->Allocate(param->GetMaxTBin(),param->GetNPads(sector,row));  
87   if (fBSim == kTRUE) ((AliSimDigits*) dig)->AllocateTrack(fTrackLevel);
88   return dig;
89 }
90
91
92 AliDigits * AliTPCDigitsArray::GetRow(Int_t sector,Int_t row)
93 {
94   //
95   //return clusters ((AliTPCDigitsRow *) per given sector and padrow
96   //
97   if (fParam==0) return 0;
98   Int_t index = ((AliTPCParam*)fParam)->GetIndex(sector,row);  
99   return (AliDigits *)(*this)[index];
100 }
101
102 AliDigits * AliTPCDigitsArray::LoadRow(Int_t sector,Int_t row)
103 {
104   //
105   //return clusters ((AliTPCDigitsRow *) per given sector and padrow
106   //
107   if (fParam==0) return 0;
108   Int_t index = ((AliTPCParam*)fParam)->GetIndex(sector,row);  
109   return (AliDigits *)LoadSegment(index);
110 }
111
112 Bool_t  AliTPCDigitsArray::StoreRow(Int_t sector,Int_t row)
113 {
114   //
115   //return clusters ((AliTPCDigitsRow *) per given sector and padrow
116   //
117   AliTPCParam * param = (AliTPCParam*)fParam;
118   if (fParam==0) return 0;
119   Int_t index = param->GetIndex(sector,row);  
120   ( (AliDigits *)At(index))->CompresBuffer(fCompression,param->GetZeroSup());
121   if (fBSim == kTRUE) ( (AliSimDigits *)At(index))->CompresTrackBuffer(1);
122   StoreSegment(index);
123   return kTRUE;
124 }
125
126 Bool_t  AliTPCDigitsArray::ClearRow(Int_t sector,Int_t row)
127 {
128   //
129   //return clusters ((AliTPCDigitsRow *) per given sector and padrow
130   //
131   if (fParam==0) return 0;
132   Int_t index = ((AliTPCParam*)fParam)->GetIndex(sector,row);  
133   ClearSegment(index);
134   return kTRUE;
135 }
136
137
138
139 Bool_t AliTPCDigitsArray::Setup(AliDetectorParam *param)
140 {
141   //
142   //setup  function to adjust array parameters
143   //
144   if (param==0) return kFALSE;
145   if (fParam !=0) delete fParam;
146   //  fParam = new AliTPCParam((AliTPCParam&)(*param));
147   fParam = param;
148   return MakeArray(((AliTPCParam*)fParam)->GetNRowsTotal());
149 }
150
151 Bool_t AliTPCDigitsArray::Update()
152 {
153   //
154   //setup  function to adjust array parameters
155   //
156   if (fParam ==0 ) return kFALSE;
157   if (fTree!=0) return MakeDictionary( ((AliTPCParam*)fParam)->GetNRowsTotal()) ;
158   ((AliTPCParam*)fParam)->Update();
159   return MakeArray(((AliTPCParam*)fParam)->GetNRowsTotal());
160 }