ROOT logo
Double_t GenerateCorrMatr(const char* mcfile, const char* mctask, const char* idstring ,const char* outfile, const char* gifdir = 0)
//Double_t GenerateCorrMatr()
{

//tmp setting
//   const char* mcfile = "/lustre/alice/train/V005.PbPb_MC/2010-11-29_0108.4251/mergedPeriods/MC/PbPb/LHC10h8/mknichel_dNdPtPbPb_gt_v0_c0_syst4.root";
//     const char* mctask = "mknichel_dNdPtPbPb_gt_v0_c0_syst4";
//     const char* idstring = "gt_v0_c0_syst4";
//     const char* outfile = "/u/mknichel/alice/dNdPt/2010-11-29_0318/corrMatr_gt_v0_c0_syst4.root";
//     const char* gifdir = "/u/mknichel/alice/dNdPt/2010-11-29";
    
    // 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 = 1.4;
    
    //load required libraries
    //load required libraries    
    gSystem->AddIncludePath("-I$ROOTSYS/include -I$ALICE_ROOT/ -I$ALICE_ROOT/include -I$ALICE_ROOT/STEER  -I$ALICE_ROOT/ANALYSIS -I$ALICE_ROOT/PWG0 -I$ALICE_ROOT/PWGPP -I$ALICE_ROOT/PWG2 -I$ALICE_ROOT/PWG3 -I$ALICE_ROOT/PWG3/vertexingHF -I$ALICE_ROOT/PWG4 -I$ALICE_ROOT/CORRFW -I$ALICE_ROOT/TPC -I$ALICE_ROOT/TRD -I$ALICE_ROOT/PWG3/muon -I$ALICE_ROOT/JETAN -I$ALICE_ROOT/ANALYSIS/Tender");
    
  gSystem->Load("libCore");
  gSystem->Load("libPhysics");
  gSystem->Load("libMinuit");
  gSystem->Load("libGui");
  gSystem->Load("libXMLParser");

  gSystem->Load("libGeom");
  gSystem->Load("libVMC");

  gSystem->Load("libNet");


  gSystem->Load("libSTEERBase");
  gSystem->Load("libESD");
  gSystem->Load("libCDB");
  gSystem->Load("libRAWDatabase");
  gSystem->Load("libRAWDatarec");
  gSystem->Load("libANALYSIS");

    
    
    gSystem->Load("libANALYSIS.so");
    gSystem->Load("libANALYSISalice.so");
    gSystem->Load("libTENDER.so");
    gSystem->Load("libCORRFW.so");
    gSystem->Load("libPWG0base.so");    
    gSystem->Load("libPWG0dep"); 
    gSystem->Load("libPWG0selectors.so");
    




    // 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(mctask));
    if (!lmc) return -1;
    AlidNdPtAnalysisPbPb *obj = dynamic_cast<AlidNdPtAnalysisPbPb*>(lmc->FindObject("dNdPtAnalysisPbPb"));
    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
    TH2D* h2TriggerEventAll = fTriggerEventMatrix->Projection(0,1)->Clone("h2TriggerEventAll");
    fTriggerEventMatrix->GetAxis(0)->SetRangeUser(-zVert, zVert-0.01);//zVer
    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);
	
    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);
    
    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);
    
    ContHist->Add(h1MCGeneratedEvents);
    ContHist->Add(h1MCTriggeredEvents);
    ContHist->Add(h1MCReconstructedEvents);
    ContHist->Add(h1MCGeneratedEventsAll);
    ContHist->Add(h1MCTriggeredEventsAll);
    ContHist->Add(h1MCReconstructedEventsAll);

    // 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);



    // 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");
	
