]>
Commit | Line | Data |
---|---|---|
c0751163 | 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 | ||
c4ee792d | 16 | /* $Id $ */ |
17 | ||
c0751163 | 18 | |
19 | /////////////////////////////////////////////////////////////////////////////// | |
20 | /// | |
c4ee792d | 21 | /// \class AliMUONRawStreamTracker |
c0751163 | 22 | /// This class provides access to MUON digits in raw data. |
23 | /// | |
24 | /// It loops over all MUON digits in the raw data given by the AliRawReader. | |
25 | /// The Next method goes to the next digit. If there are no digits left | |
26 | /// it returns kFALSE (under develpment) | |
313a427d | 27 | /// It can loop also over DDL and store the decoded rawdata in TClonesArray |
28 | /// in Payload class. | |
c0751163 | 29 | /// |
30 | /// First version implement for Tracker | |
31 | /// | |
c4ee792d | 32 | /// \author Christian Finck |
c0751163 | 33 | /////////////////////////////////////////////////////////////////////////////// |
34 | ||
35 | #include "AliMUONRawStreamTracker.h" | |
36 | ||
37 | #include "AliRawReader.h" | |
38 | #include "AliRawDataHeader.h" | |
9e378ff4 | 39 | #include "AliDAQ.h" |
c0751163 | 40 | #include "AliLog.h" |
41 | ||
00e86732 | 42 | /// \cond CLASSIMP |
c0751163 | 43 | ClassImp(AliMUONRawStreamTracker) |
00e86732 | 44 | /// \endcond |
c0751163 | 45 | |
46 | AliMUONRawStreamTracker::AliMUONRawStreamTracker() | |
47 | : TObject(), | |
48 | fRawReader(0x0), | |
49 | fDDL(0), | |
50 | fBusPatchId(0), | |
51 | fDspId(0), | |
52 | fBlkId(0), | |
53 | fNextDDL(kTRUE), | |
9f5dcca3 | 54 | fMaxDDL(20), |
55 | fPayload(new AliMUONPayloadTracker()) | |
c0751163 | 56 | { |
00e86732 | 57 | /// |
58 | /// create an object to read MUON raw digits | |
59 | /// Default ctor for monitoring purposes | |
60 | /// | |
c0751163 | 61 | |
313a427d | 62 | |
c0751163 | 63 | } |
64 | ||
65 | //_________________________________________________________________ | |
66 | AliMUONRawStreamTracker::AliMUONRawStreamTracker(AliRawReader* rawReader) | |
67 | : TObject(), | |
9f5dcca3 | 68 | fRawReader(rawReader), |
c0751163 | 69 | fDDL(0), |
70 | fBusPatchId(0), | |
71 | fDspId(0), | |
72 | fBlkId(0), | |
73 | fNextDDL(kTRUE), | |
9f5dcca3 | 74 | fMaxDDL(20), |
75 | fPayload(new AliMUONPayloadTracker()) | |
76 | ||
c0751163 | 77 | { |
00e86732 | 78 | /// |
79 | /// ctor with AliRawReader as argument | |
80 | /// for reconstruction purpose | |
81 | /// | |
c0751163 | 82 | |
c0751163 | 83 | |
c0751163 | 84 | } |
85 | ||
c0751163 | 86 | //___________________________________ |
87 | AliMUONRawStreamTracker::~AliMUONRawStreamTracker() | |
88 | { | |
00e86732 | 89 | /// |
90 | /// clean up | |
91 | /// | |
313a427d | 92 | delete fPayload; |
93 | ||
c0751163 | 94 | } |
95 | ||
96 | //_____________________________________________________________ | |
97 | Bool_t AliMUONRawStreamTracker::Next() | |
98 | { | |
00e86732 | 99 | /// |
100 | /// read the next raw digit (buspatch structure) | |
101 | /// returns kFALSE if there is no digit left | |
102 | /// (under development) | |
c0751163 | 103 | |
313a427d | 104 | // AliMUONDDLTracker* ddlTracker = 0x0; |
105 | // AliMUONBlockHeader* blkHeader = 0x0; | |
106 | // AliMUONDspHeader* dspHeader = 0x0; | |
107 | // Int_t nBusPatch; | |
108 | // Int_t nDsp; | |
109 | // Int_t nBlock; | |
110 | ||
111 | // next: | |
112 | // if (fNextDDL){ | |
113 | // printf("iDDL %d\n", fDDL+1); | |
114 | // fBlkId = 0; | |
115 | // fDspId = 0; | |
116 | // fBusPatchId = 0; | |
117 | // if(!NextDDL()) | |
118 | // return kFALSE; | |
119 | // } | |
120 | // fNextDDL = kFALSE; | |
121 | ||
122 | // ddlTracker = GetDDLTracker(); | |
123 | ||
124 | // nBlock = ddlTracker->GetBlkHeaderEntries(); | |
125 | // if (fBlkId < nBlock) { | |
126 | ||
127 | // blkHeader = ddlTracker->GetBlkHeaderEntry(fBlkId); | |
128 | // nDsp = blkHeader->GetDspHeaderEntries(); | |
129 | ||
130 | // if( fDspId < nDsp) { | |
131 | // dspHeader = blkHeader->GetDspHeaderEntry(fDspId); | |
132 | // nBusPatch = dspHeader->GetBusPatchEntries(); | |
133 | ||
134 | // if (fBusPatchId < nBusPatch) { | |
135 | // fBusStructPtr = dspHeader->GetBusPatchEntry(fBusPatchId++); | |
136 | // return kTRUE; | |
137 | ||
138 | // } else {// iBusPatch | |
139 | // fDspId++; | |
140 | // fBusPatchId = 0; | |
141 | // goto next; | |
142 | // // Next(); | |
143 | // } | |
144 | ||
145 | // } else {// iDsp | |
146 | // fBlkId++; | |
147 | // fDspId = 0; | |
148 | // fBusPatchId = 0; | |
149 | // goto next; | |
150 | // // Next(); | |
151 | // } | |
152 | ||
153 | // } else {// iBlock | |
154 | // fBlkId = 0; | |
155 | // fDspId = 0; | |
156 | // fBusPatchId = 0; | |
157 | // fNextDDL = kTRUE; | |
158 | // //return kTRUE; | |
159 | // goto next; | |
160 | // } | |
c0751163 | 161 | |
162 | return kFALSE; | |
163 | } | |
164 | ||
165 | //______________________________________________________ | |
166 | Bool_t AliMUONRawStreamTracker::NextDDL() | |
167 | { | |
00e86732 | 168 | /// reading tracker DDL |
c0751163 | 169 | |
313a427d | 170 | fPayload->ResetDDL(); |
c0751163 | 171 | |
172 | ||
c0751163 | 173 | if (fDDL >= 20) { |
174 | fDDL = 0; | |
175 | return kFALSE; | |
176 | } | |
177 | AliDebug(3, Form("DDL Number %d\n", fDDL )); | |
178 | ||
c0751163 | 179 | fRawReader->Reset(); |
362c9d61 | 180 | fRawReader->Select("MUONTRK", fDDL, fDDL); //Select the DDL file to be read |
c0751163 | 181 | |
182 | fRawReader->ReadHeader(); | |
183 | ||
313a427d | 184 | Int_t totalDataWord = fRawReader->GetDataSize(); // in bytes |
c0751163 | 185 | |
313a427d | 186 | UInt_t *buffer = new UInt_t[totalDataWord/4]; |
c0751163 | 187 | |
313a427d | 188 | fRawReader->ReadNext((UChar_t*)buffer, totalDataWord); |
c0751163 | 189 | |
84ceeb06 | 190 | fPayload->Decode(buffer, totalDataWord/4); |
c0751163 | 191 | |
313a427d | 192 | delete[] buffer; |
c0751163 | 193 | |
194 | fDDL++; | |
195 | ||
196 | return kTRUE; | |
197 | } | |
c0751163 | 198 | |
199 | //______________________________________________________ | |
200 | void AliMUONRawStreamTracker::SetMaxDDL(Int_t ddl) | |
201 | { | |
00e86732 | 202 | /// set DDL number |
c0751163 | 203 | if (ddl > 20) ddl = 20; |
204 | fMaxDDL = ddl; | |
313a427d | 205 | |
c0751163 | 206 | } |
207 | ||
208 | //______________________________________________________ | |
209 | void AliMUONRawStreamTracker::SetMaxBlock(Int_t blk) | |
210 | { | |
00e86732 | 211 | /// set regional card number |
313a427d | 212 | fPayload->SetMaxBlock(blk); |
c0751163 | 213 | } |