ROOT logo
// J/psi analysis in PbPb
// author: Ionut-Cristian Arsene, i.c.arsene@gsi.de
//         2012/Apr/11

#include <iostream>
using namespace std;

#include <TTimeStamp.h>

#ifndef ALICORRELATIONREDUCEDEVENT_H
#include "AliCorrelationReducedEvent.h"
#endif

#include "DstCommonMacros.C"
using namespace DstCommonMacros;

// function prototypes
void DefineHistograms(const Char_t* histClasses, const Char_t* output);
Bool_t IsEventSelected(AliCorrelationReducedEvent* event);
Bool_t IsLegSelected(AliCorrelationReducedTrack* track, Bool_t* legQualityMap);
Bool_t IsLegSelected(AliCorrelationReducedTrack* track);
Bool_t IsLegSelectedTRD(AliCorrelationReducedTrack* track, Int_t trdCut=-1, Int_t trdMinNtr=4, Float_t eleCut=0.7);
Bool_t IsLegSelectedTOF(AliCorrelationReducedTrack* track, Int_t tofCut=-1, Float_t lowExcl=0.3, Float_t highExcl=0.93);
Bool_t IsTrackUsedForMixing(UShort_t* idxArr, UShort_t size, UShort_t idx);
Bool_t IsPairSelected(AliCorrelationReducedPair* pair);
void RunDstPbPbJpsiAnalysis(const Char_t* output, const Char_t* inputfilename,
		            Int_t howMany/* = 5000*/, Int_t offset/* = 0*/);

TFile* gSaveFile=0x0;
// event plane friend file 
const Char_t* gkEPfile="dstTree_VZERO_TPC_recentered.root";

// mixing pool depth
const Int_t gkEventMixingPoolDepth = 100;

// centrality binning for the event mixing
const Int_t gkNCentRanges = 3;
/*Double_t gkEMCentLims[gkNCentRanges+1] = { 0.0,  2.5,  5.0,  7.5, 10.0, 
                                          12.5, 15.0, 17.5, 20.0, 22.5,
					  25.0, 27.5, 30.0, 32.5, 35.0, 
					  37.5, 40.0, 50.0, 60.0, 70.0, 80.0};*/
Double_t gkEMCentLims[gkNCentRanges+1] = { 0.0,  10.0, 40.0, 80.0};
// vertex binning for the event mixing					  
const Int_t gkNVtxRanges = 1;
//Double_t gkEMVtxLims[gkNVtxRanges+1] = {-10.0, -6.0, -2.0, 2.0, 6.0, 10.0};
Double_t gkEMVtxLims[gkNVtxRanges+1] = {-10.0, 10.0};

// event plane angle binning for the event mixing
const Int_t gkNPhiEPRanges = 1;
Double_t gkEMPhiEPLims[gkNPhiEPRanges+1] = {-1.5708, 1.5708};
//Double_t gkEMPhiEPLims[gkNPhiEPRanges+1] = {-1.5708, -1.2566, -0.94248, -0.62832, -0.31415926, 0.0, 0.31415926, 0.62832, 0.94248, 1.2566, 1.5708};
/*Double_t gkEMPhiEPLims[gkNPhiEPRanges+1] = {-1.5708, -1.4137, -1.2566, -1.0996, -0.94248, -0.78540, -0.62832, -0.47124, -0.31416, -0.15708, 0.0, 
                                             0.15708, 0.31416, 0.47124, 0.62832, 0.7854,   0.94248,  1.09956,  1.2566,   1.4137,   1.5708};*/
// which event plane to be used
const Int_t gkEPused = kVZERORP + 6*1 + 1;    // VZEROC 2nd harmonic event plane
//const Int_t gkEPused = kVZERORP + 6*0 + 1;    // VZEROA 2nd harmonic event plane
//const Int_t gkEPused = kTPCRP + 1;    // TPC harmonic event plane

// define detector cuts
const Int_t gkNDetCuts = 6;
const Char_t* gkLegDetCutNames[gkNDetCuts] = {
  "TPC", 
  "TPC_TRD4_1_0.7", "TPC_TRD4_1_0.8", "TPC_TRD4_1_0.9", 
  "TPC_TOF", "TPC_TRD4_1_0.9_TOF"
};

