]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Added contructor to create an object from the DCS file name (instead of the TMap)
authorshahoian <shahoian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 9 Apr 2010 16:52:50 +0000 (16:52 +0000)
committershahoian <shahoian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 9 Apr 2010 16:52:50 +0000 (16:52 +0000)
(using new AliLHCReader ReadSingleLHCDP method)
Added possibility to fill the object from the text file

STEER/AliLHCData.cxx
STEER/AliLHCData.h

index b54ea3e0b3d1d6ae63013d2bbcd3620f6312f92f..9ddcd76aa6344237b23302090759d7d47955ec51 100755 (executable)
@@ -42,6 +42,7 @@
 #include "AliLHCData.h"\r
 #include "TMap.h"\r
 #include "AliDCSArray.h"\r
 #include "AliLHCData.h"\r
 #include "TMap.h"\r
 #include "AliDCSArray.h"\r
+#include "AliLHCReader.h"\r
 #include <TString.h>\r
 #include <TObjArray.h>\r
 \r
 #include <TString.h>\r
 #include <TObjArray.h>\r
 \r
@@ -94,16 +95,38 @@ const Char_t* AliLHCData::fgkDCSColJaws[] = {
 \r
 //___________________________________________________________________\r
 AliLHCData::AliLHCData(const TMap* dcsMap, double tmin, double tmax)\r
 \r
 //___________________________________________________________________\r
 AliLHCData::AliLHCData(const TMap* dcsMap, double tmin, double tmax)\r
-  : fTMin(tmin),fTMax(tmax),fFillNumber(0),fData(0)\r
+  : fTMin(0),fTMax(0),fFillNumber(0),fData(0),fFile2Process(0),fMap2Process(0)\r
 {\r
 {\r
+  FillData(dcsMap,tmin,tmax);\r
+}\r
+\r
+//___________________________________________________________________\r
+AliLHCData::AliLHCData(const Char_t* dcsFile, double tmin, double tmax)\r
+  : fTMin(0),fTMax(0),fFillNumber(0),fData(0),fFile2Process(dcsFile),fMap2Process(0)\r
+{\r
+  FillData(dcsFile,tmin,tmax);\r
+}\r
+\r
+//___________________________________________________________________\r
+Bool_t AliLHCData::FillData(const TMap*   dcsMap,double tmin, double tmax)\r
+{\r
+  // process DCS map and fill all fields. \r
   Clear();\r
   Clear();\r
-  SetTMin(tmin);\r
-  SetTMax(tmax);\r
-  FillData(dcsMap);\r
+  fMap2Process = dcsMap;\r
+  FillData(tmin,tmax);\r
 }\r
 \r
 //___________________________________________________________________\r
 }\r
 \r
 //___________________________________________________________________\r
-Bool_t AliLHCData::FillData(const TMap* dcsMap, double tmin, double tmax)\r
+Bool_t AliLHCData::FillData(const Char_t* dcsFile,double tmin, double tmax)\r
+{\r
+  // process DCS file and fill all fields. \r
+  Clear();\r
+  fFile2Process = dcsFile;\r
+  FillData(tmin,tmax);\r
+}\r
+\r
+//___________________________________________________________________\r
+Bool_t AliLHCData::FillData(double tmin, double tmax)\r
 {\r
   // process DCS map and fill all fields. \r
   // Accept only entries with timestamp between tmin and tmax\r
 {\r
   // process DCS map and fill all fields. \r
   // Accept only entries with timestamp between tmin and tmax\r
@@ -115,43 +138,44 @@ Bool_t AliLHCData::FillData(const TMap* dcsMap, double tmin, double tmax)
   //\r
   // -------------------------- extract Fill Number\r
   int iEntry;\r
   //\r
   // -------------------------- extract Fill Number\r
   int iEntry;\r
-  TObjArray* arr = GetDCSEntry(dcsMap, fgkDCSNames[kFillNum],iEntry,fTMin,fTMax);\r
-  if (arr && iEntry>=0) SetFillNumber( ExtractInt( (AliDCSArray*)arr->At(iEntry), 0) );\r
+  TObjArray* arr = GetDCSEntry(fgkDCSNames[kFillNum],iEntry,fTMin,fTMax);\r
+  if (arr) SetFillNumber( ExtractInt( (AliDCSArray*)arr->At(iEntry), 0) );\r
+  if (fFile2Process) delete arr; // array was created on demand\r
   //\r
   for (int ibm=0;ibm<2;ibm++) {\r
     //\r
     sprintf(buff,fgkDCSNames[kBunchConf],ibm+1);         // ----- declared bunch configuration\r
   //\r
   for (int ibm=0;ibm<2;ibm++) {\r
     //\r
     sprintf(buff,fgkDCSNames[kBunchConf],ibm+1);         // ----- declared bunch configuration\r
-    FillBunchConfig(dcsMap, fBunchConfDecl[ibm], buff);\r
+    FillBunchConfig(fBunchConfDecl[ibm], buff);\r
     //\r
     sprintf(buff,fgkDCSNames[kBunchLgtFillB],ibm+1);     // ----- measured bunch configuration\r
     //\r
     sprintf(buff,fgkDCSNames[kBunchLgtFillB],ibm+1);     // ----- measured bunch configuration\r
-    FillBunchConfig(dcsMap, fBunchConfMeas[ibm], buff);\r
+    FillBunchConfig(fBunchConfMeas[ibm], buff);\r
     //\r
     sprintf(buff,fgkDCSNames[kBunchLgt],ibm+1);          // ----- measured bunch lenghts\r
     //\r
     sprintf(buff,fgkDCSNames[kBunchLgt],ibm+1);          // ----- measured bunch lenghts\r
-    FillBunchInfo(dcsMap, fBunchLengths[ibm],buff,ibm,kFALSE);  \r
+    FillBunchInfo(fBunchLengths[ibm],buff,ibm,kFALSE);  \r
     //\r
     sprintf(buff,fgkDCSNames[kIntBunchAv],ibm+1);        // ----- B-by-B intensities\r
     //\r
     sprintf(buff,fgkDCSNames[kIntBunchAv],ibm+1);        // ----- B-by-B intensities\r
-    FillBunchInfo(dcsMap, fIntensPerBunch[ibm],buff,ibm,kTRUE);\r
+    FillBunchInfo(fIntensPerBunch[ibm],buff,ibm,kTRUE);\r
     //\r
     //\r
     sprintf(buff,fgkDCSNames[kIntTot],ibm+1);            // ----- total intensities for beam 1 and 2\r
     //\r
     //\r
     sprintf(buff,fgkDCSNames[kIntTot],ibm+1);            // ----- total intensities for beam 1 and 2\r
-    FillScalarRecord(dcsMap, fIntensTotal[ibm], buff);\r
+    FillScalarRecord(fIntensTotal[ibm], buff);\r
     //\r
     sprintf(buff,fgkDCSNames[kIntTotAv],ibm+1);          // ----- total intensities for beam 1 and 2 from B-by-B average\r
     //\r
     sprintf(buff,fgkDCSNames[kIntTotAv],ibm+1);          // ----- total intensities for beam 1 and 2 from B-by-B average\r
-    FillScalarRecord(dcsMap, fIntensTotalAv[ibm], buff);\r
+    FillScalarRecord(fIntensTotalAv[ibm], buff);\r
     //\r
     sprintf(buff,fgkDCSNames[kBeamSzEmittH],ibm+1);      // ----- H emittance for beam 1 and 2 \r
     //\r
     sprintf(buff,fgkDCSNames[kBeamSzEmittH],ibm+1);      // ----- H emittance for beam 1 and 2 \r
-    FillScalarRecord(dcsMap, fEmittanceH[ibm], buff);\r
+    FillScalarRecord(fEmittanceH[ibm], buff);\r
     //\r
     sprintf(buff,fgkDCSNames[kBeamSzEmittV],ibm+1);      // ----- V emittance for beam 1 and 2 \r
     //\r
     sprintf(buff,fgkDCSNames[kBeamSzEmittV],ibm+1);      // ----- V emittance for beam 1 and 2 \r
-    FillScalarRecord(dcsMap, fEmittanceV[ibm], buff);\r
+    FillScalarRecord(fEmittanceV[ibm], buff);\r
     //\r
     sprintf(buff ,fgkDCSNames[kBeamSzSigH],   ibm+1);    // ----- H sigmas and errors for beam 1 and 2 \r
     sprintf(buff1,fgkDCSNames[kBeamSzSigHErr],ibm+1);\r
     //\r
     sprintf(buff ,fgkDCSNames[kBeamSzSigH],   ibm+1);    // ----- H sigmas and errors for beam 1 and 2 \r
     sprintf(buff1,fgkDCSNames[kBeamSzSigHErr],ibm+1);\r
-    FillScalarRecord(dcsMap, fBeamSigmaH[ibm], buff, buff1);\r
+    FillScalarRecord(fBeamSigmaH[ibm], buff, buff1);\r
     //\r
     sprintf(buff ,fgkDCSNames[kBeamSzSigV],   ibm+1);    // ----- V sigmas and errors for beam 1 and 2 \r
     sprintf(buff1,fgkDCSNames[kBeamSzSigVErr],ibm+1);\r
     //\r
     sprintf(buff ,fgkDCSNames[kBeamSzSigV],   ibm+1);    // ----- V sigmas and errors for beam 1 and 2 \r
     sprintf(buff1,fgkDCSNames[kBeamSzSigVErr],ibm+1);\r
-    FillScalarRecord(dcsMap, fBeamSigmaV[ibm], buff, buff1);\r
+    FillScalarRecord(fBeamSigmaV[ibm], buff, buff1);\r
     //\r
   }\r
   //\r
     //\r
   }\r
   //\r
@@ -162,46 +186,57 @@ Bool_t AliLHCData::FillData(const TMap* dcsMap, double tmin, double tmax)
     //\r
     sprintf(buff ,fgkDCSNames[kLumBunch], ilr ? 'R':'L');       // ---- BC-by-BC luminosity at IP2 and its error\r
     sprintf(buff1,fgkDCSNames[kLumBunchErr], ilr ? 'R':'L');\r
     //\r
     sprintf(buff ,fgkDCSNames[kLumBunch], ilr ? 'R':'L');       // ---- BC-by-BC luminosity at IP2 and its error\r
     sprintf(buff1,fgkDCSNames[kLumBunchErr], ilr ? 'R':'L');\r
-    FillBCLuminosities(dcsMap, fLuminPerBC[ilr], buff, buff1, 0); // BRAN L uses beam2 as a reference, BRAN R - beam1\r
+    FillBCLuminosities(fLuminPerBC[ilr], buff, buff1, 0); // BRAN L uses beam2 as a reference, BRAN R - beam1\r
     //\r
     sprintf(buff ,fgkDCSNames[kLumTot]   , ilr ? 'R':'L');       // ---- total luminosity at IP2 and its error\r
     sprintf(buff1,fgkDCSNames[kLumTotErr], ilr ? 'R':'L');\r
     //\r
     sprintf(buff ,fgkDCSNames[kLumTot]   , ilr ? 'R':'L');       // ---- total luminosity at IP2 and its error\r
     sprintf(buff1,fgkDCSNames[kLumTotErr], ilr ? 'R':'L');\r
-    FillScalarRecord(dcsMap, fLuminTotal[ilr], buff, buff1);\r
+    FillScalarRecord(fLuminTotal[ilr], buff, buff1);\r
     //\r
     sprintf(buff ,fgkDCSNames[kLumAcqMode], ilr ? 'R':'L');      // ---- luminosity acquisition mode\r
     //\r
     sprintf(buff ,fgkDCSNames[kLumAcqMode], ilr ? 'R':'L');      // ---- luminosity acquisition mode\r
-    FillAcqMode(dcsMap, fLuminAcqMode[ilr], buff);\r
+    FillAcqMode(fLuminAcqMode[ilr], buff);\r
     //\r
     sprintf(buff, fgkDCSNames[kLumCrossAng]   , ilr ? 'R':'L');  //----- crossing angle at IP2 and its error\r
     sprintf(buff1,fgkDCSNames[kLumCrossAngErr], ilr ? 'R':'L');\r
     //\r
     sprintf(buff, fgkDCSNames[kLumCrossAng]   , ilr ? 'R':'L');  //----- crossing angle at IP2 and its error\r
     sprintf(buff1,fgkDCSNames[kLumCrossAngErr], ilr ? 'R':'L');\r
-    FillScalarRecord(dcsMap, fCrossAngle[ilr], buff, buff1);\r
+    FillScalarRecord(fCrossAngle[ilr], buff, buff1);\r
     //    \r
   }\r
   //\r
   for (int icl=0;icl<kNCollimators;icl++) {             // ----- collimators positions\r
     for (int jaw=0;jaw<kNJaws;jaw++) {\r
       sprintf(buff,fgkDCSNames[kCollPos], fgkDCSColNames[icl],fgkDCSColJaws[jaw]);        \r
     //    \r
   }\r
   //\r
   for (int icl=0;icl<kNCollimators;icl++) {             // ----- collimators positions\r
     for (int jaw=0;jaw<kNJaws;jaw++) {\r
       sprintf(buff,fgkDCSNames[kCollPos], fgkDCSColNames[icl],fgkDCSColJaws[jaw]);        \r
-      FillScalarRecord(dcsMap, fCollimators[icl][jaw], buff);\r
+      FillScalarRecord(fCollimators[icl][jaw], buff);\r
     } // jaws\r
   } // collimators\r
   //\r
   //\r
   // RunControl info\r
     } // jaws\r
   } // collimators\r
   //\r
   //\r
   // RunControl info\r
-  FillStringRecord(dcsMap, fRCInjScheme, fgkDCSNames[kRCInjSch]);   // ---- active injection scheme\r
-  FillScalarRecord(dcsMap, fRCBeta, fgkDCSNames[kRCBeta]);          // ---- target beta \r
-  FillScalarRecord(dcsMap, fRCAngH, fgkDCSNames[kRCCrossAng]);      // ---- horisontal angle\r
-  FillScalarRecord(dcsMap, fRCAngV,fgkDCSNames[kRCVang] );          // ---- vertical angle\r
+  FillStringRecord(fRCInjScheme, fgkDCSNames[kRCInjSch]);   // ---- active injection scheme\r
+  FillScalarRecord(fRCBeta, fgkDCSNames[kRCBeta]);          // ---- target beta \r
+  FillScalarRecord(fRCAngH, fgkDCSNames[kRCCrossAng]);      // ---- horisontal angle\r
+  FillScalarRecord(fRCAngV,fgkDCSNames[kRCVang] );          // ---- vertical angle\r
   //\r
   return kTRUE;\r
 }\r
 \r
 //___________________________________________________________________\r
   //\r
   return kTRUE;\r
 }\r
 \r
 //___________________________________________________________________\r
