ROOT logo
Double_t GenerateCorrMatr_pp(const char* mcfile, const char* mctask, const char* idstring ,const char* outfile, const char* gifdir = 0)
//Double_t GenerateCorrMatr_pp()
{
//tmp setting
// const char* mcfile = "/d/alice09/mknichel/train/V007.MC_pp/2011-05-05_2347.7147/mergedPeriods/MC_pp/7TeV/LHC10f6a/mknichel_dNdPtpp_TPCITS.root";
// const char* mctask = "mknichel_dNdPtpp_TPCITS";
// const char* idstring = "TPCITS";
// const char* outfile = "/u/mknichel/alice/dNdPt_pp/temp/corrMatr_LHC10f6a_TPCITS.root";
// const char* gifdir = "/u/mknichel/alice/dNdPt_pp/temp";

TString fname (mcfile);

TString id (idstring);
TString taskname = "mknichel_dNdPtpp_" + id;
TString objname = "dNdPtAnalysis_" + id;

    // settings vor zVertex cut (event and track level)
    Double_t zVert = 10.0;
    
    // setting on eta cut (track level)
    Double_t eta = 0.8;
    
    // strangeness scaling factor (for secondaries from strange decays)
    Double_t sscale = 2.0;  //ignored
    
    
    // Set pt binning
    const Int_t ptNbins = 31;
    Double_t bins[32] = {0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0,2.4,2.8, 3.0,  4.0, 50.0, 100.0 };
    Double_t* binsPt = new Double_t[32];
    for (int ibin=0; ibin<32; ibin++) {binsPt[ibin] = bins[ibin];}
    
 

  Int_t ptNbinsTrackEventCorr = 36;
  Int_t etaNbins = 30;
  Int_t zvNbins = 12;

  Double_t binsMultDefault[28] = {-0.5, 0.5 , 1.5 , 2.5 , 3.5 , 4.5 , 5.5 , 6.5 , 7.5 , 8.5,
                                     9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5,
				     19.5,20.5, 21.5, 22.5, 23.5, 24.5, 29.5, 149.5};

  Double_t binsPtTrackEventCorrDefault[37] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,3.0,4.0,50.0};

  Double_t binsPtDefault[69] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,18.0,20.0,22.0,24.0,26.0,28.0,30.0,32.0,34.0,36.0,40.0,45.0,50.0};

  Double_t binsEtaDefault[31] = {-1.5,-1.4,-1.3,-1.2,-1.1,-1.0,-0.9,-0.8,-0.7,-0.6,-0.5,-0.4,-0.3,-0.2,-0.1,0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5};

  Double_t binsZvDefault[13] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};
  
    // binning for corrections (note difference for efficiency and secondaries)
    if (fname.Contains("2.76TeV") || fname.Contains("900GeV")) {
    
    const Int_t ptNbinsSecCorr  = 28;
    const Int_t ptNbinsEffCorr  = 31;
    const Int_t etaNbinsCorr = 4;
    const Int_t zvNbinsCorr  = 4;
    const Int_t multNbinsCorr = 2;
    Double_t ptBinsSecCorr[29] = {0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0, 1.2, 1.4, 1.6, 2.0, 2.4, 3.0, 50.0, 100.0 };    
    Double_t ptBinsEffCorr[32] = {0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0, 1.2, 1.4, 1.6, 2.0, 2.4, 2.8, 3.0, 3.4, 4.0, 50.0, 100.0 };
    Double_t etaBinsCorr[5] = {-0.8,-0.4,0.,0.4,0.8};
    
    Double_t zvBinsCorr[5] = {-10.,-5.,0.,5.,10.};
    Double_t multBinsCorr[3] = {-0.5,0.5,500.};
    
    
    } else {
    
    const Int_t ptNbinsSecCorr  = 38;
    const Int_t ptNbinsEffCorr  = 50;
    const Int_t etaNbinsCorr = 8;
    const Int_t zvNbinsCorr  = 4;
    const Int_t multNbinsCorr = 2;
    Double_t ptBinsSecCorr[39] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,3.0,3.4,4.0,50.0,100.0};
    Double_t ptBinsEffCorr[51] = {0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.2, 2.4, 2.6, 2.8, 3.0, 3.2, 3.4, 3.6, 3.8, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0, 8.0, 10.0, 50.0, 100.0 };
    Double_t etaBinsCorr[9] = {-0.8,-0.6,-0.4,-0.2,0.,0.2,0.4,0.6,0.8};
    
    Double_t zvBinsCorr[5] = {-10.,-5.,0.,5.,10.};
    Double_t multBinsCorr[3] = {-0.5,0.5,500.};
    
    }
    
    
    Int_t binsTrackEffCorr[3]={zvNbinsCorr,ptNbinsEffCorr,etaNbinsCorr};
    Int_t binsTrackSecCorr[3]={zvNbinsCorr,ptNbinsSecCorr,etaNbinsCorr};
    
    THnSparse* hSTrackEffCorr = new THnSparseF("hSTrackEffCorr","Zv:pT:eta",3,binsTrackEffCorr);
    hSTrackEffCorr->SetBinEdges(0,zvBinsCorr);
    hSTrackEffCorr->SetBinEdges(1,ptBinsEffCorr);
    hSTrackEffCorr->SetBinEdges(2,etaBinsCorr);
//     hSTrackEffCorr->SetBinEdges(3,multBinsCorr);
    hSTrackEffCorr->GetAxis(0)->SetTitle("Zv (cm)");
    hSTrackEffCorr->GetAxis(1)->SetTitle("p_{T} (GeV/c)");
    hSTrackEffCorr->GetAxis(2)->SetTitle("#eta");
//     hSTrackEffCorr->GetAxis(3)->SetTitle("mult MB");
    hSTrackEffCorr->Sumw2();    
    
    THnSparse* hSTrackSecCorr = new THnSparseF("hSTrackSecCorr","Zv:pT:eta",3,binsTrackSecCorr);    
    hSTrackSecCorr->SetBinEdges(0,zvBinsCorr);
    hSTrackSecCorr->SetBinEdges(1,ptBinsSecCorr);
    hSTrackSecCorr->SetBinEdges(2,etaBinsCorr);
//     hSTrackSecCorr->SetBinEdges(3,multBinsCorr);
    hSTrackSecCorr->GetAxis(0)->SetTitle("Zv (cm)");
    hSTrackSecCorr->GetAxis(1)->SetTitle("p_{T} (GeV/c)");
    hSTrackSecCorr->GetAxis(2)->SetTitle("#eta");
