]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVGEN/AliGenHalo.cxx
only check correlation of global track and tpc only track multipliicty when running...
[u/mrichter/AliRoot.git] / EVGEN / AliGenHalo.cxx
index acaa53c8a4bef7dbef4283a8b03cf9d31ac07dab..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,19 @@ 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) {
+      // Skip the first fNskip events
+      SkipEvents();
     }
 //
 //
@@ -151,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];    
@@ -168,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) {
@@ -182,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;
@@ -202,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
@@ -235,6 +257,7 @@ void AliGenHalo::Init()
     sum1/=250.;
     sum2/=250.;
     printf("\n %f %f \n \n", sum1, sum2);
+    delete file;
 }
 
 //____________________________________________________________
@@ -252,24 +275,23 @@ void AliGenHalo::Generate()
   static Bool_t first = kTRUE;
   static Int_t  oldID = -1;
 //
-  if (first) {
-      ReadNextParticle();
-      first = kFALSE;
-      oldID = fLossID;
-  }
-  
-  
+
+  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);
+      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);
       }
       p[0] =  p0 * fDX;
       p[1] =  p0 * fDY;
       p[2] =  p0 * tz;
@@ -278,8 +300,8 @@ void AliGenHalo::Generate()
       origin[1] = fYS;
       origin[2] = 1950.;
 
-      PushTrack(fTrackIt , -1, fPdg , p, origin, polar, fTS, kPNoProcess, nt, fWS);
-
+      PushTrack(fTrackIt , -1, fPdg , p, origin, polar, fTS - 1950./2.9979e10, kPNoProcess, nt, fWS);
+      np++;
       Int_t nc = ReadNextParticle();
       
       if (fLossID != oldID || nc == 0) {
@@ -287,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)
 {
@@ -361,3 +393,41 @@ Int_t AliGenHalo::ReadNextParticle()
     fTS    *= 1.e-9;
     return (ncols);
 }
+
+void AliGenHalo::SkipEvents()
+{
+  //
+  // Skip the first fNskip events
+  Int_t skip = fNskip;
+  Int_t oldID = -1;
+
+  while (skip >= 0)
+    {
+      ReadNextParticle();
+      if (oldID != fLossID) {
+       oldID = fLossID;
+       skip--;
+      }
+    } 
+}
+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);
+}
+
+