ROOT logo
//____________________________________________________________________
/** 
 * 
 * 
 * @param list 
 * @param low 
 * @param high 
 * @param m 
 * 
 * @return 
 *
 * @ingroup pwglf_forward_scripts_corr
 */
Bool_t
MakeSecMap(TList* list, Double_t low, Double_t high, 
	   AliFMDCorrSecondaryMap* m)
{
  // --- Get the list ------------------------------------------------
  TString lName(AliForwardMCCorrectionsTask::VtxBin::BinName(low, high));
  TList* vl = static_cast<TList*>(list->FindObject(lName));
  if (!vl) { 
    Error("MakeSecMap", "List %s not found in %s", 
	  lName.Data(), list->GetName());
    return false;
  }
  
  // --- Get primary distribution ------------------------------------
  const char* primaryName = "primary";
  TH2D* primary = static_cast<TH2D*>(vl->FindObject(primaryName));
  if (!primary) { 
    Error("MakeSecMap", "Couldn't not find histogram %s in %s", 
	  primaryName, lName.Data());
    return false;
  }
  TH2D* primaryI = static_cast<TH2D*>(primary->Clone("primaryI"));
  TH2D* primaryO = static_cast<TH2D*>(primary->Clone("primaryO"));
  primaryI->SetDirectory(0);
  primaryO->SetDirectory(0);
  primaryI->RebinY(2);


  // --- Calculate vertex --------------------------------------------
  Double_t vz = (high+low) / 2;

  // --- Loop over rings ---------------------------------------------
  for (UShort_t d = 1; d <= 3; d++) { 
    UShort_t nr = (d == 1 ? 1 : 2);
    for (UShort_t q = 0; q < nr; q++) { 
      Char_t r = (q == 0 ? 'I' : 'O');
      
      const char* ringName = Form("FMD%d%c_cache", d, r);
      TH2D* ring = static_cast<TH2D*>(vl->FindObject(ringName));
      if (!ring) { 
	Error("MakeSecMap", "Didn't find histogram %s in %s", 
	      ringName, vl->GetName());
	vl->ls();
	continue;
      }
      
      TH2D* tmp = static_cast<TH2D*>(ring->Clone("tmp"));
      TString tmpName = tmp->GetName();
      tmpName.ReplaceAll("_cache", "");
      tmp->SetName(tmpName);
      tmp->SetDirectory(0);
      tmp->Divide(q == 0 ? primaryI : primaryO);


      m->SetCorrection(d, r, vz, tmp);
    }
  }
  return true;
}

//____________________________________________________________________
/** 
 * 
 * 
 * @param filename 
 * @param sys 
 * @param cms 
 * @param field 
 *
 * @ingroup pwglf_forward_scripts_corr
 */