//     hSTrackSecCorr->GetAxis(3)->SetTitle("mult MB");
    hSTrackSecCorr->Sumw2();
    

    // make plots nicer
    gROOT->SetStyle("Plain");
    gStyle->SetPalette(1);
    
    // array for all correction matrices
    TObjArray* CorrMatr = new TObjArray();
    
    // array for all control histograms
    TObjArray* ContHist = new TObjArray();
    

    // load mc information
    TFile* fmc = TFile::Open(mcfile,"READ");
    if (!fmc) return -1;
    TList* lmc = dynamic_cast<TList*>(fmc->Get(taskname.Data()));
    if (!lmc) return -1;
    AlidNdPtAnalysis *obj = dynamic_cast<AlidNdPtAnalysis*>(lmc->FindObject(objname.Data()));
    if (!obj) return -1;

    //Event statistics
    THnSparse *fRecEventMatrix = obj->GetRecEventMatrix(); //all reconstructed events	
    TH2D* h2RecEventAll = fRecEventMatrix->Projection(0,1)->Clone("h2RecEventAll");
    fRecEventMatrix->GetAxis(0)->SetRangeUser(-zVert, zVert-0.01);//zVer
    TH2D* h2RecEvent = fRecEventMatrix->Projection(0,1)->Clone("h2RecEvent");
    Double_t MCReconstructedEvents = h2RecEvent->Integral();
    Double_t MCReconstructedEventsAll = h2RecEventAll->Integral();
    ContHist->Add(h2RecEvent);
    ContHist->Add(h2RecEventAll);
        
    THnSparse *fTriggerEventMatrix = obj->GetTriggerEventMatrix(); //all triggered events
    Double_t MCTriggeredEventsAll0mult =  obj->GetTriggerEventMatrix()->Projection(1)->Integral(1,1); // 0 contributers to vertex
    TH2D* h2TriggerEventAll = fTriggerEventMatrix->Projection(0,1)->Clone("h2TriggerEventAll");
    fTriggerEventMatrix->GetAxis(0)->SetRangeUser(-zVert, zVert-0.01);//zVer
    Double_t MCTriggeredEvents0mult =  obj->GetTriggerEventMatrix()->Projection(1)->Integral(1,1); // 0 contributers to vertex
    TH2D* h2TriggerEvent = fTriggerEventMatrix->Projection(0,1)->Clone("h2TriggerEvent");
    Double_t MCTriggeredEvents = h2TriggerEvent->Integral();
    Double_t MCTriggeredEventsAll = h2TriggerEventAll->Integral();
    ContHist->Add(h2TriggerEvent);
    ContHist->Add(h2TriggerEventAll);
        
    THnSparse *fGenEventMatrix = obj->GetGenEventMatrix(); //all generated events
    TH2D* h2GenEventAll = fGenEventMatrix->Projection(0,1)->Clone("h2GenEventAll");
    fGenEventMatrix->GetAxis(0)->SetRangeUser(-zVert, zVert-0.01);//zVer
    TH2D* h2GenEvent = fGenEventMatrix->Projection(0,1)->Clone("h2GenEvent");
    Double_t MCGeneratedEvents = h2GenEvent->Integral();
    Double_t MCGeneratedEventsAll = h2GenEventAll->Integral(); 
    ContHist->Add(h2RecEvent);
    ContHist->Add(h2RecEventAll);
    
    THnSparse *fRecEventHist = obj->GetRecEventHist();
    THnSparse *fRecEventHist2 = obj->GetRecEventHist2();
	
    printf("=== generated MC events for correction matrices    %lf ===\n",MCGeneratedEvents);
    printf("=== triggered MC events for correction matrices    %lf ===\n",MCTriggeredEvents);
    printf("=== recontructed MC events for correction matrices %lf ===\n",MCReconstructedEvents);
    printf("\n");
    printf("=== cut on the zVertex +- %lf ===\n",zVert);
    printf("=== generated MC events (before zVertex cut)       %lf ===\n",MCGeneratedEventsAll);
    printf("=== triggered MC events (before zVertex cut)       %lf ===\n",MCTriggeredEventsAll);
    printf("=== recontructed MC events (before zVertex cut)    %lf ===\n",MCReconstructedEventsAll);
    
    TH1D* h1MCGeneratedEvents = new TH1D("h1MCGeneratedEvents","h1MCGeneratedEvents",1,0,1);
    TH1D* h1MCTriggeredEvents = new TH1D("h1MCTriggeredEvents","h1MCTriggeredEvents",1,0,1);
    TH1D* h1MCReconstructedEvents = new TH1D("h1MCReconstructedEvents","h1MCReconstructedEvents",1,0,1);
    TH1D* h1MCGeneratedEventsAll = new TH1D("h1MCGeneratedEventsAll","h1MCGeneratedEventsAll",1,0,1);
    TH1D* h1MCTriggeredEventsAll = new TH1D("h1MCTriggeredEventsAll","h1MCTriggeredEventsAll",1,0,1);
    TH1D* h1MCReconstructedEventsAll = new TH1D("h1MCReconstructedEventsAll","h1MCReconstructedEventsAll",1,0,1);
    TH1D* h1MCTriggeredEventsAll0mult = new TH1D("h1MCTriggeredEventsAll0mult","h1MCTriggeredEventsAll0mult",1,0,1);
    TH1D* h1MCTriggeredEvents0mult = new TH1D("h1MCTriggeredEvents0mult","h1MCTriggeredEvents0mult",1,0,1);
    
    h1MCGeneratedEvents->Fill(0,MCGeneratedEvents);
    h1MCGeneratedEvents->SetEntries(MCGeneratedEvents);
    h1MCTriggeredEvents->Fill(0,MCTriggeredEvents);
    h1MCTriggeredEvents->SetEntries(MCTriggeredEvents);
    h1MCReconstructedEvents->Fill(0,MCReconstructedEvents);
    h1MCReconstructedEvents->SetEntries(MCReconstructedEvents);
    h1MCGeneratedEventsAll->Fill(0,MCGeneratedEventsAll);
    h1MCGeneratedEventsAll->SetEntries(MCGeneratedEventsAll);
    h1MCTriggeredEventsAll->Fill(0,MCTriggeredEventsAll);
    h1MCTriggeredEventsAll->SetEntries(MCTriggeredEventsAll);
    h1MCReconstructedEventsAll->Fill(0,MCReconstructedEventsAll);
    h1MCReconstructedEventsAll->SetEntries(MCReconstructedEventsAll);
    h1MCTriggeredEventsAll0mult->Fill(0,MCTriggeredEventsAll0mult);
    h1MCTriggeredEventsAll0mult->SetEntries(MCTriggeredEventsAll0mult);
    h1MCTriggeredEvents0mult->Fill(0,MCTriggeredEvents0mult);
    h1MCTriggeredEvents0mult->SetEntries(MCTriggeredEvents0mult);
    
    
    ContHist->Add(h1MCGeneratedEvents);
    ContHist->Add(h1MCTriggeredEvents);
    ContHist->Add(h1MCReconstructedEvents);
    ContHist->Add(h1MCGeneratedEventsAll);
    ContHist->Add(h1MCTriggeredEventsAll);
    ContHist->Add(h1MCReconstructedEventsAll);
    ContHist->Add(h1MCTriggeredEvents0mult);
    ContHist->Add(h1MCTriggeredEventsAll0mult);
    

    // efficienfy and correction matrices for tigger and vertex efficiency
    TH2D* h2EventTriggerEffAll  = AlidNdPtHelper::GenerateCorrMatrix(h2TriggerEventAll,h2GenEventAll,"h2EventTriggerEffAll");
    TH2D* h2EventTriggerCorrAll = AlidNdPtHelper::GenerateCorrMatrix(h2GenEventAll,h2TriggerEventAll,"h2EventTriggerCorrAll"); 
    TH2D* h2EventTriggerEff  = AlidNdPtHelper::GenerateCorrMatrix(h2TriggerEvent,h2GenEvent,"h2EventTriggerEff");
    TH2D* h2EventTriggerCorr = AlidNdPtHelper::GenerateCorrMatrix(h2GenEvent,h2TriggerEvent,"h2EventTriggerCorr"); 

    TH2D* h2EventRecEffAll  = AlidNdPtHelper::GenerateCorrMatrix(h2RecEventAll,h2TriggerEventAll,"h2EventRecEffAll");
    TH2D* h2EventRecCorrAll = AlidNdPtHelper::GenerateCorrMatrix(h2TriggerEventAll,h2RecEventAll,"h2EventRecCorrAll");
    TH2D* h2EventRecEff  = AlidNdPtHelper::GenerateCorrMatrix(h2RecEvent,h2TriggerEvent,"h2EventRecEff");
    TH2D* h2EventRecCorr = AlidNdPtHelper::GenerateCorrMatrix(h2TriggerEvent,h2RecEvent,"h2EventRecCorr");

    TH2D* h2EventEffAll  = AlidNdPtHelper::GenerateCorrMatrix(h2RecEventAll,h2GenEventAll,"h2EventEffAll");
    TH2D* h2EventCorrAll = AlidNdPtHelper::GenerateCorrMatrix(h2GenEventAll,h2RecEventAll,"h2EventCorrAll");
    TH2D* h2EventEff  = AlidNdPtHelper::GenerateCorrMatrix(h2RecEvent,h2GenEvent,"h2EventEff");
    TH2D* h2EventCorr = AlidNdPtHelper::GenerateCorrMatrix(h2GenEvent,h2RecEvent,"h2EventCorr");

    CorrMatr->Add(h2EventTriggerEffAll);
    CorrMatr->Add(h2EventTriggerCorrAll);
    CorrMatr->Add(h2EventTriggerEff);
    CorrMatr->Add(h2EventTriggerCorr);
    CorrMatr->Add(h2EventRecEffAll);
    CorrMatr->Add(h2EventRecCorrAll);
    CorrMatr->Add(h2EventRecEff);
    CorrMatr->Add(h2EventRecCorr);
    CorrMatr->Add(h2EventEffAll);
    CorrMatr->Add(h2EventCorrAll);
    CorrMatr->Add(h2EventEff);
    CorrMatr->Add(h2EventCorr);
    
    THnSparse* hSMultCorrelation = obj->GetEventMultCorrelationMatrix()->Clone("hSMultCorrelation");
    CorrMatr->Add(hSMultCorrelation);
    TH2D* h2MultCorrelation = hSMultCorrelation->Projection(0,1)->Clone("h2MultCorrelation");
    CorrMatr->Add(h2MultCorrelation);

    // all recontructed
    THnSparse *fRecTrackMatrix = obj->GetRecTrackMatrix();
    fRecTrackMatrix->GetAxis(0)->SetRangeUser(-zVert, zVert-0.01);//zVer
    fRecTrackMatrix->GetAxis(2)->SetRangeUser(-eta, eta-0.01);//eta
    TH3D* h3RecTrack = fRecTrackMatrix->Projection(0,1,2)->Clone("h3RecTrack");
    TH2D* h2RecTrack_zv_pt  = fRecTrackMatrix->Projection(0,1)->Clone("h2RecTrack_zv_pt");
    TH2D* h2RecTrack_zv_eta = fRecTrackMatrix->Projection(0,2)->Clone("h2RecTrack_zv_eta");
    TH2D* h2RecTrack_pt_eta = fRecTrackMatrix->Projection(1,2)->Clone("h2RecTrack_pt_eta");
    TH1D* h1RecTrack_zv  = fRecTrackMatrix->Projection(0)->Clone("h1RecTrack_zv");
    TH1D* h1RecTrack_pt  = fRecTrackMatrix->Projection(1)->Clone("h1RecTrack_pt");
    TH1D* h1RecTrack_eta = fRecTrackMatrix->Projection(2)->Clone("h1RecTrack_eta");
    Double_t MCReconstructedTracks = h3RecTrack->Integral();    

    ContHist->Add(h3RecTrack);
    ContHist->Add(h2RecTrack_zv_pt);
    ContHist->Add(h2RecTrack_zv_eta);
    ContHist->Add(h2RecTrack_pt_eta);
    ContHist->Add(h1RecTrack_zv);
    ContHist->Add(h1RecTrack_pt);
    ContHist->Add(h1RecTrack_eta);

     // recontructed primary tracks
    THnSparse *fRecPrimTrackMatrix = obj->GetRecPrimTrackMatrix();
    THnSparse *fRecTrackMatrixScaled = fRecPrimTrackMatrix->Clone("fRecTrackMatrixScaled"); //used later for secondaries scaling
    fRecPrimTrackMatrix->GetAxis(0)->SetRangeUser(-zVert, zVert-0.01);//zVer
    fRecPrimTrackMatrix->GetAxis(2)->SetRangeUser(-eta, eta-0.01);//eta
    TH3D* h3RecPrimTrack = fRecPrimTrackMatrix->Projection(0,1,2)->Clone("h3RecPrimTrack");
    TH2D* h2RecPrimTrack_zv_pt  = fRecPrimTrackMatrix->Projection(0,1)->Clone("h2RecPrimTrack_zv_pt");
    TH2D* h2RecPrimTrack_zv_eta = fRecPrimTrackMatrix->Projection(0,2)->Clone("h2RecPrimTrack_zv_eta");
    TH2D* h2RecPrimTrack_pt_eta = fRecPrimTrackMatrix->Projection(1,2)->Clone("h2RecPrimTrack_pt_eta");
    TH1D* h1RecPrimTrack_zv  = fRecPrimTrackMatrix->Projection(0)->Clone("h1RecPrimTrack_zv");
    TH1D* h1RecPrimTrack_pt  = fRecPrimTrackMatrix->Projection(1)->Clone("h1RecPrimTrack_pt");
    TH1D* h1RecPrimTrack_eta = fRecPrimTrackMatrix->Projection(2)->Clone("h1RecPrimTrack_eta");
    Double_t MCReconstructedPrimTracks = h3RecPrimTrack->Integral();

    ContHist->Add(h3RecPrimTrack);
    ContHist->Add(h2RecPrimTrack_zv_pt);
    ContHist->Add(h2RecPrimTrack_zv_eta);
    ContHist->Add(h2RecPrimTrack_pt_eta);
    ContHist->Add(h1RecPrimTrack_zv);
    ContHist->Add(h1RecPrimTrack_pt);
    ContHist->Add(h1RecPrimTrack_eta);
    
    // recontructed secondary tracks
    THnSparse *fRecSecTrackMatrix = obj->GetRecSecTrackMatrix();
    THnSparse *fRecSecTrackMatrixScaled = fRecSecTrackMatrix->Clone("fRecSecTrackMatrixScaled"); //used later for secondaries scaling
    fRecSecTrackMatrix->GetAxis(0)->SetRangeUser(-zVert, zVert-0.01);//zVer
    fRecSecTrackMatrix->GetAxis(2)->SetRangeUser(-eta, eta-0.01);//eta
    TH3D* h3RecSecTrack = fRecSecTrackMatrix->Projection(0,1,2)->Clone("h3RecSecTrack");
    TH2D* h2RecSecTrack_zv_pt  = fRecSecTrackMatrix->Projection(0,1)->Clone("h2RecSecTrack_zv_pt");
    TH2D* h2RecSecTrack_zv_eta = fRecSecTrackMatrix->Projection(0,2)->Clone("h2RecSecTrack_zv_eta");
    TH2D* h2RecSecTrack_pt_eta = fRecSecTrackMatrix->Projection(1,2)->Clone("h2RecSecTrack_pt_eta");
    TH1D* h1RecSecTrack_zv  = fRecSecTrackMatrix->Projection(0)->Clone("h1RecSecTrack_zv");
    TH1D* h1RecSecTrack_pt  = fRecSecTrackMatrix->Projection(1)->Clone("h1RecSecTrack_pt");
    TH1D* h1RecSecTrack_eta = fRecSecTrackMatrix->Projection(2)->Clone("h1RecSecTrack_eta");
    Double_t MCReconstructedSecTracks = h3RecSecTrack->Integral();

    ContHist->Add(h3RecSecTrack);
    ContHist->Add(h2RecSecTrack_zv_pt);
    ContHist->Add(h2RecSecTrack_zv_eta);
    ContHist->Add(h2RecSecTrack_pt_eta);
    ContHist->Add(h1RecSecTrack_zv);
    ContHist->Add(h1RecSecTrack_pt);
    ContHist->Add(h1RecSecTrack_eta);
    
    // generated primary tracks
    THnSparse *fGenPrimTrackMatrix = obj->GetGenPrimTrackMatrix();
    fGenPrimTrackMatrix->GetAxis(0)->SetRangeUser(-zVert, zVert-0.01);//zVer
    fGenPrimTrackMatrix->GetAxis(2)->SetRangeUser(-eta, eta-0.01);//eta
    TH3D* h3GenPrimTrack = fGenPrimTrackMatrix->Projection(0,1,2)->Clone("h3GenPrimTrack");
    TH2D* h2GenPrimTrack_zv_Pt  = fGenPrimTrackMatrix->Projection(0,1)->Clone("h2GenPrimTrack_zv_pt");
    TH2D* h2GenPrimTrack_zv_eta = fGenPrimTrackMatrix->Projection(0,2)->Clone("h2GenPrimTrack_zv_eta");
    TH2D* h2GenPrimTrack_pt_eta = fGenPrimTrackMatrix->Projection(1,2)->Clone("h2GenPrimTrack_pt_eta");
    TH1D* h1GenPrimTrack_zv  = fGenPrimTrackMatrix->Projection(0)->Clone("h1GenPrimTrack_zv");
    TH1D* h1GenPrimTrack_pt  = fGenPrimTrackMatrix->Projection(1)->Clone("h1GenPrimTrack_pt");
    TH1D* h1GenPrimTrack_eta = fGenPrimTrackMatrix->Projection(2)->Clone("h1GenPrimTrack_eta");
    Double_t MCGeneratedPrimTracks = h3GenPrimTrack->Integral();

    ContHist->Add(h3GenPrimTrack);
    ContHist->Add(h2GenPrimTrack_zv_pt);
    ContHist->Add(h2GenPrimTrack_zv_eta);
    ContHist->Add(h2GenPrimTrack_pt_eta);
    ContHist->Add(h1GenPrimTrack_zv);
    ContHist->Add(h1GenPrimTrack_pt);
    ContHist->Add(h1GenPrimTrack_eta);
    printf("\n");
    printf("==============================================================\n");    
    printf("=== recontructed MC tracks              %lf ===\n",MCReconstructedTracks);
    printf("=== recontructed MC secondary tracks    %lf ===\n",MCReconstructedSecTracks);
    printf("=== recontructed MC primary tracks      %lf ===\n",MCReconstructedPrimTracks);
    printf("=== generated MC primary track          %lf ===\n",MCGeneratedPrimTracks);
    printf("==============================================================\n");    
    printf("\n");
    
    // mc truth histogram (for self-consistency check)
    TH1D* dNdPt_MC   = (TH1D*) h1GenPrimTrack_pt->Clone("dNdPt_MC");
    TH1D* dNdEta_MC   =(TH1D*) h1GenPrimTrack_eta->Clone("dNdEta_MC");
    // normalization and finalization
    // 1/N_evt 1/(2 pi pt) 1/width 1/etarange
   for (int ii=1; ii <= dNdPt_MC->GetNbinsX() ;ii++) {
        Double_t pt = dNdPt_MC->GetBinCenter(ii);
        Double_t width = dNdPt_MC->GetBinWidth(ii);
        Double_t val = dNdPt_MC->GetBinContent(ii);
        Double_t err = dNdPt_MC->GetBinError(ii);        
        Double_t cval = (val)/(width * 2.0 * TMath::Pi() * 1.6 * MCGeneratedEvents * pt);
        Double_t cerr = (err)/(width * 2.0 * TMath::Pi() * 1.6 * MCGeneratedEvents * pt);
        dNdPt_MC->SetBinContent(ii,cval);
        dNdPt_MC->SetBinError(ii,cerr);
    }    
    dNdPt_MC->SetMarkerStyle(21);
    dNdPt_MC->SetTitle("; p_{T} (GeV/c) ; 1/N_{evt} 1/(2#pi p_{T}) (d^{2}N_{ch})/(d#eta dp_{T})^{-2}");
    dNdEta_MC->Scale(1,"width");
    dNdEta_MC->Scale(1./MCGeneratedEvents);        
    ContHist->Add(dNdPt_MC);
    ContHist->Add(dNdEta_MC);
	

   // Rebin for corrections (pt)
   cout << "rebinning...." << endl;
   
   TH1D* h1RecPrimTrack_pt_Rebin = h1RecPrimTrack_pt->Rebin(ptNbins,"h1RecPrimTrack_pt_Rebin",binsPt);
   TH1D* h1GenPrimTrack_pt_Rebin = h1GenPrimTrack_pt->Rebin(ptNbins,"h1GenPrimTrack_pt_Rebin",binsPt);
   ContHist->Add(h1RecPrimTrack_pt_Rebin);
   ContHist->Add(h1GenPrimTrack_pt_Rebin);

	
