Update the Tag framework to correspond to current datataking conditions
[u/mrichter/AliRoot.git] / STEER / AliRunTag.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 //           Implementation of the RunTag class
20 //   This is the class to deal with the tags in the run level
21 //   Origin: Panos Christakoglou, UOA-CERN, Panos.Christakoglou@cern.ch
22 //-----------------------------------------------------------------
23
24 #include "AliRunTag.h"
25 #include "AliDetectorTag.h"
26 #include "AliEventTag.h"
27
28 ClassImp(AliRunTag)
29
30 //___________________________________________________________________________
31   AliRunTag::AliRunTag() :
32     TObject(),
33     fAliceRunId(-1),
34     fAliceMagneticField(0.0),
35     fAliceDipoleField(0.0),
36     fAliceRunStartTime(0),
37     fAliceRunStopTime(0),
38     fAlirootVersion(0),
39     fRootVersion(0),
40     fGeant3Version(0),
41     fLHCPeriod(0),
42     fRecPass(0),
43     fProductionName(0),
44     fAliceRunQuality(0),
45     fAliceBeamEnergy(0.0),
46     fAliceBeamType(0),
47     fAliceCalibrationVersion(0),
48     fAliceDataType(0),
49     fNumEvents(0),
50     fNumDetectors(0),
51     fEventTag("AliEventTag", 1000),
52     fDetectorTag(),
53     fLHCTag(), 
54     fQA(),  
55     fQALength(0), 
56     fQAArray(NULL), 
57     fESLength(0), 
58     fEventSpecies(NULL)
59 {
60   //Default constructor
61 }
62
63 //___________________________________________________________________________
64 AliRunTag::~AliRunTag() {
65   //Destructor
66   fEventTag.Delete();
67   if ( fQAArray ) 
68     delete [] fQAArray ; 
69   if ( fEventSpecies )
70     delete [] fEventSpecies ; 
71 }
72
73 //___________________________________________________________________________
74 AliRunTag::AliRunTag(const AliRunTag& tag):
75 TObject(),
76 fAliceRunId(tag.fAliceRunId),
77 fAliceMagneticField(tag.fAliceMagneticField),
78 fAliceDipoleField(tag.fAliceDipoleField),
79 fAliceRunStartTime(tag.fAliceRunStartTime),
80 fAliceRunStopTime(fAliceRunStopTime),
81 fAlirootVersion(tag.fAlirootVersion),
82 fRootVersion(tag.fRootVersion),
83 fGeant3Version(tag.fGeant3Version),
84 fLHCPeriod(tag.fLHCPeriod),
85 fRecPass(tag.fRecPass),
86 fProductionName(tag.fProductionName),
87 fAliceRunQuality(tag.fAliceRunQuality),
88 fAliceBeamEnergy(tag.fAliceBeamEnergy),
89 fAliceBeamType(tag.fAliceBeamType),
90 fAliceCalibrationVersion(tag.fAliceCalibrationVersion),
91 fAliceDataType(tag.fAliceDataType),
92 fNumEvents(tag.fNumEvents),
93 fNumDetectors(tag.fNumDetectors),
94 fEventTag(tag.fEventTag),
95 fDetectorTag(tag.fDetectorTag),
96 fLHCTag(tag.fLHCTag), 
97 fQA(tag.fQA),
98 fQALength(tag.fQALength),
99 fQAArray(NULL), 
100 fESLength(tag.fESLength),
101 fEventSpecies(NULL)
102 {
103   //copy constructor
104   if (fQALength == 0 ) 
105     fQAArray = NULL ; 
106   else {
107     fQAArray = new ULong_t[fQALength] ; 
108     memcpy(fQAArray, tag.fQAArray, fQALength*sizeof(ULong_t)) ;
109   }
110   if (fESLength == 0 ) 
111     fEventSpecies = NULL ; 
112   else {
113     fEventSpecies = new Bool_t[fESLength] ; 
114     memcpy(fEventSpecies, tag.fEventSpecies, fESLength*sizeof(Bool_t)) ;
115   }
116 }
117
118 //___________________________________________________________________________
119 AliRunTag& AliRunTag::operator = (const AliRunTag& tag) {
120 //assignment operator
121   if(&tag != this) {
122     fAliceRunId               = tag.fAliceRunId ; 
123     fAliceMagneticField       = tag.fAliceMagneticField ;
124     fAliceDipoleField         = tag.fAliceDipoleField ;
125     fAliceRunStartTime        = tag.fAliceRunStartTime ; 
126     fAliceRunStopTime         = tag.fAliceRunStopTime ; 
127     fAlirootVersion           = tag.fAlirootVersion ; 
128     fRootVersion              = tag.fRootVersion ;
129     fGeant3Version            = tag.fGeant3Version ; 
130     fLHCPeriod                = tag.fLHCPeriod ; 
131     fRecPass                  = tag.fRecPass ; 
132     fProductionName           = tag.fProductionName ; 
133     fAliceRunQuality          = tag.fAliceRunQuality ; 
134     fAliceBeamEnergy          = tag.fAliceBeamEnergy ;
135     fAliceBeamType            = tag.fAliceBeamType ; 
136     fAliceCalibrationVersion  = tag.fAliceCalibrationVersion ; 
137     fAliceDataType            = tag.fAliceDataType ; 
138     fNumEvents                = tag.fNumEvents ;
139     fNumDetectors             = tag.fNumDetectors ; 
140     fEventTag                 = tag.fEventTag ;
141     fDetectorTag              = tag.fDetectorTag ;
142     fLHCTag                   = tag.fLHCTag ;  
143     fQA                       = tag.fQA ;      
144     fQALength                 = tag.fQALength ; 
145     if (fQAArray) 
146       delete [] fQAArray ; 
147     if (fQALength == 0 ) 
148       fQAArray = NULL ; 
149     else {
150       fQAArray = new ULong_t[fQALength] ; 
151       memcpy(fQAArray, tag.fQAArray, fQALength*sizeof(ULong_t)) ;
152     }
153     fESLength                 = tag.fESLength ; 
154     if (fEventSpecies)
155       delete [] fEventSpecies ; 
156     if (fESLength == 0 ) 
157       fEventSpecies = NULL ; 
158     else {
159       fEventSpecies = new Bool_t[fESLength] ; 
160       memcpy(fEventSpecies, tag.fEventSpecies, fESLength*sizeof(Bool_t)) ;
161     }
162   }
163   return *this ; 
164 }
165
166 //___________________________________________________________________________
167 void AliRunTag::CopyStandardContent(AliRunTag *oldtag) {
168   //function that copies the run, lhc and detector levels
169   SetRunId(oldtag->GetRunId());
170   SetMagneticField(oldtag->GetMagneticField());
171   SetDipoleField(oldtag->GetDipoleField());
172   SetRunStartTime(oldtag->GetRunStartTime());
173   SetRunStopTime(oldtag->GetRunStopTime());
174   SetAlirootVersion(oldtag->GetAlirootVersion());
175   SetRootVersion(oldtag->GetRootVersion());
176   SetGeant3Version(oldtag->GetGeant3Version());
177   SetLHCPeriod(oldtag->GetLHCPeriod());
178   SetReconstructionPass(oldtag->GetReconstructionPass());
179   SetProductionName(oldtag->GetProductionName());
180   SetRunQuality(oldtag->GetRunQuality());
181   SetBeamEnergy(oldtag->GetBeamEnergy());
182   SetBeamType(oldtag->GetBeamType());
183   SetCalibVersion(oldtag->GetCalibVersion());
184   SetDataType(oldtag->GetDataType());
185   SetLHCTag(oldtag->GetLHCTag()->GetLuminosity(),oldtag->GetLHCTag()->GetLHCState());
186   SetDetectorTag(oldtag->GetDetectorTags()->GetIntDetectorMask());
187   SetQA(*(oldtag->GetQA())) ;   
188   SetQAArray(oldtag->GetQAArray(), oldtag->GetQALength()) ;  
189   SetEventSpecies(oldtag->GetEventSpecies(), oldtag->GetESLength()) ;  
190 }
191
192 //___________________________________________________________________________
193 void AliRunTag::SetQAArray(ULong_t * qa, Int_t qalength) {
194   //Setter for the qa bits 
195   if (qa && qalength > 0) {
196     fQALength = qalength ; 
197     if (fQAArray) 
198       delete [] fQAArray ; 
199     fQAArray = new ULong_t[qalength] ; 
200     memcpy(fQAArray, qa, qalength*sizeof(ULong_t)) ;
201   }
202 }
203
204 //___________________________________________________________________________
205 void AliRunTag::SetEventSpecies(Bool_t * es, Int_t eslength) {
206   //setter for the eventspecices 
207   if (es && eslength >0 ) {
208     fESLength = eslength ; 
209     if (fEventSpecies) 
210       delete [] fEventSpecies ; 
211     fEventSpecies = new Bool_t[eslength] ;
212     memcpy(fEventSpecies, es, eslength*sizeof(Bool_t)) ; 
213   }
214 }
215
216
217 //___________________________________________________________________________
218 void AliRunTag::SetLHCTag(Float_t lumin, TString type) {
219   //Setter for the LHC tags
220   fLHCTag.SetLHCTag(lumin,type);
221 }
222
223 //___________________________________________________________________________
224 void AliRunTag::SetDetectorTag(UInt_t mask) {
225   //Setter for the detector tags
226   fDetectorTag.SetDetectorMask(mask);
227   fNumDetectors = fDetectorTag.GetDetectorMask()->GetEntries();
228 }
229
230 //___________________________________________________________________________
231 void AliRunTag::AddEventTag(const AliEventTag & EvTag) {
232   //Adds an entry to the event tag TClonesArray
233   new(fEventTag[fNumEvents++]) AliEventTag(EvTag);
234 }
235
236 //___________________________________________________________________________
237 void AliRunTag::Clear(const char *) {
238   //Resets the number of events and detectors
239   fEventTag.Delete();
240   fNumEvents = 0;
241   fDetectorTag.Clear();
242   fNumDetectors = 0;
243   if ( fQAArray ) {
244     delete [] fQAArray ;
245     fQAArray = 0x0;
246   } 
247   fQALength=0;
248   if ( fEventSpecies ) {
249     delete [] fEventSpecies ;
250     fEventSpecies = 0x0;
251   } 
252   fESLength=0;
253 }