-TObjArray* AliLHCData::GetDCSEntry(const TMap* dcsMap,const char* key,int &entry,double tmin,double tmax) const\r
+TObjArray* AliLHCData::GetDCSEntry(const char* key,int &entry,double tmin,double tmax) const\r
 {\r
 {\r
-  // extract array from the DCS map and find the first entry within the time limits\r
+  // extract array from the DCS map or file and find the first entry within the time limits\r
   entry = -1;\r
   entry = -1;\r
-  TObjArray* arr = (TObjArray*)dcsMap->GetValue(key);\r
+  TObjArray* arr;\r
+  if (fMap2Process) arr = (TObjArray*)fMap2Process->GetValue(key);\r
+  else if (fFile2Process) {\r
+    AliLHCReader rd;\r
+    arr = rd.ReadSingleLHCDP(fFile2Process,key);\r
+  }\r
+  else {\r
+    AliError("Neither DCS map nor DCS filename are set");\r
+    return 0;  \r
+  }\r
+  //\r
   if (!arr || !arr->GetEntriesFast()) { \r
     AliWarning(Form("No data for %s",key)); \r
   if (!arr || !arr->GetEntriesFast()) { \r
     AliWarning(Form("No data for %s",key)); \r
+    if (fMap2Process) delete arr; // created on demand\r
     return 0;\r
   }\r
   int ntot = arr->GetEntriesFast();\r
     return 0;\r
   }\r
   int ntot = arr->GetEntriesFast();\r
@@ -216,6 +251,8 @@ TObjArray* AliLHCData::GetDCSEntry(const TMap* dcsMap,const char* key,int &entry
     str += " : ";\r
     str += AliLHCDipValD::TimeAsString(tmax);\r
     AliWarning(Form("All entries for %s are outside the requested range:\n%s",key,str.Data()));\r
     str += " : ";\r
     str += AliLHCDipValD::TimeAsString(tmax);\r
     AliWarning(Form("All entries for %s are outside the requested range:\n%s",key,str.Data()));\r
+    if (fMap2Process) delete arr; // created on demand\r
+    return 0;\r
   }\r
   return arr;\r
 }\r
   }\r
   return arr;\r
 }\r