//    THnSparse *fSparseTriggerTrackEvent = obj->GetTriggerTrackEventMatrix();//Tracks from triggered events
//    THnSparse *fSparseVtxTrackEvent = obj->GetRecTrackEventMatrix();//Tracks from events with rec. vtx
//    THnSparse *fSparseGenTrackEvent = obj->GetGenTrackEventMatrix();//generated TrackEvent matrix

    // tracking efficiencies + corrections  
   TH2D* h2TrackEff_zv_pt   = AlidNdPtHelper::GenerateCorrMatrix(h2RecPrimTrack_zv_pt,h2GenPrimTrack_zv_pt,"h2TrackEff_zv_pt");
   TH2D* h2TrackCorr_zv_pt  = AlidNdPtHelper::GenerateCorrMatrix(h2GenPrimTrack_zv_pt,h2RecPrimTrack_zv_pt,"h2TrackCorr_zv_pt");
   TH2D* h2TrackEff_zv_eta  = AlidNdPtHelper::GenerateCorrMatrix(h2RecPrimTrack_zv_eta,h2GenPrimTrack_zv_eta,"h2TrackEff_zv_eta");
   TH2D* h2TrackCorr_zv_eta = AlidNdPtHelper::GenerateCorrMatrix(h2GenPrimTrack_zv_eta,h2RecPrimTrack_zv_eta,"h2TrackCorr_zv_eta");
   TH2D* h2TrackEff_pt_eta  = AlidNdPtHelper::GenerateCorrMatrix(h2RecPrimTrack_pt_eta,h2GenPrimTrack_pt_eta,"h2TrackEff_pt_eta");
   TH2D* h2TrackCorr_pt_eta = AlidNdPtHelper::GenerateCorrMatrix(h2GenPrimTrack_pt_eta,h2RecPrimTrack_pt_eta,"h2TrackCorr_pt_eta");
  
    
   TH1D* h1TrackEff_zv   = AlidNdPtHelper::GenerateCorrMatrix(h1RecPrimTrack_zv,h1GenPrimTrack_zv,"h1TrackEff_zv");
   TH1D* h1TrackCorr_zv  = AlidNdPtHelper::GenerateCorrMatrix(h1GenPrimTrack_zv,h1RecPrimTrack_zv,"h1TrackCorr_zv");
   TH1D* h1TrackEff_pt   = AlidNdPtHelper::GenerateCorrMatrix(h1RecPrimTrack_pt_Rebin,h1GenPrimTrack_pt_Rebin,"h1TrackEff_pt");
   TH1D* h1TrackCorr_pt  = AlidNdPtHelper::GenerateCorrMatrix(h1GenPrimTrack_pt_Rebin,h1RecPrimTrack_pt_Rebin,"h1TrackCorr_pt");
   TH1D* h1TrackEff_eta  = AlidNdPtHelper::GenerateCorrMatrix(h1RecPrimTrack_eta,h1GenPrimTrack_eta,"h1TrackEff_eta");
   TH1D* h1TrackCorr_eta = AlidNdPtHelper::GenerateCorrMatrix(h1GenPrimTrack_eta,h1RecPrimTrack_eta,"h1TrackCorr_eta");
   CorrMatr->Add(h2TrackEff_zv_pt);
   CorrMatr->Add(h2TrackCorr_zv_pt);
   CorrMatr->Add(h2TrackEff_zv_eta);
   CorrMatr->Add(h2TrackCorr_zv_eta);
   CorrMatr->Add(h2TrackEff_pt_eta);
   CorrMatr->Add(h2TrackCorr_pt_eta);
   CorrMatr->Add(h1TrackEff_zv);
   CorrMatr->Add(h1TrackCorr_zv);
   CorrMatr->Add(h1TrackEff_pt);
   CorrMatr->Add(h1TrackCorr_pt);
   CorrMatr->Add(h1TrackEff_eta);
   CorrMatr->Add(h1TrackCorr_eta);

   // scale the secondaries before calculating correction matrices
   for (Long64_t i = 0; i < fRecSecTrackMatrixScaled->GetNbins(); i++) {
       Int_t c[3];
       Double_t val = fRecSecTrackMatrixScaled->GetBinContent(i,c);
       Double_t err = fRecSecTrackMatrixScaled->GetBinError(i);
       Double_t pt =  fRecSecTrackMatrixScaled->GetAxis(1)->GetBinCenter(c[1]);
       Double_t scale = GetStrangenessCorrFactor(pt,sscale);
//        Double_t scale = AlidNdPtHelper::GetStrangenessCorrFactor(pt);
       fRecSecTrackMatrixScaled->SetBinContent(c,val*scale);
       fRecSecTrackMatrixScaled->SetBinError(c,err*scale);
    }
    
    // for correct determination of secondaries contamination, also the total total tracks have to be scaled
    // this is done by taking primaries and adding the scaled secondaries
    fRecTrackMatrixScaled->Add(fRecSecTrackMatrixScaled);

    fRecSecTrackMatrixScaled->GetAxis(0)->SetRangeUser(-zVert, zVert-0.01);//zVer
    fRecSecTrackMatrixScaled->GetAxis(2)->SetRangeUser(-eta, eta-0.01);//eta
    
    TH3D* h3RecSecTrackScaled = fRecSecTrackMatrixScaled->Projection(0,1,2)->Clone("h3RecSecTrackScaled");
    TH2D* h2RecSecTrackScaled_zv_pt  = fRecSecTrackMatrixScaled->Projection(0,1)->Clone("h2RecSecTrackScaled_zv_pt");
    TH2D* h2RecSecTrackScaled_zv_eta = fRecSecTrackMatrixScaled->Projection(0,2)->Clone("h2RecSecTrackScaled_zv_eta");
    TH2D* h2RecSecTrackScaled_pt_eta = fRecSecTrackMatrixScaled->Projection(1,2)->Clone("h2RecSecTrackScaled_pt_eta");
    TH1D* h1RecSecTrackScaled_zv  = fRecSecTrackMatrixScaled->Projection(0)->Clone("h1RecSecTrackScaled_zv");
    TH1D* h1RecSecTrackScaled_pt  = fRecSecTrackMatrixScaled->Projection(1)->Clone("h1RecSecTrackScaled_pt");
    TH1D* h1RecSecTrackScaled_eta = fRecSecTrackMatrixScaled->Projection(2)->Clone("h1RecSecTrackScaled_eta");

    ContHist->Add(h3RecSecTrackScaled);
    ContHist->Add(h2RecSecTrackScaled_zv_pt);
    ContHist->Add(h2RecSecTrackScaled_zv_eta);
    ContHist->Add(h2RecSecTrackScaled_pt_eta);
    ContHist->Add(h1RecSecTrackScaled_zv);
    ContHist->Add(h1RecSecTrackScaled_pt);
    ContHist->Add(h1RecSecTrackScaled_eta);    
    
    fRecTrackMatrixScaled->GetAxis(0)->SetRangeUser(-zVert, zVert-0.01);//zVer
    fRecTrackMatrixScaled->GetAxis(2)->SetRangeUser(-eta, eta-0.01);//eta
    
    TH3D* h3RecTrackScaled = fRecTrackMatrixScaled->Projection(0,1,2)->Clone("h3RecTrackScaled");
    TH2D* h2RecTrackScaled_zv_pt  = fRecTrackMatrixScaled->Projection(0,1)->Clone("h2RecTrackScaled_zv_pt");
    TH2D* h2RecTrackScaled_zv_eta = fRecTrackMatrixScaled->Projection(0,2)->Clone("h2RecTrackScaled_zv_eta");
    TH2D* h2RecTrackScaled_pt_eta = fRecTrackMatrixScaled->Projection(1,2)->Clone("h2RecTrackScaled_pt_eta");
    TH1D* h1RecTrackScaled_zv  = fRecTrackMatrixScaled->Projection(0)->Clone("h1RecTrackScaled_zv");
    TH1D* h1RecTrackScaled_pt  = fRecTrackMatrixScaled->Projection(1)->Clone("h1RecTrackScaled_pt");
    TH1D* h1RecTrackScaled_eta = fRecTrackMatrixScaled->Projection(2)->Clone("h1RecTrackScaled_eta");

    ContHist->Add(h3RecTrackScaled);
    ContHist->Add(h2RecTrackScaled_zv_pt);
    ContHist->Add(h2RecTrackScaled_zv_eta);
    ContHist->Add(h2RecTrackScaled_pt_eta);
    ContHist->Add(h1RecTrackScaled_zv);
    ContHist->Add(h1RecTrackScaled_pt);
    ContHist->Add(h1RecTrackScaled_eta);
    
   // Rebin for corrections (pt)
   TH1D* h1RecTrackScaled_pt_Rebin = h1RecTrackScaled_pt->Rebin(ptNbins,"h1RecTrackScaled_pt_Rebin",binsPt);
   TH1D* h1RecSecTrackScaled_pt_Rebin = h1RecSecTrackScaled_pt->Rebin(ptNbins,"h1RecSecTrackScaled_pt_Rebin",binsPt);
   ContHist->Add(h1RecTrackScaled_pt_Rebin);
   ContHist->Add(h1RecSecTrackScaled_pt_Rebin);
   
    // create histograms for secondaries contamination and correction
    
    TH2D* h2SecCont_zv_pt  = AlidNdPtHelper::GenerateCorrMatrix(h2RecSecTrackScaled_zv_pt,h2RecTrackScaled_zv_pt,"h2SecCont_zv_pt");
    TH2D* h2SecCorr_zv_pt  = AlidNdPtHelper::GenerateContCorrMatrix(h2RecSecTrackScaled_zv_pt,h2RecTrackScaled_zv_pt,"h2SecCorr_zv_pt");
    TH2D* h2SecCont_zv_eta = AlidNdPtHelper::GenerateCorrMatrix(h2RecSecTrackScaled_zv_eta,h2RecTrackScaled_zv_eta,"h2SecCont_zv_eta");
    TH2D* h2SecCorr_zv_eta = AlidNdPtHelper::GenerateContCorrMatrix(h2RecSecTrackScaled_zv_eta,h2RecTrackScaled_zv_eta,"h2SecCorr_zv_eta");
    TH2D* h2SecCont_pt_eta = AlidNdPtHelper::GenerateCorrMatrix(h2RecSecTrackScaled_pt_eta,h2RecTrackScaled_pt_eta,"h2SecCont_pt_eta");
    TH2D* h2SecCorr_pt_eta = AlidNdPtHelper::GenerateContCorrMatrix(h2RecSecTrackScaled_pt_eta,h2RecTrackScaled_pt_eta,"h2SecCorr_pt_eta");
    TH1D* h1SecCont_zv = AlidNdPtHelper::GenerateCorrMatrix(h1RecSecTrackScaled_zv,h1RecTrackScaled_zv,"h1SecCont_zv");
    TH1D* h1SecCorr_zv = AlidNdPtHelper::GenerateContCorrMatrix(h1RecSecTrackScaled_zv,h1RecTrackScaled_zv,"h1SecCorr_zv");
    TH1D* h1SecCont_pt = AlidNdPtHelper::GenerateCorrMatrix(h1RecSecTrackScaled_pt_Rebin,h1RecTrackScaled_pt_Rebin,"h1SecCont_pt");
    TH1D* h1SecCorr_pt = AlidNdPtHelper::GenerateContCorrMatrix(h1RecSecTrackScaled_pt_Rebin,h1RecTrackScaled_pt_Rebin,"h1SecCorr_pt");
    TH1D* h1SecCont_eta = AlidNdPtHelper::GenerateCorrMatrix(h1RecSecTrackScaled_eta,h1RecTrackScaled_eta,"h1SecCont_eta");
    TH1D* h1SecCorr_eta = AlidNdPtHelper::GenerateContCorrMatrix(h1RecSecTrackScaled_eta,h1RecTrackScaled_eta,"h1SecCorr_eta");

    CorrMatr->Add(h2SecCont_zv_pt);
    CorrMatr->Add(h2SecCorr_zv_pt);
    CorrMatr->Add(h2SecCont_zv_eta);
    CorrMatr->Add(h2SecCorr_zv_eta);
    CorrMatr->Add(h2SecCont_pt_eta);
    CorrMatr->Add(h2SecCorr_pt_eta);
    CorrMatr->Add(h1SecCont_zv);
    CorrMatr->Add(h1SecCorr_zv);
    CorrMatr->Add(h1SecCont_pt);
    CorrMatr->Add(h1SecCorr_pt);
    CorrMatr->Add(h1SecCont_eta);
    CorrMatr->Add(h1SecCorr_eta);
    
    //vertex distribution for events with no vertex
    fGenEventMatrix->GetAxis(0)->SetRange();
    fGenEventMatrix->GetAxis(1)->SetRange(1,1);
    TH1D* h1GenEventMatrix_bin0_zv = (TH1D*) fGenEventMatrix->Projection(0)->Clone("h1GenEventMatrix_bin0_zv");
    ContHist->Add(h1GenEventMatrix_bin0_zv);
    
    fTriggerEventMatrix->GetAxis(0)->SetRange();
    fTriggerEventMatrix->GetAxis(1)->SetRange(1,1);
    TH1D* h1TriggerEventMatrix_bin0_zv = (TH1D*) fTriggerEventMatrix->Projection(0)->Clone("h1TriggerEventMatrix_bin0_zv");
    ContHist->Add(h1TriggerEventMatrix_bin0_zv);


    fRecEventMatrix->GetAxis(0)->SetRange();
    fRecEventMatrix->GetAxis(1)->SetRange();
    TH1D* h1RecEventMatrix_zv = (TH1D*) fRecEventMatrix->Projection(0)->Clone("h1RecEventMatrix_zv");
    h1RecEventMatrix_zv->Scale(1./h1RecEventMatrix_zv->Integral());
    //ContHist->Add(h1TriggerEventMatrix_zv);
   
    TH1D* h1TriggerEff_bin0_zv   = AlidNdPtHelper::GenerateCorrMatrix(h1TriggerEventMatrix_bin0_zv,h1GenEventMatrix_bin0_zv,"h1TriggerEff_bin0_zv");
    TH1D* h1TriggerCorr_bin0_zv  = AlidNdPtHelper::GenerateCorrMatrix(h1GenEventMatrix_bin0_zv,h1TriggerEventMatrix_bin0_zv,"h1TriggerCorr_bin0_zv");
    CorrMatr->Add(h1TriggerEff_bin0_zv);
    CorrMatr->Add(h1TriggerCorr_bin0_zv);
    
    TH1D* h1Ratio_zv = (TH1D*) h1GenEventMatrix_bin0_zv->Clone("h1Ratio_zv");
    h1Ratio_zv->Scale(1./h1Ratio_zv->Integral());
    h1Ratio_zv->Divide(h1RecEventMatrix_zv);
    CorrMatr->Add(h1Ratio_zv);
    
    
     // aded to correct sperately for zvert shape of triggered and untriggered bin0 events
     fRecEventMatrix->GetAxis(0)->SetRange();
     fRecEventMatrix->GetAxis(1)->SetRange();
     fTriggerEventMatrix->GetAxis(1)->SetRangeUser(0,0);
     fGenEventMatrix->GetAxis(1)->SetRangeUser(0,0);
     
     TH1D* rec_zv = fRecEventMatrix->Projection(0)->Clone("rec_zv");
     TH1D* trig0_zv = fTriggerEventMatrix->Projection(0)->Clone("trig0_zv");
     TH1D* corr_shape_trig0_zv = AlidNdPtHelper::GenerateCorrMatrix(trig0_zv,rec_zv,"corr_shape_trig0_zv");
     CorrMatr->Add(corr_shape_trig0_zv);     
     
     TH1D* gen0_zv = fGenEventMatrix->Projection(0)->Clone("gen0_zv");
     TH1D* gen0notrig_zv = gen0_zv->Clone("gen0notrig_zv");
     gen0notrig_zv->Add(trig0_zv,-1.);
     TH1D* corr_shape_notrig0_zv = AlidNdPtHelper::GenerateCorrMatrix(gen0notrig_zv,rec_zv,"corr_shape_notrig0_zv");
     CorrMatr->Add(corr_shape_notrig0_zv); 
         
         
   // efficienfy and correction for THnSparse
    THnSparse* hSRecSecTrackMatrixScaled = AlidNdPtHelper::RebinTHnSparse(fRecSecTrackMatrixScaled,hSTrackSecCorr,"hSRecSecTrackMatrixScaled");
    THnSparse* hSRecTrackMatrixScaled = AlidNdPtHelper::RebinTHnSparse(fRecTrackMatrixScaled,hSTrackSecCorr,"hSRecTrackMatrixScaled");
    THnSparse* hSRecPrimTrackMatrix = AlidNdPtHelper::RebinTHnSparse(fRecPrimTrackMatrix,hSTrackEffCorr,"hSRecPrimTrackMatrix");
    THnSparse* hSGenPrimTrackMatrix = AlidNdPtHelper::RebinTHnSparse(fGenPrimTrackMatrix,hSTrackEffCorr,"hSGenPrimTrackMatrix");
    ContHist->Add(hSRecSecTrackMatrixScaled);
    ContHist->Add(hSRecTrackMatrixScaled);
    ContHist->Add(hSRecPrimTrackMatrix);
    ContHist->Add(hSGenPrimTrackMatrix);
    
    THnSparse* hSTrackEff  = AlidNdPtHelper::GenerateCorrMatrix(hSRecPrimTrackMatrix,hSGenPrimTrackMatrix,"hSTrackEff");
    THnSparse* hSTrackCorr = AlidNdPtHelper::GenerateCorrMatrix(hSGenPrimTrackMatrix,hSRecPrimTrackMatrix,"hSTrackCorr");
    THnSparse* hSSecCont   = AlidNdPtHelper::GenerateCorrMatrix(hSRecSecTrackMatrixScaled,hSRecTrackMatrixScaled,"hSSecCont");
    THnSparse* hSSecCorr   = AlidNdPtHelper::GenerateContCorrMatrix(hSRecSecTrackMatrixScaled,hSRecTrackMatrixScaled,"hSSecCorr");
    CorrMatr->Add(hSTrackEff);
    CorrMatr->Add(hSTrackCorr);
    CorrMatr->Add(hSSecCont);
    CorrMatr->Add(hSSecCorr);
    
    // create th3 from thnsparse, used for corrections
    TH3D* h3RecPrimTrack_Rebin = hSRecPrimTrackMatrix->Projection(0,1,2)->Clone("h3RecPrimTrack_Rebin");
    TH3D* h3GenPrimTrack_Rebin = hSGenPrimTrackMatrix->Projection(0,1,2)->Clone("h3GenPrimTrack_Rebin");
    TH3D* h3RecSecTrackScaled_Rebin = hSRecSecTrackMatrixScaled->Projection(0,1,2)->Clone("h3RecSecTrackScaled_Rebin");
    TH3D* h3RecTrackScaled_Rebin = hSRecTrackMatrixScaled->Projection(0,1,2)->Clone("h3RecTrackScaled_Rebin");
   
    TH3D* h3TrackEff  = AlidNdPtHelper::GenerateCorrMatrix(h3RecPrimTrack_Rebin,h3GenPrimTrack_Rebin,"h3TrackEff");
    TH3D* h3TrackCorr = AlidNdPtHelper::GenerateCorrMatrix(h3GenPrimTrack_Rebin,h3RecPrimTrack_Rebin,"h3TrackCorr");    
    TH3D* h3SecCont = AlidNdPtHelper::GenerateCorrMatrix(h3RecSecTrackScaled_Rebin,h3RecTrackScaled_Rebin,"h3SecCont");
    TH3D* h3SecCorr = AlidNdPtHelper::GenerateContCorrMatrix(h3RecSecTrackScaled_Rebin,h3RecTrackScaled_Rebin,"h3SecCorr");
    CorrMatr->Add(h3TrackEff);
    CorrMatr->Add(h3TrackCorr);
    CorrMatr->Add(h3SecCont);
    CorrMatr->Add(h3SecCorr);
 
    // check for trigger/vertex bias on track level
    THnSparse* hSRecTrackEventMatrix = (THnSparse*) obj->GetRecTrackEventMatrix()->Clone("hSRecTrackEventMatrix");
    THnSparse* hSGenTrackEventMatrix = (THnSparse*) obj->GetGenTrackEventMatrix()->Clone("hSGenTrackEventMatrix");
    THnSparse* hSTriggerTrackEventMatrix = (THnSparse*) obj->GetTriggerTrackEventMatrix()->Clone("hSTriggerTrackEventMatrix");
    
    hSRecTrackEventMatrix->GetAxis(0)->SetRangeUser(-zVert, zVert-0.01);//zVer
    hSRecTrackEventMatrix->GetAxis(2)->SetRangeUser(-eta, eta-0.01);//eta    
    hSGenTrackEventMatrix->GetAxis(0)->SetRangeUser(-zVert, zVert-0.01);//zVer
    hSGenTrackEventMatrix->GetAxis(2)->SetRangeUser(-eta, eta-0.01);//eta    
    hSTriggerTrackEventMatrix->GetAxis(0)->SetRangeUser(-zVert, zVert-0.01);//zVer
    hSTriggerTrackEventMatrix->GetAxis(2)->SetRangeUser(-eta, eta-0.01);//eta    
    
    
    TH1D* h1TriggerBiasCorr_zv = AlidNdPtHelper::GenerateCorrMatrix(hSTriggerTrackEventMatrix->Projection(0),hSGenTrackEventMatrix->Projection(0),"h1TriggerBiasCorr_zv");
    TH1D* h1TriggerBiasCorr_pt = AlidNdPtHelper::GenerateCorrMatrix(hSTriggerTrackEventMatrix->Projection(1),hSGenTrackEventMatrix->Projection(1),"h1TriggerBiasCorr_pt");
    TH1D* h1TriggerBiasCorr_eta = AlidNdPtHelper::GenerateCorrMatrix(hSTriggerTrackEventMatrix->Projection(2),hSGenTrackEventMatrix->Projection(2),"h1TriggerBiasCorr_eta");
    
    TH1D* h1VertexBiasCorr_zv  = AlidNdPtHelper::GenerateCorrMatrix(hSRecTrackEventMatrix->Projection(0),hSTriggerTrackEventMatrix->Projection(0),"h1VertexBiasCorr_zv");
    TH1D* h1VertexBiasCorr_pt  = AlidNdPtHelper::GenerateCorrMatrix(hSRecTrackEventMatrix->Projection(1),hSTriggerTrackEventMatrix->Projection(1),"h1VertexBiasCorr_pt");   
    TH1D* h1VertexBiasCorr_eta  = AlidNdPtHelper::GenerateCorrMatrix(hSRecTrackEventMatrix->Projection(2),hSTriggerTrackEventMatrix->Projection(2),"h1VertexBiasCorr_eta");    
    
   ContHist->Add(h1TriggerBiasCorr_zv);    
   ContHist->Add(h1TriggerBiasCorr_pt);    
   ContHist->Add(h1TriggerBiasCorr_eta);    
   ContHist->Add(h1VertexBiasCorr_zv);    
   ContHist->Add(h1VertexBiasCorr_pt);    
   ContHist->Add(h1VertexBiasCorr_eta);    

 
    
    // plot pictures and save to gifdir
    for (i=0; i < CorrMatr->LastIndex(); i++) {    
        TCanvas* ctmp = PlotHist(CorrMatr->At(i),idstring);
        if (gifdir && ctmp) {
            TString gif(gifdir);
            gif += '/';
            gif += ctmp->GetName();
            gif += ".gif";
            ctmp->SaveAs(gif.Data(),"gif");     
            delete ctmp;
        }
    }
    for (i=0; i < ContHist->LastIndex(); i++) {    
        TCanvas* ctmp = PlotHist(ContHist->At(i),idstring);
        if (gifdir && ctmp) {
            TString gif(gifdir);
            gif += '/';
            gif += ctmp->GetName();
            gif += ".gif";
            ctmp->SaveAs(gif.Data(),"gif");     
            delete ctmp;
        }
   }    

    // save all correction matrices and control histograms to file
    if (!outfile) { return; }
    TFile *out = TFile::Open(outfile,"RECREATE");
    CorrMatr->Write();
    ContHist->Write();
    out->Close();
    
    return MCReconstructedEvents;

}