void
MakeCorrSecMap(const char* filename, 
	       const char* sys="pp", 
	       UShort_t    cms=900, 
	       Short_t     field=+5)
{
  // --- Load code ---------------------------------------------------
  // gROOT->Macro("$ALICE_ROOT/PWGLF/FORWARD/analysis2/scripts/LoadLibs.C");


  // --- Get the file ------------------------------------------------
  TFile* file = TFile::Open(filename, "READ");
  if (!file) {
    Error("MakeCorrSecMap", "Couldn't open file %s", filename);
    return;
  }

  // --- Get the parent list -----------------------------------------
  const char* forwardName = "ForwardSums";
  TList* forward = static_cast<TList*>(file->Get(forwardName));
  if (!forward) { 
    Error("MakeCorrSecMap", "Couldn't get list %s from %s", 
	  forwardName, filename);
    return;
  }

  // --- Get the vertex axis -----------------------------------------
  const char* vtxName = "vtxAxis";
  TH1* vtxHist = static_cast<TH1*>(forward->FindObject(vtxName));
  if (!vtxHist) {
    Error("MakeCorrSecMap", "Couldn't get histogram %s from %s", 
	  vtxName, forwardName);
    return;
  }
  const TAxis& vtxAxis = *(vtxHist->GetXaxis());

  // --- Get the vertex axis -----------------------------------------
  const char* etaName = "etaAxis";
  TH1* etaHist = static_cast<TH1*>(forward->FindObject(etaName));
  if (!etaHist) {
    Error("MakeCorrSecMap", "Couldn't get histogram %s from %s", 
	  etaName, forwardName);
    return;
  } 
  const TAxis& etaAxis = *(etaHist->GetXaxis());

  // --- Fill correction object --------------------------------------
  AliFMDCorrSecondaryMap* corr = new AliFMDCorrSecondaryMap;
  corr->SetVertexAxis(vtxAxis);
  corr->SetEtaAxis(etaAxis);

  for (Int_t i = 1; i <= vtxAxis.GetNbins(); i++) { 
    Double_t low  = vtxAxis.GetBinLowEdge(i);
    Double_t high = vtxAxis.GetBinUpEdge(i);

    MakeSecMap(forward, low, high, corr);
  }

  // --- Get output filename and open --------------------------------
  UShort_t isys = AliForwardUtil::ParseCollisionSystem(sys);
  AliForwardCorrectionManager& mgr = AliForwardCorrectionManager::Instance();
  TString fname(mgr.GetFileName(AliForwardCorrectionManager::kSecondaryMap,
				isys, cms, field, false));
  TFile* output = TFile::Open(fname.Data(), "RECREATE");
  if (!output) { 
    Warning("Run", "Failed to open output file %s", fname.Data());
    return kFALSE;
  }

  // --- Write to output ---------------------------------------------
  corr->Write(mgr.GetObjectName(AliForwardCorrectionManager::kSecondaryMap));
  output->Write();
  output->Close();
  Info("Run", "File %s created.  It should be copied to %s and stored in SVN",
       fname.Data(),mgr.GetFileDir(AliForwardCorrectionManager::kSecondaryMap));

}
//____________________________________________________________________
//
// EOF
//
   
 MakeCorrSecMap.C:1
 MakeCorrSecMap.C:2
 MakeCorrSecMap.C:3
 MakeCorrSecMap.C:4
 MakeCorrSecMap.C:5
 MakeCorrSecMap.C:6
 MakeCorrSecMap.C:7
 MakeCorrSecMap.C:8
 MakeCorrSecMap.C:9
 MakeCorrSecMap.C:10
 MakeCorrSecMap.C:11
 MakeCorrSecMap.C:12
 MakeCorrSecMap.C:13
 MakeCorrSecMap.C:14
 MakeCorrSecMap.C:15
 MakeCorrSecMap.C:16
 MakeCorrSecMap.C:17
 MakeCorrSecMap.C:18
 MakeCorrSecMap.C:19
 MakeCorrSecMap.C:20
 MakeCorrSecMap.C:21
 MakeCorrSecMap.C:22
 MakeCorrSecMap.C:23
 MakeCorrSecMap.C:24
 MakeCorrSecMap.C:25
 MakeCorrSecMap.C:26
 MakeCorrSecMap.C:27
 MakeCorrSecMap.C:28
 MakeCorrSecMap.C:29
 MakeCorrSecMap.C:30
 MakeCorrSecMap.C:31
 MakeCorrSecMap.C:32
 MakeCorrSecMap.C:33
 MakeCorrSecMap.C:34
 MakeCorrSecMap.C:35
 MakeCorrSecMap.C:36
 MakeCorrSecMap.C:37
 MakeCorrSecMap.C:38
 MakeCorrSecMap.C:39
 MakeCorrSecMap.C:40
 MakeCorrSecMap.C:41
 MakeCorrSecMap.C:42
 MakeCorrSecMap.C:43
 MakeCorrSecMap.C:44
 MakeCorrSecMap.C:45
 MakeCorrSecMap.C:46
 MakeCorrSecMap.C:47
 MakeCorrSecMap.C:48
 MakeCorrSecMap.C:49
 MakeCorrSecMap.C:50
 MakeCorrSecMap.C:51
 MakeCorrSecMap.C:52
 MakeCorrSecMap.C:53
 MakeCorrSecMap.C:54
 MakeCorrSecMap.C:55
 MakeCorrSecMap.C:56
 MakeCorrSecMap.C:57
 MakeCorrSecMap.C:58
 MakeCorrSecMap.C:59
 MakeCorrSecMap.C:60
 MakeCorrSecMap.C:61
 MakeCorrSecMap.C:62
 MakeCorrSecMap.C:63
 MakeCorrSecMap.C:64
 MakeCorrSecMap.C:65
 MakeCorrSecMap.C:66
 MakeCorrSecMap.C:67
 MakeCorrSecMap.C:68
 MakeCorrSecMap.C:69
 MakeCorrSecMap.C:70
 MakeCorrSecMap.C:71
 MakeCorrSecMap.C:72
 MakeCorrSecMap.C:73
 MakeCorrSecMap.C:74
 MakeCorrSecMap.C:75
 MakeCorrSecMap.C:76
 MakeCorrSecMap.C:77
 MakeCorrSecMap.C:78
 MakeCorrSecMap.C:79
 MakeCorrSecMap.C:80
 MakeCorrSecMap.C:81
 MakeCorrSecMap.C:82
 MakeCorrSecMap.C:83
 MakeCorrSecMap.C:84
 MakeCorrSecMap.C:85
 MakeCorrSecMap.C:86
 MakeCorrSecMap.C:87
 MakeCorrSecMap.C:88
 MakeCorrSecMap.C:89
 MakeCorrSecMap.C:90
 MakeCorrSecMap.C:91
 MakeCorrSecMap.C:92
 MakeCorrSecMap.C:93
 MakeCorrSecMap.C:94
 MakeCorrSecMap.C:95
 MakeCorrSecMap.C:96
 MakeCorrSecMap.C:97
 MakeCorrSecMap.C:98
 MakeCorrSecMap.C:99
 MakeCorrSecMap.C:100
 MakeCorrSecMap.C:101
 MakeCorrSecMap.C:102
 MakeCorrSecMap.C:103
 MakeCorrSecMap.C:104
 MakeCorrSecMap.C:105
 MakeCorrSecMap.C:106
 MakeCorrSecMap.C:107
 MakeCorrSecMap.C:108
 MakeCorrSecMap.C:109
 MakeCorrSecMap.C:110
 MakeCorrSecMap.C:111
 MakeCorrSecMap.C:112
 MakeCorrSecMap.C:113
 MakeCorrSecMap.C:114
 MakeCorrSecMap.C:115
 MakeCorrSecMap.C:116
 MakeCorrSecMap.C:117
 MakeCorrSecMap.C:118
 MakeCorrSecMap.C:119
 MakeCorrSecMap.C:120
 MakeCorrSecMap.C:121
 MakeCorrSecMap.C:122
 MakeCorrSecMap.C:123
 MakeCorrSecMap.C:124
 MakeCorrSecMap.C:125
 MakeCorrSecMap.C:126
 MakeCorrSecMap.C:127
 MakeCorrSecMap.C:128
 MakeCorrSecMap.C:129
 MakeCorrSecMap.C:130
 MakeCorrSecMap.C:131
 MakeCorrSecMap.C:132
 MakeCorrSecMap.C:133
 MakeCorrSecMap.C:134
 MakeCorrSecMap.C:135
 MakeCorrSecMap.C:136
 MakeCorrSecMap.C:137
 MakeCorrSecMap.C:138
 MakeCorrSecMap.C:139
 MakeCorrSecMap.C:140
 MakeCorrSecMap.C:141
 MakeCorrSecMap.C:142
 MakeCorrSecMap.C:143
 MakeCorrSecMap.C:144
 MakeCorrSecMap.C:145
 MakeCorrSecMap.C:146
 MakeCorrSecMap.C:147
 MakeCorrSecMap.C:148
 MakeCorrSecMap.C:149
 MakeCorrSecMap.C:150
 MakeCorrSecMap.C:151
 MakeCorrSecMap.C:152
 MakeCorrSecMap.C:153
 MakeCorrSecMap.C:154
 MakeCorrSecMap.C:155
 MakeCorrSecMap.C:156
 MakeCorrSecMap.C:157
 MakeCorrSecMap.C:158
 MakeCorrSecMap.C:159
 MakeCorrSecMap.C:160
 MakeCorrSecMap.C:161
 MakeCorrSecMap.C:162
 MakeCorrSecMap.C:163
 MakeCorrSecMap.C:164
 MakeCorrSecMap.C:165
 MakeCorrSecMap.C:166
 MakeCorrSecMap.C:167