@@ -271,7 +308,7 @@ TObject* AliLHCData::FindRecValidFor(int start,int nrec, double tstamp) const
 }\r
 \r
 //___________________________________________________________________\r
 }\r
 \r
 //___________________________________________________________________\r
-Int_t AliLHCData::FillScalarRecord(const TMap* dcsMap, int refs[2], const char* rec, const char* recErr)\r
+Int_t AliLHCData::FillScalarRecord(int refs[2], const char* rec, const char* recErr)\r
 {\r
   // fill record for scalar value, optionally accompanied by measurement error \r
   //\r
 {\r
   // fill record for scalar value, optionally accompanied by measurement error \r
   //\r
@@ -283,12 +320,12 @@ Int_t AliLHCData::FillScalarRecord(const TMap* dcsMap, int refs[2], const char*
   refs[kStart] = fData.GetEntriesFast();\r
   refs[kNStor] = 0;\r
   //\r
   refs[kStart] = fData.GetEntriesFast();\r
   refs[kNStor] = 0;\r
   //\r
-  if ( !(arr=GetDCSEntry(dcsMap,rec,iEntry,fTMin,fTMax)) || iEntry<0 ) return -1;\r
+  if ( !(arr=GetDCSEntry(rec,iEntry,fTMin,fTMax)) ) return -1;\r
   nEntries = arr->GetEntriesFast();\r
   //\r
   int dim = 1;\r
   if (recErr) {\r
   nEntries = arr->GetEntriesFast();\r
   //\r
   int dim = 1;\r
   if (recErr) {\r
-    if ( !(arrE=GetDCSEntry(dcsMap,recErr,iEntryE,fTMin,fTMax)) || iEntryE<0 ) nEntriesE = -999;\r
+    if ( !(arrE=GetDCSEntry(recErr,iEntryE,fTMin,fTMax)) ) nEntriesE = -999;\r
     else nEntriesE = arrE->GetEntriesFast();\r
     dim += 1;\r
   }\r
     else nEntriesE = arrE->GetEntriesFast();\r
     dim += 1;\r
   }\r
@@ -324,11 +361,15 @@ Int_t AliLHCData::FillScalarRecord(const TMap* dcsMap, int refs[2], const char*
     refs[kNStor]++;\r
   }\r
   //\r
     refs[kNStor]++;\r
   }\r
   //\r
+  if (fFile2Process) {\r
+    delete arr;\r
+    delete arrE;\r
+  }\r
   return refs[kNStor];\r
 }\r
 \r
 //___________________________________________________________________\r
   return refs[kNStor];\r
 }\r
 \r
 //___________________________________________________________________\r
