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 **************************************************************************/
18 //-----------------------------------------------------------------------------
19 /// \class AliMUONRawStreamTrigger
20 /// This class provides access to MUON digits in raw data.
22 /// It loops over all MUON digits in the raw data given by the AliRawReader.
23 /// The Next method goes to the next digit. If there are no digits left
24 /// it returns kFALSE(under develpment).
25 /// It can loop also over DDL and store the decoded rawdata in TClonesArrays
28 /// First version implement for Trigger
29 /// \author Christian Finck
30 //-----------------------------------------------------------------------------
32 #include "AliMUONRawStreamTrigger.h"
34 #include "AliRawReader.h"
35 #include "AliRawDataHeader.h"
40 ClassImp(AliMUONRawStreamTrigger)
43 const Int_t AliMUONRawStreamTrigger::fMaxDDL = 2;
45 //___________________________________________
46 AliMUONRawStreamTrigger::AliMUONRawStreamTrigger()
49 fPayload(new AliMUONPayloadTrigger()),
53 fEnableErrorLogger(kFALSE)
56 /// create an object to read MUON raw digits
57 /// Default ctor for monitoring purposes
63 //_________________________________________________________________
64 AliMUONRawStreamTrigger::AliMUONRawStreamTrigger(AliRawReader* rawReader)
66 fRawReader(rawReader),
67 fPayload(new AliMUONPayloadTrigger()),
71 fEnableErrorLogger(kFALSE)
74 /// ctor with AliRawReader as argument
75 /// for reconstruction purpose
80 //___________________________________
81 AliMUONRawStreamTrigger::~AliMUONRawStreamTrigger()
89 //_____________________________________________________________
90 Bool_t AliMUONRawStreamTrigger::Next()
92 /// read the next raw digit (buspatch structure)
93 /// returns kFALSE if there is no digit left
96 // if(!NextDDL()) return kFALSE;
98 // Int_t nEntries = fDDLTrigger->GetBusPatchEntries();
100 // if (fSubEntries < nEntries) {
101 // fLocalStruct = (AliMUONLocalStruct*)fDDLTrigger->GetBusPatchEntry(fSubEntries);
103 // fNextDDL = kFALSE;
106 // fDDLTrigger->GetBusPatchArray()->Delete();
115 //______________________________________________________
116 Bool_t AliMUONRawStreamTrigger::NextDDL()
118 /// reading tracker DDL
119 /// store buspatch info into Array
120 /// store only non-empty structures (buspatch info with datalength !=0)
123 fPayload->ResetDDL();
126 // loop over the two ddl's
128 while ( fDDL < fMaxDDL ) {
130 fRawReader->Select("MUONTRG", fDDL, fDDL); //Select the DDL file to be read
131 if (fRawReader->ReadHeader()) break;
132 AliDebug(3,Form("Skipping DDL %d which does not seem to be there",fDDL));
136 if (fDDL >= fMaxDDL) {
141 AliDebug(3, Form("DDL Number %d\n", fDDL ));
143 Int_t totalDataWord = fRawReader->GetDataSize(); // in bytes
145 UInt_t *buffer = new UInt_t[totalDataWord/4];
147 // check not necessary yet, but for future developments
148 if (!fRawReader->ReadNext((UChar_t*)buffer, totalDataWord)) return kFALSE;
150 fPayload->Decode(buffer);
151 if (fEnableErrorLogger) AddErrorMessage();
161 //______________________________________________________
162 void AliMUONRawStreamTrigger::SetMaxReg(Int_t reg)
164 /// set regional card number
165 fPayload->SetMaxReg(reg);
168 //______________________________________________________
169 void AliMUONRawStreamTrigger::SetMaxLoc(Int_t loc)
171 /// set local card number
172 fPayload->SetMaxLoc(loc);
175 //______________________________________________________
176 void AliMUONRawStreamTrigger::AddErrorMessage()
178 /// add message into logger of AliRawReader per event
180 for (Int_t i = 0; i < fPayload->GetDarcEoWErrors(); ++i)
181 fRawReader->AddMajorErrorLog(kDarcEoWErr, "Wrong end of Darc word structure");
183 for (Int_t i = 0; i < fPayload->GetGlobalEoWErrors(); ++i)
184 fRawReader->AddMajorErrorLog(kGlobalEoWErr, "Wrong end of Global word structure");
186 for (Int_t i = 0; i < fPayload->GetRegEoWErrors(); ++i)
187 fRawReader->AddMajorErrorLog(kRegEoWErr, "Wrong end of Regional word structure");
189 for (Int_t i = 0; i < fPayload->GetLocalEoWErrors(); ++i)
190 fRawReader->AddMajorErrorLog(kLocalEoWErr, "Wrong end of Local word structure");