]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVGEN/AliGenHalo.cxx
Update timestamps for new AMANDA simulation (17/02/2015)
[u/mrichter/AliRoot.git] / EVGEN / AliGenHalo.cxx
index 1789853515ea15785ce80e3854a8428f9b14939a..82031dab68cab887ab0dd691ff99ca18b494ccaf 100644 (file)
@@ -30,7 +30,9 @@
 #include <TSystem.h>
 
 #include "AliGenHalo.h"
+#include "AliGenEventHeader.h"
 #include "AliRun.h"
+#include "AliLog.h"
 
 ClassImp(AliGenHalo)
 
@@ -120,10 +122,14 @@ void AliGenHalo::Init()
 {
 // Initialisation
     fFile = fopen(fFileName,"r");
+    Int_t ir = 0;
+    
+    
     if (fFile) {
        printf("\n File %s opened for reading, %p ! \n ",  fFileName.Data(), (void*)fFile);
     } else {
        printf("\n Opening of file %s failed,  %p ! \n ",  fFileName.Data(), (void*)fFile);
+       return;
     }
 
     if (fNskip > 0) {
@@ -156,8 +162,14 @@ void AliGenHalo::Init()
        Fatal("Init()", "No gas pressure file for given run period !");
     }
 
-
-    FILE* file = fopen(name, "r");
+    
+    FILE* file = 0;
+    if (name) file = fopen(name, "r");
+    if (!file) {
+       AliError("No gas pressure file");
+       return;
+    }
+    
     Float_t z;
     Int_t i;
     Float_t p[5];    
@@ -173,7 +185,9 @@ void AliGenHalo::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]);
+           ir = fscanf(file, "%f %f %f %f %f %f", &z, &p[0], &p[1], &p[2] , &p[3], &p[4]);
+           if (ir == 0) break;
+           
            fG1[i] = p[fRunPeriod];
            
            if (i > 0) {
@@ -187,7 +201,9 @@ void AliGenHalo::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]);
+           ir = fscanf(file, "%f %f %f %f %f %f", &z, &p[0], &p[1], &p[2] , &p[3], &p[4]);
+           if (ir == 0) break;
+
            fG2[i] = p[fRunPeriod];
            if (i > 0) {
                fZ2[i] = fZ2[i-1] + z;
@@ -207,7 +223,8 @@ void AliGenHalo::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]);
+           ir = fscanf(file, "%f %e %e %e %e %e", &z, &p[0], &p[1], &p[2], &p[3], &p[4]);
+           if (ir == 0) break;
            z /= 1000.;
            fG1[i] = p[4] * kCrossSection * kFlux;             // 1/m/s
            // 1/3 of nominal intensity at startup
@@ -240,6 +257,7 @@ void AliGenHalo::Init()
     sum1/=250.;
     sum2/=250.;
     printf("\n %f %f \n \n", sum1, sum2);
+    delete file;
 }
 
 //____________________________________________________________
@@ -261,14 +279,15 @@ void AliGenHalo::Generate()
   if (first && (fNskip == 0)) ReadNextParticle();
   first = kFALSE;
   oldID = fLossID;
+  Int_t np = 0;
   
   while(1) {
       // Push particle to stack
       mass = TDatabasePDG::Instance()->GetParticle(fPdg)->Mass();
       p0  = TMath::Sqrt(fEkin * fEkin + 2. * mass * fEkin);
       txy = TMath::Sqrt(fDX * fDX + fDY * fDY);
-      if (txy == 1.) {
-         tz = 0;
+      if (txy > 1.) {
+         tz = 0.;
       } else {
          tz = - TMath::Sqrt(1. - txy);
       }
@@ -282,7 +301,7 @@ void AliGenHalo::Generate()
       origin[2] = 1950.;
 
       PushTrack(fTrackIt , -1, fPdg , p, origin, polar, fTS - 1950./2.9979e10, kPNoProcess, nt, fWS);
-      
+      np++;
       Int_t nc = ReadNextParticle();
       
       if (fLossID != oldID || nc == 0) {
@@ -290,9 +309,19 @@ void AliGenHalo::Generate()
          break;
       }
   }
+
   SetHighWaterMark(nt);
+  AliGenEventHeader* header = new AliGenEventHeader("HALO");
+  header->SetNProduced(np);
+  // Passes header either to the container or to gAlice
+  if (fContainer) {
+      header->SetName(fName);
+      fContainer->AddHeader(header);
+  } else {
+      gAlice->SetGenEventHeader(header);       
+  }
 }
+
 
 Float_t AliGenHalo::GasPressureWeight(Float_t zPrimary)
 {
@@ -381,3 +410,24 @@ void AliGenHalo::SkipEvents()
       }
     } 
 }
+void AliGenHalo::CountEvents()
+{
+    // Count total number of events
+    Int_t nev = 0;
+    Int_t oldID = -1;
+    Int_t nc = 1;
+    while (nc != -1)
+    {
+       nc = ReadNextParticle();
+       if (oldID != fLossID) {
+           oldID = fLossID;
+           nev++;
+           printf("Number of events %10d %10d \n", nev, oldID);
+       }
+    }
+
+
+    rewind(fFile);
+}
+
+