-Int_t AliLHCData::FillBunchConfig(const TMap* dcsMap, int refs[2],const char* rec)\r
+Int_t AliLHCData::FillBunchConfig(int refs[2],const char* rec)\r
 {\r
   // fill record for bunch configuration\r
   //\r
 {\r
   // fill record for bunch configuration\r
   //\r
@@ -339,7 +380,7 @@ Int_t AliLHCData::FillBunchConfig(const TMap* dcsMap, int refs[2],const char* re
   refs[kStart] = fData.GetEntriesFast();\r
   refs[kNStor] = 0;\r
   //\r
   refs[kStart] = fData.GetEntriesFast();\r
   refs[kNStor] = 0;\r
   //\r
-  if ( !(arr=GetDCSEntry(dcsMap,rec,iEntry,fTMin,fTMax)) || iEntry<0 ) return -1;\r
+  if ( !(arr=GetDCSEntry(rec,iEntry,fTMin,fTMax)) ) return -1;\r
   nEntries = arr->GetEntriesFast();\r
   //\r
   AliLHCDipValI* prevRecI=0;\r
   nEntries = arr->GetEntriesFast();\r
   //\r
   AliLHCDipValI* prevRecI=0;\r
@@ -364,11 +405,12 @@ Int_t AliLHCData::FillBunchConfig(const TMap* dcsMap, int refs[2],const char* re
     prevRecI = curValI;\r
   }\r
   //\r
     prevRecI = curValI;\r
   }\r
   //\r
+  if (fFile2Process) delete arr;\r
   return refs[kNStor];\r
 }\r
  \r
 //___________________________________________________________________\r
   return refs[kNStor];\r
 }\r
  \r
 //___________________________________________________________________\r
