newly implemented model for slow nucleon production
[u/mrichter/AliRoot.git] / EVGEN / AliGenHaloProtvino.cxx
index e9d8726..4466a19 100644 (file)
@@ -29,6 +29,7 @@
 #include <TPDGCode.h>
 #include <TSystem.h>
 
+#include "AliLog.h"
 #include "AliGenHaloProtvino.h"
 #include "AliRun.h"
 
@@ -123,8 +124,13 @@ void AliGenHaloProtvino::Init()
        Fatal("Init()", "No gas pressure file for given run period !");
     }
 
+    FILE* file = 0;
+    if (name) file = fopen(name, "r");
+    if (!file) {
+       AliError("No gas pressure file");
+       return;
+    }
 
-    FILE* file = fopen(name, "r");
     Float_t z;
     Int_t i;
     Float_t p[5];    
@@ -133,6 +139,7 @@ void AliGenHaloProtvino::Init()
     const Float_t kFlux         = 1.e11 / 25.e-9; // protons/s
     Float_t pFlux[5] = {0.2, 0.2, 0.3, 0.3, 1.0};
 
+    Int_t ncols = 0;
     if (fRunPeriod < 5) {
 //
 //  Ring 1   
@@ -140,7 +147,9 @@ void AliGenHaloProtvino::Init()
 
        for (i = 0; i < fGPASize; i++)
        {
-           fscanf(file, "%f %f %f %f %f %f", &z, &p[0], &p[1], &p[2] , &p[3], &p[4]);
+           ncols = fscanf(file, "%f %f %f %f %f %f", &z, &p[0], &p[1], &p[2] , &p[3], &p[4]);
+           if (ncols<0) break;
+
            fG1[i] = p[fRunPeriod];
            
            if (i > 0) {
@@ -154,7 +163,9 @@ void AliGenHaloProtvino::Init()
 //
        for (i = 0; i < fGPASize; i++)
        {
-           fscanf(file, "%f %f %f %f %f %f", &z, &p[0], &p[1], &p[2] , &p[3], &p[4]);
+           ncols = fscanf(file, "%f %f %f %f %f %f", &z, &p[0], &p[1], &p[2] , &p[3], &p[4]);
+           if (ncols<0) break;
+
            fG2[i] = p[fRunPeriod];
            if (i > 0) {
                fZ2[i] = fZ2[i-1] + z;
@@ -174,7 +185,9 @@ void AliGenHaloProtvino::Init()
     } else {
        for (i = 0; i < fGPASize; i++) 
        {
-           fscanf(file, "%f %e %e %e %e %e", &z, &p[0], &p[1], &p[2], &p[3], &p[4]);
+           ncols = fscanf(file, "%f %e %e %e %e %e", &z, &p[0], &p[1], &p[2], &p[3], &p[4]);
+           if (ncols<0) break;
+
            z /= 1000.;
            fG1[i] = p[4] * kCrossSection * kFlux;             // 1/m/s
            // 1/3 of nominal intensity at startup
@@ -196,18 +209,18 @@ void AliGenHaloProtvino::Init()
     Float_t sum1 = 0.;
     Float_t sum2 = 0.;
     
-    for (Int_t i = 0; i < 300; i++) {
-       Float_t z = 20.+i*1.;
-       z*=100;
-       Float_t wgt1 = GasPressureWeight(z);
-       Float_t wgt2 = GasPressureWeight(-z);
-//     printf("weight: %f %f %f %f %f \n", z, wgt1, wgt2, fZ1[20], fZ2[20]);
+    for (Int_t iz = 0; iz < 300; iz++) {
+       Float_t zpos = 20. + iz * 1.;
+       zpos *= 100;
+       Float_t wgt1 = GasPressureWeight( zpos);
+       Float_t wgt2 = GasPressureWeight(-zpos);
        sum1 += wgt1;
        sum2 += wgt2;
     }
     sum1/=250.;
     sum2/=250.;
     printf("\n %f %f \n \n", sum1, sum2);
+    delete file;
 }
 
 //____________________________________________________________
@@ -259,12 +272,15 @@ void AliGenHaloProtvino::Generate()
       }
 // Count tracks      
       nread++;
-      if (fNpart !=-1 && nread > fNpart) break;
+      if (fNpart !=-1 && nread >= fNpart) break;
   }
 //
 // Mean time between interactions
 //
-  Float_t dT = fTimePerEvent/nInt;   // sec 
+
+  Float_t dT = 0.;   // sec 
+  if (nInt > 0) 
+      dT = fTimePerEvent/nInt;   
   Float_t t  = 0;                    // sec
   
 //