//    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
   TH3D* h3TrackEff  = AlidNdPtHelper::GenerateCorrMatrix(h3RecPrimTrack,h3GenPrimTrack,"h3TrackEff");
   TH3D* h3TrackCorr = AlidNdPtHelper::GenerateCorrMatrix(h3GenPrimTrack,h3RecPrimTrack,"h3TrackCorr");
   
   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,h1GenPrimTrack_pt,"h1TrackEff_pt");
   TH1D* h1TrackCorr_pt  = AlidNdPtHelper::GenerateCorrMatrix(h1GenPrimTrack_pt,h1RecPrimTrack_pt,"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(h3TrackEff);
   CorrMatr->Add(h3TrackCorr);
   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 = GetStrangenessCorrFactorPbPb(pt, sscale);
       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);
    
    // create histograms for secondaries contamination and correction
    
    TH3D* h3SecCont = AlidNdPtHelper::GenerateCorrMatrix(h3RecSecTrackScaled,h3RecTrackScaled,"h3SecCont");
    TH3D* h3SecCorr = AlidNdPtHelper::GenerateContCorrMatrix(h3RecSecTrackScaled,h3RecTrackScaled,"h3SecCorr");
    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,h1RecTrackScaled_pt,"h1SecCont_pt");
    TH1D* h1SecCorr_pt = AlidNdPtHelper::GenerateContCorrMatrix(h1RecSecTrackScaled_pt,h1RecTrackScaled_pt,"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(h3SecCont);
    CorrMatr->Add(h3SecCorr);
    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);

    // 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 GetStrangenessCorrFactorPbPb(Double_t pt, Double_t s)
{
    // data driven correction factor for secondaries (PbPb)

    if (pt <= 0.25) return 1.0;
    if (pt <= 0.5) return GetLinearInterpolationValue(0.25,1.0,0.5,0.60+0.40*s, pt);
    if (pt <= 1.0) return GetLinearInterpolationValue(0.5,0.60+0.40*s,1.0,0.53+0.47*s, pt);
    if (pt <= 2.0) return GetLinearInterpolationValue(1.0,0.53+0.47*s,2.0,0.44+0.56*s, pt);
    if (pt <= 5.0) return GetLinearInterpolationValue(2.0,0.44+0.56*s,5.0,0.33+0.67*s, pt);
    return 0.33+0.67*s;
}