-Int_t AliLHCData::FillAcqMode(const TMap* dcsMap, int refs[2],const char* rec)\r
+Int_t AliLHCData::FillAcqMode(int refs[2],const char* rec)\r
 {\r
   // fill acquisition mode\r
   //\r
 {\r
   // fill acquisition mode\r
   //\r
@@ -379,7 +421,7 @@ Int_t AliLHCData::FillAcqMode(const TMap* dcsMap, int refs[2],const char* rec)
   refs[kStart] = fData.GetEntriesFast();\r
   refs[kNStor] = 0;\r
   //\r
   refs[kStart] = fData.GetEntriesFast();\r
   refs[kNStor] = 0;\r
   //\r
-  if ( !(arr=GetDCSEntry(dcsMap,rec,iEntry,fTMin,fTMax)) || iEntry<0 ) return -1;\r
+  if ( !(arr=GetDCSEntry(rec,iEntry,fTMin,fTMax)) ) return -1;\r
   nEntries = arr->GetEntriesFast();\r
   //\r
   AliLHCDipValI* prevRecI=0;\r
   nEntries = arr->GetEntriesFast();\r
   //\r
   AliLHCDipValI* prevRecI=0;\r
@@ -399,11 +441,12 @@ Int_t AliLHCData::FillAcqMode(const TMap* dcsMap, int refs[2],const char* rec)
     prevRecI = curValI;\r
   }\r
   //\r
     prevRecI = curValI;\r
   }\r
   //\r
+  if (fFile2Process) delete arr;\r
   return refs[kNStor];\r
 }\r
  \r
 //___________________________________________________________________\r
   return refs[kNStor];\r
 }\r
  \r
 //___________________________________________________________________\r