//_________________________________________________________________________________________________
void RunDstPbPbJpsiAnalysis(const Char_t* output, const Char_t* inputfilename, 
		            Int_t howMany/* = 5000*/, Int_t offset/* = 0*/) {
  //
  // J/psi analysis in Pb-Pb
  //
  cout << "start ..." << endl;
  TTimeStamp start;
  cout << "creating chain ..." << endl;
  // create the input chains -----------------------------------------
  Long64_t entries=0;
  TChain* friendChain=0x0;
  if(gkEPfile[0]!='\0')
    friendChain = new TChain("DstFriendTree");
  TChain* chain = GetChain(inputfilename, howMany, offset, entries, friendChain, gkEPfile);
  if(!chain) return;
  if(gkEPfile[0]!='\0' && !friendChain) return;
  AliCorrelationReducedEvent* event = new AliCorrelationReducedEvent();
  chain->SetBranchAddress("Event",&event);
  AliCorrelationReducedEventFriend* eventF = 0x0;
  if(gkEPfile[0]!='\0') {
    eventF = new AliCorrelationReducedEventFriend();
    friendChain->SetBranchAddress("Event",&eventF);
  }
  
  cout << "initialize event mixing lists ..." << endl;
      
  // define histograms -----------------------------------------------
  TString histClasses = "";
  histClasses += "Event_BeforeCuts;Event_AfterCuts;VZERORP;TPCRP;";
  histClasses += "OfflineTriggers;";
  histClasses += "TrackingFlags_Before;TrackQA_JpsiLegs_BeforeCuts_ITS_TPC_TRD_TOF;";
  for(Int_t iLegCut=0; iLegCut<gkNDetCuts; ++iLegCut) {
    histClasses += Form("TrackQA_JpsiLegs_%s_AfterCuts_ITS_TPC_TRD_TOF;TrackingFlags_%s_AfterCuts;",
                        gkLegDetCutNames[iLegCut], gkLegDetCutNames[iLegCut]);
    for(Int_t iVtx=0; iVtx<gkNVtxRanges; ++iVtx)
      histClasses += Form("PairQA_SE_%s_vtx%.1f_%.1f;", gkLegDetCutNames[iLegCut], gkEMVtxLims[iVtx], gkEMVtxLims[iVtx+1]);
  }
  
  // initialize event lists for mixing
  //const Int_t kNVarMixingRanges = (gkEventMixingType==0 ? 1 : (gkEventMixingType==1 ? gkNVtxRanges : gkNPhiEPRanges));
  gEMCategories = gkNDetCuts*gkNCentRanges*gkNPhiEPRanges*gkNVtxRanges;
  TList* list1[gkNDetCuts][gkNCentRanges][gkNVtxRanges][gkNPhiEPRanges];  // event master lists
  TList* list2[gkNDetCuts][gkNCentRanges][gkNVtxRanges][gkNPhiEPRanges];  // event master lists
  TList* selectedPosLegs[gkNDetCuts][gkNCentRanges][gkNVtxRanges][gkNPhiEPRanges][gkEventMixingPoolDepth];
  TList* selectedNegLegs[gkNDetCuts][gkNCentRanges][gkNVtxRanges][gkNPhiEPRanges][gkEventMixingPoolDepth];
  Int_t mixingPoolSize[gkNDetCuts][gkNCentRanges][gkNVtxRanges][gkNPhiEPRanges] = {{{{0}}}};
  UShort_t tracksUsedForMixing[gkNDetCuts][gkNCentRanges][gkNVtxRanges][gkNPhiEPRanges][100] = {{{{{0}}}}};
  UShort_t nTracksUsedForMixing[gkNDetCuts][gkNCentRanges][gkNVtxRanges][gkNPhiEPRanges] = {{{{0}}}};
  Bool_t eventHasCandidates[gkNDetCuts][gkNCentRanges][gkNVtxRanges][gkNPhiEPRanges] = {{{{kFALSE}}}};
  Bool_t fullListFound = kFALSE;
  for(Int_t iDetCut=0; iDetCut<gkNDetCuts; ++iDetCut) {
    for(Int_t iVtx=0; iVtx<gkNVtxRanges; ++iVtx) 
      histClasses += Form("PairQA_ME_%s_vtx%.1f_%.1f;", gkLegDetCutNames[iDetCut], gkEMVtxLims[iVtx], gkEMVtxLims[iVtx+1]);
  }
  for(Int_t iDetCut=0; iDetCut<gkNDetCuts; ++iDetCut) {
    for(Int_t iCent=0; iCent<gkNCentRanges; ++iCent) {
      for(Int_t iVtx=0; iVtx<gkNVtxRanges; ++iVtx) {
	for(Int_t iPhi=0; iPhi<gkNPhiEPRanges; ++iPhi) {
          list1[iDetCut][iCent][iVtx][iPhi] = new TList();
          list2[iDetCut][iCent][iVtx][iPhi] = new TList();
          for(Int_t i=0; i<gkEventMixingPoolDepth; ++i) {
            selectedPosLegs[iDetCut][iCent][iVtx][iPhi][i] = new TList();
            selectedPosLegs[iDetCut][iCent][iVtx][iPhi][i]->SetOwner();
            selectedNegLegs[iDetCut][iCent][iVtx][iPhi][i] = new TList();
            selectedNegLegs[iDetCut][iCent][iVtx][iPhi][i]->SetOwner();
          }
	}  // end loop over phi bins
      }  // end loop over vtx bins
    }  // end loop over centrality bins
  }  // end loop over leg cuts
  DefineHistograms(histClasses.Data(), output);  
  
  Float_t values[kNVars];
  Int_t trackIdMap[20000] = {-1};
  TClonesArray* trackList=0x0;
  TClonesArray* pairList=0x0;
  Bool_t legsQuality[2][gkNDetCuts] = {{kFALSE}};
  Bool_t allLegCutsOr[2] = {kFALSE};
  Bool_t pairQuality[gkNDetCuts] = {kFALSE};
  
  Float_t oldVertex = -999.; Float_t oldBC=-999.; Float_t oldCentVZERO=-999.; Float_t oldCentSPD=-999.; Float_t oldCentTPC=-999.;  
  Double_t mixingTime = 0.0;
  TTimeStamp startEventLoop;
  
  for(Int_t ie=0; ie<entries; ++ie) {  
    chain->GetEntry(ie);
    friendChain->GetEntry(ie);    
    
    gCurrentEvent = event;
    gCurrentEventFriend = eventF;
    if(ie%100==0) cout << "event " << ie << endl;    
    
    FillEventInfo(event, values, eventF);
    FillHistClass("Event_BeforeCuts", values);
    // event cuts
    if(!IsEventSelected(event)) continue;
    // check wheter this event is the same as the previous
    if(TMath::Abs(event->Vertex(2)-oldVertex)<0.0001 && TMath::Abs(event->CentralityVZERO()-oldCentVZERO)<0.001) {
      cout << "This event is the a copy of the previous event" << endl;
      cout << "OLD/NEW:  vtxZ " << oldVertex << "/" << event->Vertex(2)
           << "  BC " << oldBC << "/" << event->BC()
	   << "  CentVZERO " << oldCentVZERO << "/" << event->CentralityVZERO()
	   << "  CentSPD " << oldCentSPD << "/" << event->CentralitySPD()
	   << "  CentTPC " << oldCentTPC << "/" << event->CentralityTPC() << endl;
      ++ie;
      continue;
    }
    else {
      oldVertex = event->Vertex(2); oldBC = event->BC();
      oldCentVZERO = event->CentralityVZERO(); oldCentSPD = event->CentralitySPD();
      oldCentTPC = event->CentralityTPC();
    }
  
    for(UShort_t ibit=0; ibit<64; ++ibit) {
      FillEventOfflineTriggers(ibit, values);
      FillHistClass("OfflineTriggers", values);
    }

    // get the event vtx and centrality bins
    Float_t centVZERO = values[kCentVZERO];
    Float_t vtxZ = values[kVtxZ];
    Int_t binCent = -1;
    for(Int_t i=0; i<gkNCentRanges; ++i) {
      if(centVZERO>=gkEMCentLims[i] && centVZERO<gkEMCentLims[i+1]) {
	binCent = i; break;
      }
    }
    Int_t binVtxZ = -1;
    for(Int_t i=0; i<gkNVtxRanges; ++i) {
      if(vtxZ>=gkEMVtxLims[i] && vtxZ<gkEMVtxLims[i+1]) {
	binVtxZ = i; break;
      }
    }
    if(binCent==-1) {
      cout << "Warning: Centrality bin for this event is -1!! Something went wrong, check it out!" << endl;
      cout << "centVZERO = " << centVZERO << endl;
      continue;
    }
    if(binVtxZ==-1) {
      cout << "Warning: Vertex bin for this event is -1!! Something went wrong, check it out!" << endl;
      cout << "vtxZ = " << vtxZ << endl;
      continue;
    }
    
    Float_t phiEP = values[gkEPused];
    Int_t binPhiEP = -1;                                                                                                            
    for(Int_t i=0; i<gkNPhiEPRanges; ++i) {                                                                                         
      if(values[gkEPused]>=gkEMPhiEPLims[i] &&                                                                  
	values[gkEPused]<gkEMPhiEPLims[i+1]) {                                                                 
	  binPhiEP = i; break;                                                                                                        
      }                                                                                                                                
    }                                                                                                                                  
    if(binPhiEP==-1) {                                                                                                              
      cout << "Warning: EP Phi bin for this event is -1!! Something went wrong, check it out!" << endl;                             
      cout << "phi = " << values[gkEPused] << endl;                                                          
      continue;                                                                                                                        
    }                                                                                                                                  

    // Do the mixing if the events in the pool reached the maximum number of events
    if(fullListFound) {
      TTimeStamp startMix;
      for(Int_t iCut=0; iCut<gkNDetCuts; ++iCut) {
        for(Int_t iCent=0; iCent<gkNCentRanges; ++iCent) {
	  for(Int_t iVtx=0; iVtx<gkNVtxRanges; ++iVtx) {
	    for(Int_t iPhi=0; iPhi<gkNPhiEPRanges; ++iPhi) {
              if(mixingPoolSize[iCut][iCent][iVtx][iPhi]>=gkEventMixingPoolDepth) {
                values[kCentVZERO] = 0.5*(gkEMCentLims[iCent]+gkEMCentLims[iCent+1]);
                values[kVtxZ] = 0.5*(gkEMVtxLims[iVtx]+gkEMVtxLims[iVtx+1]);
	        values[gkEPused] = 0.5*(gkEMPhiEPLims[iPhi]+gkEMPhiEPLims[iPhi+1]);
                DoEventMixing(list1[iCut][iCent][iVtx][iPhi], list2[iCut][iCent][iVtx][iPhi], values, 
		              AliCorrelationReducedPair::kJpsiToEE, 
			      Form("PairQA_ME_%s_vtx%.1f_%.1f", gkLegDetCutNames[iCut], gkEMVtxLims[iVtx], gkEMVtxLims[iVtx+1]));
                mixingPoolSize[iCut][iCent][iVtx][iPhi] = 0;   // reset the mixing events number
              }
	    }  // end loop over phi ranges
	  }   // end loop over vertex ranges
        }   // end loop over centralities ranges
        TTimeStamp stopMix;
	mixingTime += Double_t(stopMix.GetSec())+Double_t(stopMix.GetNanoSec())/1.0e+9 - 
	             (Double_t(startMix.GetSec())+Double_t(startMix.GetNanoSec())/1.0e+9);
      }   // end loop over detector cuts 
      fullListFound = kFALSE;
    }  // end if (fullListFound)
    // reset the correct centrality, vtx and phi for this event
    values[kCentVZERO] = centVZERO;
    values[kVtxZ] = vtxZ;
    values[gkEPused] = phiEP;
    
    // make an index map for track access optimization
    AliCorrelationReducedTrack* track = 0x0;
    trackList = event->GetTracks();
    TIter nextTrack(trackList);
    for(Int_t i=0; i<20000; ++i) trackIdMap[i] = -1;
    for(Int_t it=0; it<event->NTracks(); ++it) {
      track = (AliCorrelationReducedTrack*)nextTrack();
      if(track)
        trackIdMap[track->TrackId()] = it;
    }
    
    pairList = event->GetPairs();
    TIter nextPair(pairList);
    AliCorrelationReducedPair* pair = 0x0;
    AliCorrelationReducedTrack* leg1 = 0x0;
    AliCorrelationReducedTrack* leg2 = 0x0;
    values[kNpairsSelected] = 0.0;
    
    // reset arrays
    for(Int_t iCut=0; iCut<gkNDetCuts; ++iCut) {
      for(Int_t iCent=0; iCent<gkNCentRanges; ++iCent) {
	for(Int_t iVtx=0; iVtx<gkNVtxRanges; ++iVtx) {
	  for(Int_t iPhi=0; iPhi<gkNPhiEPRanges; ++iPhi) {
	    nTracksUsedForMixing[iCut][iCent][iVtx][iPhi] = 0;
	    eventHasCandidates[iCut][iCent][iVtx][iPhi] = kFALSE;
	  }  // end loop over phi bins
	}  // end loop over vtx bins
      }  // end loop over centrality bins
    }  // end loop over detector cuts
        
    // loop over pairs
    for(Int_t ip=0; ip<event->NDielectrons(); ++ip) {
      pair = event->GetDielectronPair(ip);
      // pair cuts
      if(!IsPairSelected(pair)) continue;
      
      // reset flag arrays
      for(Int_t iCut=0; iCut<gkNDetCuts; ++iCut) {
	legsQuality[0][iCut] = kFALSE; legsQuality[1][iCut] = kFALSE;
	pairQuality[iCut] = kFALSE;
      }
      allLegCutsOr[0] = kFALSE; allLegCutsOr[1] = kFALSE;
      // apply cuts on the first leg
      if(trackIdMap[pair->LegId(0)]!=-1) {
        leg1 = event->GetTrack(trackIdMap[pair->LegId(0)]);
	FillTrackInfo(leg1, values);
	for(UShort_t iflag=0; iflag<kNTrackingFlags; ++iflag) {
	  FillTrackingFlag(leg1, iflag, values);
	  FillHistClass("TrackingFlags_Before", values);
	}
	FillHistClass("TrackQA_JpsiLegs_BeforeCuts_ITS_TPC_TRD_TOF", values);
	allLegCutsOr[0] = IsLegSelected(leg1, legsQuality[0]);
      }   // end if
      
      // apply cuts on the second leg
      if(trackIdMap[pair->LegId(1)]!=-1) {
        leg2 = event->GetTrack(trackIdMap[pair->LegId(1)]);
	FillTrackInfo(leg2, values);
	for(UShort_t iflag=0; iflag<kNTrackingFlags; ++iflag) {
	  FillTrackingFlag(leg2, iflag, values);
	  FillHistClass("TrackingFlags_Before", values);
	}
	FillHistClass("TrackQA_JpsiLegs_BeforeCuts_ITS_TPC_TRD_TOF", values);
	allLegCutsOr[1] = IsLegSelected(leg2, legsQuality[1]);
      }   // end if
      if(!allLegCutsOr[0] || !allLegCutsOr[1]) continue;
      Int_t nCutsPassed = 0;
      for(Int_t iCut=0; iCut<gkNDetCuts; ++iCut) {
	pairQuality[iCut] = legsQuality[0][iCut] && legsQuality[1][iCut];
	if(pairQuality[iCut]) ++nCutsPassed;
      }
      if(nCutsPassed==0) continue;
    
      FillPairInfo(pair, values);
                        
      // fill track leg histograms
      FillTrackInfo(leg1, values);
      for(Int_t iCut=0; iCut<gkNDetCuts; ++iCut) {
	if(pairQuality[iCut]) {
	  if(!IsTrackUsedForMixing(tracksUsedForMixing[iCut][binCent][binVtxZ][binPhiEP], 
	                           nTracksUsedForMixing[iCut][binCent][binVtxZ][binPhiEP], 
			           leg1->TrackId())) {
            FillHistClass(Form("TrackQA_JpsiLegs_%s_AfterCuts_ITS_TPC_TRD_TOF", gkLegDetCutNames[iCut]), values);
            for(UShort_t iflag=0; iflag<kNTrackingFlags; ++iflag) {
	      FillTrackingFlag(leg1, iflag, values);
	      FillHistClass(Form("TrackingFlags_%s_AfterCuts", gkLegDetCutNames[iCut]), values);
            }
	  }
	}
      }
      FillTrackInfo(leg2, values);
      for(Int_t iCut=0; iCut<gkNDetCuts; ++iCut) {
        if(pairQuality[iCut]) {
	  if(!IsTrackUsedForMixing(tracksUsedForMixing[iCut][binCent][binVtxZ][binPhiEP], 
	                           nTracksUsedForMixing[iCut][binCent][binVtxZ][binPhiEP], 
			           leg2->TrackId())) {
            FillHistClass(Form("TrackQA_JpsiLegs_%s_AfterCuts_ITS_TPC_TRD_TOF", gkLegDetCutNames[iCut]), values);
            for(UShort_t iflag=0; iflag<kNTrackingFlags; ++iflag) {
	      FillTrackingFlag(leg2, iflag, values);
	      FillHistClass(Form("TrackingFlags_%s_AfterCuts", gkLegDetCutNames[iCut]), values);
            }
	  }
	}
      }
      
      // fill single-event pair histograms
      for(Int_t iCut=0; iCut<gkNDetCuts; ++iCut) {
	if(pairQuality[iCut]) {
	  if(IsPairSelectedEM(values))
            FillHistClass(Form("PairQA_SE_%s_vtx%.1f_%.1f", gkLegDetCutNames[iCut], gkEMVtxLims[binVtxZ], gkEMVtxLims[binVtxZ+1]), values);
	}
      }
      
      values[kNpairsSelected] += 1.0;
      
      // add legs to the mixing lists
      for(Int_t iCut=0; iCut<gkNDetCuts; ++iCut) {
	if(pairQuality[iCut]) {
	  if(!IsTrackUsedForMixing(tracksUsedForMixing[iCut][binCent][binVtxZ][binPhiEP], 
	                           nTracksUsedForMixing[iCut][binCent][binVtxZ][binPhiEP], 
			           leg1->TrackId())) {
	    if(leg1->Charge()>0) selectedPosLegs[iCut][binCent][binVtxZ][binPhiEP][mixingPoolSize[iCut][binCent][binVtxZ][binPhiEP]]->Add(leg1->Clone());
            else selectedNegLegs[iCut][binCent][binVtxZ][binPhiEP][mixingPoolSize[iCut][binCent][binVtxZ][binPhiEP]]->Add(leg1->Clone());
	    tracksUsedForMixing[iCut][binCent][binVtxZ][binPhiEP][nTracksUsedForMixing[iCut][binCent][binVtxZ][binPhiEP]] = leg1->TrackId();
	    nTracksUsedForMixing[iCut][binCent][binVtxZ][binPhiEP] += 1;
	  }
	  if(!IsTrackUsedForMixing(tracksUsedForMixing[iCut][binCent][binVtxZ][binPhiEP], 
	                           nTracksUsedForMixing[iCut][binCent][binVtxZ][binPhiEP], 
			           leg2->TrackId())) {
	    if(leg2->Charge()>0) selectedPosLegs[iCut][binCent][binVtxZ][binPhiEP][mixingPoolSize[iCut][binCent][binVtxZ][binPhiEP]]->Add(leg2->Clone());
            else selectedNegLegs[iCut][binCent][binVtxZ][binPhiEP][mixingPoolSize[iCut][binCent][binVtxZ][binPhiEP]]->Add(leg2->Clone());
	    tracksUsedForMixing[iCut][binCent][binVtxZ][binPhiEP][nTracksUsedForMixing[iCut][binCent][binVtxZ][binPhiEP]] = leg2->TrackId();
	    nTracksUsedForMixing[iCut][binCent][binVtxZ][binPhiEP] += 1;
	  }
	  eventHasCandidates[iCut][binCent][binVtxZ][binPhiEP] = kTRUE;
	}  // end if(pairQuality)
      }
    }  // end loop over pairs
    
    // If this event has candidates, then store the event in the list for event mixing
    for(Int_t iCut=0; iCut<gkNDetCuts; ++iCut) {
      for(Int_t iCent=0; iCent<gkNCentRanges; ++iCent) {
	for(Int_t iVtx=0; iVtx<gkNVtxRanges; ++iVtx) {
	  for(Int_t iPhi=0; iPhi<gkNPhiEPRanges; ++iPhi) {
            if(!eventHasCandidates[iCut][iCent][iVtx][iPhi]) continue;
	    list1[iCut][iCent][iVtx][iPhi]->Add(selectedPosLegs[iCut][iCent][iVtx][iPhi][mixingPoolSize[iCut][iCent][iVtx][iPhi]]);
            list2[iCut][iCent][iVtx][iPhi]->Add(selectedNegLegs[iCut][iCent][iVtx][iPhi][mixingPoolSize[iCut][iCent][iVtx][iPhi]]);
            /*
	    cout << "event mixing category (cut/cent/vtx) " << iCut << "/" << iCent << "/" << iVtx << ", pool size (pos/neg): " 
                 << list1[iCut][iCent][iVtx]->GetEntries() 
                 << "/" << list2[iCut][iCent][iVtx]->GetEntries() << "; ntracks this entry (pos/neg): " 
                 << selectedPosLegs[iCut][iCent][iVtx][mixingPoolSize[iCut][iCent][iVtx]]->GetEntries() << "/" 
                 << selectedNegLegs[iCut][iCent][iVtx][mixingPoolSize[iCut][iCent][iVtx]]->GetEntries() << endl;
	    */
            mixingPoolSize[iCut][iCent][iVtx][iPhi] += 1;
	    if(mixingPoolSize[iCut][iCent][iVtx][iPhi]==gkEventMixingPoolDepth)
	      fullListFound = kTRUE;
	  }  // end loop over phi ranges
	}  // end loop over vertex ranges
      }  // end loop over centrality ranges
    }  // end loop over detector cuts
    
    FillHistClass("Event_AfterCuts", values);
    FillHistClass("TPCRP", values);
    FillHistClass("VZERORP", values);
  }  // end loop over events
  
  // Mixing the leftover events
  cout << "Leftover mixing ..." << endl;
  TTimeStamp startMix;
  for(Int_t iCut=0; iCut<gkNDetCuts; ++iCut) {
    for(Int_t iCent=0; iCent<gkNCentRanges; ++iCent) {
      for(Int_t iVtx=0; iVtx<gkNVtxRanges; ++iVtx) {
	for(Int_t iPhi=0; iPhi<gkNPhiEPRanges; ++iPhi) {
          values[kCentVZERO] = 0.5*(gkEMCentLims[iCent]+gkEMCentLims[iCent+1]);
	  values[kVtxZ] = 0.5*(gkEMVtxLims[iVtx]+gkEMVtxLims[iVtx+1]);
	  values[gkEPused] = 0.5*(gkEMPhiEPLims[iPhi]+gkEMPhiEPLims[iPhi+1]);
          DoEventMixing(list1[iCut][iCent][iVtx][iPhi], list2[iCut][iCent][iVtx][iPhi], values, 
	                AliCorrelationReducedPair::kJpsiToEE, 
			Form("PairQA_ME_%s_vtx%.1f_%.1f", gkLegDetCutNames[iCut], gkEMVtxLims[iVtx], gkEMVtxLims[iVtx+1])); // after the event mixing the lists will be cleared
          mixingPoolSize[iCut][iCent][iVtx][iPhi] = 0;   // reset the mixing events number
	}  // end loop over phi ranges
      }   // end loop over vertex ranges
    }   // end loop over centralities ranges
  }   // end loop over detector cuts 
  TTimeStamp stopMix;
  mixingTime += Double_t(stopMix.GetSec())+Double_t(stopMix.GetNanoSec())/1.0e+9 - 
	       (Double_t(startMix.GetSec())+Double_t(startMix.GetNanoSec())/1.0e+9);
  
  TTimeStamp stopEventLoop;
  
  WriteOutput(gSaveFile);
  
  cout << "Initialization time: " << startEventLoop.GetSec() - start.GetSec() << " seconds" << endl;
  cout << "Total looping time: " << stopEventLoop.GetSec() - startEventLoop.GetSec() << " seconds" << endl;
  cout << "Time spent in mixing: " << mixingTime << " seconds" << endl;
  cout << "Overall speed       : " << Double_t(stopEventLoop.GetSec() - startEventLoop.GetSec())/Double_t(entries) << " sec./event" << endl;
}


//__________________________________________________________________
Bool_t IsTrackUsedForMixing(UShort_t* idxArray, UShort_t size, UShort_t idx) {
  //
  // check whether track with idx was already added to the mixing list
  //
  for(Int_t i=0; i<size; ++i) {
    if(idxArray[i]==idx) return kTRUE;
  }
  return kFALSE;
}


//__________________________________________________________________
Bool_t IsEventSelected(AliCorrelationReducedEvent* event) {
  //
  // event selection
  //
  if(!event->IsPhysicsSelection()) return kFALSE;
  if(event->VertexNContributors()<1) return kFALSE;
  if(event->CentralityQuality()!=0) return kFALSE;
  if(event->CentralityVZERO()<-0.0001) return kFALSE;
  if(event->CentralityVZERO()>80.0) return kFALSE;
  if(TMath::Abs(event->Vertex(2))>10.0) return kFALSE;
  return kTRUE;
}


//__________________________________________________________________
Bool_t IsLegSelected(AliCorrelationReducedTrack* track, Bool_t* legQuality) {
  //
  //  track leg selection
  //  
  legQuality[0] = IsLegSelected(track);
  legQuality[1] = legQuality[0] && IsLegSelectedTRD(track, 1, 4, 0.7);
  legQuality[2] = legQuality[0] && IsLegSelectedTRD(track, 1, 4, 0.80);
  legQuality[3] = legQuality[0] && IsLegSelectedTRD(track, 1, 4, 0.90);
  legQuality[4] = legQuality[0] && IsLegSelectedTOF(track, 2);
  legQuality[5] = legQuality[3] && legQuality[4];
  Bool_t globalOr = kFALSE;
  for(Int_t i=0; i<gkNDetCuts; ++i) globalOr = globalOr || legQuality[i];
  return globalOr;
}