//___________________________________________________________________________
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 , 50.); }
    }
    if (h->GetDimension() == 1) {
        if (xlabel.Contains("p_{T}")) { c->SetLogx();  c->SetLogy();  h->GetXaxis()->SetRangeUser(0.1 , 50.); }
    }
    if (h->GetDimension() == 2) {  
        TString ylabel(h->GetYaxis()->GetTitle());
        if (ylabel.Contains("Pt")) { c->SetLogy(); h->GetYaxis()->SetRangeUser(0.1 , 50.); }
        if (ylabel.Contains("p_{T}")) { c->SetLogy(); h->GetYaxis()->SetRangeUser(0.1 , 50.); }
        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.C:1
 GenerateCorrMatr.C:2
 GenerateCorrMatr.C:3
 GenerateCorrMatr.C:4
 GenerateCorrMatr.C:5
 GenerateCorrMatr.C:6
 GenerateCorrMatr.C:7
 GenerateCorrMatr.C:8
 GenerateCorrMatr.C:9
 GenerateCorrMatr.C:10
 GenerateCorrMatr.C:11
 GenerateCorrMatr.C:12
 GenerateCorrMatr.C:13
 GenerateCorrMatr.C:14
 GenerateCorrMatr.C:15
 GenerateCorrMatr.C:16
 GenerateCorrMatr.C:17
 GenerateCorrMatr.C:18
 GenerateCorrMatr.C:19
 GenerateCorrMatr.C:20
 GenerateCorrMatr.C:21
 GenerateCorrMatr.C:22
 GenerateCorrMatr.C:23
 GenerateCorrMatr.C:24
 GenerateCorrMatr.C:25
 GenerateCorrMatr.C:26
 GenerateCorrMatr.C:27
 GenerateCorrMatr.C:28
 GenerateCorrMatr.C:29
 GenerateCorrMatr.C:30
 GenerateCorrMatr.C:31
 GenerateCorrMatr.C:32
 GenerateCorrMatr.C:33
 GenerateCorrMatr.C:34
 GenerateCorrMatr.C:35
 GenerateCorrMatr.C:36
 GenerateCorrMatr.C:37
 GenerateCorrMatr.C:38
 GenerateCorrMatr.C:39
 GenerateCorrMatr.C:40
 GenerateCorrMatr.C:41
 GenerateCorrMatr.C:42
 GenerateCorrMatr.C:43
 GenerateCorrMatr.C:44
 GenerateCorrMatr.C:45
 GenerateCorrMatr.C:46
 GenerateCorrMatr.C:47
 GenerateCorrMatr.C:48
 GenerateCorrMatr.C:49
 GenerateCorrMatr.C:50
 GenerateCorrMatr.C:51
 GenerateCorrMatr.C:52
 GenerateCorrMatr.C:53
 GenerateCorrMatr.C:54
 GenerateCorrMatr.C:55
 GenerateCorrMatr.C:56
 GenerateCorrMatr.C:57
 GenerateCorrMatr.C:58
 GenerateCorrMatr.C:59
 GenerateCorrMatr.C:60
 GenerateCorrMatr.C:61
 GenerateCorrMatr.C:62
 GenerateCorrMatr.C:63
 GenerateCorrMatr.C:64
 GenerateCorrMatr.C:65
 GenerateCorrMatr.C:66
 GenerateCorrMatr.C:67
 GenerateCorrMatr.C:68
 GenerateCorrMatr.C:69
 GenerateCorrMatr.C:70
 GenerateCorrMatr.C:71
 GenerateCorrMatr.C:72
 GenerateCorrMatr.C:73
 GenerateCorrMatr.C:74
 GenerateCorrMatr.C:75
 GenerateCorrMatr.C:76
 GenerateCorrMatr.C:77
 GenerateCorrMatr.C:78
 GenerateCorrMatr.C:79
 GenerateCorrMatr.C:80
 GenerateCorrMatr.C:81
 GenerateCorrMatr.C:82
 GenerateCorrMatr.C:83
 GenerateCorrMatr.C:84
 GenerateCorrMatr.C:85
 GenerateCorrMatr.C:86
 GenerateCorrMatr.C:87
 GenerateCorrMatr.C:88
 GenerateCorrMatr.C:89
 GenerateCorrMatr.C:90
 GenerateCorrMatr.C:91
 GenerateCorrMatr.C:92
 GenerateCorrMatr.C:93
 GenerateCorrMatr.C:94
 GenerateCorrMatr.C:95
 GenerateCorrMatr.C:96
 GenerateCorrMatr.C:97
 GenerateCorrMatr.C:98
 GenerateCorrMatr.C:99
 GenerateCorrMatr.C:100
 GenerateCorrMatr.C:101
 GenerateCorrMatr.C:102
 GenerateCorrMatr.C:103
 GenerateCorrMatr.C:104
 GenerateCorrMatr.C:105
 GenerateCorrMatr.C:106
 GenerateCorrMatr.C:107
 GenerateCorrMatr.C:108
 GenerateCorrMatr.C:109
 GenerateCorrMatr.C:110
 GenerateCorrMatr.C:111
 GenerateCorrMatr.C:112
 GenerateCorrMatr.C:113
 GenerateCorrMatr.C:114
 GenerateCorrMatr.C:115
 GenerateCorrMatr.C:116
 GenerateCorrMatr.C:117
 GenerateCorrMatr.C:118
 GenerateCorrMatr.C:119
 GenerateCorrMatr.C:120
 GenerateCorrMatr.C:121
 GenerateCorrMatr.C:122
 GenerateCorrMatr.C:123
 GenerateCorrMatr.C:124
 GenerateCorrMatr.C:125
 GenerateCorrMatr.C:126
 GenerateCorrMatr.C:127
 GenerateCorrMatr.C:128
 GenerateCorrMatr.C:129
 GenerateCorrMatr.C:130
 GenerateCorrMatr.C:131
 GenerateCorrMatr.C:132
 GenerateCorrMatr.C:133
 GenerateCorrMatr.C:134
 GenerateCorrMatr.C:135
 GenerateCorrMatr.C:136
 GenerateCorrMatr.C:137
 GenerateCorrMatr.C:138
 GenerateCorrMatr.C:139
 GenerateCorrMatr.C:140
 GenerateCorrMatr.C:141
 GenerateCorrMatr.C:142
 GenerateCorrMatr.C:143
 GenerateCorrMatr.C:144
 GenerateCorrMatr.C:145
 GenerateCorrMatr.C:146
 GenerateCorrMatr.C:147
 GenerateCorrMatr.C:148
 GenerateCorrMatr.C:149
 GenerateCorrMatr.C:150
 GenerateCorrMatr.C:151
 GenerateCorrMatr.C:152
 GenerateCorrMatr.C:153
 GenerateCorrMatr.C:154
 GenerateCorrMatr.C:155
 GenerateCorrMatr.C:156
 GenerateCorrMatr.C:157
 GenerateCorrMatr.C:158
 GenerateCorrMatr.C:159
 GenerateCorrMatr.C:160
 GenerateCorrMatr.C:161
 GenerateCorrMatr.C:162
 GenerateCorrMatr.C:163
 GenerateCorrMatr.C:164
 GenerateCorrMatr.C:165
 GenerateCorrMatr.C:166
 GenerateCorrMatr.C:167
 GenerateCorrMatr.C:168
 GenerateCorrMatr.C:169
 GenerateCorrMatr.C:170
 GenerateCorrMatr.C:171
 GenerateCorrMatr.C:172
 GenerateCorrMatr.C:173
 GenerateCorrMatr.C:174
 GenerateCorrMatr.C:175
 GenerateCorrMatr.C:176
 GenerateCorrMatr.C:177
 GenerateCorrMatr.C:178
 GenerateCorrMatr.C:179
 GenerateCorrMatr.C:180
 GenerateCorrMatr.C:181
 GenerateCorrMatr.C:182
 GenerateCorrMatr.C:183
 GenerateCorrMatr.C:184
 GenerateCorrMatr.C:185
 GenerateCorrMatr.C:186
 GenerateCorrMatr.C:187
 GenerateCorrMatr.C:188
 GenerateCorrMatr.C:189
 GenerateCorrMatr.C:190
 GenerateCorrMatr.C:191
 GenerateCorrMatr.C:192
 GenerateCorrMatr.C:193
 GenerateCorrMatr.C:194
 GenerateCorrMatr.C:195
 GenerateCorrMatr.C:196
 GenerateCorrMatr.C:197
 GenerateCorrMatr.C:198
 GenerateCorrMatr.C:199
 GenerateCorrMatr.C:200
 GenerateCorrMatr.C:201
 GenerateCorrMatr.C:202
 GenerateCorrMatr.C:203
 GenerateCorrMatr.C:204
 GenerateCorrMatr.C:205
 GenerateCorrMatr.C:206
 GenerateCorrMatr.C:207
 GenerateCorrMatr.C:208
 GenerateCorrMatr.C:209
 GenerateCorrMatr.C:210
 GenerateCorrMatr.C:211
 GenerateCorrMatr.C:212
 GenerateCorrMatr.C:213
 GenerateCorrMatr.C:214
 GenerateCorrMatr.C:215
 GenerateCorrMatr.C:216
 GenerateCorrMatr.C:217
 GenerateCorrMatr.C:218
 GenerateCorrMatr.C:219
 GenerateCorrMatr.C:220
 GenerateCorrMatr.C:221
 GenerateCorrMatr.C:222
 GenerateCorrMatr.C:223
 GenerateCorrMatr.C:224
 GenerateCorrMatr.C:225
 GenerateCorrMatr.C:226
 GenerateCorrMatr.C:227
 GenerateCorrMatr.C:228
 GenerateCorrMatr.C:229
 GenerateCorrMatr.C:230
 GenerateCorrMatr.C:231
 GenerateCorrMatr.C:232
 GenerateCorrMatr.C:233
 GenerateCorrMatr.C:234
 GenerateCorrMatr.C:235
 GenerateCorrMatr.C:236
 GenerateCorrMatr.C:237
 GenerateCorrMatr.C:238
 GenerateCorrMatr.C:239
 GenerateCorrMatr.C:240
 GenerateCorrMatr.C:241
 GenerateCorrMatr.C:242
 GenerateCorrMatr.C:243
 GenerateCorrMatr.C:244
 GenerateCorrMatr.C:245
 GenerateCorrMatr.C:246
 GenerateCorrMatr.C:247
 GenerateCorrMatr.C:248
 GenerateCorrMatr.C:249
 GenerateCorrMatr.C:250
 GenerateCorrMatr.C:251
 GenerateCorrMatr.C:252
 GenerateCorrMatr.C:253
 GenerateCorrMatr.C:254
 GenerateCorrMatr.C:255
 GenerateCorrMatr.C:256
 GenerateCorrMatr.C:257
 GenerateCorrMatr.C:258
 GenerateCorrMatr.C:259
 GenerateCorrMatr.C:260
 GenerateCorrMatr.C:261
 GenerateCorrMatr.C:262
 GenerateCorrMatr.C:263
 GenerateCorrMatr.C:264
 GenerateCorrMatr.C:265
 GenerateCorrMatr.C:266
 GenerateCorrMatr.C:267
 GenerateCorrMatr.C:268
 GenerateCorrMatr.C:269
 GenerateCorrMatr.C:270
 GenerateCorrMatr.C:271
 GenerateCorrMatr.C:272
 GenerateCorrMatr.C:273
 GenerateCorrMatr.C:274
 GenerateCorrMatr.C:275
 GenerateCorrMatr.C:276
 GenerateCorrMatr.C:277
 GenerateCorrMatr.C:278
 GenerateCorrMatr.C:279
 GenerateCorrMatr.C:280
 GenerateCorrMatr.C:281
 GenerateCorrMatr.C:282
 GenerateCorrMatr.C:283
 GenerateCorrMatr.C:284
 GenerateCorrMatr.C:285
 GenerateCorrMatr.C:286
 GenerateCorrMatr.C:287
 GenerateCorrMatr.C:288
 GenerateCorrMatr.C:289
 GenerateCorrMatr.C:290
 GenerateCorrMatr.C:291
 GenerateCorrMatr.C:292
 GenerateCorrMatr.C:293
 GenerateCorrMatr.C:294
 GenerateCorrMatr.C:295
 GenerateCorrMatr.C:296
 GenerateCorrMatr.C:297
 GenerateCorrMatr.C:298
 GenerateCorrMatr.C:299
 GenerateCorrMatr.C:300
 GenerateCorrMatr.C:301
 GenerateCorrMatr.C:302
 GenerateCorrMatr.C:303
 GenerateCorrMatr.C:304
 GenerateCorrMatr.C:305
 GenerateCorrMatr.C:306
 GenerateCorrMatr.C:307
 GenerateCorrMatr.C:308
 GenerateCorrMatr.C:309
 GenerateCorrMatr.C:310
 GenerateCorrMatr.C:311
 GenerateCorrMatr.C:312
 GenerateCorrMatr.C:313
 GenerateCorrMatr.C:314
 GenerateCorrMatr.C:315
 GenerateCorrMatr.C:316
 GenerateCorrMatr.C:317
 GenerateCorrMatr.C:318
 GenerateCorrMatr.C:319
 GenerateCorrMatr.C:320
 GenerateCorrMatr.C:321
 GenerateCorrMatr.C:322
 GenerateCorrMatr.C:323
 GenerateCorrMatr.C:324
 GenerateCorrMatr.C:325
 GenerateCorrMatr.C:326
 GenerateCorrMatr.C:327
 GenerateCorrMatr.C:328
 GenerateCorrMatr.C:329
 GenerateCorrMatr.C:330
 GenerateCorrMatr.C:331
 GenerateCorrMatr.C:332
 GenerateCorrMatr.C:333
 GenerateCorrMatr.C:334
 GenerateCorrMatr.C:335
 GenerateCorrMatr.C:336
 GenerateCorrMatr.C:337
 GenerateCorrMatr.C:338
 GenerateCorrMatr.C:339
 GenerateCorrMatr.C:340
 GenerateCorrMatr.C:341
 GenerateCorrMatr.C:342
 GenerateCorrMatr.C:343
 GenerateCorrMatr.C:344
 GenerateCorrMatr.C:345
 GenerateCorrMatr.C:346
 GenerateCorrMatr.C:347
 GenerateCorrMatr.C:348
 GenerateCorrMatr.C:349
 GenerateCorrMatr.C:350
 GenerateCorrMatr.C:351
 GenerateCorrMatr.C:352
 GenerateCorrMatr.C:353
 GenerateCorrMatr.C:354
 GenerateCorrMatr.C:355
 GenerateCorrMatr.C:356
 GenerateCorrMatr.C:357
 GenerateCorrMatr.C:358
 GenerateCorrMatr.C:359
 GenerateCorrMatr.C:360
 GenerateCorrMatr.C:361
 GenerateCorrMatr.C:362
 GenerateCorrMatr.C:363
 GenerateCorrMatr.C:364
 GenerateCorrMatr.C:365
 GenerateCorrMatr.C:366
 GenerateCorrMatr.C:367
 GenerateCorrMatr.C:368
 GenerateCorrMatr.C:369
 GenerateCorrMatr.C:370
 GenerateCorrMatr.C:371
 GenerateCorrMatr.C:372
 GenerateCorrMatr.C:373
 GenerateCorrMatr.C:374
 GenerateCorrMatr.C:375
 GenerateCorrMatr.C:376
 GenerateCorrMatr.C:377
 GenerateCorrMatr.C:378
 GenerateCorrMatr.C:379
 GenerateCorrMatr.C:380
 GenerateCorrMatr.C:381
 GenerateCorrMatr.C:382
 GenerateCorrMatr.C:383
 GenerateCorrMatr.C:384
 GenerateCorrMatr.C:385
 GenerateCorrMatr.C:386
 GenerateCorrMatr.C:387
 GenerateCorrMatr.C:388
 GenerateCorrMatr.C:389
 GenerateCorrMatr.C:390
 GenerateCorrMatr.C:391
 GenerateCorrMatr.C:392
 GenerateCorrMatr.C:393
 GenerateCorrMatr.C:394
 GenerateCorrMatr.C:395
 GenerateCorrMatr.C:396
 GenerateCorrMatr.C:397
 GenerateCorrMatr.C:398
 GenerateCorrMatr.C:399
 GenerateCorrMatr.C:400
 GenerateCorrMatr.C:401
 GenerateCorrMatr.C:402
 GenerateCorrMatr.C:403
 GenerateCorrMatr.C:404
 GenerateCorrMatr.C:405
 GenerateCorrMatr.C:406
 GenerateCorrMatr.C:407
 GenerateCorrMatr.C:408
 GenerateCorrMatr.C:409
 GenerateCorrMatr.C:410
 GenerateCorrMatr.C:411
 GenerateCorrMatr.C:412
 GenerateCorrMatr.C:413
 GenerateCorrMatr.C:414
 GenerateCorrMatr.C:415
 GenerateCorrMatr.C:416
 GenerateCorrMatr.C:417
 GenerateCorrMatr.C:418
 GenerateCorrMatr.C:419
 GenerateCorrMatr.C:420
 GenerateCorrMatr.C:421
 GenerateCorrMatr.C:422
 GenerateCorrMatr.C:423
 GenerateCorrMatr.C:424
 GenerateCorrMatr.C:425
 GenerateCorrMatr.C:426
 GenerateCorrMatr.C:427
 GenerateCorrMatr.C:428
 GenerateCorrMatr.C:429
 GenerateCorrMatr.C:430
 GenerateCorrMatr.C:431
 GenerateCorrMatr.C:432
 GenerateCorrMatr.C:433
 GenerateCorrMatr.C:434
 GenerateCorrMatr.C:435
 GenerateCorrMatr.C:436
 GenerateCorrMatr.C:437
 GenerateCorrMatr.C:438
 GenerateCorrMatr.C:439
 GenerateCorrMatr.C:440
 GenerateCorrMatr.C:441
 GenerateCorrMatr.C:442
 GenerateCorrMatr.C:443
 GenerateCorrMatr.C:444
 GenerateCorrMatr.C:445
 GenerateCorrMatr.C:446
 GenerateCorrMatr.C:447
 GenerateCorrMatr.C:448
 GenerateCorrMatr.C:449
 GenerateCorrMatr.C:450
 GenerateCorrMatr.C:451
 GenerateCorrMatr.C:452
 GenerateCorrMatr.C:453
 GenerateCorrMatr.C:454
 GenerateCorrMatr.C:455
 GenerateCorrMatr.C:456
 GenerateCorrMatr.C:457
 GenerateCorrMatr.C:458
 GenerateCorrMatr.C:459
 GenerateCorrMatr.C:460
 GenerateCorrMatr.C:461
 GenerateCorrMatr.C:462
 GenerateCorrMatr.C:463
 GenerateCorrMatr.C:464
 GenerateCorrMatr.C:465
 GenerateCorrMatr.C:466
 GenerateCorrMatr.C:467
 GenerateCorrMatr.C:468
 GenerateCorrMatr.C:469
 GenerateCorrMatr.C:470
 GenerateCorrMatr.C:471
 GenerateCorrMatr.C:472
 GenerateCorrMatr.C:473
 GenerateCorrMatr.C:474
 GenerateCorrMatr.C:475
 GenerateCorrMatr.C:476
 GenerateCorrMatr.C:477
 GenerateCorrMatr.C:478
 GenerateCorrMatr.C:479
 GenerateCorrMatr.C:480
 GenerateCorrMatr.C:481
 GenerateCorrMatr.C:482
 GenerateCorrMatr.C:483
 GenerateCorrMatr.C:484
 GenerateCorrMatr.C:485
 GenerateCorrMatr.C:486
 GenerateCorrMatr.C:487
 GenerateCorrMatr.C:488
 GenerateCorrMatr.C:489