-Int_t AliLHCData::FillStringRecord(const TMap* dcsMap, int refs[2],const char* rec)\r
+Int_t AliLHCData::FillStringRecord(int refs[2],const char* rec)\r
 {\r
   // fill record with string value\r
   //\r
 {\r
   // fill record with string value\r
   //\r
@@ -415,7 +458,7 @@ Int_t AliLHCData::FillStringRecord(const TMap* dcsMap, int refs[2],const char* r
   refs[kStart] = fData.GetEntriesFast();\r
   refs[kNStor] = 0;\r
   //\r
   refs[kStart] = fData.GetEntriesFast();\r
   refs[kNStor] = 0;\r
   //\r
-  if ( !(arr=GetDCSEntry(dcsMap,rec,iEntry,fTMin,fTMax)) || iEntry<0 ) return -1;\r
+  if ( !(arr=GetDCSEntry(rec,iEntry,fTMin,fTMax)) ) return -1;\r
   nEntries = arr->GetEntriesFast();\r
   //\r
   while (iEntry<nEntries) {\r
   nEntries = arr->GetEntriesFast();\r
   //\r
   while (iEntry<nEntries) {\r
@@ -433,11 +476,12 @@ Int_t AliLHCData::FillStringRecord(const TMap* dcsMap, int refs[2],const char* r
     fData.Add(curValS);\r
     refs[kNStor]++;\r
   }\r
     fData.Add(curValS);\r
     refs[kNStor]++;\r
   }\r
+  if (fFile2Process) delete arr;\r
   return refs[kNStor];\r
 }\r
 \r
 //___________________________________________________________________\r
   return refs[kNStor];\r
 }\r
 \r
 //___________________________________________________________________\r
-Int_t AliLHCData::FillBunchInfo(const TMap* dcsMap, int refs[2],const char* rec, int ibm, Bool_t inRealSlots)\r
+Int_t AliLHCData::FillBunchInfo(int refs[2],const char* rec, int ibm, Bool_t inRealSlots)\r
 {\r
   // fill bunch properties for beam ibm\r
   // if inRealSlots = true, then the value is taken from bunchRFbucket/10, otherwise, the value \r
 {\r
   // fill bunch properties for beam ibm\r
   // if inRealSlots = true, then the value is taken from bunchRFbucket/10, otherwise, the value \r
@@ -450,7 +494,7 @@ Int_t AliLHCData::FillBunchInfo(const TMap* dcsMap, int refs[2],const char* rec,
   refs[kStart] = fData.GetEntriesFast();\r
   refs[kNStor] = 0;\r
   //\r
   refs[kStart] = fData.GetEntriesFast();\r
   refs[kNStor] = 0;\r
   //\r
-  if ( !(arr=GetDCSEntry(dcsMap,rec,iEntry,fTMin,fTMax)) || iEntry<0 ) return -1;\r
+  if ( !(arr=GetDCSEntry(rec,iEntry,fTMin,fTMax)) ) return -1;\r
   nEntries = arr->GetEntriesFast();\r
   //\r
   while (iEntry<nEntries) {\r
   nEntries = arr->GetEntriesFast();\r
   //\r
   while (iEntry<nEntries) {\r
@@ -486,12 +530,13 @@ Int_t AliLHCData::FillBunchInfo(const TMap* dcsMap, int refs[2],const char* rec,
     fData.Add(curValF);\r
     refs[kNStor]++;\r
   }\r
     fData.Add(curValF);\r
     refs[kNStor]++;\r
   }\r
+  if (fFile2Process) delete arr;\r
   return refs[kNStor];\r
   //\r
 }\r
  \r
 //___________________________________________________________________\r
   return refs[kNStor];\r
   //\r
 }\r
  \r
 //___________________________________________________________________\r
-Int_t AliLHCData::FillBCLuminosities(const TMap* dcsMap, int refs[2],const char* rec, const char* recErr, int useBeam)\r
+Int_t AliLHCData::FillBCLuminosities(int refs[2],const char* rec, const char* recErr, int useBeam)\r
 {\r
   // fill luminosities per bunch crossing\r
   //\r
 {\r
   // fill luminosities per bunch crossing\r
   //\r
@@ -502,7 +547,7 @@ Int_t AliLHCData::FillBCLuminosities(const TMap* dcsMap, int refs[2],const char*
   refs[kStart] = fData.GetEntriesFast();\r
   refs[kNStor] = 0;\r
   //\r
   refs[kStart] = fData.GetEntriesFast();\r
   refs[kNStor] = 0;\r
   //\r
-  if ( !(arr=GetDCSEntry(dcsMap,rec,iEntry,fTMin,fTMax)) || iEntry<0 ) return -1;\r
+  if ( !(arr=GetDCSEntry(rec,iEntry,fTMin,fTMax)) ) return -1;\r
   nEntries = arr->GetEntriesFast();\r
   //\r
   while (iEntry<nEntries) {\r
   nEntries = arr->GetEntriesFast();\r
   //\r
   while (iEntry<nEntries) {\r
@@ -538,7 +583,7 @@ Int_t AliLHCData::FillBCLuminosities(const TMap* dcsMap, int refs[2],const char*
     }\r
     //\r
     if (recErr) {\r
     }\r
     //\r
     if (recErr) {\r
-      if ( !(arrE=GetDCSEntry(dcsMap,recErr,iEntryE,fTMin,fTMax)) || iEntryE<0 ) nEntriesE = -999;\r
+      if ( !(arrE=GetDCSEntry(recErr,iEntryE,fTMin,fTMax)) || iEntryE<0 ) nEntriesE = -999;\r
       else nEntriesE = arrE->GetEntriesFast();\r
       dim += 1;\r
     }\r
       else nEntriesE = arrE->GetEntriesFast();\r
       dim += 1;\r
     }\r
@@ -579,6 +624,10 @@ Int_t AliLHCData::FillBCLuminosities(const TMap* dcsMap, int refs[2],const char*
     fData.Add(curValF);\r
     refs[kNStor]++;\r
   }\r
     fData.Add(curValF);\r
     refs[kNStor]++;\r
   }\r
+  if (fFile2Process) {\r
+    delete arr;\r
+    delete arrE;\r
+  }\r
   return refs[kNStor];\r
   //\r
 }\r
   return refs[kNStor];\r
   //\r
 }\r
@@ -734,7 +783,7 @@ void AliLHCData::Print(const Option_t* opt) const
   //\r
   for (int lr=0;lr<2;lr++) {\r
     printf("* Luminosity acq.mode, BRANB_4%c2        ",lr ? 'R':'L');\r
   //\r
   for (int lr=0;lr<2;lr++) {\r
     printf("* Luminosity acq.mode, BRANB_4%c2        ",lr ? 'R':'L');\r
-    PrintAux(full,fLuminAcqMode[lr]);\r
+    PrintAux(full,fLuminAcqMode[lr],"bit");\r
   } \r
   //\r
   for (int lr=0;lr<2;lr++) {\r
   } \r
   //\r
   for (int lr=0;lr<2;lr++) {\r
@@ -756,7 +805,7 @@ void AliLHCData::Print(const Option_t* opt) const
 }\r
 \r
 //___________________________________________________________________\r
 }\r
 \r
 //___________________________________________________________________\r
-void AliLHCData::PrintAux(Bool_t full, const Int_t refs[2]) const\r
+void AliLHCData::PrintAux(Bool_t full, const Int_t refs[2], const Option_t *opt) const\r
 {\r
   // aux method to print the reocrds of the same type\r
   int nrec = refs[kNStor];\r
 {\r
   // aux method to print the reocrds of the same type\r
   int nrec = refs[kNStor];\r
@@ -769,7 +818,7 @@ void AliLHCData::PrintAux(Bool_t full, const Int_t refs[2]) const
   int sz = ((AliLHCDipValI*)fData[refs[kStart]])->GetSizeTotal(); // dimension of the record\r
   Bool_t isStr = ((AliLHCDipValI*)fData[refs[kStart]])->IsTypeC();\r
   if ((!isStr && sz>2) || nrec>1) printf("\n"); // long record, open new line\r
   int sz = ((AliLHCDipValI*)fData[refs[kStart]])->GetSizeTotal(); // dimension of the record\r
   Bool_t isStr = ((AliLHCDipValI*)fData[refs[kStart]])->IsTypeC();\r
   if ((!isStr && sz>2) || nrec>1) printf("\n"); // long record, open new line\r
-  for (int i=0;i<nrec;i++) fData[refs[kStart]+i]->Print();\r
+  for (int i=0;i<nrec;i++) fData[refs[kStart]+i]->Print(opt);\r
   //\r
 }\r
 \r
   //\r
 }\r
 \r
@@ -781,6 +830,9 @@ void AliLHCData::Clear(const Option_t *)
   fFillNumber = 0;\r
   fTMin = 0;\r
   fTMax = 1e10;\r
   fFillNumber = 0;\r
   fTMin = 0;\r
   fTMax = 1e10;\r
+  fFile2Process = 0;\r
+  fMap2Process  = 0;\r
+  //\r
   for (int i=2;i--;) {\r
     fRCInjScheme[i] = 0;\r
     fRCBeta[i] = 0;\r
   for (int i=2;i--;) {\r
     fRCInjScheme[i] = 0;\r
     fRCBeta[i] = 0;\r
index 0e7e2e3a60ec5ef98b35ff5241e28de5af8e2a0a..c807ae8a883c794616a21cb37e1b12a5bd09ef02 100755 (executable)
@@ -37,6 +37,7 @@ class TObjArray;
 class AliDCSArray;\r
 class TString;\r
 class TMap;\r
 class AliDCSArray;\r
 class TString;\r
 class TMap;\r
+class AliLHCReader;\r
 \r
 \r
 class AliLHCData : public TObject\r
 \r
 \r
 class AliLHCData : public TObject\r
@@ -60,11 +61,13 @@ class AliLHCData : public TObject
   //le\r
  public:\r
   //\r
   //le\r
  public:\r
   //\r
- AliLHCData() : fTMin(0),fTMax(1e10),fFillNumber(0),fData(0) {Clear();}\r
-  AliLHCData(const TMap* dcsMap, double tmin=0, double tmax=1.e10);\r
+ AliLHCData() : fTMin(0),fTMax(1e10),fFillNumber(0),fData(0),fFile2Process(0),fMap2Process(0) {Clear();}\r
+  AliLHCData(const TMap*   dcsMap,  double tmin=0, double tmax=1.e10);\r
+  AliLHCData(const Char_t* dcsFile, double tmin=0, double tmax=1.e10);\r
   virtual ~AliLHCData() {}\r
   //\r
   virtual ~AliLHCData() {}\r
   //\r
-  Bool_t                FillData(const TMap* dcsMap, double tmin=0, double tmax=1.e20);\r
+  Bool_t                FillData(const TMap*   dcsMap,  double tmin=0, double tmax=1.e20);\r
+  Bool_t                FillData(const Char_t* dcsFile, double tmin=0, double tmax=1.e20);\r
   Double_t              GetTMin()                                    const {return fTMin;}\r
   Double_t              GetTMax()                                    const {return fTMax;}\r
   Int_t                 GetFillNumber()                              const {return fFillNumber;}\r
   Double_t              GetTMin()                                    const {return fTMin;}\r
   Double_t              GetTMax()                                    const {return fTMax;}\r
   Int_t                 GetFillNumber()                              const {return fFillNumber;}\r
@@ -72,7 +75,6 @@ class AliLHCData : public TObject
   void                  SetTMin(Double_t t)                                {fTMin = t<0?0:(t>1e10?1e10:t);}\r
   void                  SetTMax(Double_t t)                                {fTMax = t<0?0:(t>1e10?1e10:t);}\r
   virtual void          Print(const Option_t *opt="")                const;\r
   void                  SetTMin(Double_t t)                                {fTMin = t<0?0:(t>1e10?1e10:t);}\r
   void                  SetTMax(Double_t t)                                {fTMax = t<0?0:(t>1e10?1e10:t);}\r
   virtual void          Print(const Option_t *opt="")                const;\r
-  virtual void          Clear(const Option_t *opt="");\r
   //\r
   Int_t GetNBunchConfigMeasured(int bm)           const {return GoodPairID(bm)?fBunchConfMeas[bm][kNStor]:-1;}\r
   Int_t GetNBunchConfigDeclared(int bm)           const {return GoodPairID(bm)?fBunchConfDecl[bm][kNStor]:-1;}\r
   //\r
   Int_t GetNBunchConfigMeasured(int bm)           const {return GoodPairID(bm)?fBunchConfMeas[bm][kNStor]:-1;}\r
   Int_t GetNBunchConfigDeclared(int bm)           const {return GoodPairID(bm)?fBunchConfDecl[bm][kNStor]:-1;}\r
@@ -153,19 +155,21 @@ class AliLHCData : public TObject
   //\r
  protected:\r
   //\r
   //\r
  protected:\r
   //\r
-  void                  PrintAux(Bool_t full,const Int_t refs[2]) const;\r
-  TObjArray*            GetDCSEntry(const TMap* dcsMap,const char* key,int &entry,double tmin,double tmax) const;\r
-  Int_t                 FillScalarRecord(  const TMap* dcsMap, int refs[2], const char* rec, const char* recErr=0);\r
-  Int_t                 FillBunchConfig(   const TMap* dcsMap, int refs[2], const char* rec);\r
-  Int_t                 FillStringRecord(  const TMap* dcsMap, int refs[2], const char* rec);\r
-  Int_t                 FillAcqMode(       const TMap* dcsMap, int refs[2], const char* rec);\r
-  Int_t                 FillBunchInfo(     const TMap* dcsMap, int refs[2], const char* rec,int ibm, Bool_t inRealSlots);\r
-  Int_t                 FillBCLuminosities(const TMap* dcsMap, int refs[2], const char* rec, const char* recErr, Int_t useBeam);\r
+  Bool_t                FillData(double tmin=0, double tmax=1.e20);\r
+  virtual void          Clear(const Option_t *opt="");\r
+  void                  PrintAux(Bool_t full,const Int_t refs[2],const Option_t *opt="") const;\r
+  TObjArray*            GetDCSEntry(const char* key,int &entry,double tmin,double tmax) const;\r
+  Int_t                 FillScalarRecord(  int refs[2], const char* rec, const char* recErr=0);\r
+  Int_t                 FillBunchConfig(   int refs[2], const char* rec);\r
+  Int_t                 FillStringRecord(  int refs[2], const char* rec);\r
+  Int_t                 FillAcqMode(       int refs[2], const char* rec);\r
+  Int_t                 FillBunchInfo(     int refs[2], const char* rec,int ibm, Bool_t inRealSlots);\r
+  Int_t                 FillBCLuminosities(int refs[2], const char* rec, const char* recErr, Int_t useBeam);\r
   //\r
   Int_t                 ExtractInt(AliDCSArray* dcsArray,Int_t el)    const;\r
   Double_t              ExtractDouble(AliDCSArray* dcsArray,Int_t el) const;\r
   TString&              ExtractString(AliDCSArray* dcsArray)          const;\r
   //\r
   Int_t                 ExtractInt(AliDCSArray* dcsArray,Int_t el)    const;\r
   Double_t              ExtractDouble(AliDCSArray* dcsArray,Int_t el) const;\r
   TString&              ExtractString(AliDCSArray* dcsArray)          const;\r
- AliLHCData(const AliLHCData& src) : TObject(src),fTMin(0),fTMax(0),fFillNumber(0),fData(0) { /*dummy*/ }\r
+ AliLHCData(const AliLHCData& src) : TObject(src),fTMin(0),fTMax(0),fFillNumber(0),fData(0),fFile2Process(0),fMap2Process(0) { /*dummy*/ }\r
   AliLHCData& operator=(const AliLHCData& ) { /*dummy*/ return *this;}\r
   Int_t                 TimeDifference(double v1,double v2,double tol=0.9) const;\r
   Bool_t                IzZero(double val, double tol=1e-16)         const {return TMath::Abs(val)<tol;}\r
   AliLHCData& operator=(const AliLHCData& ) { /*dummy*/ return *this;}\r
   Int_t                 TimeDifference(double v1,double v2,double tol=0.9) const;\r
   Bool_t                IzZero(double val, double tol=1e-16)         const {return TMath::Abs(val)<tol;}\r
@@ -210,6 +214,11 @@ class AliLHCData : public TObject
   static const Char_t *fgkDCSNames[];                 // beam related DCS names to extract\r
   static const Char_t *fgkDCSColNames[];              // collimators to extract\r
   static const Char_t *fgkDCSColJaws[];               // names of collimator pieces\r
   static const Char_t *fgkDCSNames[];                 // beam related DCS names to extract\r
   static const Char_t *fgkDCSColNames[];              // collimators to extract\r
   static const Char_t *fgkDCSColJaws[];               // names of collimator pieces\r
+  //\r
+ private:\r
+  // non-persistent objects used at the filling time\r
+  const Char_t*   fFile2Process;                      //! name of DCS file\r
+  const TMap*     fMap2Process;                       //! DCS map to process \r
 \r
   ClassDef(AliLHCData,1)\r
 };\r
 \r
   ClassDef(AliLHCData,1)\r
 };\r