1 // @(#)alimdc:$Name$:$Id$
2 // Author: Fons Rademakers 26/11/99
4 /**************************************************************************
5 * Copyright(c) 1998-2003, ALICE Experiment at CERN, All rights reserved. *
7 * Author: The ALICE Off-line Project. *
8 * Contributors are mentioned in the code where appropriate. *
10 * Permission to use, copy, modify and distribute this software and its *
11 * documentation strictly for non-commercial purposes is hereby granted *
12 * without fee, provided that the above copyright notice appears in all *
13 * copies and that both the copyright notice and this permission notice *
14 * appear in the supporting documentation. The authors make no claims *
15 * about the suitability of this software for any purpose. It is *
16 * provided "as is" without express or implied warranty. *
17 **************************************************************************/
19 //////////////////////////////////////////////////////////////////////////
23 // Set of classes defining the ALICE RAW event format. The AliRawEvent //
24 // class defines a RAW event. It consists of an AliEventHeader object //
25 // an AliEquipmentHeader object, an AliRawData object and an array of //
26 // sub-events, themselves also being AliRawEvents. The number of //
27 // sub-events depends on the number of DATE LDC's. //
28 // The AliRawEvent objects are written to a ROOT file using different //
29 // technologies, i.e. to local disk via AliRawDB or via rfiod using //
30 // AliRawRFIODB or via rootd using AliRawRootdDB or to CASTOR via //
31 // rootd using AliRawCastorDB (and for performance testing there is //
32 // also AliRawNullDB). //
33 // The AliRunDB class provides the interface to the run and file //
34 // catalogues (AliEn or plain MySQL). //
35 // The AliStats class provides statics information that is added as //
36 // a single keyed object to each raw file. //
37 // The AliTagDB provides an interface to a TAG database. //
38 // The AliMDC class is usid by the "alimdc" stand-alone program //
39 // that reads data directly from DATE. //
41 //////////////////////////////////////////////////////////////////////////
43 #include <TObjArray.h>
47 #include "AliRawEventHeaderBase.h"
48 #include "AliRawEquipment.h"
50 #include "AliRawEvent.h"
56 //______________________________________________________________________________
57 AliRawEvent::AliRawEvent()
59 // Create ALICE event object. If ownData is kFALSE we will use a static
60 // raw data object, otherwise a private copy will be made.
69 //______________________________________________________________________________
70 AliRawEvent::AliRawEvent(const AliRawEvent& rawEvent): TObject(rawEvent)
74 Fatal("AliRawEvent", "copy constructor not implemented");
77 //______________________________________________________________________________
78 AliRawEvent& AliRawEvent::operator = (const AliRawEvent& /*rawEvent*/)
80 // assignment operator
82 Fatal("operator =", "assignment operator not implemented");
86 //______________________________________________________________________________
87 AliRawEventHeaderBase *AliRawEvent::GetHeader(char*& data)
89 // Get event header part of AliRawEvent.
90 // First the DATE version is identified and then the
91 // corresponding event header version object is created
94 fEvtHdr = AliRawEventHeaderBase::Create(data);
100 //______________________________________________________________________________
101 AliRawEventHeaderBase *AliRawEvent::GetHeader()
104 AliFatal("Header version not yet initialized!");
111 //______________________________________________________________________________
112 AliRawEquipment *AliRawEvent::NextEquipment()
114 // Returns next equipment object.
117 fEquipments = new TObjArray(100); // arbitrary, probably enough to prevent resizing
119 if (fEquipments->GetSize() <= fNEquipments) {
120 fEquipments->Expand(fNEquipments+10);
121 Warning("NextEquipment", "expanded fEquipments by 10 to %d",
122 fEquipments->GetSize());
126 if (!(eq = (AliRawEquipment *)fEquipments->At(fNEquipments))) {
127 eq = new AliRawEquipment;
128 fEquipments->AddAt(eq, fNEquipments);
136 //______________________________________________________________________________
137 AliRawEquipment *AliRawEvent::GetEquipment(Int_t index) const
139 // Get specified equipment. Returns 0 if equipment does not exist.
144 return (AliRawEquipment *) fEquipments->At(index);
147 //______________________________________________________________________________
148 AliRawEvent *AliRawEvent::NextSubEvent()
150 // Returns next sub-event object.
153 fSubEvents = new TObjArray(100); // arbitrary, probably enough to prevent resizing
155 if (fSubEvents->GetSize() <= fNSubEvents) {
156 fSubEvents->Expand(fNSubEvents+10);
157 Warning("NextSubEvent", "expanded fSubEvents by 10 to %d",
158 fSubEvents->GetSize());
162 if (!(ev = (AliRawEvent *)fSubEvents->At(fNSubEvents))) {
163 ev = new AliRawEvent;
164 fSubEvents->AddAt(ev, fNSubEvents);
172 //______________________________________________________________________________
173 AliRawEvent *AliRawEvent::GetSubEvent(Int_t index) const
175 // Get specified sub event. Returns 0 if sub event does not exist.
180 return (AliRawEvent *) fSubEvents->At(index);
183 //______________________________________________________________________________
184 void AliRawEvent::Reset()
186 // Reset the event in case it needs to be re-used (avoiding costly
187 // new/delete cycle). We reset the size marker for the AliRawData
188 // objects and the sub event counter.
190 for (int i = 0; i < fNEquipments; i++) {
191 AliRawEquipment *eq = (AliRawEquipment *)fEquipments->At(i);
195 for (int i = 0; i < fNSubEvents; i++) {
196 AliRawEvent *ev = (AliRawEvent *)fSubEvents->At(i);
202 //______________________________________________________________________________
203 AliRawEvent::~AliRawEvent()
205 // Clean up event object. Delete also, possible, private raw data.
209 fEquipments->Delete();
212 fSubEvents->Delete();