ROOT logo
//-------------------------------------------------------------------------
//                      Implementation of   Class AliCollisionNormalization
//
//  This class is used to store the vertex ditributions in the data
//  and in Monte Carlo, needed to compute the real number of
//  collisions a given sample is corresponding to.
//  The strategy matches what described in CERN-THESIS-2009-033 p 119.
//
//    Author:     Michele Floris, CERN
//-------------------------------------------------------------------------

#include "AliCollisionNormalization.h"
#include "AliPhysicsSelection.h"
#include "AliLog.h"
#include "TFile.h"
#include "TCanvas.h"
#include "AliGenPythiaEventHeader.h"
#include "AliGenDPMjetEventHeader.h"
#include "AliGenEventHeader.h"
#include "AliMCEvent.h"

ClassImp(AliCollisionNormalization)

const char * AliCollisionNormalization::fgkProcLabel[] = {"SD","DD","ND", "Unknown"};

AliCollisionNormalization::AliCollisionNormalization() :
  TObject(),
  fNbinsVz(0),
  fMinVz(0),
  fMaxVz(0),
  fZRange(9.99),
  fIsMC(0),
  fReferenceXS(0),
  fVerbose(0),
  fEnergy(900),
  fHistVzData       (0),
  fHistProcTypes    (0),
  fHistStatBin0     (0),
  fHistStat     (0),
  fInputEvents(0),   
  fPhysSelEvents(0),
  fBgEvents(0),      
  fAllEvents(0),     
  fAllEventsZRange(0),
  fAllEventsZRangeMult1(0), 
  fAllEventsInBin0ZRange(0),
  fTrigEffBin0(0)  
{

  // ctor

  fNbinsVz =  30;
  fMinVz   = -15;
  fMaxVz   = +15;

  for(Int_t iproc = 0; iproc < kNProcs; iproc++){
      fHistVzMCGen[iproc] = 0;
      fHistVzMCRec[iproc] = 0;
      fHistVzMCTrg[iproc] = 0;
  }
  
  
  BookAllHistos();
}

AliCollisionNormalization::AliCollisionNormalization(Int_t nbinz, Float_t minz, Float_t maxz):
  TObject(),
  fNbinsVz(0),
  fMinVz(0),
  fMaxVz(0),
  fZRange(9.99),
  fIsMC(0),
  fReferenceXS(0),
  fVerbose(0),
  fEnergy(900),
  fHistVzData       (0),
  fHistProcTypes    (0),
  fHistStatBin0     (0),
  fHistStat     (0),
  fInputEvents(0),   
  fPhysSelEvents(0),
  fBgEvents(0),      
  fAllEvents(0),     
  fAllEventsZRange(0),
  fAllEventsZRangeMult1(0), 
  fAllEventsInBin0ZRange(0),
  fTrigEffBin0(0)  
{

  // ctor, allows setting binning
  fNbinsVz = nbinz;
  fMinVz   = minz;
  fMaxVz   = maxz;

  for(Int_t iproc = 0; iproc < kNProcs; iproc++){
      fHistVzMCGen[iproc] = 0;
      fHistVzMCRec[iproc] = 0;
      fHistVzMCTrg[iproc] = 0;
  }

  BookAllHistos();
}

AliCollisionNormalization::AliCollisionNormalization(const char * dataFile, const char * dataListName, 
						     const char * mcFile,   const char * mcListName,
						     const char * eventStatFile) :
  TObject(),
  fNbinsVz(0),
  fMinVz(0),
  fMaxVz(0),
  fZRange(9.99),
  fIsMC(0),
  fReferenceXS(0),
  fVerbose(0),
  fEnergy(900),
  fHistVzData       (0),
  fHistProcTypes    (0),
  fHistStatBin0     (0),
  fHistStat     (0),
  fInputEvents(0),   
  fPhysSelEvents(0),
  fBgEvents(0),      
  fAllEvents(0),     
  fAllEventsZRange(0),
  fAllEventsZRangeMult1(0), 
  fAllEventsInBin0ZRange(0),
  fTrigEffBin0(0)  

{

  // ctor, loads histograms from file
  for(Int_t iproc = 0; iproc < kNProcs; iproc++){
      fHistVzMCGen[iproc] = 0;
      fHistVzMCRec[iproc] = 0;
      fHistVzMCTrg[iproc] = 0;
  }


  TFile * fdata = new TFile (dataFile);
  TFile * fmc   = new TFile (mcFile  );
  TFile * fstat = new TFile(eventStatFile);
  
  if (!fdata->IsOpen() || !fmc->IsOpen() || !fstat->IsOpen()) {
    AliFatal("Cannot open input file(s)");
  }
  
  TList * ldata = (TList*) fdata->Get(dataListName);
  TList * lmc   = (TList*) fmc  ->Get(mcListName  );

  AliCollisionNormalization * cndata = (AliCollisionNormalization*) ldata->FindObject("AliCollisionNormalization");
  AliCollisionNormalization * cnmc   = (AliCollisionNormalization*) lmc  ->FindObject("AliCollisionNormalization");


  // Assign or book all histos
  for(Int_t iproc = 0; iproc < kNProcs; iproc++){
    fHistVzMCGen[iproc]= cnmc->GetVzMCGen(iproc);
    fHistVzMCRec[iproc]= cnmc->GetVzMCRec(iproc);
    fHistVzMCTrg[iproc]= cnmc->GetVzMCTrg(iproc);
  }
  fHistVzData        = cndata->GetVzData();
  fHistProcTypes     = cnmc->GetHistProcTypes();
    
  fHistStatBin0      =  (TH1F*) fstat->Get("fHistStatistics_Bin0");
  fHistStat          =  (TH1F*) fstat->Get("fHistStatistics");
  
}


AliCollisionNormalization::~AliCollisionNormalization(){

  // dtor
  for(Int_t iproc = 0; iproc < kNProcs; iproc++){
    if(fHistVzMCGen[iproc]) { delete fHistVzMCGen[iproc]      ; fHistVzMCGen[iproc]      =0;}
    if(fHistVzMCRec[iproc]) { delete fHistVzMCRec[iproc]      ; fHistVzMCRec[iproc]      =0;}
    if(fHistVzMCTrg[iproc]) { delete fHistVzMCTrg[iproc]      ; fHistVzMCTrg[iproc]      =0;}    
  }
  
  if(fHistVzData       ) { delete fHistVzData       ; fHistVzData       =0;}
  if(fHistStatBin0     ) { delete fHistStatBin0     ; fHistStatBin0     =0;}
  if(fHistStat         ) { delete fHistStat         ; fHistStat         =0;}
  if(fHistProcTypes    ) { delete fHistProcTypes    ; fHistProcTypes    =0;}

}
  
void AliCollisionNormalization::BookAllHistos(){
  // books all histos
  // Book histos of vz distributions vs multiplicity
  // if vzOnly == kTRUE, it returns a 1d histo with vz dist only

  // Do not attach histos to the current directory
  Bool_t oldStatus = TH1::AddDirectoryStatus();
  TH1::AddDirectory(kFALSE);

  for(Int_t iproc = 0; iproc < kNProcs; iproc++){
    fHistVzMCGen [iproc]      = (TH2F*) BookVzHisto(TString("fHistVzMCGen")+ fgkProcLabel[iproc]      ,"Vz distribution of generated events vs rec multiplicity    ");
    fHistVzMCRec [iproc]      = (TH2F*) BookVzHisto(TString("fHistVzMCRec")+ fgkProcLabel[iproc]      ,"Vz distribution of reconstructed events vs rec multiplicity");
    fHistVzMCTrg [iproc]      = (TH2F*) BookVzHisto(TString("fHistVzMCTrg")+ fgkProcLabel[iproc]      ,"Vz distribution of triggered events vs rec multiplicity    ");    
  }
  fHistVzData        = (TH2F*) BookVzHisto("fHistVzData"       ,"Vz distribution of triggered events vs rec multiplicity    ");
  fHistProcTypes     = new TH1F   ("fHistProcTypes", "Number of events in the different process classes", kNProcs, -0.5 , kNProcs-0.5);

  fHistProcTypes->GetXaxis()->SetBinLabel(kProcSD+1,"SD");
  fHistProcTypes->GetXaxis()->SetBinLabel(kProcND+1,"ND");
  fHistProcTypes->GetXaxis()->SetBinLabel(kProcDD+1,"DD");
  fHistProcTypes->GetXaxis()->SetBinLabel(kProcUnknown+1,"Unknown");

  TH1::AddDirectory(oldStatus);

}

