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 ///////////////////////////////////////////////////////////////////////////////
20 // base class of the metadata of run dependent objects //
21 // Derived classes: AliObjectMetaData, AliSelectionMetaData //
23 ///////////////////////////////////////////////////////////////////////////////
28 #include "AliMetaData.h"
35 //_____________________________________________________________________________
36 AliMetaData::AliMetaData() :
43 // default constructor
44 // the default values mean no selection
48 //_____________________________________________________________________________
49 AliMetaData::AliMetaData(const char* name, Int_t firstRun, Int_t lastRun,
62 //_____________________________________________________________________________
63 AliMetaData::AliMetaData(const AliMetaData& entry) :
66 fFirstRun(entry.fFirstRun),
67 fLastRun(entry.fLastRun),
68 fVersion(entry.fVersion)
74 //_____________________________________________________________________________
75 AliMetaData& AliMetaData::operator = (const AliMetaData& entry)
77 // assignment operator
80 fFirstRun = entry.fFirstRun;
81 fLastRun = entry.fLastRun;
82 fVersion = entry.fVersion;
89 //_____________________________________________________________________________
90 const char* AliMetaData::GetName() const
92 // get the name ("Detector/DBType/DetSpecType", example: "ZDC/Calib/Pedestals")
97 //_____________________________________________________________________________
98 const char* AliMetaData::GetDetector() const
100 // get the detector's name (ZDC,ITS ...)
102 return fDetector.Data();
105 //_____________________________________________________________________________
106 const char* AliMetaData::GetDBType() const
108 // get the database type (Calib, Align ...)
110 return fDBType.Data();
113 //_____________________________________________________________________________
114 const char* AliMetaData::GetDetSpecType() const
116 // get the detector's specific type name (Pedestals, GainConst, DeadChannelMaps...)
118 return fDetSpecType.Data();
121 //_____________________________________________________________________________
122 void AliMetaData::EncodeName(){
123 // Encode name from single elements ("Detector", "DBType", "DetSpecType" -> "Detector/DBType/DetSpecType")
124 fName = fDetector+'/'+fDBType+'/'+fDetSpecType;
125 if(fDBType == "*" && fDetSpecType == "*") fName = fDetector+'/'+'*';
126 if(fDetector == "*" && fDBType == "*" && fDetSpecType == "*") fName = "*";
130 //_____________________________________________________________________________
131 void AliMetaData::DecodeName(){
132 // Decode name into single elements ("Detector/DBType/DetSpecType" -> "Detector", "DBType", "DetSpecType")
134 if(fName==""){fDetector=""; fDBType=""; fDetSpecType=""; return;}
136 while(fName.EndsWith("/")) fName.Remove(fName.Last('/'));
137 while(fName.BeginsWith("/")) fName.Remove(fName.First('/'),1);
139 // fName= "fDetector/fDBType/fDetSpecType
140 int nslashes=fName.CountChar('/');
142 if(nslashes>2){AliError("Wrong format!\n");fDetector=""; fDBType=""; fDetSpecType="";}
145 if(fName == "*"){fDetector="*"; fDBType="*"; fDetSpecType="*";}
146 else{AliError("Wrong format!\n"); fDetector=""; fDBType=""; fDetSpecType="";}
149 if(fName.EndsWith("*"))
150 {fDetector=fName(0, fName.Index('/')); fDBType="*"; fDetSpecType="*";}
151 else {AliError("Wrong format!\n"); fDetector=""; fDBType=""; fDetSpecType="";}
155 int firstsl=fName.First('/'), lastsl=fName.Last('/'), lgth=fName.Length();
156 fDetector=fName(0, firstsl);
157 fDBType=fName(firstsl+1, lastsl-(firstsl+1));
158 fDetSpecType=fName(lastsl+1, lgth-(lastsl+1));
163 //_____________________________________________________________________________
164 Bool_t AliMetaData::IsStrictlyValid(Int_t runNumber, AliMetaData* metaData) const
166 // check if the object is valid for runNumber. TRUE if metaData version is equal to this's version
168 if ((fFirstRun >= 0) && (runNumber < fFirstRun)) return kFALSE;
169 if ((fLastRun >= 0) && (runNumber > fLastRun)) return kFALSE;
171 if ((metaData->fVersion >= 0) && (metaData->fVersion != fVersion))
177 //_____________________________________________________________________________
178 Bool_t AliMetaData::IsValid(Int_t runNumber, AliMetaData* metaData) const
180 // check if the object is valid for runNumber. TRUE if metaData version less or equal wrt to this's
182 if ((fFirstRun >= 0) && (runNumber < fFirstRun)) return kFALSE;
183 if ((fLastRun >= 0) && (runNumber > fLastRun)) return kFALSE;
185 if ((metaData->fVersion >= 0) && (metaData->fVersion < fVersion))
191 //_____________________________________________________________________________
192 Int_t AliMetaData::Compare(const TObject* object) const
194 // check whether this is preferred to object
196 if (!object || !object->InheritsFrom(AliMetaData::Class())) return 1;
197 if (fVersion < ((AliMetaData*)object)->GetVersion()) return -1;
198 if (fVersion > ((AliMetaData*)object)->GetVersion()) return 1;
202 //_____________________________________________________________________________
203 Bool_t AliMetaData::Matches(const char* name, Int_t runNumber) const
205 // check whether name and run number match with this meta data
207 if ((fFirstRun >= 0) && (runNumber < fFirstRun)) return kFALSE;
208 if ((fLastRun >= 0) && (runNumber > fLastRun)) return kFALSE;
209 if (!TString(name).Contains(TRegexp(fName))) return kFALSE;
214 //_____________________________________________________________________________
215 Bool_t operator == (const AliMetaData& entry1, const AliMetaData& entry2)
217 // compare two DB entries
219 if (strcmp(entry1.GetName(), entry2.GetName()) != 0) return kFALSE;
220 if (entry1.GetFirstRun() != entry2.GetFirstRun()) return kFALSE;
221 if (entry1.GetLastRun() != entry2.GetLastRun()) return kFALSE;
222 if (entry1.GetVersion() != entry2.GetVersion()) return kFALSE;