//__________________________________________________________________
Bool_t IsLegSelected(AliCorrelationReducedTrack* track) {
  //
  // track leg selection
  //
  if(!track->CheckTrackStatus(kTPCrefit)) return kFALSE;
  if(!track->CheckTrackStatus(kITSrefit)) return kFALSE;
  if(!(track->ITSLayerHit(0) || track->ITSLayerHit(1))) return kFALSE;
  
  if(track->Pt()<0.7) return kFALSE;
  if(TMath::Abs(track->Eta())>0.9) return kFALSE;
  
  if(track->TPCncls()<70) return kFALSE;
  
  if(track->TPCnSig(kElectron)>3.0) return kFALSE;
  if(track->TPCnSig(kElectron)<-2.0) return kFALSE;
  
  if(TMath::Abs(track->DCAz())>3.0) return kFALSE;
  if(TMath::Abs(track->DCAxy())>1.0) return kFALSE;
  
  //if(track->Pin()<2.5) {
  if(TMath::Abs(track->TPCnSig(kProton))<3.5) return kFALSE;
  if(TMath::Abs(track->TPCnSig(kPion))<3.5) return kFALSE;
  if(track->TPCnSig(kProton)<-3.5) return kFALSE;
  //if(track->TPCnSig(kProton)<-3.5) return kFALSE;
  //}
  
  return kTRUE;
}


//__________________________________________________________________
Bool_t IsLegSelectedTRD(AliCorrelationReducedTrack* track, 
		        Int_t trdCut/*=-1*/, Int_t trdMinNtr/*=4*/, Float_t eleCut/*=0.7*/) {
  //
  // TRD leg selection
  //
  if(trdCut==1 && track->TRDntracklets(0)>=trdMinNtr) { 
    if(track->TRDpid(0)<eleCut) return kFALSE;
  }
  if(trdCut==2 && track->TRDntracklets(0)>=trdMinNtr && track->Pin()>1.0) {
    if(track->TRDpid(0)<eleCut) return kFALSE;
  }
  if(trdCut==3 && track->CheckTrackStatus(kTRDpid) && track->TRDntracklets(0)>=trdMinNtr) { 
    if(track->TRDpid(0)<eleCut) return kFALSE;
  }
  if(trdCut==4 && track->CheckTrackStatus(kTRDpid) && track->TRDntracklets(1)>=trdMinNtr && track->Pin()>1.0) {
    if(track->TRDpid(0)<eleCut) return kFALSE;
  }
  return kTRUE;
}


//__________________________________________________________________
Bool_t IsLegSelectedTOF(AliCorrelationReducedTrack* track,
			Int_t tofCut/*=-1*/, Float_t lowExcl/*=0.3*/, Float_t highExcl/*=0.93*/) {
  //
  // TOF leg selection
  //
  if(tofCut==1 && track->TOFbeta()>lowExcl && track->TOFbeta()<highExcl) return kFALSE;
  if(tofCut==2 && track->CheckTrackStatus(kTOFpid) && TMath::Abs(track->TOFnSig(kElectron))>3.5) return kFALSE;
  return kTRUE;
}


//__________________________________________________________________
Bool_t IsPairSelected(AliCorrelationReducedPair* pair) {
  //
  // pair selection
  //
  if(!pair) return kFALSE;
  if(pair->CandidateId()!=AliCorrelationReducedPair::kJpsiToEE) return kFALSE;
  if(pair->PairType()!=1) return kFALSE;
  if(TMath::Abs(pair->Rapidity())>0.9) return kFALSE;
  return kTRUE;
}