TH1 * AliCollisionNormalization::BookVzHisto(const char * name , const char * title, Bool_t vzOnly) {

  // Book histos of vz distributions vs multiplicity
  // if vzOnly == kTRUE, it returns a 1d histo with vz dist only

 
  // Do not attach histos to the current directory
  Bool_t oldStatus = TH1::AddDirectoryStatus();
  TH1::AddDirectory(kFALSE);

  TH1 * h;
  Double_t binLimitsVtx[] = {-30,-25,-20,-15,-10,-7,-5.5,-4,-3,-2,-1,0,1,2,3,4,5.5,7,10,15,20,25,30};
  if (vzOnly) {
    h = new TH1F(name,title,22,binLimitsVtx);
  } else {
    h = new TH2F(name,title,22,binLimitsVtx,100,Double_t(-0.5),Double_t(99.5));
  }
 
  h->SetXTitle("V_{z} (cm)");
  h->SetYTitle("n_{trk}");
  h->Sumw2();

  TH1::AddDirectory(oldStatus);

  return h;

}

TH2F * AliCollisionNormalization::GetVzMCGen (Int_t procType) { 

  //  returns MC gen histo. If proc type < 0 sums over all proc types, reweighting the XS

  if(procType>=0)  return fHistVzMCGen[procType] ;

  TH2F * sum = (TH2F*) fHistVzMCGen[kProcSD]->Clone();
  sum->Reset();

  for(Int_t iproc = 0; iproc < kProcUnknown; iproc++){
    sum->Add(fHistVzMCGen[iproc],GetProcessWeight(iproc));    
  }
  
  return sum;
}
TH2F *   AliCollisionNormalization::GetVzMCRec       (Int_t procType) { 

  //  returns MC rec histo. If proc type < 0 sums over all proc types, reweighting the XS

  if(procType>=0)  return fHistVzMCRec[procType] ;

  TH2F * sum = (TH2F*) fHistVzMCRec[kProcSD]->Clone();
  sum->Reset();

  for(Int_t iproc = 0; iproc < kProcUnknown; iproc++){
    sum->Add(fHistVzMCRec[iproc],GetProcessWeight(iproc));    
  }
  
  return sum;

}


TH2F *   AliCollisionNormalization::GetVzMCTrg       (Int_t procType) { 

  //  returns MC trg histo. If proc type < 0 sums over all proc types, reweighting the XS

  if(procType>=0)  return fHistVzMCTrg[procType] ;

  TH2F * sum = (TH2F*) fHistVzMCTrg[kProcSD]->Clone();
  sum->Reset();

  for(Int_t iproc = 0; iproc < kProcUnknown; iproc++){
    sum->Add(fHistVzMCTrg[iproc],GetProcessWeight(iproc));    
  }
  
  return sum;

}

Double_t AliCollisionNormalization::ComputeNint() {

  // Compute the number of collisions applying all corrections
  // TODO: check error propagation  

  TH1 * hVzData = fHistVzData->ProjectionX("_px",2,-1,"E"); // Skip zero bin 
  Int_t allEventsWithVertex = (Int_t) fHistVzData->Integral(0, fHistVzData->GetNbinsX()+1,
							    2, fHistVzData->GetNbinsY()+1); // include under/overflow!, skip 0 bin

  // Assign histos reweighted with measured XS
  TH2F * histVzMCGen = GetVzMCGen(-1);
  TH2F * histVzMCTrg = GetVzMCTrg(-1);
  TH2F * histVzMCRec = GetVzMCRec(-1);

  // Before we start: print number of input events to the physics
  // selection: this allows to crosscheck that all runs were
  // successfully processed (useful if running on grid: you may have a
  // crash without noticing it).

  fInputEvents = fHistStat->GetBinContent(1,1);
  fPhysSelEvents = fHistStat->GetBinContent( fHistStat->GetNbinsX(),1);

  AliInfo(Form("Input Events (No cuts: %d, After Phys. Sel.:%d)",
	       Int_t(fInputEvents),
	       Int_t(fPhysSelEvents))); // Fixme: will this change with a different trigger scheme?

  // Get or compute BG. This assumes the CINT1B suite
  Double_t triggeredEventsWith0MultWithBG = fHistVzData->Integral(0, fHistVzData->GetNbinsX()+1,1, 1);
  //  Double_t bg = 0; // This will include beam gas + accidentals
  if (fHistStatBin0->GetNbinsY() > 4) { // FIXME: we need a better criterion to decide...
    AliInfo("Using BG computed by Physics Selection");
    // WARNING
    // CHECK IF THE COMPUTATION OF BG OFFSET IS STILL OK, IN CASE OF CHANGES TO THE PHYSICS SELECTION
    Int_t bgOffset = 0; 
    Int_t nbiny = fHistStatBin0->GetNbinsY();
    for(Int_t ibiny =1; ibiny <= nbiny; ibiny++){
      bgOffset++;
      printf("%d, %s\n", bgOffset, fHistStatBin0->GetYaxis()->GetBinLabel(ibiny) );
      
      if(!strncmp("All B", fHistStatBin0->GetYaxis()->GetBinLabel(ibiny),5)) break;
      if((ibiny+1)==nbiny) AliFatal("Cannot compute bg offset");
    }
    
    if(fVerbose > 2) AliInfo(Form("BG Offset: %d",bgOffset));
    

    fBgEvents = fHistStatBin0->GetBinContent(fHistStatBin0->GetNbinsX(), bgOffset+AliPhysicsSelection::kStatRowBG);
    fBgEvents += fHistStatBin0->GetBinContent(fHistStatBin0->GetNbinsX(),bgOffset+AliPhysicsSelection::kStatRowAcc);
    Int_t cint1B = (Int_t) fHistStatBin0->GetBinContent(fHistStatBin0->GetNbinsX(),1);	
    if (cint1B != Int_t(triggeredEventsWith0MultWithBG)) {
      AliWarning(Form("Events in bin0 from physics selection and local counter not consistent: %d - %d", cint1B, Int_t(triggeredEventsWith0MultWithBG)));
    }
  } else {
    AliInfo("Computing BG using CINT1A/B/C/E, ignoring intensities");
    AliError("This will only work for early runs!!! USE BG FROM PHYSICS SELECTION INSTEAD");
    Int_t icol = fHistStatBin0->GetNbinsX();
    Int_t cint1B = (Int_t) fHistStatBin0->GetBinContent(icol,1);	
    Int_t cint1A = (Int_t) fHistStatBin0->GetBinContent(icol,2);	
    Int_t cint1C = (Int_t) fHistStatBin0->GetBinContent(icol,3);	
    Int_t cint1E = (Int_t) fHistStatBin0->GetBinContent(icol,4);      
    fBgEvents   = cint1A + cint1C-2*cint1E ; // FIXME: to be changed to take into account ratios of events
    if (cint1B != triggeredEventsWith0MultWithBG) {
      AliWarning(Form("Events in bin0 from physics selection and local counter not consistent: %d - %d", cint1B, (Int_t)triggeredEventsWith0MultWithBG));
    }
  }

  Double_t triggeredEventsWith0Mult = triggeredEventsWith0MultWithBG - fBgEvents; 
  if(fVerbose > 0) AliInfo(Form("Measured events with vertex: %d",allEventsWithVertex));
  Double_t bin0 = fHistVzData->Integral(0, fHistVzData->GetNbinsX()+1,
					1, 1);
  if(fVerbose > 0) AliInfo(Form("Zero Bin, Meas: %2.2f, BG: %2.2f, Meas - BG: %2.2f", bin0, fBgEvents, triggeredEventsWith0Mult)); 

  // This pointers are here so that I use the same names used in Jan Fiete's code (allows for faster/easier comparison)

  TH2* eTrig =    histVzMCTrg; 
  TH2* eTrigVtx = histVzMCRec; 
  TH1* eTrigVtxProjx = eTrigVtx->ProjectionX("eTrigVtxProjx", 2, eTrigVtx->GetNbinsX()+1);

  // compute trigger and vertex efficiency
  TH2 * effVtxTrig = (TH2*) histVzMCRec->Clone("effVtxTrig");
  effVtxTrig->Reset();
  effVtxTrig->Divide(histVzMCRec,histVzMCGen,1,1,"B");
  // Apply correction to data to get corrected events
  TH2 * correctedEvents = (TH2*) fHistVzData->Clone("correctedEvents");
  correctedEvents->Divide(effVtxTrig);

  //  TH1 * correctedEvents = fHistVzData->ProjectionX("eTrigVtxProjx", 2, eTrigVtx->GetNbinsX()+1); 

  // loop over vertex bins
  for (Int_t i = 1; i <= fHistVzData->GetNbinsX(); i++)
    {
      Double_t alpha = (Double_t) hVzData->GetBinContent(i) / allEventsWithVertex;
      Double_t events = alpha * triggeredEventsWith0Mult;
      
      // if (histVzMCRec->GetBinContent(i,1) == 0)
      //   continue;
      if (!eTrigVtxProjx->GetBinContent(i) || !eTrig->Integral(0, eTrig->GetNbinsX()+1, 1, 1))
        continue;

      Double_t fZ = eTrigVtxProjx->Integral(0, eTrigVtxProjx->GetNbinsX()+1) / eTrigVtxProjx->GetBinContent(i) *
        eTrig->GetBinContent(i, 1) / eTrig->Integral(0, eTrig->GetNbinsX()+1, 1, 1);

      events *= fZ;

      // multiply with trigger correction
      Double_t correction = histVzMCGen->GetBinContent(i,1)/histVzMCTrg->GetBinContent(i,1);
      events *= correction;

      if (fVerbose > 1) Printf("  Bin %d, alpha is %.2f%%, fZ is %.3f, number of events with 0 mult.: %.2f (MC comparison: %.2f)", i, alpha * 100., fZ, events, 
			       histVzMCTrg->GetBinContent(i,1));
      correctedEvents->SetBinContent(i, 1, events);
    }

  
  
  // Integrate correctedEvents over full z range
  fAllEvents       = correctedEvents->Integral(0, correctedEvents->GetNbinsX()+1,0, correctedEvents->GetNbinsY()+1);
  // Integrate correctedEvents over needed z range
  fAllEventsZRange = correctedEvents->Integral(correctedEvents->GetXaxis()->FindBin(-fZRange), correctedEvents->GetXaxis()->FindBin(fZRange-0.0001),
						       0, correctedEvents->GetNbinsY()+1);

  fAllEventsZRangeMult1 = correctedEvents->Integral(correctedEvents->GetXaxis()->FindBin(-fZRange), correctedEvents->GetXaxis()->FindBin(fZRange-0.0001), 
						    2,correctedEvents->GetNbinsY()+1);

  fAllEventsInBin0ZRange = correctedEvents->Integral(correctedEvents->GetXaxis()->FindBin(-fZRange), correctedEvents->GetXaxis()->FindBin(fZRange-0.0001),1,1);

  if(fVerbose > 1) AliInfo(Form("Results in |Vz| < %3.3f",fZRange));
  if(fVerbose > 1) AliInfo(Form(" Events in Bin0: %2.2f, With > 1 track: %2.2f, All corrected: %2.2f",
				fAllEventsInBin0ZRange,
				fAllEventsZRangeMult1,
				fAllEventsZRange));
  Int_t nbin = histVzMCTrg->GetNbinsX();
  fTrigEffBin0 =  histVzMCTrg->Integral(0,nbin+1,1,1)/histVzMCGen->Integral(0,nbin+1,1,1);
  if(fVerbose > 1) {    
    AliInfo(Form("Trigger Efficiency in the zero bin: %3.3f", fTrigEffBin0 ));
  }
  

  AliInfo(Form("Number of collisions in full phase space: %2.2f", fAllEvents));
//   effVtxTrig->Draw();
//   new TCanvas();
//   correctedEvents->Draw(); // FIXME: debug

  return fAllEvents;
}