//_____________________________________________________________________________
Double_t GetStrangenessCorrFactor(Double_t pt, Double_t s)
{
    // data driven correction factor for secondaries (PbPb)

    if (pt <= 0.17) return 1.0;
    if (pt <= 0.4) return GetLinearInterpolationValue(0.17,1.0,0.4,1.07, pt);
    if (pt <= 0.6) return GetLinearInterpolationValue(0.4,1.07,0.6,1.25, pt);
    if (pt <= 1.2) return GetLinearInterpolationValue(0.6,1.25,1.2,1.5,  pt);
    return 1.5;
}


//___________________________________________________________________________
Double_t GetLinearInterpolationValue(const Double_t x1,const  Double_t y1,const  Double_t x2,const  Double_t y2, const Double_t pt)
{
    //
    // linear interpolation
    //
    return ((y2-y1)/(x2-x1))*pt+(y2-(((y2-y1)/(x2-x1))*x2)); 
}

//___________________________________________________________________________
TCanvas* PlotHist(TObject* hobj, const char* label=0)
{
    TH1* h = dynamic_cast<TH1*>(hobj);
    if (!h) return 0;
    if (h->GetDimension() > 2) return 0;
    h->SetStats(0);
    if ( TString(h->GetName()).Contains("Events")) { h->SetStats(1); } 
    TString t(label);
    if (label) t += "_";
    t += h->GetName();
    h->SetTitle(t.Data());
    TCanvas* c = new TCanvas(t.Data(),t.Data());
    if (h->GetDimension() >= 1) {
        TString xlabel(h->GetXaxis()->GetTitle());
        if (xlabel.Contains("Pt")) { c->SetLogx();  h->GetXaxis()->SetRangeUser(0.1 , 100.); }
    }
    if (h->GetDimension() == 1) {
        if (xlabel.Contains("p_{T}")) { c->SetLogx();  c->SetLogy();  h->GetXaxis()->SetRangeUser(0.1 , 100.); }
    }
    if (h->GetDimension() == 2) {  
        TString ylabel(h->GetYaxis()->GetTitle());
        if (ylabel.Contains("Pt")) { c->SetLogy(); h->GetYaxis()->SetRangeUser(0.1 , 100.); }
        if (ylabel.Contains("p_{T}")) { c->SetLogy(); h->GetYaxis()->SetRangeUser(0.1 , 100.); }
        h->Draw("COLZ");
    }        
    if (h->GetDimension() == 1) {
        h->Draw();
    }
    return c;

}

Int_t CheckLoadLibrary(const char* library)
{
  // checks if a library is already loaded, if not loads the library

  if (strlen(gSystem->GetLibraries(Form("%s.so", library), "", kFALSE)) > 0)
    return 1;

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