#include <TSystem.h>
#include "AliGenHalo.h"
+#include "AliGenEventHeader.h"
#include "AliRun.h"
+#include "AliLog.h"
ClassImp(AliGenHalo)
{
// 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();
}
//
//
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];
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) {
//
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;
} 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
sum1/=250.;
sum2/=250.;
printf("\n %f %f \n \n", sum1, sum2);
+ delete file;
}
//____________________________________________________________
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;
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) {
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)
{
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);
+}
+
+