Long64_t AliCollisionNormalization::Merge(TCollection* list)
{
  // Merge a list of AliCollisionNormalization objects with this
  // (needed for PROOF).  
  // Returns the number of merged objects (including this).

  if (!list)
    return 0;

  if (list->IsEmpty())
    return 1;

  TIterator* iter = list->MakeIterator();
  TObject* obj;
  
  // collections of all histograms
  const Int_t nHists = kNProcs*3+5;
  TList collections[nHists];

  Int_t count = 0;
  while ((obj = iter->Next())) {

    AliCollisionNormalization* entry = dynamic_cast<AliCollisionNormalization*> (obj);
    if (entry == 0) 
      continue;
    Int_t ihist = -1;

    for(Int_t iproc = 0; iproc < kNProcs; iproc++){
      if (entry->fHistVzMCGen[iproc]      ) collections[++ihist].Add(entry->fHistVzMCGen[iproc]      );
      if (entry->fHistVzMCRec[iproc]      ) collections[++ihist].Add(entry->fHistVzMCRec[iproc]      );
      if (entry->fHistVzMCTrg[iproc]      ) collections[++ihist].Add(entry->fHistVzMCTrg[iproc]      );
    }
    if (entry->fHistVzData       ) collections[++ihist].Add(entry->fHistVzData       );
    if (entry->fHistProcTypes    ) collections[++ihist].Add(entry->fHistProcTypes    );
    if (entry->fHistStatBin0     ) collections[++ihist].Add(entry->fHistStatBin0     );
    if (entry->fHistStat         ) collections[++ihist].Add(entry->fHistStat         );

    count++;
  }

  Int_t ihist = -1;
  for(Int_t iproc = 0; iproc < kNProcs; iproc++){
    if (fHistVzMCGen[iproc]      ) fHistVzMCGen[iproc]      ->Merge(&collections[++ihist]);
    if (fHistVzMCRec[iproc]      ) fHistVzMCRec[iproc]      ->Merge(&collections[++ihist]);
    if (fHistVzMCTrg[iproc]      ) fHistVzMCTrg[iproc]      ->Merge(&collections[++ihist]);

  }  
  if (fHistVzData       ) fHistVzData       ->Merge(&collections[++ihist]);
  if (fHistProcTypes    ) fHistProcTypes    ->Merge(&collections[++ihist]);
  if (fHistStatBin0     ) fHistStatBin0     ->Merge(&collections[++ihist]);
  if (fHistStat         ) fHistStat         ->Merge(&collections[++ihist]);
    
  
  delete iter;

  return count+1;
}

void AliCollisionNormalization::FillVzMCGen(Float_t vz, Int_t ntrk, AliMCEvent * mcEvt) {

  // Fill MC gen histo and the process types statistics

  Int_t evtype = GetProcessType(mcEvt);
  // When I fill gen histos, I also fill statistics of process types (used to detemine ratios afterwards).
  fHistProcTypes->Fill(evtype);
  fHistVzMCGen[evtype]->Fill(vz,ntrk);
}

void AliCollisionNormalization::FillVzMCRec(Float_t vz, Int_t ntrk, AliMCEvent * mcEvt){

  // Fill MC rec histo
  Int_t evtype = GetProcessType(mcEvt);
  fHistVzMCRec[evtype]->Fill(vz,ntrk);

}
void AliCollisionNormalization::FillVzMCTrg(Float_t vz, Int_t ntrk, AliMCEvent * mcEvt) {      

  // Fill MC trg histo
  Int_t evtype = GetProcessType(mcEvt);
  fHistVzMCTrg[evtype]->Fill(vz,ntrk);
}


