Fixed methods to store/read whole AliMagWrapCheb content to text file: for transfer...
authorshahoian <ruben.shahoyan@cern.ch>
Mon, 1 Dec 2014 18:42:46 +0000 (19:42 +0100)
committershahoian <ruben.shahoyan@cern.ch>
Mon, 1 Dec 2014 18:42:58 +0000 (19:42 +0100)
STEER/STEERBase/AliCheb3DCalc.cxx
STEER/STEERBase/AliCheb3DCalc.h
STEER/STEERBase/AliMagWrapCheb.cxx

index 89b45f6..097418e 100644 (file)
@@ -267,7 +267,7 @@ void AliCheb3DCalc::LoadData(FILE* stream)
   //
   ReadLine(buffs,stream); // NRows
   fNRows = buffs.Atoi(); 
-  if (fNRows<1) {Error("LoadData","Expected: '<number_of_rows>', found \"%s\"\nStop\n",buffs.Data());exit(1);}
+  if (fNRows<0 && !buffs.IsDigit()) {Error("LoadData","Expected: '<number_of_rows>', found \"%s\"\nStop\n",buffs.Data());exit(1);}
   //
   fNCols = 0;
   fNElemBound2D = 0;
@@ -292,7 +292,7 @@ void AliCheb3DCalc::LoadData(FILE* stream)
     fNCoefs += fCoefBound2D0[i];
   }
   //
-  if (fNCoefs<=0) {Error("LoadData","Negtive (%d) number of Chebychef coeffs. is obtained.\nStop\n",fNCoefs);exit(1);}
+  //  if (fNCoefs<=0) {Error("LoadData","Negtive (%d) number of Chebychef coeffs. is obtained.\nStop\n",fNCoefs);exit(1);}
   //
   InitCoefs(fNCoefs);
   for (int i=0;i<fNCoefs;i++) {
@@ -330,44 +330,50 @@ void AliCheb3DCalc::InitCols(int nc)
 {
   // Set max.number of significant columns in the coefs matrix
   fNCols = nc;
-  if (fTmpCf1) delete[] fTmpCf1;
-  fTmpCf1 = new Float_t [fNCols];
+  if (fTmpCf1) {delete[] fTmpCf1; fTmpCf1 = 0;}
+  if (fNCols>0) fTmpCf1 = new Float_t [fNCols];
 }
 
 //_______________________________________________
 void AliCheb3DCalc::InitRows(int nr)
 {
   // Set max.number of significant rows in the coefs matrix
-  if (fNColsAtRow) delete[] fNColsAtRow;
-  if (fColAtRowBg) delete[] fColAtRowBg;
-  if (fTmpCf0)     delete[] fTmpCf0;
+  if (fNColsAtRow) {delete[] fNColsAtRow; fNColsAtRow = 0;}
+  if (fColAtRowBg) {delete[] fColAtRowBg; fColAtRowBg = 0;}
+  if (fTmpCf0)     {delete[] fTmpCf0; fTmpCf0 = 0;}
   fNRows = nr;
-  fNColsAtRow = new UShort_t[fNRows];
-  fTmpCf0     = new Float_t [fNRows];
-  fColAtRowBg = new UShort_t[fNRows];
-  for (int i=fNRows;i--;) fNColsAtRow[i] = fColAtRowBg[i] = 0;
+  if (fNRows>0) {
+    fNColsAtRow = new UShort_t[fNRows];
+    fTmpCf0     = new Float_t [fNRows];
+    fColAtRowBg = new UShort_t[fNRows];
+    for (int i=fNRows;i--;) fNColsAtRow[i] = fColAtRowBg[i] = 0;
+  }
 }
 
 //_______________________________________________
 void AliCheb3DCalc::InitElemBound2D(int ne)
 {
   // Set max number of significant coefs for given row/column of coefs 3D matrix
-  if (fCoefBound2D0) delete[] fCoefBound2D0; 
-  if (fCoefBound2D1) delete[] fCoefBound2D1; 
+  if (fCoefBound2D0) {delete[] fCoefBound2D0; fCoefBound2D0 = 0;}
+  if (fCoefBound2D1) {delete[] fCoefBound2D1; fCoefBound2D1 = 0;}
   fNElemBound2D = ne;
-  fCoefBound2D0 = new UShort_t[fNElemBound2D];
-  fCoefBound2D1 = new UShort_t[fNElemBound2D];
-  for (int i=fNElemBound2D;i--;) fCoefBound2D0[i] = fCoefBound2D1[i] = 0;
+  if (fNElemBound2D>0) {
+    fCoefBound2D0 = new UShort_t[fNElemBound2D];
+    fCoefBound2D1 = new UShort_t[fNElemBound2D];
+    for (int i=fNElemBound2D;i--;) fCoefBound2D0[i] = fCoefBound2D1[i] = 0;
+  }
 }
 
 //_______________________________________________
 void AliCheb3DCalc::InitCoefs(int nc)
 {
   // Set total number of significant coefs
-  if (fCoefs) delete[] fCoefs; 
+  if (fCoefs) {delete[] fCoefs; fCoefs = 0;}
   fNCoefs = nc;
-  fCoefs = new Float_t [fNCoefs];
-  for (int i=fNCoefs;i--;) fCoefs[i] = 0.0;
+  if (fNCoefs>0) {
+    fCoefs = new Float_t [fNCoefs];
+    for (int i=fNCoefs;i--;) fCoefs[i] = 0.0;
+  }
 }
 
 //__________________________________________________________________________________________
index 938fac4..8e88d29 100644 (file)
@@ -13,7 +13,7 @@ class TSystem;
 
 // to decrease the compilable code size comment this define. This will exclude the routines 
 // used for the calculation and saving of the coefficients. 
-//#define _INC_CREATION_ALICHEB3D_
+#define _INC_CREATION_ALICHEB3D_
 
 // when _BRING_TO_BOUNDARY_ is defined, the point outside of the fitted folume is assumed
 // to be on the surface 
index 9050f24..09180ca 100644 (file)
@@ -779,8 +779,8 @@ void AliMagWrapCheb::LoadData(const char* inpfile)
   }
   //
   AliCheb3DCalc::ReadLine(buffs,stream);