//__________________________________________________________________
void DefineHistograms(const Char_t* histClasses, const Char_t* output) {
  //
  // define the histograms
  //
  cout << "Defining histograms ..." << flush;
  cout << "histogram classes: " << histClasses << endl;
  
  gSaveFile=new TFile(output,"RECREATE");
  
  TString classesStr(histClasses);
  TObjArray* arr=classesStr.Tokenize(";");
  
  const Int_t kNRunBins = 3000;
  Double_t runHistRange[2] = {137000.,140000.};
  
  for(Int_t iclass=0; iclass<arr->GetEntries(); ++iclass) {
    TString classStr = arr->At(iclass)->GetName();
    cout << "hist class: " << classStr.Data() << endl;
    
    // Event wise histograms
    if(classStr.Contains("Event")) {
      cout << "Event" << endl;
      AddHistClass(classStr.Data());
      AddHistogram(classStr.Data(),"RunNo","Run numbers;Run",kFALSE, kNRunBins, runHistRange[0], runHistRange[1], kRunNo);
      AddHistogram(classStr.Data(),"BC","Bunch crossing;BC",kFALSE,3000,0.,3000.,kBC);
      AddHistogram(classStr.Data(),"IsPhysicsSelection","Physics selection flag;;",kFALSE,
		   2,-0.5,1.5,kIsPhysicsSelection, 0,0.0,0.0,kNothing, 0,0.0,0.0,kNothing, "off;on");
      
      AddHistogram(classStr.Data(),"VtxZ","Vtx Z;vtx Z (cm)",kFALSE,300,-15.,15.,kVtxZ);
      AddHistogram(classStr.Data(),"VtxX","Vtx X;vtx X (cm)",kFALSE,300,-0.4,0.4,kVtxX);
      AddHistogram(classStr.Data(),"VtxY","Vtx Y;vtx Y (cm)",kFALSE,300,-0.4,0.4,kVtxY);
      
      AddHistogram(classStr.Data(),"VtxZ_Run_prof", "<VtxZ> vs run; Run; vtxZ (cm)", kTRUE,
	           kNRunBins, runHistRange[0], runHistRange[1], kRunNo, -20, 20., 1000., kVtxZ);
      AddHistogram(classStr.Data(),"VtxX_Run_prof", "<VtxX> vs run; Run; vtxX (cm)", kTRUE,
	           kNRunBins, runHistRange[0], runHistRange[1], kRunNo, -20, 20., 1000., kVtxX);
      AddHistogram(classStr.Data(),"VtxY_Run_prof", "<VtxY> vs run; Run; vtxY (cm)", kTRUE,
	           kNRunBins, runHistRange[0], runHistRange[1], kRunNo, -20, 20., 1000., kVtxY);
      
      AddHistogram(classStr.Data(),"CentVZERO","Centrality(VZERO);centrality VZERO (percents)",kFALSE,
                   100, 0.0, 100.0, kCentVZERO);
      AddHistogram(classStr.Data(),"CentQuality","Centrality quality;centrality quality",kFALSE,
                   100, -50.5, 49.5, kCentQuality);
      AddHistogram(classStr.Data(),"CentVZERO_Run_prof","<Centrality(VZERO)> vs run;Run; centrality VZERO (%)",kTRUE,
                   kNRunBins, runHistRange[0], runHistRange[1], kRunNo, 100, 0.0, 100.0, kCentVZERO);      
      
      AddHistogram(classStr.Data(),"NPairs","Number of candidates per event;# pairs",kFALSE,
                   5000,0.,5000.,kNdielectrons);
      AddHistogram(classStr.Data(),"NPairsSelected", "Number of selected pairs per event; #pairs", kFALSE,
	           5000,0.,5000.,kNpairsSelected);
      AddHistogram(classStr.Data(),"NTracksTotal","Number of total tracks per event;# tracks",kFALSE,
                   1000,0.,30000.,kNtracksTotal);
      AddHistogram(classStr.Data(),"NTracksSelected","Number of selected tracks per event;# tracks",kFALSE,
                   1000,0.,30000.,kNtracksSelected);
      AddHistogram(classStr.Data(),"SPDntracklets", "SPD #tracklets in |#eta|<1.0; tracklets", kFALSE,
                   3000, -0.5, 2999.5, kSPDntracklets);
      
      AddHistogram(classStr.Data(),"Ndielectrons_Run_prof", "<Number of dielectrons> per run; Run; #tracks", kTRUE,
	           kNRunBins, runHistRange[0], runHistRange[1], kRunNo, 100, 0., 10000., kNdielectrons);
      AddHistogram(classStr.Data(),"NpairsSelected_Run_prof", "<Number of selected pairs> per run; Run; #tracks", kTRUE,
	           kNRunBins, runHistRange[0], runHistRange[1], kRunNo, 100, 0., 10000., kNpairsSelected);
      AddHistogram(classStr.Data(),"NTracksTotal_Run_prof", "<Number of tracks> per run; Run; #tracks", kTRUE,
	           kNRunBins, runHistRange[0], runHistRange[1], kRunNo, 100, 0., 10000., kNtracksTotal);
      AddHistogram(classStr.Data(),"NTracksSelected_Run_prof", "<Number of selected tracks> per run; Run; #tracks", kTRUE,
	           kNRunBins, runHistRange[0], runHistRange[1], kRunNo, 100, 0., 10000., kNtracksSelected);
      AddHistogram(classStr.Data(),"SPDntracklets_Run_prof", "<SPD ntracklets> per run; Run; #tracks", kTRUE,
	           kNRunBins, runHistRange[0], runHistRange[1], kRunNo, 100, 0., 10000., kSPDntracklets);
      
      AddHistogram(classStr.Data(),"VtxZ_CentVZERO","Centrality(VZERO) vs vtx. Z;vtx Z (cm); centrality VZERO (%)",kFALSE,
                   300,-15.,15.,kVtxZ, 100, 0.0, 100.0, kCentVZERO);
      AddHistogram(classStr.Data(),"VtxZ_CentSPD","Centrality(SPD) vs vtx. Z;vtx Z (cm); centrality SPD (%)",kFALSE,
                   300,-15.,15.,kVtxZ, 100, 0.0, 100.0, kCentSPD);
      AddHistogram(classStr.Data(),"VtxZ_CentTPC","Centrality(TPC) vs vtx. Z;vtx Z (cm); centrality TPC (%)",kFALSE,
                   300,-15.,15.,kVtxZ, 100, 0.0, 100.0, kCentTPC);
      continue;
    }  // end if className contains "Event"
    
    // Offline trigger histograms
    if(classStr.Contains("OfflineTriggers")) {
      cout << "OfflineTriggers" << endl;
      AddHistClass(classStr.Data());

      TString triggerNames = "";
      for(Int_t i=0; i<64; ++i) {triggerNames += gkOfflineTriggerNames[i]; triggerNames+=";";}
      
      AddHistogram(classStr.Data(), "Triggers", "Offline triggers fired; ; ;", kFALSE,
	           64, -0.5, 63.5, kOfflineTrigger, 2, -0.5, 1.5, kOfflineTriggerFired, 0, 0.0, 0.0, kNothing, triggerNames.Data(), "off;on");
      AddHistogram(classStr.Data(), "Triggers2", "Offline triggers fired; ; ;", kFALSE,
	           64, -0.5, 63.5, kOfflineTriggerFired2, 0, 0.0, 0.0, kNothing, 0, 0.0, 0.0, kNothing, triggerNames.Data());
      AddHistogram(classStr.Data(), "CentVZERO_Triggers2", "Offline triggers fired vs centrality VZERO; ; centrality VZERO;", kFALSE,
	           64, -0.5, 63.5, kOfflineTriggerFired2, 20, 0.0, 100.0, kCentVZERO, 0, 0.0, 0.0, kNothing, triggerNames.Data());
      AddHistogram(classStr.Data(), "VtxZ_Triggers2", "Offline triggers fired vs vtxZ; ; vtx Z (cm.);", kFALSE,
	           64, -0.5, 63.5, kOfflineTriggerFired2, 200, -20.0, 20.0, kVtxZ, 0, 0.0, 0.0, kNothing, triggerNames.Data());
      continue;
    }
    
    if(classStr.Contains("VZERORP")) {
      cout << "VZERORP" << endl;
      AddHistClass(classStr.Data());
      const Char_t* sname[3] = {"A","C","A&C"};
      for(Int_t ih=1; ih<2; ++ih) {
        for(Int_t iS=0; iS<3; ++iS) {
          AddHistogram(classStr.Data(), Form("QvecX_side%s_h%d_CentSPDVtxZ_prof",sname[iS],ih+1), 
                       Form("Q_{x}, side %s, harmonic %d, vs centSPD and vtxZ; Centrality (percents); VtxZ (cm); <Q_{x}>",sname[iS],ih+1), kTRUE, 
                       20, 0.0, 100.0, kCentSPD, 24, -12.0, 12.0, kVtxZ, 500, -10000.0, 10000.0, kVZEROQvecX+iS*6+ih);
	  AddHistogram(classStr.Data(), Form("QvecY_side%s_h%d_CentSPDVtxZ_prof",sname[iS],ih+1), 
                       Form("Q_{y}, side %s, harmonic %d, vs centSPD and vtxZ; Centrality (percents); VtxZ (cm); <Q_{y}>",sname[iS],ih+1), kTRUE, 
                       20, 0.0, 100.0, kCentSPD, 24, -12.0, 12.0, kVtxZ, 500, -10000.0, 10000.0, kVZEROQvecY+iS*6+ih);
	  AddHistogram(classStr.Data(), Form("QvecX_side%s_h%d_Run_prof", sname[iS], ih+1), 
		       Form("<Q_{x}>, VZERO side %s, harmonic %d, vs run; Run; <Q_{x}>", sname[iS], ih+1), kTRUE,
	               kNRunBins, runHistRange[0], runHistRange[1], kRunNo, 100, -100., 100., kVZEROQvecX+iS*6+ih);
	  AddHistogram(classStr.Data(), Form("QvecY_side%s_h%d_Run_prof", sname[iS], ih+1), 
		       Form("<Q_{y}>, VZERO side %s, harmonic %d, vs run; Run; <Q_{y}>", sname[iS], ih+1), kTRUE,
	               kNRunBins, runHistRange[0], runHistRange[1], kRunNo, 100, -100., 100., kVZEROQvecY+iS*6+ih);
	  AddHistogram(classStr.Data(), Form("RP_side%s_h%d_CentSPD",sname[iS],ih+1), 
                       Form("VZERO reaction plane, side %s, harmonic %d, vs centrality SPD; #Psi (rad.); centSPD (percents)",sname[iS],ih+1), kFALSE, 
                       400, -4.0/Double_t(ih+1), 4.0/Double_t(ih+1), kVZERORP+iS*6+ih, 20, 0.0, 100.0, kCentSPD);
	  AddHistogram(classStr.Data(), Form("RP_side%s_h%d_VtxZ",sname[iS],ih+1), 
                       Form("VZERO reaction plane, side %s, harmonic %d, vs vtxZ; #Psi (rad.); vtxZ (cm)",sname[iS],ih+1), kFALSE, 
                       400, -4.0/Double_t(ih+1), 4.0/Double_t(ih+1), kVZERORP+iS*6+ih, 24, -12.0, +12.0, kVtxZ);          
        }   // end loop over VZERO sides
      }   // end loop over harmonics    
      continue;
    }   // end if for the VZERO reaction plane histograms
    
    if(classStr.Contains("TPCRP")) {
      cout << "TPCRP" << endl;
      AddHistClass(classStr.Data());
      for(Int_t ih=1; ih<2; ++ih) {
	AddHistogram(classStr.Data(), Form("QvecX_TPC_h%d_Run_prof", ih+1), 
		     Form("<Q_{x}>, TPC, harmonic %d, vs run; Run; <Q_{x}>", ih+1), kTRUE,
	             kNRunBins, runHistRange[0], runHistRange[1], kRunNo, 100, -100., 100., kTPCQvecX+ih);
	AddHistogram(classStr.Data(), Form("QvecY_TPC_h%d_Run_prof", ih+1), 
		     Form("<Q_{y}>, TPC, harmonic %d, vs run; Run; <Q_{y}>", ih+1), kTRUE,
	             kNRunBins, runHistRange[0], runHistRange[1], kRunNo, 100, -100., 100., kTPCQvecY+ih);
	AddHistogram(classStr.Data(), Form("TPCRP_h%d", ih+1), 
                     Form("TPC event plane, harmonic %d; #Psi (rad.)", ih+1), kFALSE, 
                     400, -4.0/Double_t(ih+1), 4.0/Double_t(ih+1), kTPCRP+ih);
	AddHistogram(classStr.Data(), Form("TPCQvecX_h%d_CentSPDVtxZ_prof", ih+1), 
                     Form("TPC Q_{x}, harmonic %d, vs centSPD and vtxZ; Centrality (percents); VtxZ (cm); <Q_{x}>", ih+1), kTRUE, 
                     20, 0.0, 100.0, kCentSPD, 24, -12.0, 12.0, kVtxZ, 500, -600.0, 600.0, kTPCQvecX+ih);
	AddHistogram(classStr.Data(), Form("TPCQvecY_h%d_CentSPDVtxZ_prof", ih+1), 
                     Form("TPC Q_{y}, harmonic %d, vs centSPD and vtxZ; Centrality (percents); VtxZ (cm); <Q_{y}>", ih+1), kTRUE, 
                     20, 0.0, 100.0, kCentSPD, 24, -12.0, 12.0, kVtxZ, 500, -600.0, 600.0, kTPCQvecY+ih);
      }    // end loop over harmonics        
      continue;
    }    // end if for the TPC reaction plane histograms
    
    TString trkFlagNames = "";
    for(Int_t iflag=0; iflag<kNTrackingFlags; ++iflag) {
      trkFlagNames += gkTrackingFlagNames[iflag];
      trkFlagNames += ";";
    }
    
    // Track histograms
    if(classStr.Contains("TrackingFlags")) {
      AddHistClass(classStr.Data());
      
      AddHistogram(classStr.Data(), "TrackingFlags", "Tracking flags;;", kFALSE,
	           kNTrackingFlags, -0.5, kNTrackingFlags-0.5, kTrackingFlag, 0, 0.0, 0.0, kNothing, 0, 0.0, 0.0, kNothing, trkFlagNames.Data());
      AddHistogram(classStr.Data(), "TrackingFlags_Pt", "Tracking flags vs p_{T};p_{T} (GeV/c);", kFALSE,
	           100, 0.0, 20.0, kPt, kNTrackingFlags, -0.5, kNTrackingFlags-0.5, kTrackingFlag, 0, 0.0, 0.0, kNothing, "", trkFlagNames.Data());
      AddHistogram(classStr.Data(), "TrackingFlags_Eta", "Tracking flags vs #eta;#eta;", kFALSE,
	           30, -1.5, 1.5, kEta, kNTrackingFlags, -0.5, kNTrackingFlags-0.5, kTrackingFlag, 0, 0.0, 0.0, kNothing, "", trkFlagNames.Data());
      AddHistogram(classStr.Data(), "TrackingFlags_Phi", "Tracking flags vs #varphi;#varphi (rad.);", kFALSE,
	           60, 0.0, 6.3, kPhi, kNTrackingFlags, -0.5, kNTrackingFlags-0.5, kTrackingFlag, 0, 0.0, 0.0, kNothing, "", trkFlagNames.Data());
      AddHistogram(classStr.Data(), "TrackingFlags_CentVZERO", "Tracking flags vs centrality VZERO; centrality (%);", kFALSE,
	           20, 0.0, 100.0, kCentVZERO, kNTrackingFlags, -0.5, kNTrackingFlags-0.5, kTrackingFlag, 0, 0.0, 0.0, kNothing, "", trkFlagNames.Data());
      
      AddHistogram(classStr.Data(), "TrackingFlags_TRDntracklets", "Tracking flags vs TRD #tracklets; TRD #tracklets;", kFALSE,
	           7, -0.5, 6.5, kTRDntracklets, kNTrackingFlags, -0.5, kNTrackingFlags-0.5, kTrackingFlag, 0, 0.0, 0.0, kNothing, "", trkFlagNames.Data());      
      AddHistogram(classStr.Data(), "TrackingFlags_TRDntrackletsPID", "Tracking flags vs TRD # pid tracklets; TRD #tracklets;", kFALSE,
	           7, -0.5, 6.5, kTRDntrackletsPID, kNTrackingFlags, -0.5, kNTrackingFlags-0.5, kTrackingFlag, 0, 0.0, 0.0, kNothing, "", trkFlagNames.Data());      
      AddHistogram(classStr.Data(), "TrackingFlags_TRDeleProbab", "Tracking flags vs TRD electron probability; TRD probab.;", kFALSE,
	           50, 0.0, 1.0, kTRDpidProbabilities, kNTrackingFlags, -0.5, kNTrackingFlags-0.5, kTrackingFlag, 0, 0.0, 0.0, kNothing, "", trkFlagNames.Data());
      AddHistogram(classStr.Data(), "TrackingFlags_TOFbeta", "Tracking flags vs TOF #beta; TOF #beta;", kFALSE,
	           50, 0.0, 1.0, kTOFbeta, kNTrackingFlags, -0.5, kNTrackingFlags-0.5, kTrackingFlag, 0, 0.0, 0.0, kNothing, "", trkFlagNames.Data());
    }
    
    if(classStr.Contains("TrackQA")) {
      AddHistClass(classStr.Data());
    
      AddHistogram(classStr.Data(), "Pt", "p_{T} distribution; p_{T} (GeV/c^{2});", kFALSE,
                   1000, 0.0, 50.0, kPt);
      AddHistogram(classStr.Data(), "Eta", "#eta illumination; #eta;", kFALSE,
                   1000, -1.5, 1.5, kEta);
      AddHistogram(classStr.Data(), "Phi", "#varphi illumination; #varphi;", kFALSE,
                   1000, 0.0, 6.3, kPhi);
      AddHistogram(classStr.Data(), "DCAxy", "DCAxy; DCAxy (cm.)", kFALSE,
                   1000, -10.0, 10.0, kDcaXY);
      AddHistogram(classStr.Data(), "DCAz", "DCAz; DCAz (cm.)", kFALSE,
                   1000, -10.0, 10.0, kDcaZ);

      // run dependence
      AddHistogram(classStr.Data(), "Pt_Run", "<p_{T}> vs run; run;", kTRUE,
                   kNRunBins, runHistRange[0], runHistRange[1], kRunNo, 1000, 0.0, 50.0, kPt);
      AddHistogram(classStr.Data(), "Eta_Run", "<#eta> vs run; run;", kTRUE,
                   kNRunBins, runHistRange[0], runHistRange[1], kRunNo, 1000, -1.5, 1.5, kEta);      
      AddHistogram(classStr.Data(), "Phi_Run", "<#varphi> vs run; run;", kTRUE,
                   kNRunBins, runHistRange[0], runHistRange[1], kRunNo, 1000, 0.0, 6.3, kPhi);      
      AddHistogram(classStr.Data(), "DCAxy_Run", "<DCAxy> vs run; run;", kTRUE,
                   kNRunBins, runHistRange[0], runHistRange[1], kRunNo, 1000, -10.0, 10.0, kDcaXY);
      AddHistogram(classStr.Data(), "DCAz_Run", "<DCAz> vs run; run;", kTRUE,
                   kNRunBins, runHistRange[0], runHistRange[1], kRunNo, 1000, -10.0, 10.0, kDcaZ);

      // correlations between parameters
      AddHistogram(classStr.Data(), "Eta_Pt_prof", "<p_{T}> vs #eta; #eta; p_{T} (GeV/c);", kTRUE,
                   300, -1.5, +1.5, kEta, 100, 0.0, 10.0, kPt);
      AddHistogram(classStr.Data(), "Phi_Pt_prof", "<p_{T}> vs #varphi; #varphi (rad.); p_{T} (GeV/c)", kTRUE,
                   300, 0.0, 6.3, kPhi, 100, 0.0, 10.0, kPt);
      AddHistogram(classStr.Data(), "Eta_Phi", "#varphi vs #eta; #eta; #varphi (rad.);", kFALSE,
                   200, -1.0, +1.0, kEta, 100, 0.0, 6.3, kPhi);
      AddHistogram(classStr.Data(), "Pt_DCAxy", "DCAxy vs p_{T}; p_{T} (GeV/c); DCA_{xy} (cm)", kFALSE,
                   100, 0.0, 10.0, kPt, 500, -2.0, 2.0, kDcaXY);
      AddHistogram(classStr.Data(), "Pt_DCAz", "DCAz vs p_{T}; p_{T} (GeV/c); DCA_{z} (cm)", kFALSE,
                   100, 0.0, 10.0, kPt, 500, -2.0, 2.0, kDcaZ);
      AddHistogram(classStr.Data(), "Eta_DCAxy", "DCAxy vs #eta; #eta; DCA_{xy} (cm)", kFALSE,
                   100, -1.0, 1.0, kEta, 500, -2.0, 2.0, kDcaXY);
      AddHistogram(classStr.Data(), "Eta_DCAz", "DCAz vs #eta; #eta; DCA_{z} (cm)", kFALSE,
                   100, -1.0, 1.0, kEta, 500, -2.0, 2.0, kDcaZ);
      
      if(classStr.Contains("ITS")) {
        AddHistogram(classStr.Data(),"ITSncls", "ITS nclusters;# clusters ITS", kFALSE,
                     7,-0.5,6.5,kITSncls);
	AddHistogram(classStr.Data(),"ITSncls_Run", "ITS <nclusters> vs run;run;# clusters ITS", kTRUE,
                     kNRunBins, runHistRange[0], runHistRange[1], kRunNo, 7,-0.5,6.5, kITSncls);
	AddHistogram(classStr.Data(),"ITSncls_Cent_prof", "ITS <nclusters> vs centrality; centrality;# clusters ITS", kTRUE,
                     20, 0.0, 100.0, kCentVZERO, 7,-0.5,6.5, kITSncls);
        AddHistogram(classStr.Data(),"Pt_ITSncls","ITS nclusters vs p_{T};p_{T} (GeV/c);# clusters ITS",kFALSE,
                     100, 0.0, 10.0, kPt, 7,-0.5,6.5, kITSncls);
        AddHistogram(classStr.Data(),"Eta_Phi_ITSncls_prof","ITS <nclusters> vs (#eta,#phi);#eta;#phi (rad.);# clusters ITS",kTRUE,
                     192, -1.2, 1.2, kEta, 126, 0.0, 6.3, kPhi, 7, -0.5, 6.5, kITSncls);
      }  // end if ITS histograms
      
      if(classStr.Contains("TPC")) {
        AddHistogram(classStr.Data(),"TPCncls","TPC nclusters;# clusters TPC",kFALSE,
                     160,-0.5,159.5,kTPCncls);
	AddHistogram(classStr.Data(),"TPCncls_Run","TPC nclusters vs run;run;# clusters TPC",kTRUE,
                     kNRunBins, runHistRange[0], runHistRange[1], kRunNo, 160,-0.5,159.5, kTPCncls);
	AddHistogram(classStr.Data(),"TPCncls_CentVZERO","TPC nclusters vs centrality;centrality;# clusters TPC",kFALSE,
                     20, 0.0, 100.0, kCentVZERO, 160,-0.5,159.5, kTPCncls);
	AddHistogram(classStr.Data(),"TPCncls_Pin","TPC nclusters vs inner param P; P (GeV/c); # clusters TPC",kFALSE,
                     200,0.0,20,kPin,160,-0.5,159.5,kTPCncls);
	AddHistogram(classStr.Data(),"Eta_Phi_TPCncls_prof","TPC <nclusters> vs (#eta,#phi);#eta;#phi (rad.);# clusters TPC",kTRUE,
                     192, -1.2, 1.2, kEta, 126, 0.0, 6.3, kPhi, 160, -0.5, 159.5, kTPCncls);    
        AddHistogram(classStr.Data(),"TPCsignal_Pin","TPC dE/dx vs. inner param P;P (GeV/c);TPC dE/dx",kFALSE,
                     1000,0.0,20.0,kPin,151,-0.5,150.5,kTPCsignal);
        AddHistogram(classStr.Data(),"TPCsignal_TPCclusters","TPC dE/dx vs. TPC nclusters;TPC #clusters;TPC dE/dx",kFALSE,
                     160,-0.5,159.5,kTPCncls,151,-0.5,150.5,kTPCsignal);
        AddHistogram(classStr.Data(),"TPCnsigElectron_Pin","TPC N_{#sigma} electron vs. inner param P;P (GeV/c);N_{#sigma}",kFALSE,
                     1000,0.0,20.0,kPin,100,-5.0,5.0,kTPCnSig+kElectron);
	AddHistogram(classStr.Data(),"TPCnsigElectron_CentEta_prof","TPC N_{#sigma} electron vs. (#eta,centrality); #eta; centrality VZERO;N_{#sigma}",kTRUE,
                     100,-1.0,1.0,kEta, 20, 0.0, 100.0, kCentVZERO, 100,-5.0,5.0,kTPCnSig+kElectron);
	AddHistogram(classStr.Data(),"TPCnsigElectron_Run","TPC N_{#sigma} electron vs. run; run; N_{#sigma}",kTRUE,
                     kNRunBins, runHistRange[0], runHistRange[1], kRunNo,100,-5.0,5.0,kTPCnSig+kElectron);
      }      // end if TPC histograms
    
      if(classStr.Contains("TRD")) {
        AddHistogram(classStr.Data(),"TRDntracklets","TRD ntracklets; #tracklets TRD",kFALSE,
                     7,-0.5,6.5,kTRDntracklets);
	AddHistogram(classStr.Data(),"TRDntrackletsPID","TRD ntracklets PID; #tracklets TRD",kFALSE,
                     7,-0.5,6.5,kTRDntrackletsPID);
	AddHistogram(classStr.Data(),"TRDprobabElectron","TRD electron probability; probability",kFALSE,
                     500,0.0,1.0,kTRDpidProbabilities);
	AddHistogram(classStr.Data(),"TRDprobabPion","TRD pion probability; probability",kFALSE,
                     500,0.0,1.0,kTRDpidProbabilities+1);
        AddHistogram(classStr.Data(),"TRDntracklets_Run","TRD <ntracklets> vs run; run; #tracklets TRD",kTRUE,
                     kNRunBins, runHistRange[0], runHistRange[1], kRunNo, 7,-0.5,6.5,kTRDntracklets);
        AddHistogram(classStr.Data(),"TRDntrackletsPID_Run","TRD <ntracklets PID> vs run; run; #tracklets TRD",kTRUE,
                     kNRunBins, runHistRange[0], runHistRange[1], kRunNo, 7,-0.5,6.5,kTRDntrackletsPID);
        AddHistogram(classStr.Data(),"TRDprobabEle_Run","TRD <electron probability> vs run; run; probability",kTRUE,
                     kNRunBins, runHistRange[0], runHistRange[1], kRunNo, 10,0.0,1.0,kTRDpidProbabilities);
	AddHistogram(classStr.Data(),"TRDprobabPion_Run","TRD <pion probability> vs run; run; probability",kTRUE,
                     kNRunBins, runHistRange[0], runHistRange[1], kRunNo, 10,0.0,1.0,kTRDpidProbabilities+1);
	AddHistogram(classStr.Data(),"Eta_Phi_TRDntracklets_prof","TRD <ntracklets> vs (#eta,#phi);#eta;#phi (rad.);#tracklets TRD",kTRUE,
                     192, -1.2, 1.2, kEta, 126, 0.0, 6.3, kPhi, 7, -0.5, 6.5, kTRDntracklets);   
        AddHistogram(classStr.Data(),"TRDntracklets_cent","TRD ntracklets vs centrality; #tracklets TRD; centrality (%)",kFALSE,
                     7,-0.5,6.5,kTRDntracklets,20,0.0, 100.0, kCentSPD);
        AddHistogram(classStr.Data(),"Eta_Phi_TRDntrackletsPID_prof","TRD <ntracklets PID> vs (#eta,#phi);#eta;#phi (rad.);#tracklets TRD",kTRUE,
                     192, -1.2, 1.2, kEta, 126, 0.0, 6.3, kPhi, 7, -0.5, 6.5, kTRDntrackletsPID);
        AddHistogram(classStr.Data(),"TRDntrackletsPID_cent","TRD ntracklets PID vs centrality; #tracklets TRD; centrality (%)",kFALSE,
                     7,-0.5,6.5,kTRDntrackletsPID,20,0.0, 100.0, kCentSPD);
        AddHistogram(classStr.Data(),"TRDntracklets_TRDntrackletsPID","TRD ntracklets vs TRD ntracklets PID; #tracklets TRD; #tracklets TRD pid",kFALSE,
                     7,-0.5,6.5,kTRDntracklets,7,-0.5, 6.5, kTRDntrackletsPID);
      }   // end if TRD histograms
    
      if(classStr.Contains("TOF")) {
        AddHistogram(classStr.Data(),"TOFbeta_P","TOF #beta vs P;P (GeV/c);#beta",kFALSE,
                     200,0.0,20.0,kP, 220,0.0,1.1,kTOFbeta);
	AddHistogram(classStr.Data(),"Eta_Phi_TOFbeta_prof","TOF <#beta> vs (#eta,#phi);#eta;#phi (rad.);TOF #beta",kTRUE,
                     192, -1.2, 1.2, kEta, 126, 0.0, 6.3, kPhi, 160, -0.5, 159.5, kTOFbeta);
        AddHistogram(classStr.Data(),"TOFnsigElectron_P","TOF N_{#sigma} electron vs. P;P (GeV/c);N_{#sigma}",kFALSE,
                     200,0.0,20.0,kP, 100,-5.0,5.0,kTOFnSig+kElectron);
	AddHistogram(classStr.Data(),"TOFnSigElectron_Run","TOF <n-#sigma_{e}> vs run number;run;TOF n-#sigma_{e}",kTRUE,
                     kNRunBins, runHistRange[0], runHistRange[1], kRunNo, 160, -0.5, 159.5, kTOFnSig+kElectron);
      }    // end if TOF histograms
      continue;
    }  // end if "TrackQA"
    
    Double_t massBinWidth = 0.04;     // *GeV/c^2
    Double_t massRange[2] = {0.0,6.0};
    const Int_t nMassBins = TMath::Nint((massRange[1]-massRange[0])/massBinWidth);
    Double_t massBinLims[nMassBins+1]; for(Int_t im=0; im<=nMassBins; ++im) massBinLims[im] = massBinWidth*im;
        
    // Histograms for pairs
    if(classStr.Contains("PairQA")) {
      AddHistClass(classStr.Data());
      
      AddHistogram(classStr.Data(), "Mass_CentVZEROCep", 
	           "Inv. mass vs (centVZERO, #Psi^{2}); centrality VZERO; #Psi^{2}; m (GeV/c^{2})", 
		   kFALSE, gkNCentRanges, gkEMCentLims, kCentVZERO, gkNPhiEPRanges, gkEMPhiEPLims, gkEPused, nMassBins, massBinLims, kMass);  
      AddHistogram(classStr.Data(), "Pt", "Pt; p_{T} (GeV/c)", kFALSE,
                     1000, 0.0, 10.0, kPairPt);
      
      if(classStr.Contains("SE")) {
        AddHistogram(classStr.Data(), "CandidateId", "Candidate id; p_{T} (GeV/c)", kFALSE,
                     AliCorrelationReducedPair::kNMaxCandidateTypes+1, -0.5, Double_t(AliCorrelationReducedPair::kNMaxCandidateTypes)+0.5, kCandidateId);
        AddHistogram(classStr.Data(), "PairType", "Pair type; pair type", kFALSE,
                     4, -0.5, 3.5, kPairType);	
        AddHistogram(classStr.Data(), "Mass", "Invariant mass; m_{inv} (GeV/c^{2})", kFALSE,
                     nMassBins, massRange[0], massRange[1], kMass);
        AddHistogram(classStr.Data(), "Rapidity", "Rapidity; y", kFALSE,
                     240, -1.2, 1.2, kPairRap);
	AddHistogram(classStr.Data(), "Eta", "Pseudo-rapidity #eta; #eta", kFALSE,
                     240, -2.0, 2.0, kPairEta);
        AddHistogram(classStr.Data(), "Phi", "Azimuthal distribution; #phi (rad.)", kFALSE,
                     315, 0.0, 6.3, kPairPhi);
	AddHistogram(classStr.Data(), "OpeningAngle", "Opening angle; op. angle (rad)", kFALSE,
                     1000, 0.0, 3.2, kPairOpeningAngle);
	AddHistogram(classStr.Data(), "Mass_Pt", "Pt vs invariant mass; m_{inv} (GeV/c^{2}); p_{T} (GeV/c)", kFALSE,
                     nMassBins, massRange[0], massRange[1], kMass, 100, 0.0, 10.0, kPairPt);
	AddHistogram(classStr.Data(), "Mass_Run_prof", "<Invariant mass> vs run; run;m_{inv} (GeV/c^{2})", kTRUE,
                     kNRunBins, runHistRange[0], runHistRange[1], kRunNo, nMassBins, massRange[0], massRange[1], kMass);
        AddHistogram(classStr.Data(), "Pt_Run_prof", "<p_{T}> vs run; run;p_{T} (GeV/c)", kTRUE,
                     kNRunBins, runHistRange[0], runHistRange[1], kRunNo, 1000, 0.0, 10.0, kPairPt);
	AddHistogram(classStr.Data(), "VZEROflow_sideA_v2_Mass",
                     "Pair v2 coefficient using VZERO-A reaction plane; inv.mass (GeV/c^{2});v_{2}(#Psi_{2}^{VZERO-A})", kTRUE,
                     nMassBins, massRange[0], massRange[1], kMass, 1000, -1., 1., kPairVZEROFlowVn+0*6+1);
	AddHistogram(classStr.Data(), "VZEROflow_sideC_v2_Mass",
                     "Pair v2 coefficient using VZERO-C reaction plane; inv.mass (GeV/c^{2});v_{2}(#Psi_{2}^{VZERO-C})", kTRUE,
                     nMassBins, massRange[0], massRange[1], kMass, 1000, -1., 1., kPairVZEROFlowVn+1*6+1);
	AddHistogram(classStr.Data(), "TPCflow_v2_Mass",
                     "Pair v2 coefficient using TPC reaction plane; inv.mass (GeV/c^{2});v_{2}(#Psi_{2}^{TPC})", kTRUE,
                     nMassBins, massRange[0], massRange[1], kMass, 1000, -1., 1., kPairTPCFlowVn+1);
      }
      continue;
    }   // end if for Pair classes of histograms
    
  }   // end loop over histogram classes
}
 RunDstPbPbJpsiAnalysis.C:1
 RunDstPbPbJpsiAnalysis.C:2
 RunDstPbPbJpsiAnalysis.C:3
 RunDstPbPbJpsiAnalysis.C:4
 RunDstPbPbJpsiAnalysis.C:5
 RunDstPbPbJpsiAnalysis.C:6
 RunDstPbPbJpsiAnalysis.C:7
 RunDstPbPbJpsiAnalysis.C:8
 RunDstPbPbJpsiAnalysis.C:9
 RunDstPbPbJpsiAnalysis.C:10
 RunDstPbPbJpsiAnalysis.C:11
 RunDstPbPbJpsiAnalysis.C:12
 RunDstPbPbJpsiAnalysis.C:13
 RunDstPbPbJpsiAnalysis.C:14
 RunDstPbPbJpsiAnalysis.C:15
 RunDstPbPbJpsiAnalysis.C:16
 RunDstPbPbJpsiAnalysis.C:17
 RunDstPbPbJpsiAnalysis.C:18
 RunDstPbPbJpsiAnalysis.C:19
 RunDstPbPbJpsiAnalysis.C:20
 RunDstPbPbJpsiAnalysis.C:21
 RunDstPbPbJpsiAnalysis.C:22
 RunDstPbPbJpsiAnalysis.C:23
 RunDstPbPbJpsiAnalysis.C:24
 RunDstPbPbJpsiAnalysis.C:25
 RunDstPbPbJpsiAnalysis.C:26
 RunDstPbPbJpsiAnalysis.C:27
 RunDstPbPbJpsiAnalysis.C:28
 RunDstPbPbJpsiAnalysis.C:29
 RunDstPbPbJpsiAnalysis.C:30
 RunDstPbPbJpsiAnalysis.C:31
 RunDstPbPbJpsiAnalysis.C:32
 RunDstPbPbJpsiAnalysis.C:33
 RunDstPbPbJpsiAnalysis.C:34
 RunDstPbPbJpsiAnalysis.C:35
 RunDstPbPbJpsiAnalysis.C:36
 RunDstPbPbJpsiAnalysis.C:37
 RunDstPbPbJpsiAnalysis.C:38
 RunDstPbPbJpsiAnalysis.C:39
 RunDstPbPbJpsiAnalysis.C:40
 RunDstPbPbJpsiAnalysis.C:41
 RunDstPbPbJpsiAnalysis.C:42
 RunDstPbPbJpsiAnalysis.C:43
 RunDstPbPbJpsiAnalysis.C:44
 RunDstPbPbJpsiAnalysis.C:45
 RunDstPbPbJpsiAnalysis.C:46
 RunDstPbPbJpsiAnalysis.C:47
 RunDstPbPbJpsiAnalysis.C:48
 RunDstPbPbJpsiAnalysis.C:49
 RunDstPbPbJpsiAnalysis.C:50
 RunDstPbPbJpsiAnalysis.C:51
 RunDstPbPbJpsiAnalysis.C:52
 RunDstPbPbJpsiAnalysis.C:53
 RunDstPbPbJpsiAnalysis.C:54
 RunDstPbPbJpsiAnalysis.C:55
 RunDstPbPbJpsiAnalysis.C:56
 RunDstPbPbJpsiAnalysis.C:57
 RunDstPbPbJpsiAnalysis.C:58
 RunDstPbPbJpsiAnalysis.C:59
 RunDstPbPbJpsiAnalysis.C:60
 RunDstPbPbJpsiAnalysis.C:61
 RunDstPbPbJpsiAnalysis.C:62
 RunDstPbPbJpsiAnalysis.C:63
 RunDstPbPbJpsiAnalysis.C:64
 RunDstPbPbJpsiAnalysis.C:65
 RunDstPbPbJpsiAnalysis.C:66
 RunDstPbPbJpsiAnalysis.C:67
 RunDstPbPbJpsiAnalysis.C:68
 RunDstPbPbJpsiAnalysis.C:69
 RunDstPbPbJpsiAnalysis.C:70
 RunDstPbPbJpsiAnalysis.C:71
 RunDstPbPbJpsiAnalysis.C:72
 RunDstPbPbJpsiAnalysis.C:73
 RunDstPbPbJpsiAnalysis.C:74
 RunDstPbPbJpsiAnalysis.C:75
 RunDstPbPbJpsiAnalysis.C:76
 RunDstPbPbJpsiAnalysis.C:77
 RunDstPbPbJpsiAnalysis.C:78
 RunDstPbPbJpsiAnalysis.C:79
 RunDstPbPbJpsiAnalysis.C:80
 RunDstPbPbJpsiAnalysis.C:81
 RunDstPbPbJpsiAnalysis.C:82
 RunDstPbPbJpsiAnalysis.C:83
 RunDstPbPbJpsiAnalysis.C:84
 RunDstPbPbJpsiAnalysis.C:85
 RunDstPbPbJpsiAnalysis.C:86
 RunDstPbPbJpsiAnalysis.C:87
 RunDstPbPbJpsiAnalysis.C:88
 RunDstPbPbJpsiAnalysis.C:89
 RunDstPbPbJpsiAnalysis.C:90
 RunDstPbPbJpsiAnalysis.C:91
 RunDstPbPbJpsiAnalysis.C:92
 RunDstPbPbJpsiAnalysis.C:93
 RunDstPbPbJpsiAnalysis.C:94
 RunDstPbPbJpsiAnalysis.C:95
 RunDstPbPbJpsiAnalysis.C:96
 RunDstPbPbJpsiAnalysis.C:97
 RunDstPbPbJpsiAnalysis.C:98
 RunDstPbPbJpsiAnalysis.C:99
 RunDstPbPbJpsiAnalysis.C:100
 RunDstPbPbJpsiAnalysis.C:101
 RunDstPbPbJpsiAnalysis.C:102
 RunDstPbPbJpsiAnalysis.C:103
 RunDstPbPbJpsiAnalysis.C:104
 RunDstPbPbJpsiAnalysis.C:105
 RunDstPbPbJpsiAnalysis.C:106
 RunDstPbPbJpsiAnalysis.C:107
 RunDstPbPbJpsiAnalysis.C:108
 RunDstPbPbJpsiAnalysis.C:109
 RunDstPbPbJpsiAnalysis.C:110
 RunDstPbPbJpsiAnalysis.C:111
 RunDstPbPbJpsiAnalysis.C:112
 RunDstPbPbJpsiAnalysis.C:113
 RunDstPbPbJpsiAnalysis.C:114
 RunDstPbPbJpsiAnalysis.C:115
 RunDstPbPbJpsiAnalysis.C:116
 RunDstPbPbJpsiAnalysis.C:117
 RunDstPbPbJpsiAnalysis.C:118
 RunDstPbPbJpsiAnalysis.C:119
 RunDstPbPbJpsiAnalysis.C:120
 RunDstPbPbJpsiAnalysis.C:121
 RunDstPbPbJpsiAnalysis.C:122
 RunDstPbPbJpsiAnalysis.C:123
 RunDstPbPbJpsiAnalysis.C:124
 RunDstPbPbJpsiAnalysis.C:125
 RunDstPbPbJpsiAnalysis.C:126
 RunDstPbPbJpsiAnalysis.C:127
 RunDstPbPbJpsiAnalysis.C:128
 RunDstPbPbJpsiAnalysis.C:129
 RunDstPbPbJpsiAnalysis.C:130
 RunDstPbPbJpsiAnalysis.C:131
 RunDstPbPbJpsiAnalysis.C:132
 RunDstPbPbJpsiAnalysis.C:133
 RunDstPbPbJpsiAnalysis.C:134
 RunDstPbPbJpsiAnalysis.C:135
 RunDstPbPbJpsiAnalysis.C:136
 RunDstPbPbJpsiAnalysis.C:137
 RunDstPbPbJpsiAnalysis.C:138
 RunDstPbPbJpsiAnalysis.C:139
 RunDstPbPbJpsiAnalysis.C:140
 RunDstPbPbJpsiAnalysis.C:141
 RunDstPbPbJpsiAnalysis.C:142
 RunDstPbPbJpsiAnalysis.C:143
 RunDstPbPbJpsiAnalysis.C:144
 RunDstPbPbJpsiAnalysis.C:145
 RunDstPbPbJpsiAnalysis.C:146
 RunDstPbPbJpsiAnalysis.C:147
 RunDstPbPbJpsiAnalysis.C:148
 RunDstPbPbJpsiAnalysis.C:149
 RunDstPbPbJpsiAnalysis.C:150
 RunDstPbPbJpsiAnalysis.C:151
 RunDstPbPbJpsiAnalysis.C:152
 RunDstPbPbJpsiAnalysis.C:153
 RunDstPbPbJpsiAnalysis.C:154
 RunDstPbPbJpsiAnalysis.C:155
 RunDstPbPbJpsiAnalysis.C:156
 RunDstPbPbJpsiAnalysis.C:157
 RunDstPbPbJpsiAnalysis.C:158
 RunDstPbPbJpsiAnalysis.C:159
 RunDstPbPbJpsiAnalysis.C:160
 RunDstPbPbJpsiAnalysis.C:161
 RunDstPbPbJpsiAnalysis.C:162
 RunDstPbPbJpsiAnalysis.C:163
 RunDstPbPbJpsiAnalysis.C:164
 RunDstPbPbJpsiAnalysis.C:165
 RunDstPbPbJpsiAnalysis.C:166
 RunDstPbPbJpsiAnalysis.C:167
 RunDstPbPbJpsiAnalysis.C:168
 RunDstPbPbJpsiAnalysis.C:169
 RunDstPbPbJpsiAnalysis.C:170
 RunDstPbPbJpsiAnalysis.C:171
 RunDstPbPbJpsiAnalysis.C:172
 RunDstPbPbJpsiAnalysis.C:173
 RunDstPbPbJpsiAnalysis.C:174
 RunDstPbPbJpsiAnalysis.C:175
 RunDstPbPbJpsiAnalysis.C:176
 RunDstPbPbJpsiAnalysis.C:177
 RunDstPbPbJpsiAnalysis.C:178
 RunDstPbPbJpsiAnalysis.C:179
 RunDstPbPbJpsiAnalysis.C:180
 RunDstPbPbJpsiAnalysis.C:181
 RunDstPbPbJpsiAnalysis.C:182
 RunDstPbPbJpsiAnalysis.C:183
 RunDstPbPbJpsiAnalysis.C:184
 RunDstPbPbJpsiAnalysis.C:185
 RunDstPbPbJpsiAnalysis.C:186
 RunDstPbPbJpsiAnalysis.C:187
 RunDstPbPbJpsiAnalysis.C:188
 RunDstPbPbJpsiAnalysis.C:189
 RunDstPbPbJpsiAnalysis.C:190
 RunDstPbPbJpsiAnalysis.C:191
 RunDstPbPbJpsiAnalysis.C:192
 RunDstPbPbJpsiAnalysis.C:193
 RunDstPbPbJpsiAnalysis.C:194
 RunDstPbPbJpsiAnalysis.C:195
 RunDstPbPbJpsiAnalysis.C:196
 RunDstPbPbJpsiAnalysis.C:197
 RunDstPbPbJpsiAnalysis.C:198
 RunDstPbPbJpsiAnalysis.C:199
 RunDstPbPbJpsiAnalysis.C:200
 RunDstPbPbJpsiAnalysis.C:201
 RunDstPbPbJpsiAnalysis.C:202
 RunDstPbPbJpsiAnalysis.C:203
 RunDstPbPbJpsiAnalysis.C:204
 RunDstPbPbJpsiAnalysis.C:205
 RunDstPbPbJpsiAnalysis.C:206
 RunDstPbPbJpsiAnalysis.C:207
 RunDstPbPbJpsiAnalysis.C:208
 RunDstPbPbJpsiAnalysis.C:209
 RunDstPbPbJpsiAnalysis.C:210
 RunDstPbPbJpsiAnalysis.C:211
 RunDstPbPbJpsiAnalysis.C:212
 RunDstPbPbJpsiAnalysis.C:213
 RunDstPbPbJpsiAnalysis.C:214
 RunDstPbPbJpsiAnalysis.C:215
 RunDstPbPbJpsiAnalysis.C:216
 RunDstPbPbJpsiAnalysis.C:217
 RunDstPbPbJpsiAnalysis.C:218
 RunDstPbPbJpsiAnalysis.C:219
 RunDstPbPbJpsiAnalysis.C:220
 RunDstPbPbJpsiAnalysis.C:221
 RunDstPbPbJpsiAnalysis.C:222
 RunDstPbPbJpsiAnalysis.C:223
 RunDstPbPbJpsiAnalysis.C:224
 RunDstPbPbJpsiAnalysis.C:225
 RunDstPbPbJpsiAnalysis.C:226
 RunDstPbPbJpsiAnalysis.C:227
 RunDstPbPbJpsiAnalysis.C:228
 RunDstPbPbJpsiAnalysis.C:229
 RunDstPbPbJpsiAnalysis.C:230
 RunDstPbPbJpsiAnalysis.C:231
 RunDstPbPbJpsiAnalysis.C:232
 RunDstPbPbJpsiAnalysis.C:233
 RunDstPbPbJpsiAnalysis.C:234
 RunDstPbPbJpsiAnalysis.C:235
 RunDstPbPbJpsiAnalysis.C:236
 RunDstPbPbJpsiAnalysis.C:237
 RunDstPbPbJpsiAnalysis.C:238
 RunDstPbPbJpsiAnalysis.C:239
 RunDstPbPbJpsiAnalysis.C:240
 RunDstPbPbJpsiAnalysis.C:241
 RunDstPbPbJpsiAnalysis.C:242
 RunDstPbPbJpsiAnalysis.C:243
 RunDstPbPbJpsiAnalysis.C:244
 RunDstPbPbJpsiAnalysis.C:245
 RunDstPbPbJpsiAnalysis.C:246
 RunDstPbPbJpsiAnalysis.C:247
 RunDstPbPbJpsiAnalysis.C:248
 RunDstPbPbJpsiAnalysis.C:249
 RunDstPbPbJpsiAnalysis.C:250
 RunDstPbPbJpsiAnalysis.C:251
 RunDstPbPbJpsiAnalysis.C:252
 RunDstPbPbJpsiAnalysis.C:253
 RunDstPbPbJpsiAnalysis.C:254
 RunDstPbPbJpsiAnalysis.C:255
 RunDstPbPbJpsiAnalysis.C:256
 RunDstPbPbJpsiAnalysis.C:257
 RunDstPbPbJpsiAnalysis.C:258
 RunDstPbPbJpsiAnalysis.C:259
 RunDstPbPbJpsiAnalysis.C:260
 RunDstPbPbJpsiAnalysis.C:261
 RunDstPbPbJpsiAnalysis.C:262
 RunDstPbPbJpsiAnalysis.C:263
 RunDstPbPbJpsiAnalysis.C:264
 RunDstPbPbJpsiAnalysis.C:265
 RunDstPbPbJpsiAnalysis.C:266
 RunDstPbPbJpsiAnalysis.C:267
 RunDstPbPbJpsiAnalysis.C:268
 RunDstPbPbJpsiAnalysis.C:269
 RunDstPbPbJpsiAnalysis.C:270
 RunDstPbPbJpsiAnalysis.C:271
 RunDstPbPbJpsiAnalysis.C:272
 RunDstPbPbJpsiAnalysis.C:273
 RunDstPbPbJpsiAnalysis.C:274
 RunDstPbPbJpsiAnalysis.C:275
 RunDstPbPbJpsiAnalysis.C:276
 RunDstPbPbJpsiAnalysis.C:277
 RunDstPbPbJpsiAnalysis.C:278
 RunDstPbPbJpsiAnalysis.C:279
 RunDstPbPbJpsiAnalysis.C:280
 RunDstPbPbJpsiAnalysis.C:281
 RunDstPbPbJpsiAnalysis.C:282
 RunDstPbPbJpsiAnalysis.C:283
 RunDstPbPbJpsiAnalysis.C:284
 RunDstPbPbJpsiAnalysis.C:285
 RunDstPbPbJpsiAnalysis.C:286
 RunDstPbPbJpsiAnalysis.C:287
 RunDstPbPbJpsiAnalysis.C:288
 RunDstPbPbJpsiAnalysis.C:289
 RunDstPbPbJpsiAnalysis.C:290
 RunDstPbPbJpsiAnalysis.C:291
 RunDstPbPbJpsiAnalysis.C:292
 RunDstPbPbJpsiAnalysis.C:293
 RunDstPbPbJpsiAnalysis.C:294
 RunDstPbPbJpsiAnalysis.C:295
 RunDstPbPbJpsiAnalysis.C:296
 RunDstPbPbJpsiAnalysis.C:297
 RunDstPbPbJpsiAnalysis.C:298
 RunDstPbPbJpsiAnalysis.C:299
 RunDstPbPbJpsiAnalysis.C:300
 RunDstPbPbJpsiAnalysis.C:301
 RunDstPbPbJpsiAnalysis.C:302
 RunDstPbPbJpsiAnalysis.C:303
 RunDstPbPbJpsiAnalysis.C:304
 RunDstPbPbJpsiAnalysis.C:305
 RunDstPbPbJpsiAnalysis.C:306
 RunDstPbPbJpsiAnalysis.C:307
 RunDstPbPbJpsiAnalysis.C:308
 RunDstPbPbJpsiAnalysis.C:309
 RunDstPbPbJpsiAnalysis.C:310
 RunDstPbPbJpsiAnalysis.C:311
 RunDstPbPbJpsiAnalysis.C:312
 RunDstPbPbJpsiAnalysis.C:313
 RunDstPbPbJpsiAnalysis.C:314
 RunDstPbPbJpsiAnalysis.C:315
 RunDstPbPbJpsiAnalysis.C:316
 RunDstPbPbJpsiAnalysis.C:317
 RunDstPbPbJpsiAnalysis.C:318
 RunDstPbPbJpsiAnalysis.C:319
 RunDstPbPbJpsiAnalysis.C:320
 RunDstPbPbJpsiAnalysis.C:321
 RunDstPbPbJpsiAnalysis.C:322
 RunDstPbPbJpsiAnalysis.C:323
 RunDstPbPbJpsiAnalysis.C:324
 RunDstPbPbJpsiAnalysis.C:325
 RunDstPbPbJpsiAnalysis.C:326
 RunDstPbPbJpsiAnalysis.C:327
 RunDstPbPbJpsiAnalysis.C:328
 RunDstPbPbJpsiAnalysis.C:329
 RunDstPbPbJpsiAnalysis.C:330
 RunDstPbPbJpsiAnalysis.C:331
 RunDstPbPbJpsiAnalysis.C:332
 RunDstPbPbJpsiAnalysis.C:333
 RunDstPbPbJpsiAnalysis.C:334
 RunDstPbPbJpsiAnalysis.C:335
 RunDstPbPbJpsiAnalysis.C:336
 RunDstPbPbJpsiAnalysis.C:337
 RunDstPbPbJpsiAnalysis.C:338
 RunDstPbPbJpsiAnalysis.C:339
 RunDstPbPbJpsiAnalysis.C:340
 RunDstPbPbJpsiAnalysis.C:341
 RunDstPbPbJpsiAnalysis.C:342
 RunDstPbPbJpsiAnalysis.C:343
 RunDstPbPbJpsiAnalysis.C:344
 RunDstPbPbJpsiAnalysis.C:345
 RunDstPbPbJpsiAnalysis.C:346
 RunDstPbPbJpsiAnalysis.C:347
 RunDstPbPbJpsiAnalysis.C:348
 RunDstPbPbJpsiAnalysis.C:349
 RunDstPbPbJpsiAnalysis.C:350
 RunDstPbPbJpsiAnalysis.C:351
 RunDstPbPbJpsiAnalysis.C:352
 RunDstPbPbJpsiAnalysis.C:353
 RunDstPbPbJpsiAnalysis.C:354
 RunDstPbPbJpsiAnalysis.C:355
 RunDstPbPbJpsiAnalysis.C:356
 RunDstPbPbJpsiAnalysis.C:357
 RunDstPbPbJpsiAnalysis.C:358
 RunDstPbPbJpsiAnalysis.C:359
 RunDstPbPbJpsiAnalysis.C:360
 RunDstPbPbJpsiAnalysis.C:361
 RunDstPbPbJpsiAnalysis.C:362
 RunDstPbPbJpsiAnalysis.C:363
 RunDstPbPbJpsiAnalysis.C:364
 RunDstPbPbJpsiAnalysis.C:365
 RunDstPbPbJpsiAnalysis.C:366
 RunDstPbPbJpsiAnalysis.C:367
 RunDstPbPbJpsiAnalysis.C:368
 RunDstPbPbJpsiAnalysis.C:369
 RunDstPbPbJpsiAnalysis.C:370
 RunDstPbPbJpsiAnalysis.C:371
 RunDstPbPbJpsiAnalysis.C:372
 RunDstPbPbJpsiAnalysis.C:373
 RunDstPbPbJpsiAnalysis.C:374
 RunDstPbPbJpsiAnalysis.C:375
 RunDstPbPbJpsiAnalysis.C:376
 RunDstPbPbJpsiAnalysis.C:377
 RunDstPbPbJpsiAnalysis.C:378
 RunDstPbPbJpsiAnalysis.C:379
 RunDstPbPbJpsiAnalysis.C:380
 RunDstPbPbJpsiAnalysis.C:381
 RunDstPbPbJpsiAnalysis.C:382
 RunDstPbPbJpsiAnalysis.C:383
 RunDstPbPbJpsiAnalysis.C:384
 RunDstPbPbJpsiAnalysis.C:385
 RunDstPbPbJpsiAnalysis.C:386
 RunDstPbPbJpsiAnalysis.C:387
 RunDstPbPbJpsiAnalysis.C:388
 RunDstPbPbJpsiAnalysis.C:389
 RunDstPbPbJpsiAnalysis.C:390
 RunDstPbPbJpsiAnalysis.C:391
 RunDstPbPbJpsiAnalysis.C:392
 RunDstPbPbJpsiAnalysis.C:393
 RunDstPbPbJpsiAnalysis.C:394
 RunDstPbPbJpsiAnalysis.C:395
 RunDstPbPbJpsiAnalysis.C:396
 RunDstPbPbJpsiAnalysis.C:397
 RunDstPbPbJpsiAnalysis.C:398
 RunDstPbPbJpsiAnalysis.C:399
 RunDstPbPbJpsiAnalysis.C:400
 RunDstPbPbJpsiAnalysis.C:401
 RunDstPbPbJpsiAnalysis.C:402
 RunDstPbPbJpsiAnalysis.C:403
 RunDstPbPbJpsiAnalysis.C:404
 RunDstPbPbJpsiAnalysis.C:405
 RunDstPbPbJpsiAnalysis.C:406
 RunDstPbPbJpsiAnalysis.C:407
 RunDstPbPbJpsiAnalysis.C:408
 RunDstPbPbJpsiAnalysis.C:409
 RunDstPbPbJpsiAnalysis.C:410
 RunDstPbPbJpsiAnalysis.C:411
 RunDstPbPbJpsiAnalysis.C:412
 RunDstPbPbJpsiAnalysis.C:413
 RunDstPbPbJpsiAnalysis.C:414
 RunDstPbPbJpsiAnalysis.C:415
 RunDstPbPbJpsiAnalysis.C:416
 RunDstPbPbJpsiAnalysis.C:417
 RunDstPbPbJpsiAnalysis.C:418
 RunDstPbPbJpsiAnalysis.C:419
 RunDstPbPbJpsiAnalysis.C:420
 RunDstPbPbJpsiAnalysis.C:421
 RunDstPbPbJpsiAnalysis.C:422
 RunDstPbPbJpsiAnalysis.C:423
 RunDstPbPbJpsiAnalysis.C:424
 RunDstPbPbJpsiAnalysis.C:425
 RunDstPbPbJpsiAnalysis.C:426
 RunDstPbPbJpsiAnalysis.C:427
 RunDstPbPbJpsiAnalysis.C:428
 RunDstPbPbJpsiAnalysis.C:429
 RunDstPbPbJpsiAnalysis.C:430
 RunDstPbPbJpsiAnalysis.C:431
 RunDstPbPbJpsiAnalysis.C:432
 RunDstPbPbJpsiAnalysis.C:433
 RunDstPbPbJpsiAnalysis.C:434
 RunDstPbPbJpsiAnalysis.C:435
 RunDstPbPbJpsiAnalysis.C:436
 RunDstPbPbJpsiAnalysis.C:437
 RunDstPbPbJpsiAnalysis.C:438
 RunDstPbPbJpsiAnalysis.C:439
 RunDstPbPbJpsiAnalysis.C:440
 RunDstPbPbJpsiAnalysis.C:441
 RunDstPbPbJpsiAnalysis.C:442
 RunDstPbPbJpsiAnalysis.C:443
 RunDstPbPbJpsiAnalysis.C:444
 RunDstPbPbJpsiAnalysis.C:445
 RunDstPbPbJpsiAnalysis.C:446
 RunDstPbPbJpsiAnalysis.C:447
 RunDstPbPbJpsiAnalysis.C:448
 RunDstPbPbJpsiAnalysis.C:449
 RunDstPbPbJpsiAnalysis.C:450
 RunDstPbPbJpsiAnalysis.C:451
 RunDstPbPbJpsiAnalysis.C:452
 RunDstPbPbJpsiAnalysis.C:453
 RunDstPbPbJpsiAnalysis.C:454
 RunDstPbPbJpsiAnalysis.C:455
 RunDstPbPbJpsiAnalysis.C:456
 RunDstPbPbJpsiAnalysis.C:457
 RunDstPbPbJpsiAnalysis.C:458
 RunDstPbPbJpsiAnalysis.C:459
 RunDstPbPbJpsiAnalysis.C:460
 RunDstPbPbJpsiAnalysis.C:461
 RunDstPbPbJpsiAnalysis.C:462
 RunDstPbPbJpsiAnalysis.C:463
 RunDstPbPbJpsiAnalysis.C:464
 RunDstPbPbJpsiAnalysis.C:465
 RunDstPbPbJpsiAnalysis.C:466
 RunDstPbPbJpsiAnalysis.C:467
 RunDstPbPbJpsiAnalysis.C:468
 RunDstPbPbJpsiAnalysis.C:469
 RunDstPbPbJpsiAnalysis.C:470
 RunDstPbPbJpsiAnalysis.C:471
 RunDstPbPbJpsiAnalysis.C:472
 RunDstPbPbJpsiAnalysis.C:473
 RunDstPbPbJpsiAnalysis.C:474
 RunDstPbPbJpsiAnalysis.C:475
 RunDstPbPbJpsiAnalysis.C:476
 RunDstPbPbJpsiAnalysis.C:477
 RunDstPbPbJpsiAnalysis.C:478
 RunDstPbPbJpsiAnalysis.C:479
 RunDstPbPbJpsiAnalysis.C:480
 RunDstPbPbJpsiAnalysis.C:481
 RunDstPbPbJpsiAnalysis.C:482
 RunDstPbPbJpsiAnalysis.C:483
 RunDstPbPbJpsiAnalysis.C:484
 RunDstPbPbJpsiAnalysis.C:485
 RunDstPbPbJpsiAnalysis.C:486
 RunDstPbPbJpsiAnalysis.C:487
 RunDstPbPbJpsiAnalysis.C:488
 RunDstPbPbJpsiAnalysis.C:489
 RunDstPbPbJpsiAnalysis.C:490
 RunDstPbPbJpsiAnalysis.C:491
 RunDstPbPbJpsiAnalysis.C:492
 RunDstPbPbJpsiAnalysis.C:493
 RunDstPbPbJpsiAnalysis.C:494
 RunDstPbPbJpsiAnalysis.C:495
 RunDstPbPbJpsiAnalysis.C:496
 RunDstPbPbJpsiAnalysis.C:497
 RunDstPbPbJpsiAnalysis.C:498
 RunDstPbPbJpsiAnalysis.C:499
 RunDstPbPbJpsiAnalysis.C:500
 RunDstPbPbJpsiAnalysis.C:501
 RunDstPbPbJpsiAnalysis.C:502
 RunDstPbPbJpsiAnalysis.C:503
 RunDstPbPbJpsiAnalysis.C:504
 RunDstPbPbJpsiAnalysis.C:505
 RunDstPbPbJpsiAnalysis.C:506
 RunDstPbPbJpsiAnalysis.C:507
 RunDstPbPbJpsiAnalysis.C:508
 RunDstPbPbJpsiAnalysis.C:509
 RunDstPbPbJpsiAnalysis.C:510
 RunDstPbPbJpsiAnalysis.C:511
 RunDstPbPbJpsiAnalysis.C:512
 RunDstPbPbJpsiAnalysis.C:513
 RunDstPbPbJpsiAnalysis.C:514
 RunDstPbPbJpsiAnalysis.C:515
 RunDstPbPbJpsiAnalysis.C:516
 RunDstPbPbJpsiAnalysis.C:517
 RunDstPbPbJpsiAnalysis.C:518
 RunDstPbPbJpsiAnalysis.C:519
 RunDstPbPbJpsiAnalysis.C:520
 RunDstPbPbJpsiAnalysis.C:521
 RunDstPbPbJpsiAnalysis.C:522
 RunDstPbPbJpsiAnalysis.C:523
 RunDstPbPbJpsiAnalysis.C:524
 RunDstPbPbJpsiAnalysis.C:525
 RunDstPbPbJpsiAnalysis.C:526
 RunDstPbPbJpsiAnalysis.C:527
 RunDstPbPbJpsiAnalysis.C:528
 RunDstPbPbJpsiAnalysis.C:529
 RunDstPbPbJpsiAnalysis.C:530
 RunDstPbPbJpsiAnalysis.C:531
 RunDstPbPbJpsiAnalysis.C:532
 RunDstPbPbJpsiAnalysis.C:533
 RunDstPbPbJpsiAnalysis.C:534
 RunDstPbPbJpsiAnalysis.C:535
 RunDstPbPbJpsiAnalysis.C:536
 RunDstPbPbJpsiAnalysis.C:537
 RunDstPbPbJpsiAnalysis.C:538
 RunDstPbPbJpsiAnalysis.C:539
 RunDstPbPbJpsiAnalysis.C:540
 RunDstPbPbJpsiAnalysis.C:541
 RunDstPbPbJpsiAnalysis.C:542
 RunDstPbPbJpsiAnalysis.C:543
 RunDstPbPbJpsiAnalysis.C:544
 RunDstPbPbJpsiAnalysis.C:545
 RunDstPbPbJpsiAnalysis.C:546
 RunDstPbPbJpsiAnalysis.C:547
 RunDstPbPbJpsiAnalysis.C:548
 RunDstPbPbJpsiAnalysis.C:549
 RunDstPbPbJpsiAnalysis.C:550
 RunDstPbPbJpsiAnalysis.C:551
 RunDstPbPbJpsiAnalysis.C:552
 RunDstPbPbJpsiAnalysis.C:553
 RunDstPbPbJpsiAnalysis.C:554
 RunDstPbPbJpsiAnalysis.C:555
 RunDstPbPbJpsiAnalysis.C:556
 RunDstPbPbJpsiAnalysis.C:557
 RunDstPbPbJpsiAnalysis.C:558
 RunDstPbPbJpsiAnalysis.C:559
 RunDstPbPbJpsiAnalysis.C:560
 RunDstPbPbJpsiAnalysis.C:561
 RunDstPbPbJpsiAnalysis.C:562
 RunDstPbPbJpsiAnalysis.C:563
 RunDstPbPbJpsiAnalysis.C:564
 RunDstPbPbJpsiAnalysis.C:565
 RunDstPbPbJpsiAnalysis.C:566
 RunDstPbPbJpsiAnalysis.C:567
 RunDstPbPbJpsiAnalysis.C:568
 RunDstPbPbJpsiAnalysis.C:569
 RunDstPbPbJpsiAnalysis.C:570
 RunDstPbPbJpsiAnalysis.C:571
 RunDstPbPbJpsiAnalysis.C:572
 RunDstPbPbJpsiAnalysis.C:573
 RunDstPbPbJpsiAnalysis.C:574
 RunDstPbPbJpsiAnalysis.C:575
 RunDstPbPbJpsiAnalysis.C:576
 RunDstPbPbJpsiAnalysis.C:577
 RunDstPbPbJpsiAnalysis.C:578
 RunDstPbPbJpsiAnalysis.C:579
 RunDstPbPbJpsiAnalysis.C:580
 RunDstPbPbJpsiAnalysis.C:581
 RunDstPbPbJpsiAnalysis.C:582
 RunDstPbPbJpsiAnalysis.C:583
 RunDstPbPbJpsiAnalysis.C:584
 RunDstPbPbJpsiAnalysis.C:585
 RunDstPbPbJpsiAnalysis.C:586
 RunDstPbPbJpsiAnalysis.C:587
 RunDstPbPbJpsiAnalysis.C:588
 RunDstPbPbJpsiAnalysis.C:589
 RunDstPbPbJpsiAnalysis.C:590
 RunDstPbPbJpsiAnalysis.C:591
 RunDstPbPbJpsiAnalysis.C:592
 RunDstPbPbJpsiAnalysis.C:593
 RunDstPbPbJpsiAnalysis.C:594
 RunDstPbPbJpsiAnalysis.C:595
 RunDstPbPbJpsiAnalysis.C:596
 RunDstPbPbJpsiAnalysis.C:597
 RunDstPbPbJpsiAnalysis.C:598
 RunDstPbPbJpsiAnalysis.C:599
 RunDstPbPbJpsiAnalysis.C:600
 RunDstPbPbJpsiAnalysis.C:601
 RunDstPbPbJpsiAnalysis.C:602
 RunDstPbPbJpsiAnalysis.C:603
 RunDstPbPbJpsiAnalysis.C:604
 RunDstPbPbJpsiAnalysis.C:605
 RunDstPbPbJpsiAnalysis.C:606
 RunDstPbPbJpsiAnalysis.C:607
 RunDstPbPbJpsiAnalysis.C:608
 RunDstPbPbJpsiAnalysis.C:609
 RunDstPbPbJpsiAnalysis.C:610
 RunDstPbPbJpsiAnalysis.C:611
 RunDstPbPbJpsiAnalysis.C:612
 RunDstPbPbJpsiAnalysis.C:613
 RunDstPbPbJpsiAnalysis.C:614
 RunDstPbPbJpsiAnalysis.C:615
 RunDstPbPbJpsiAnalysis.C:616
 RunDstPbPbJpsiAnalysis.C:617
 RunDstPbPbJpsiAnalysis.C:618
 RunDstPbPbJpsiAnalysis.C:619
 RunDstPbPbJpsiAnalysis.C:620
 RunDstPbPbJpsiAnalysis.C:621
 RunDstPbPbJpsiAnalysis.C:622
 RunDstPbPbJpsiAnalysis.C:623
 RunDstPbPbJpsiAnalysis.C:624
 RunDstPbPbJpsiAnalysis.C:625
 RunDstPbPbJpsiAnalysis.C:626
 RunDstPbPbJpsiAnalysis.C:627
 RunDstPbPbJpsiAnalysis.C:628
 RunDstPbPbJpsiAnalysis.C:629
 RunDstPbPbJpsiAnalysis.C:630
 RunDstPbPbJpsiAnalysis.C:631
 RunDstPbPbJpsiAnalysis.C:632
 RunDstPbPbJpsiAnalysis.C:633
 RunDstPbPbJpsiAnalysis.C:634
 RunDstPbPbJpsiAnalysis.C:635
 RunDstPbPbJpsiAnalysis.C:636
 RunDstPbPbJpsiAnalysis.C:637
 RunDstPbPbJpsiAnalysis.C:638
 RunDstPbPbJpsiAnalysis.C:639
 RunDstPbPbJpsiAnalysis.C:640
 RunDstPbPbJpsiAnalysis.C:641
 RunDstPbPbJpsiAnalysis.C:642
 RunDstPbPbJpsiAnalysis.C:643
 RunDstPbPbJpsiAnalysis.C:644
 RunDstPbPbJpsiAnalysis.C:645
 RunDstPbPbJpsiAnalysis.C:646
 RunDstPbPbJpsiAnalysis.C:647
 RunDstPbPbJpsiAnalysis.C:648
 RunDstPbPbJpsiAnalysis.C:649
 RunDstPbPbJpsiAnalysis.C:650
 RunDstPbPbJpsiAnalysis.C:651
 RunDstPbPbJpsiAnalysis.C:652
 RunDstPbPbJpsiAnalysis.C:653
 RunDstPbPbJpsiAnalysis.C:654
 RunDstPbPbJpsiAnalysis.C:655
 RunDstPbPbJpsiAnalysis.C:656
 RunDstPbPbJpsiAnalysis.C:657
 RunDstPbPbJpsiAnalysis.C:658
 RunDstPbPbJpsiAnalysis.C:659
 RunDstPbPbJpsiAnalysis.C:660
 RunDstPbPbJpsiAnalysis.C:661
 RunDstPbPbJpsiAnalysis.C:662
 RunDstPbPbJpsiAnalysis.C:663
 RunDstPbPbJpsiAnalysis.C:664
 RunDstPbPbJpsiAnalysis.C:665
 RunDstPbPbJpsiAnalysis.C:666
 RunDstPbPbJpsiAnalysis.C:667
 RunDstPbPbJpsiAnalysis.C:668
 RunDstPbPbJpsiAnalysis.C:669
 RunDstPbPbJpsiAnalysis.C:670
 RunDstPbPbJpsiAnalysis.C:671
 RunDstPbPbJpsiAnalysis.C:672
 RunDstPbPbJpsiAnalysis.C:673
 RunDstPbPbJpsiAnalysis.C:674
 RunDstPbPbJpsiAnalysis.C:675
 RunDstPbPbJpsiAnalysis.C:676
 RunDstPbPbJpsiAnalysis.C:677
 RunDstPbPbJpsiAnalysis.C:678
 RunDstPbPbJpsiAnalysis.C:679
 RunDstPbPbJpsiAnalysis.C:680
 RunDstPbPbJpsiAnalysis.C:681
 RunDstPbPbJpsiAnalysis.C:682
 RunDstPbPbJpsiAnalysis.C:683
 RunDstPbPbJpsiAnalysis.C:684
 RunDstPbPbJpsiAnalysis.C:685
 RunDstPbPbJpsiAnalysis.C:686
 RunDstPbPbJpsiAnalysis.C:687
 RunDstPbPbJpsiAnalysis.C:688
 RunDstPbPbJpsiAnalysis.C:689
 RunDstPbPbJpsiAnalysis.C:690
 RunDstPbPbJpsiAnalysis.C:691
 RunDstPbPbJpsiAnalysis.C:692
 RunDstPbPbJpsiAnalysis.C:693
 RunDstPbPbJpsiAnalysis.C:694
 RunDstPbPbJpsiAnalysis.C:695
 RunDstPbPbJpsiAnalysis.C:696
 RunDstPbPbJpsiAnalysis.C:697
 RunDstPbPbJpsiAnalysis.C:698
 RunDstPbPbJpsiAnalysis.C:699
 RunDstPbPbJpsiAnalysis.C:700
 RunDstPbPbJpsiAnalysis.C:701
 RunDstPbPbJpsiAnalysis.C:702
 RunDstPbPbJpsiAnalysis.C:703
 RunDstPbPbJpsiAnalysis.C:704
 RunDstPbPbJpsiAnalysis.C:705
 RunDstPbPbJpsiAnalysis.C:706
 RunDstPbPbJpsiAnalysis.C:707
 RunDstPbPbJpsiAnalysis.C:708
 RunDstPbPbJpsiAnalysis.C:709
 RunDstPbPbJpsiAnalysis.C:710
 RunDstPbPbJpsiAnalysis.C:711
 RunDstPbPbJpsiAnalysis.C:712
 RunDstPbPbJpsiAnalysis.C:713
 RunDstPbPbJpsiAnalysis.C:714
 RunDstPbPbJpsiAnalysis.C:715
 RunDstPbPbJpsiAnalysis.C:716
 RunDstPbPbJpsiAnalysis.C:717
 RunDstPbPbJpsiAnalysis.C:718
 RunDstPbPbJpsiAnalysis.C:719
 RunDstPbPbJpsiAnalysis.C:720
 RunDstPbPbJpsiAnalysis.C:721
 RunDstPbPbJpsiAnalysis.C:722
 RunDstPbPbJpsiAnalysis.C:723
 RunDstPbPbJpsiAnalysis.C:724
 RunDstPbPbJpsiAnalysis.C:725
 RunDstPbPbJpsiAnalysis.C:726
 RunDstPbPbJpsiAnalysis.C:727
 RunDstPbPbJpsiAnalysis.C:728
 RunDstPbPbJpsiAnalysis.C:729
 RunDstPbPbJpsiAnalysis.C:730
 RunDstPbPbJpsiAnalysis.C:731
 RunDstPbPbJpsiAnalysis.C:732
 RunDstPbPbJpsiAnalysis.C:733
 RunDstPbPbJpsiAnalysis.C:734
 RunDstPbPbJpsiAnalysis.C:735
 RunDstPbPbJpsiAnalysis.C:736
 RunDstPbPbJpsiAnalysis.C:737
 RunDstPbPbJpsiAnalysis.C:738
 RunDstPbPbJpsiAnalysis.C:739
 RunDstPbPbJpsiAnalysis.C:740
 RunDstPbPbJpsiAnalysis.C:741
 RunDstPbPbJpsiAnalysis.C:742
 RunDstPbPbJpsiAnalysis.C:743
 RunDstPbPbJpsiAnalysis.C:744
 RunDstPbPbJpsiAnalysis.C:745
 RunDstPbPbJpsiAnalysis.C:746
 RunDstPbPbJpsiAnalysis.C:747
 RunDstPbPbJpsiAnalysis.C:748
 RunDstPbPbJpsiAnalysis.C:749
 RunDstPbPbJpsiAnalysis.C:750
 RunDstPbPbJpsiAnalysis.C:751
 RunDstPbPbJpsiAnalysis.C:752
 RunDstPbPbJpsiAnalysis.C:753
 RunDstPbPbJpsiAnalysis.C:754
 RunDstPbPbJpsiAnalysis.C:755
 RunDstPbPbJpsiAnalysis.C:756
 RunDstPbPbJpsiAnalysis.C:757
 RunDstPbPbJpsiAnalysis.C:758
 RunDstPbPbJpsiAnalysis.C:759
 RunDstPbPbJpsiAnalysis.C:760
 RunDstPbPbJpsiAnalysis.C:761
 RunDstPbPbJpsiAnalysis.C:762
 RunDstPbPbJpsiAnalysis.C:763
 RunDstPbPbJpsiAnalysis.C:764
 RunDstPbPbJpsiAnalysis.C:765
 RunDstPbPbJpsiAnalysis.C:766
 RunDstPbPbJpsiAnalysis.C:767
 RunDstPbPbJpsiAnalysis.C:768
 RunDstPbPbJpsiAnalysis.C:769
 RunDstPbPbJpsiAnalysis.C:770
 RunDstPbPbJpsiAnalysis.C:771
 RunDstPbPbJpsiAnalysis.C:772
 RunDstPbPbJpsiAnalysis.C:773
 RunDstPbPbJpsiAnalysis.C:774
 RunDstPbPbJpsiAnalysis.C:775
 RunDstPbPbJpsiAnalysis.C:776
 RunDstPbPbJpsiAnalysis.C:777
 RunDstPbPbJpsiAnalysis.C:778
 RunDstPbPbJpsiAnalysis.C:779
 RunDstPbPbJpsiAnalysis.C:780
 RunDstPbPbJpsiAnalysis.C:781
 RunDstPbPbJpsiAnalysis.C:782
 RunDstPbPbJpsiAnalysis.C:783
 RunDstPbPbJpsiAnalysis.C:784
 RunDstPbPbJpsiAnalysis.C:785
 RunDstPbPbJpsiAnalysis.C:786
 RunDstPbPbJpsiAnalysis.C:787
 RunDstPbPbJpsiAnalysis.C:788
 RunDstPbPbJpsiAnalysis.C:789
 RunDstPbPbJpsiAnalysis.C:790
 RunDstPbPbJpsiAnalysis.C:791
 RunDstPbPbJpsiAnalysis.C:792
 RunDstPbPbJpsiAnalysis.C:793
 RunDstPbPbJpsiAnalysis.C:794
 RunDstPbPbJpsiAnalysis.C:795
 RunDstPbPbJpsiAnalysis.C:796
 RunDstPbPbJpsiAnalysis.C:797
 RunDstPbPbJpsiAnalysis.C:798
 RunDstPbPbJpsiAnalysis.C:799
 RunDstPbPbJpsiAnalysis.C:800
 RunDstPbPbJpsiAnalysis.C:801
 RunDstPbPbJpsiAnalysis.C:802
 RunDstPbPbJpsiAnalysis.C:803
 RunDstPbPbJpsiAnalysis.C:804
 RunDstPbPbJpsiAnalysis.C:805
 RunDstPbPbJpsiAnalysis.C:806
 RunDstPbPbJpsiAnalysis.C:807
 RunDstPbPbJpsiAnalysis.C:808
 RunDstPbPbJpsiAnalysis.C:809
 RunDstPbPbJpsiAnalysis.C:810
 RunDstPbPbJpsiAnalysis.C:811
 RunDstPbPbJpsiAnalysis.C:812
 RunDstPbPbJpsiAnalysis.C:813
 RunDstPbPbJpsiAnalysis.C:814
 RunDstPbPbJpsiAnalysis.C:815
 RunDstPbPbJpsiAnalysis.C:816
 RunDstPbPbJpsiAnalysis.C:817
 RunDstPbPbJpsiAnalysis.C:818
 RunDstPbPbJpsiAnalysis.C:819
 RunDstPbPbJpsiAnalysis.C:820
 RunDstPbPbJpsiAnalysis.C:821
 RunDstPbPbJpsiAnalysis.C:822
 RunDstPbPbJpsiAnalysis.C:823
 RunDstPbPbJpsiAnalysis.C:824
 RunDstPbPbJpsiAnalysis.C:825
 RunDstPbPbJpsiAnalysis.C:826
 RunDstPbPbJpsiAnalysis.C:827
 RunDstPbPbJpsiAnalysis.C:828
 RunDstPbPbJpsiAnalysis.C:829
 RunDstPbPbJpsiAnalysis.C:830
 RunDstPbPbJpsiAnalysis.C:831
 RunDstPbPbJpsiAnalysis.C:832
 RunDstPbPbJpsiAnalysis.C:833
 RunDstPbPbJpsiAnalysis.C:834
 RunDstPbPbJpsiAnalysis.C:835
 RunDstPbPbJpsiAnalysis.C:836
 RunDstPbPbJpsiAnalysis.C:837
 RunDstPbPbJpsiAnalysis.C:838
 RunDstPbPbJpsiAnalysis.C:839
 RunDstPbPbJpsiAnalysis.C:840
 RunDstPbPbJpsiAnalysis.C:841
 RunDstPbPbJpsiAnalysis.C:842
 RunDstPbPbJpsiAnalysis.C:843
 RunDstPbPbJpsiAnalysis.C:844
 RunDstPbPbJpsiAnalysis.C:845
 RunDstPbPbJpsiAnalysis.C:846
 RunDstPbPbJpsiAnalysis.C:847
 RunDstPbPbJpsiAnalysis.C:848
 RunDstPbPbJpsiAnalysis.C:849
 RunDstPbPbJpsiAnalysis.C:850
 RunDstPbPbJpsiAnalysis.C:851
 RunDstPbPbJpsiAnalysis.C:852
 RunDstPbPbJpsiAnalysis.C:853
 RunDstPbPbJpsiAnalysis.C:854
 RunDstPbPbJpsiAnalysis.C:855
 RunDstPbPbJpsiAnalysis.C:856
 RunDstPbPbJpsiAnalysis.C:857
 RunDstPbPbJpsiAnalysis.C:858
 RunDstPbPbJpsiAnalysis.C:859
 RunDstPbPbJpsiAnalysis.C:860
 RunDstPbPbJpsiAnalysis.C:861
 RunDstPbPbJpsiAnalysis.C:862
 RunDstPbPbJpsiAnalysis.C:863
 RunDstPbPbJpsiAnalysis.C:864
 RunDstPbPbJpsiAnalysis.C:865
 RunDstPbPbJpsiAnalysis.C:866
 RunDstPbPbJpsiAnalysis.C:867
 RunDstPbPbJpsiAnalysis.C:868
 RunDstPbPbJpsiAnalysis.C:869
 RunDstPbPbJpsiAnalysis.C:870
 RunDstPbPbJpsiAnalysis.C:871
 RunDstPbPbJpsiAnalysis.C:872
 RunDstPbPbJpsiAnalysis.C:873
 RunDstPbPbJpsiAnalysis.C:874
 RunDstPbPbJpsiAnalysis.C:875
 RunDstPbPbJpsiAnalysis.C:876
 RunDstPbPbJpsiAnalysis.C:877
 RunDstPbPbJpsiAnalysis.C:878
 RunDstPbPbJpsiAnalysis.C:879
 RunDstPbPbJpsiAnalysis.C:880
 RunDstPbPbJpsiAnalysis.C:881
 RunDstPbPbJpsiAnalysis.C:882
 RunDstPbPbJpsiAnalysis.C:883
 RunDstPbPbJpsiAnalysis.C:884
 RunDstPbPbJpsiAnalysis.C:885
 RunDstPbPbJpsiAnalysis.C:886
 RunDstPbPbJpsiAnalysis.C:887
 RunDstPbPbJpsiAnalysis.C:888
 RunDstPbPbJpsiAnalysis.C:889
 RunDstPbPbJpsiAnalysis.C:890
 RunDstPbPbJpsiAnalysis.C:891
 RunDstPbPbJpsiAnalysis.C:892
 RunDstPbPbJpsiAnalysis.C:893
 RunDstPbPbJpsiAnalysis.C:894
 RunDstPbPbJpsiAnalysis.C:895
 RunDstPbPbJpsiAnalysis.C:896
 RunDstPbPbJpsiAnalysis.C:897
 RunDstPbPbJpsiAnalysis.C:898
 RunDstPbPbJpsiAnalysis.C:899
 RunDstPbPbJpsiAnalysis.C:900
 RunDstPbPbJpsiAnalysis.C:901
 RunDstPbPbJpsiAnalysis.C:902
 RunDstPbPbJpsiAnalysis.C:903
 RunDstPbPbJpsiAnalysis.C:904
 RunDstPbPbJpsiAnalysis.C:905
 RunDstPbPbJpsiAnalysis.C:906
 RunDstPbPbJpsiAnalysis.C:907
 RunDstPbPbJpsiAnalysis.C:908
 RunDstPbPbJpsiAnalysis.C:909
 RunDstPbPbJpsiAnalysis.C:910
 RunDstPbPbJpsiAnalysis.C:911
 RunDstPbPbJpsiAnalysis.C:912
 RunDstPbPbJpsiAnalysis.C:913
 RunDstPbPbJpsiAnalysis.C:914
 RunDstPbPbJpsiAnalysis.C:915
 RunDstPbPbJpsiAnalysis.C:916
 RunDstPbPbJpsiAnalysis.C:917
 RunDstPbPbJpsiAnalysis.C:918
 RunDstPbPbJpsiAnalysis.C:919
 RunDstPbPbJpsiAnalysis.C:920
 RunDstPbPbJpsiAnalysis.C:921
 RunDstPbPbJpsiAnalysis.C:922
 RunDstPbPbJpsiAnalysis.C:923
 RunDstPbPbJpsiAnalysis.C:924
 RunDstPbPbJpsiAnalysis.C:925
 RunDstPbPbJpsiAnalysis.C:926
 RunDstPbPbJpsiAnalysis.C:927
 RunDstPbPbJpsiAnalysis.C:928
 RunDstPbPbJpsiAnalysis.C:929