Int_t AliCollisionNormalization::GetProcessType(const AliMCEvent * mcEvt) {

  // Determine if the event was generated with pythia or phojet and return the process type

  // Check if mcEvt is fine
  if (!mcEvt) {
    AliFatal("NULL mc event");
  } 

  // Determine if it was a pythia or phojet header, and return the correct process type
  AliGenPythiaEventHeader * headPy  = 0;
  AliGenDPMjetEventHeader * headPho = 0;
  AliGenEventHeader * htmp = mcEvt->GenEventHeader();
  if(!htmp) {
    AliFatal("Cannot Get MC Header!!");
  }
  if( TString(htmp->IsA()->GetName()) == "AliGenPythiaEventHeader") {
    headPy =  (AliGenPythiaEventHeader*) htmp;
  } else if (TString(htmp->IsA()->GetName()) == "AliGenDPMjetEventHeader") {
    headPho = (AliGenDPMjetEventHeader*) htmp;
  } else {
    AliError("Unknown header");
  }

  // Determine process type
  if(headPy)   {
    if(headPy->ProcessType() == 92 || headPy->ProcessType() == 93) {
      // single difractive
      return kProcSD;
    } else if (headPy->ProcessType() == 94) {
      // double diffractive
      return kProcDD;
    }
    else if(headPy->ProcessType() != 92 && headPy->ProcessType() != 93 && headPy->ProcessType() != 94) {    
      // non difractive
      return kProcND; 
    }
  } else if (headPho) {
    if(headPho->ProcessType() == 5 || headPho->ProcessType() == 6 ) {
      // single difractive
      return kProcSD;
    } else if (headPho->ProcessType() == 7) { 
      // double diffractive
      return kProcDD;      
    } else if(headPho->ProcessType() != 5 && headPho->ProcessType() != 6  && headPho->ProcessType() != 7 ) {
      // non difractive
      return kProcND; 
    }       
  }
  

  // no process type found?
  AliError(Form("Unknown header: %s", htmp->IsA()->GetName()));
  return kProcUnknown;
}

Double_t AliCollisionNormalization::GetProcessWeight(Int_t proc) {

  // Return a weight to be used when combining the MC histos to
  // compute efficiency, defined as the ratio XS in generator / XS
  // measured

  Float_t refSD,  refDD,  refND,  errorSD,  errorDD,  errorND;
  GetRelativeFractions(fReferenceXS,refSD,  refDD,  refND,  errorSD,  errorDD,  errorND);

  static Double_t total = fHistProcTypes->Integral();
  if (fHistProcTypes->GetBinContent(fHistProcTypes->FindBin(kProcUnknown)) > 0) {
    AliError("There were unknown processes!!!");
  }
  static Double_t lSD = fHistProcTypes->GetBinContent(fHistProcTypes->FindBin(kProcSD))/total;
  static Double_t lDD = fHistProcTypes->GetBinContent(fHistProcTypes->FindBin(kProcDD))/total;
  static Double_t lND = fHistProcTypes->GetBinContent(fHistProcTypes->FindBin(kProcND))/total;

  if (fVerbose > 2) {
    AliInfo(Form("Total MC evts: %f",total));
    AliInfo(Form(" Frac SD %4.4f", lSD));
    AliInfo(Form(" Frac DD %4.4f", lDD));
    AliInfo(Form(" Frac ND %4.4f", lND));
  }
  
  switch(proc) {
  case kProcSD:
    return refSD/lSD;
    break;
  case kProcDD:
    return refDD/lDD;
    break;
  case kProcND:
    return refND/lND;
    break;
  default:
    AliError("Unknown process");
  }
  
  return 0;

} 