-  if (!buffs.BeginsWith("END DIPOLE") || !buffs.Contains(GetName())) {
-    Error("LoadData","Expected: \"END DIPOLE\", found \"%s\"\nStop\n",buffs.Data());
+  if (!buffs.BeginsWith("END ") && !buffs.Contains(GetName())) {
+    Error("LoadData","Expected: \"END %s\", found \"%s\"\nStop\n",GetName(),buffs.Data());
     exit(1);
   }
   //
@@ -1222,13 +1222,13 @@ void AliMagWrapCheb::SaveData(const char* outfile) const
   fprintf(stream,"#\nEND SOLENOID\n");
   //
   // TPCInt part ---------------------------------------------------------
-  fprintf(stream,"# Set of Chebyshev parameterizations for ALICE magnetic field\nSTART %s\n",GetName());
+  //  fprintf(stream,"# Set of Chebyshev parameterizations for ALICE magnetic field\nSTART %s\n",GetName());
   fprintf(stream,"START TPCINT\n#Number of pieces\n%d\n",fNParamsTPC);
   for (int ip=0;ip<fNParamsTPC;ip++) GetParamTPCInt(ip)->SaveData(stream);
   fprintf(stream,"#\nEND TPCINT\n");
   //
   // TPCRatInt part ---------------------------------------------------------
-  fprintf(stream,"# Set of Chebyshev parameterizations for ALICE magnetic field\nSTART %s\n",GetName());
+  //  fprintf(stream,"# Set of Chebyshev parameterizations for ALICE magnetic field\nSTART %s\n",GetName());
   fprintf(stream,"START TPCRatINT\n#Number of pieces\n%d\n",fNParamsTPCRat);
   for (int ip=0;ip<fNParamsTPCRat;ip++) GetParamTPCRatInt(ip)->SaveData(stream);
   fprintf(stream,"#\nEND TPCRatINT\n");