void AliCollisionNormalization::GetRelativeFractions(Int_t origin, Float_t& refSD, Float_t& refDD, Float_t& refND, Float_t& errorSD, Float_t& errorDD, Float_t& errorND)
{
  // Returns fraction of XS (SD, ND, DD) and corresponding error
  // Stolen from Jan Fiete's drawSystematics macro

  // origin: 
  //   -1 = Pythia (test)
  //   0 = UA5
  //   1 = Data 1.8 TeV
  //   2 = Tel-Aviv
  //   3 = Durham
  //

  Double_t epsilon = 0.0001;
  if(TMath::Abs(fEnergy-900)<epsilon) {

    switch (origin)
      {
      case -10: // Pythia default at 7 GeV, 50% error
	AliInfo("PYTHIA x-sections");
	refSD = 0.192637; errorSD = refSD * 0.5;
	refDD = 0.129877; errorDD = refDD * 0.5;
	refND = 0.677486; errorND = 0;
	break;
	
      case -1: // Pythia default at 900 GeV, as test
	AliInfo("PYTHIA x-sections");
      refSD = 0.223788;
      refDD = 0.123315;
      refND = 0.652897;
      break;
      
      case 0: // UA5
	AliInfo("UA5 x-sections a la first paper");
	refSD = 0.153; errorSD = 0.05;
	refDD = 0.080; errorDD = 0.05;
	refND = 0.767; errorND = 0;
	break;
	
      case 10: // UA5
	AliInfo("UA5 x-sections hadron level definition for Pythia"); 
	// Fractions in Pythia with UA5 cuts selection for SD
	// ND: 0.688662
	// SD: 0.188588 --> this should be 15.3
	// DD: 0.122750
	refSD = 0.224 * 0.153 / 0.189; errorSD = 0.023 * 0.224 / 0.189;
	refDD = 0.095;                 errorDD = 0.06; 
	refND = 1.0 - refSD - refDD; errorND = 0;
	break;
	
      case 11: // UA5
	AliInfo("UA5 x-sections hadron level definition for Phojet"); 
	// Fractions in Phojet with UA5 cuts selection for SD
	// ND: 0.783573
	// SD: 0.151601 --> this should be 15.3
	// DD: 0.064827
	refSD = 0.191 * 0.153 / 0.152; errorSD = 0.023 * 0.191 / 0.152;
	refDD = 0.095;                 errorDD = 0.06; 
	refND = 1.0 - refSD - refDD; errorND = 0;
	break;
      case 2: // tel-aviv model
	AliInfo("Tel-aviv model x-sections");
	refSD = 0.171;
	refDD = 0.094;
	refND = 1 - refSD - refDD;
	break;
	
      case 3: // durham model
	AliInfo("Durham model x-sections");
	refSD = 0.190;
	refDD = 0.125;
	refND = 1 - refSD - refDD;
      break;
      default:
	AliFatal(Form("Unknown origin %d, Energy %f", origin, fEnergy));
      }
  }
  else if(TMath::Abs(fEnergy-1800)<epsilon) {     
    switch (origin)
      {
      case 20: // E710, 1.8 TeV
      AliInfo("E710 x-sections hadron level definition for Pythia");
      // ND: 0.705709
      // SD: 0.166590 --> this should be 15.9
      // DD: 0.127701
      refSD = 0.217 * 0.159 / 0.167; errorSD = 0.024 * 0.217 / 0.167;
      refDD = 0.075 * 1.43;          errorDD = 0.02 * 1.43; 
      refND = 1.0 - refSD - refDD; errorND = 0;
      break;
    
      case 21: // E710, 1.8 TeV
	AliInfo("E710 x-sections hadron level definition for Phojet"); 
	// ND: 0.817462
	// SD: 0.125506 --> this should be 15.9
	// DD: 0.057032
	refSD = 0.161 * 0.159 / 0.126; errorSD = 0.024 * 0.161 / 0.126;
	refDD = 0.075 * 1.43;         errorDD = 0.02 * 1.43;
	refND = 1.0 - refSD - refDD; errorND = 0;
	break;
	
      case 1: // data 1.8 TeV
	AliInfo("??? x-sections");
	refSD = 0.152;
	refDD = 0.092;
	refND = 1 - refSD - refDD;
	break;
      default:
	AliFatal(Form("Unknown origin %d, Energy %f", origin, fEnergy));
      }    
  } 
  else {
    AliFatal(Form("Unknown energy %f", fEnergy));
  }
    
}


 AliCollisionNormalization.cxx:1
 AliCollisionNormalization.cxx:2
 AliCollisionNormalization.cxx:3
 AliCollisionNormalization.cxx:4
 AliCollisionNormalization.cxx:5
 AliCollisionNormalization.cxx:6
 AliCollisionNormalization.cxx:7
 AliCollisionNormalization.cxx:8
 AliCollisionNormalization.cxx:9
 AliCollisionNormalization.cxx:10
 AliCollisionNormalization.cxx:11
 AliCollisionNormalization.cxx:12
 AliCollisionNormalization.cxx:13
 AliCollisionNormalization.cxx:14
 AliCollisionNormalization.cxx:15
 AliCollisionNormalization.cxx:16
 AliCollisionNormalization.cxx:17
 AliCollisionNormalization.cxx:18
 AliCollisionNormalization.cxx:19
 AliCollisionNormalization.cxx:20
 AliCollisionNormalization.cxx:21
 AliCollisionNormalization.cxx:22
 AliCollisionNormalization.cxx:23
 AliCollisionNormalization.cxx:24
 AliCollisionNormalization.cxx:25
 AliCollisionNormalization.cxx:26
 AliCollisionNormalization.cxx:27
 AliCollisionNormalization.cxx:28
 AliCollisionNormalization.cxx:29
 AliCollisionNormalization.cxx:30
 AliCollisionNormalization.cxx:31
 AliCollisionNormalization.cxx:32
 AliCollisionNormalization.cxx:33
 AliCollisionNormalization.cxx:34
 AliCollisionNormalization.cxx:35
 AliCollisionNormalization.cxx:36
 AliCollisionNormalization.cxx:37
 AliCollisionNormalization.cxx:38
 AliCollisionNormalization.cxx:39
 AliCollisionNormalization.cxx:40
 AliCollisionNormalization.cxx:41
 AliCollisionNormalization.cxx:42
 AliCollisionNormalization.cxx:43
 AliCollisionNormalization.cxx:44
 AliCollisionNormalization.cxx:45
 AliCollisionNormalization.cxx:46
 AliCollisionNormalization.cxx:47
 AliCollisionNormalization.cxx:48
 AliCollisionNormalization.cxx:49
 AliCollisionNormalization.cxx:50
 AliCollisionNormalization.cxx:51
 AliCollisionNormalization.cxx:52
 AliCollisionNormalization.cxx:53
 AliCollisionNormalization.cxx:54
 AliCollisionNormalization.cxx:55
 AliCollisionNormalization.cxx:56
 AliCollisionNormalization.cxx:57
 AliCollisionNormalization.cxx:58
 AliCollisionNormalization.cxx:59
 AliCollisionNormalization.cxx:60
 AliCollisionNormalization.cxx:61
 AliCollisionNormalization.cxx:62
 AliCollisionNormalization.cxx:63
 AliCollisionNormalization.cxx:64
 AliCollisionNormalization.cxx:65
 AliCollisionNormalization.cxx:66
 AliCollisionNormalization.cxx:67
 AliCollisionNormalization.cxx:68
 AliCollisionNormalization.cxx:69
 AliCollisionNormalization.cxx:70
 AliCollisionNormalization.cxx:71
 AliCollisionNormalization.cxx:72
 AliCollisionNormalization.cxx:73
 AliCollisionNormalization.cxx:74
 AliCollisionNormalization.cxx:75
 AliCollisionNormalization.cxx:76
 AliCollisionNormalization.cxx:77
 AliCollisionNormalization.cxx:78
 AliCollisionNormalization.cxx:79
 AliCollisionNormalization.cxx:80
 AliCollisionNormalization.cxx:81
 AliCollisionNormalization.cxx:82
 AliCollisionNormalization.cxx:83
 AliCollisionNormalization.cxx:84
 AliCollisionNormalization.cxx:85
 AliCollisionNormalization.cxx:86
 AliCollisionNormalization.cxx:87
 AliCollisionNormalization.cxx:88
 AliCollisionNormalization.cxx:89
 AliCollisionNormalization.cxx:90
 AliCollisionNormalization.cxx:91
 AliCollisionNormalization.cxx:92
 AliCollisionNormalization.cxx:93
 AliCollisionNormalization.cxx:94
 AliCollisionNormalization.cxx:95
 AliCollisionNormalization.cxx:96
 AliCollisionNormalization.cxx:97
 AliCollisionNormalization.cxx:98
 AliCollisionNormalization.cxx:99
 AliCollisionNormalization.cxx:100
 AliCollisionNormalization.cxx:101
 AliCollisionNormalization.cxx:102
 AliCollisionNormalization.cxx:103
 AliCollisionNormalization.cxx:104
 AliCollisionNormalization.cxx:105
 AliCollisionNormalization.cxx:106
 AliCollisionNormalization.cxx:107
 AliCollisionNormalization.cxx:108
 AliCollisionNormalization.cxx:109
 AliCollisionNormalization.cxx:110
 AliCollisionNormalization.cxx:111
 AliCollisionNormalization.cxx:112
 AliCollisionNormalization.cxx:113
 AliCollisionNormalization.cxx:114
 AliCollisionNormalization.cxx:115
 AliCollisionNormalization.cxx:116
 AliCollisionNormalization.cxx:117
 AliCollisionNormalization.cxx:118
 AliCollisionNormalization.cxx:119
 AliCollisionNormalization.cxx:120
 AliCollisionNormalization.cxx:121
 AliCollisionNormalization.cxx:122
 AliCollisionNormalization.cxx:123
 AliCollisionNormalization.cxx:124
 AliCollisionNormalization.cxx:125
 AliCollisionNormalization.cxx:126
 AliCollisionNormalization.cxx:127
 AliCollisionNormalization.cxx:128
 AliCollisionNormalization.cxx:129
 AliCollisionNormalization.cxx:130
 AliCollisionNormalization.cxx:131
 AliCollisionNormalization.cxx:132
 AliCollisionNormalization.cxx:133
 AliCollisionNormalization.cxx:134
 AliCollisionNormalization.cxx:135
 AliCollisionNormalization.cxx:136
 AliCollisionNormalization.cxx:137
 AliCollisionNormalization.cxx:138
 AliCollisionNormalization.cxx:139
 AliCollisionNormalization.cxx:140
 AliCollisionNormalization.cxx:141
 AliCollisionNormalization.cxx:142
 AliCollisionNormalization.cxx:143
 AliCollisionNormalization.cxx:144
 AliCollisionNormalization.cxx:145
 AliCollisionNormalization.cxx:146
 AliCollisionNormalization.cxx:147
 AliCollisionNormalization.cxx:148
 AliCollisionNormalization.cxx:149
 AliCollisionNormalization.cxx:150
 AliCollisionNormalization.cxx:151
 AliCollisionNormalization.cxx:152
 AliCollisionNormalization.cxx:153
 AliCollisionNormalization.cxx:154
 AliCollisionNormalization.cxx:155
 AliCollisionNormalization.cxx:156
 AliCollisionNormalization.cxx:157
 AliCollisionNormalization.cxx:158
 AliCollisionNormalization.cxx:159
 AliCollisionNormalization.cxx:160
 AliCollisionNormalization.cxx:161
 AliCollisionNormalization.cxx:162
 AliCollisionNormalization.cxx:163
 AliCollisionNormalization.cxx:164
 AliCollisionNormalization.cxx:165
 AliCollisionNormalization.cxx:166
 AliCollisionNormalization.cxx:167
 AliCollisionNormalization.cxx:168
 AliCollisionNormalization.cxx:169
 AliCollisionNormalization.cxx:170
 AliCollisionNormalization.cxx:171
 AliCollisionNormalization.cxx:172
 AliCollisionNormalization.cxx:173
 AliCollisionNormalization.cxx:174
 AliCollisionNormalization.cxx:175
 AliCollisionNormalization.cxx:176
 AliCollisionNormalization.cxx:177
 AliCollisionNormalization.cxx:178
 AliCollisionNormalization.cxx:179
 AliCollisionNormalization.cxx:180
 AliCollisionNormalization.cxx:181
 AliCollisionNormalization.cxx:182
 AliCollisionNormalization.cxx:183
 AliCollisionNormalization.cxx:184
 AliCollisionNormalization.cxx:185
 AliCollisionNormalization.cxx:186
 AliCollisionNormalization.cxx:187
 AliCollisionNormalization.cxx:188
 AliCollisionNormalization.cxx:189
 AliCollisionNormalization.cxx:190
 AliCollisionNormalization.cxx:191
 AliCollisionNormalization.cxx:192
 AliCollisionNormalization.cxx:193
 AliCollisionNormalization.cxx:194
 AliCollisionNormalization.cxx:195
 AliCollisionNormalization.cxx:196
 AliCollisionNormalization.cxx:197
 AliCollisionNormalization.cxx:198
 AliCollisionNormalization.cxx:199
 AliCollisionNormalization.cxx:200
 AliCollisionNormalization.cxx:201
 AliCollisionNormalization.cxx:202
 AliCollisionNormalization.cxx:203
 AliCollisionNormalization.cxx:204
 AliCollisionNormalization.cxx:205
 AliCollisionNormalization.cxx:206
 AliCollisionNormalization.cxx:207
 AliCollisionNormalization.cxx:208
 AliCollisionNormalization.cxx:209
 AliCollisionNormalization.cxx:210
 AliCollisionNormalization.cxx:211
 AliCollisionNormalization.cxx:212
 AliCollisionNormalization.cxx:213
 AliCollisionNormalization.cxx:214
 AliCollisionNormalization.cxx:215
 AliCollisionNormalization.cxx:216
 AliCollisionNormalization.cxx:217
 AliCollisionNormalization.cxx:218
 AliCollisionNormalization.cxx:219
 AliCollisionNormalization.cxx:220
 AliCollisionNormalization.cxx:221
 AliCollisionNormalization.cxx:222
 AliCollisionNormalization.cxx:223
 AliCollisionNormalization.cxx:224
 AliCollisionNormalization.cxx:225
 AliCollisionNormalization.cxx:226
 AliCollisionNormalization.cxx:227
 AliCollisionNormalization.cxx:228
 AliCollisionNormalization.cxx:229
 AliCollisionNormalization.cxx:230
 AliCollisionNormalization.cxx:231
 AliCollisionNormalization.cxx:232
 AliCollisionNormalization.cxx:233
 AliCollisionNormalization.cxx:234
 AliCollisionNormalization.cxx:235
 AliCollisionNormalization.cxx:236
 AliCollisionNormalization.cxx:237
 AliCollisionNormalization.cxx:238
 AliCollisionNormalization.cxx:239
 AliCollisionNormalization.cxx:240
 AliCollisionNormalization.cxx:241
 AliCollisionNormalization.cxx:242
 AliCollisionNormalization.cxx:243
 AliCollisionNormalization.cxx:244
 AliCollisionNormalization.cxx:245
 AliCollisionNormalization.cxx:246
 AliCollisionNormalization.cxx:247
 AliCollisionNormalization.cxx:248
 AliCollisionNormalization.cxx:249
 AliCollisionNormalization.cxx:250
 AliCollisionNormalization.cxx:251
 AliCollisionNormalization.cxx:252
 AliCollisionNormalization.cxx:253
 AliCollisionNormalization.cxx:254
 AliCollisionNormalization.cxx:255
 AliCollisionNormalization.cxx:256
 AliCollisionNormalization.cxx:257
 AliCollisionNormalization.cxx:258
 AliCollisionNormalization.cxx:259
 AliCollisionNormalization.cxx:260
 AliCollisionNormalization.cxx:261
 AliCollisionNormalization.cxx:262
 AliCollisionNormalization.cxx:263
 AliCollisionNormalization.cxx:264
 AliCollisionNormalization.cxx:265
 AliCollisionNormalization.cxx:266
 AliCollisionNormalization.cxx:267
 AliCollisionNormalization.cxx:268
 AliCollisionNormalization.cxx:269
 AliCollisionNormalization.cxx:270
 AliCollisionNormalization.cxx:271
 AliCollisionNormalization.cxx:272
 AliCollisionNormalization.cxx:273
 AliCollisionNormalization.cxx:274
 AliCollisionNormalization.cxx:275
 AliCollisionNormalization.cxx:276
 AliCollisionNormalization.cxx:277
 AliCollisionNormalization.cxx:278
 AliCollisionNormalization.cxx:279
 AliCollisionNormalization.cxx:280
 AliCollisionNormalization.cxx:281
 AliCollisionNormalization.cxx:282
 AliCollisionNormalization.cxx:283
 AliCollisionNormalization.cxx:284
 AliCollisionNormalization.cxx:285
 AliCollisionNormalization.cxx:286
 AliCollisionNormalization.cxx:287
 AliCollisionNormalization.cxx:288
 AliCollisionNormalization.cxx:289
 AliCollisionNormalization.cxx:290
 AliCollisionNormalization.cxx:291
 AliCollisionNormalization.cxx:292
 AliCollisionNormalization.cxx:293
 AliCollisionNormalization.cxx:294
 AliCollisionNormalization.cxx:295
 AliCollisionNormalization.cxx:296
 AliCollisionNormalization.cxx:297
 AliCollisionNormalization.cxx:298
 AliCollisionNormalization.cxx:299
 AliCollisionNormalization.cxx:300
 AliCollisionNormalization.cxx:301
 AliCollisionNormalization.cxx:302
 AliCollisionNormalization.cxx:303
 AliCollisionNormalization.cxx:304
 AliCollisionNormalization.cxx:305
 AliCollisionNormalization.cxx:306
 AliCollisionNormalization.cxx:307
 AliCollisionNormalization.cxx:308
 AliCollisionNormalization.cxx:309
 AliCollisionNormalization.cxx:310
 AliCollisionNormalization.cxx:311
 AliCollisionNormalization.cxx:312
 AliCollisionNormalization.cxx:313
 AliCollisionNormalization.cxx:314
 AliCollisionNormalization.cxx:315
 AliCollisionNormalization.cxx:316
 AliCollisionNormalization.cxx:317
 AliCollisionNormalization.cxx:318
 AliCollisionNormalization.cxx:319
 AliCollisionNormalization.cxx:320
 AliCollisionNormalization.cxx:321
 AliCollisionNormalization.cxx:322
 AliCollisionNormalization.cxx:323
 AliCollisionNormalization.cxx:324
 AliCollisionNormalization.cxx:325
 AliCollisionNormalization.cxx:326
 AliCollisionNormalization.cxx:327
 AliCollisionNormalization.cxx:328
 AliCollisionNormalization.cxx:329
 AliCollisionNormalization.cxx:330
 AliCollisionNormalization.cxx:331
 AliCollisionNormalization.cxx:332
 AliCollisionNormalization.cxx:333
 AliCollisionNormalization.cxx:334
 AliCollisionNormalization.cxx:335
 AliCollisionNormalization.cxx:336
 AliCollisionNormalization.cxx:337
 AliCollisionNormalization.cxx:338
 AliCollisionNormalization.cxx:339
 AliCollisionNormalization.cxx:340
 AliCollisionNormalization.cxx:341
 AliCollisionNormalization.cxx:342
 AliCollisionNormalization.cxx:343
 AliCollisionNormalization.cxx:344
 AliCollisionNormalization.cxx:345
 AliCollisionNormalization.cxx:346
 AliCollisionNormalization.cxx:347
 AliCollisionNormalization.cxx:348
 AliCollisionNormalization.cxx:349
 AliCollisionNormalization.cxx:350
 AliCollisionNormalization.cxx:351
 AliCollisionNormalization.cxx:352
 AliCollisionNormalization.cxx:353
 AliCollisionNormalization.cxx:354
 AliCollisionNormalization.cxx:355
 AliCollisionNormalization.cxx:356
 AliCollisionNormalization.cxx:357
 AliCollisionNormalization.cxx:358
 AliCollisionNormalization.cxx:359
 AliCollisionNormalization.cxx:360
 AliCollisionNormalization.cxx:361
 AliCollisionNormalization.cxx:362
 AliCollisionNormalization.cxx:363
 AliCollisionNormalization.cxx:364
 AliCollisionNormalization.cxx:365
 AliCollisionNormalization.cxx:366
 AliCollisionNormalization.cxx:367
 AliCollisionNormalization.cxx:368
 AliCollisionNormalization.cxx:369
 AliCollisionNormalization.cxx:370
 AliCollisionNormalization.cxx:371
 AliCollisionNormalization.cxx:372
 AliCollisionNormalization.cxx:373
 AliCollisionNormalization.cxx:374
 AliCollisionNormalization.cxx:375
 AliCollisionNormalization.cxx:376
 AliCollisionNormalization.cxx:377
 AliCollisionNormalization.cxx:378
 AliCollisionNormalization.cxx:379
 AliCollisionNormalization.cxx:380
 AliCollisionNormalization.cxx:381
 AliCollisionNormalization.cxx:382
 AliCollisionNormalization.cxx:383
 AliCollisionNormalization.cxx:384
 AliCollisionNormalization.cxx:385
 AliCollisionNormalization.cxx:386
 AliCollisionNormalization.cxx:387
 AliCollisionNormalization.cxx:388
 AliCollisionNormalization.cxx:389
 AliCollisionNormalization.cxx:390
 AliCollisionNormalization.cxx:391
 AliCollisionNormalization.cxx:392
 AliCollisionNormalization.cxx:393
 AliCollisionNormalization.cxx:394
 AliCollisionNormalization.cxx:395
 AliCollisionNormalization.cxx:396
 AliCollisionNormalization.cxx:397
 AliCollisionNormalization.cxx:398
 AliCollisionNormalization.cxx:399
 AliCollisionNormalization.cxx:400
 AliCollisionNormalization.cxx:401
 AliCollisionNormalization.cxx:402
 AliCollisionNormalization.cxx:403
 AliCollisionNormalization.cxx:404
 AliCollisionNormalization.cxx:405
 AliCollisionNormalization.cxx:406
 AliCollisionNormalization.cxx:407
 AliCollisionNormalization.cxx:408
 AliCollisionNormalization.cxx:409
 AliCollisionNormalization.cxx:410
 AliCollisionNormalization.cxx:411
 AliCollisionNormalization.cxx:412
 AliCollisionNormalization.cxx:413
 AliCollisionNormalization.cxx:414
 AliCollisionNormalization.cxx:415
 AliCollisionNormalization.cxx:416
 AliCollisionNormalization.cxx:417
 AliCollisionNormalization.cxx:418
 AliCollisionNormalization.cxx:419
 AliCollisionNormalization.cxx:420
 AliCollisionNormalization.cxx:421
 AliCollisionNormalization.cxx:422
 AliCollisionNormalization.cxx:423
 AliCollisionNormalization.cxx:424
 AliCollisionNormalization.cxx:425
 AliCollisionNormalization.cxx:426
 AliCollisionNormalization.cxx:427
 AliCollisionNormalization.cxx:428
 AliCollisionNormalization.cxx:429
 AliCollisionNormalization.cxx:430
 AliCollisionNormalization.cxx:431
 AliCollisionNormalization.cxx:432
 AliCollisionNormalization.cxx:433
 AliCollisionNormalization.cxx:434
 AliCollisionNormalization.cxx:435
 AliCollisionNormalization.cxx:436
 AliCollisionNormalization.cxx:437
 AliCollisionNormalization.cxx:438
 AliCollisionNormalization.cxx:439
 AliCollisionNormalization.cxx:440
 AliCollisionNormalization.cxx:441
 AliCollisionNormalization.cxx:442
 AliCollisionNormalization.cxx:443
 AliCollisionNormalization.cxx:444
 AliCollisionNormalization.cxx:445
 AliCollisionNormalization.cxx:446
 AliCollisionNormalization.cxx:447
 AliCollisionNormalization.cxx:448
 AliCollisionNormalization.cxx:449
 AliCollisionNormalization.cxx:450
 AliCollisionNormalization.cxx:451
 AliCollisionNormalization.cxx:452
 AliCollisionNormalization.cxx:453
 AliCollisionNormalization.cxx:454
 AliCollisionNormalization.cxx:455
 AliCollisionNormalization.cxx:456
 AliCollisionNormalization.cxx:457
 AliCollisionNormalization.cxx:458
 AliCollisionNormalization.cxx:459
 AliCollisionNormalization.cxx:460
 AliCollisionNormalization.cxx:461
 AliCollisionNormalization.cxx:462
 AliCollisionNormalization.cxx:463
 AliCollisionNormalization.cxx:464
 AliCollisionNormalization.cxx:465
 AliCollisionNormalization.cxx:466
 AliCollisionNormalization.cxx:467
 AliCollisionNormalization.cxx:468
 AliCollisionNormalization.cxx:469
 AliCollisionNormalization.cxx:470
 AliCollisionNormalization.cxx:471
 AliCollisionNormalization.cxx:472
 AliCollisionNormalization.cxx:473
 AliCollisionNormalization.cxx:474
 AliCollisionNormalization.cxx:475
 AliCollisionNormalization.cxx:476
 AliCollisionNormalization.cxx:477
 AliCollisionNormalization.cxx:478
 AliCollisionNormalization.cxx:479
 AliCollisionNormalization.cxx:480
 AliCollisionNormalization.cxx:481
 AliCollisionNormalization.cxx:482
 AliCollisionNormalization.cxx:483
 AliCollisionNormalization.cxx:484
 AliCollisionNormalization.cxx:485
 AliCollisionNormalization.cxx:486
 AliCollisionNormalization.cxx:487
 AliCollisionNormalization.cxx:488
 AliCollisionNormalization.cxx:489
 AliCollisionNormalization.cxx:490
 AliCollisionNormalization.cxx:491
 AliCollisionNormalization.cxx:492
 AliCollisionNormalization.cxx:493
 AliCollisionNormalization.cxx:494
 AliCollisionNormalization.cxx:495
 AliCollisionNormalization.cxx:496
 AliCollisionNormalization.cxx:497
 AliCollisionNormalization.cxx:498
 AliCollisionNormalization.cxx:499
 AliCollisionNormalization.cxx:500
 AliCollisionNormalization.cxx:501
 AliCollisionNormalization.cxx:502
 AliCollisionNormalization.cxx:503
 AliCollisionNormalization.cxx:504
 AliCollisionNormalization.cxx:505
 AliCollisionNormalization.cxx:506
 AliCollisionNormalization.cxx:507
 AliCollisionNormalization.cxx:508
 AliCollisionNormalization.cxx:509
 AliCollisionNormalization.cxx:510
 AliCollisionNormalization.cxx:511
 AliCollisionNormalization.cxx:512
 AliCollisionNormalization.cxx:513
 AliCollisionNormalization.cxx:514
 AliCollisionNormalization.cxx:515
 AliCollisionNormalization.cxx:516
 AliCollisionNormalization.cxx:517
 AliCollisionNormalization.cxx:518
 AliCollisionNormalization.cxx:519
 AliCollisionNormalization.cxx:520
 AliCollisionNormalization.cxx:521
 AliCollisionNormalization.cxx:522
 AliCollisionNormalization.cxx:523
 AliCollisionNormalization.cxx:524
 AliCollisionNormalization.cxx:525
 AliCollisionNormalization.cxx:526
 AliCollisionNormalization.cxx:527
 AliCollisionNormalization.cxx:528
 AliCollisionNormalization.cxx:529
 AliCollisionNormalization.cxx:530
 AliCollisionNormalization.cxx:531
 AliCollisionNormalization.cxx:532
 AliCollisionNormalization.cxx:533
 AliCollisionNormalization.cxx:534
 AliCollisionNormalization.cxx:535
 AliCollisionNormalization.cxx:536
 AliCollisionNormalization.cxx:537
 AliCollisionNormalization.cxx:538
 AliCollisionNormalization.cxx:539
 AliCollisionNormalization.cxx:540
 AliCollisionNormalization.cxx:541
 AliCollisionNormalization.cxx:542
 AliCollisionNormalization.cxx:543
 AliCollisionNormalization.cxx:544
 AliCollisionNormalization.cxx:545
 AliCollisionNormalization.cxx:546
 AliCollisionNormalization.cxx:547
 AliCollisionNormalization.cxx:548
 AliCollisionNormalization.cxx:549
 AliCollisionNormalization.cxx:550
 AliCollisionNormalization.cxx:551
 AliCollisionNormalization.cxx:552
 AliCollisionNormalization.cxx:553
 AliCollisionNormalization.cxx:554
 AliCollisionNormalization.cxx:555
 AliCollisionNormalization.cxx:556
 AliCollisionNormalization.cxx:557
 AliCollisionNormalization.cxx:558
 AliCollisionNormalization.cxx:559
 AliCollisionNormalization.cxx:560
 AliCollisionNormalization.cxx:561
 AliCollisionNormalization.cxx:562
 AliCollisionNormalization.cxx:563
 AliCollisionNormalization.cxx:564
 AliCollisionNormalization.cxx:565
 AliCollisionNormalization.cxx:566
 AliCollisionNormalization.cxx:567
 AliCollisionNormalization.cxx:568
 AliCollisionNormalization.cxx:569
 AliCollisionNormalization.cxx:570
 AliCollisionNormalization.cxx:571
 AliCollisionNormalization.cxx:572
 AliCollisionNormalization.cxx:573
 AliCollisionNormalization.cxx:574
 AliCollisionNormalization.cxx:575
 AliCollisionNormalization.cxx:576
 AliCollisionNormalization.cxx:577
 AliCollisionNormalization.cxx:578
 AliCollisionNormalization.cxx:579
 AliCollisionNormalization.cxx:580
 AliCollisionNormalization.cxx:581
 AliCollisionNormalization.cxx:582
 AliCollisionNormalization.cxx:583
 AliCollisionNormalization.cxx:584
 AliCollisionNormalization.cxx:585
 AliCollisionNormalization.cxx:586
 AliCollisionNormalization.cxx:587
 AliCollisionNormalization.cxx:588
 AliCollisionNormalization.cxx:589
 AliCollisionNormalization.cxx:590
 AliCollisionNormalization.cxx:591
 AliCollisionNormalization.cxx:592
 AliCollisionNormalization.cxx:593
 AliCollisionNormalization.cxx:594
 AliCollisionNormalization.cxx:595
 AliCollisionNormalization.cxx:596
 AliCollisionNormalization.cxx:597
 AliCollisionNormalization.cxx:598
 AliCollisionNormalization.cxx:599
 AliCollisionNormalization.cxx:600
 AliCollisionNormalization.cxx:601
 AliCollisionNormalization.cxx:602
 AliCollisionNormalization.cxx:603
 AliCollisionNormalization.cxx:604
 AliCollisionNormalization.cxx:605
 AliCollisionNormalization.cxx:606
 AliCollisionNormalization.cxx:607
 AliCollisionNormalization.cxx:608
 AliCollisionNormalization.cxx:609
 AliCollisionNormalization.cxx:610
 AliCollisionNormalization.cxx:611
 AliCollisionNormalization.cxx:612
 AliCollisionNormalization.cxx:613
 AliCollisionNormalization.cxx:614
 AliCollisionNormalization.cxx:615
 AliCollisionNormalization.cxx:616
 AliCollisionNormalization.cxx:617
 AliCollisionNormalization.cxx:618
 AliCollisionNormalization.cxx:619
 AliCollisionNormalization.cxx:620
 AliCollisionNormalization.cxx:621
 AliCollisionNormalization.cxx:622
 AliCollisionNormalization.cxx:623
 AliCollisionNormalization.cxx:624
 AliCollisionNormalization.cxx:625
 AliCollisionNormalization.cxx:626
 AliCollisionNormalization.cxx:627
 AliCollisionNormalization.cxx:628
 AliCollisionNormalization.cxx:629
 AliCollisionNormalization.cxx:630
 AliCollisionNormalization.cxx:631
 AliCollisionNormalization.cxx:632
 AliCollisionNormalization.cxx:633
 AliCollisionNormalization.cxx:634
 AliCollisionNormalization.cxx:635
 AliCollisionNormalization.cxx:636
 AliCollisionNormalization.cxx:637
 AliCollisionNormalization.cxx:638
 AliCollisionNormalization.cxx:639
 AliCollisionNormalization.cxx:640
 AliCollisionNormalization.cxx:641
 AliCollisionNormalization.cxx:642
 AliCollisionNormalization.cxx:643
 AliCollisionNormalization.cxx:644
 AliCollisionNormalization.cxx:645
 AliCollisionNormalization.cxx:646
 AliCollisionNormalization.cxx:647
 AliCollisionNormalization.cxx:648
 AliCollisionNormalization.cxx:649
 AliCollisionNormalization.cxx:650
 AliCollisionNormalization.cxx:651
 AliCollisionNormalization.cxx:652
 AliCollisionNormalization.cxx:653
 AliCollisionNormalization.cxx:654
 AliCollisionNormalization.cxx:655
 AliCollisionNormalization.cxx:656
 AliCollisionNormalization.cxx:657
 AliCollisionNormalization.cxx:658
 AliCollisionNormalization.cxx:659
 AliCollisionNormalization.cxx:660
 AliCollisionNormalization.cxx:661
 AliCollisionNormalization.cxx:662
 AliCollisionNormalization.cxx:663
 AliCollisionNormalization.cxx:664
 AliCollisionNormalization.cxx:665
 AliCollisionNormalization.cxx:666
 AliCollisionNormalization.cxx:667
 AliCollisionNormalization.cxx:668
 AliCollisionNormalization.cxx:669
 AliCollisionNormalization.cxx:670
 AliCollisionNormalization.cxx:671
 AliCollisionNormalization.cxx:672
 AliCollisionNormalization.cxx:673
 AliCollisionNormalization.cxx:674
 AliCollisionNormalization.cxx:675
 AliCollisionNormalization.cxx:676
 AliCollisionNormalization.cxx:677
 AliCollisionNormalization.cxx:678
 AliCollisionNormalization.cxx:679
 AliCollisionNormalization.cxx:680
 AliCollisionNormalization.cxx:681
 AliCollisionNormalization.cxx:682
 AliCollisionNormalization.cxx:683
 AliCollisionNormalization.cxx:684
 AliCollisionNormalization.cxx:685
 AliCollisionNormalization.cxx:686
 AliCollisionNormalization.cxx:687
 AliCollisionNormalization.cxx:688
 AliCollisionNormalization.cxx:689
 AliCollisionNormalization.cxx:690
 AliCollisionNormalization.cxx:691
 AliCollisionNormalization.cxx:692
 AliCollisionNormalization.cxx:693
 AliCollisionNormalization.cxx:694
 AliCollisionNormalization.cxx:695
 AliCollisionNormalization.cxx:696
 AliCollisionNormalization.cxx:697
 AliCollisionNormalization.cxx:698
 AliCollisionNormalization.cxx:699
 AliCollisionNormalization.cxx:700
 AliCollisionNormalization.cxx:701
 AliCollisionNormalization.cxx:702
 AliCollisionNormalization.cxx:703
 AliCollisionNormalization.cxx:704
 AliCollisionNormalization.cxx:705
 AliCollisionNormalization.cxx:706
 AliCollisionNormalization.cxx:707
 AliCollisionNormalization.cxx:708
 AliCollisionNormalization.cxx:709
 AliCollisionNormalization.cxx:710
 AliCollisionNormalization.cxx:711
 AliCollisionNormalization.cxx:712
 AliCollisionNormalization.cxx:713
 AliCollisionNormalization.cxx:714
 AliCollisionNormalization.cxx:715
 AliCollisionNormalization.cxx:716
 AliCollisionNormalization.cxx:717
 AliCollisionNormalization.cxx:718
 AliCollisionNormalization.cxx:719
 AliCollisionNormalization.cxx:720
 AliCollisionNormalization.cxx:721
 AliCollisionNormalization.cxx:722
 AliCollisionNormalization.cxx:723
 AliCollisionNormalization.cxx:724
 AliCollisionNormalization.cxx:725
 AliCollisionNormalization.cxx:726
 AliCollisionNormalization.cxx:727
 AliCollisionNormalization.cxx:728
 AliCollisionNormalization.cxx:729
 AliCollisionNormalization.cxx:730
 AliCollisionNormalization.cxx:731
 AliCollisionNormalization.cxx:732