Added some more scripts
[u/mrichter/AliRoot.git] / PWG2 / FORWARD / analysis2 / scripts / RunCopyVtxBias.C
1 Color_t Color(UShort_t d, Char_t r ) const 
2
3   return ((d == 1 ? kRed : (d == 2 ? kGreen : kBlue))
4           + ((r == 'I' || r == 'i') ? 2 : -2));
5 }
6
7 /** 
8  * 
9  * @param sys       Collision system 
10  * @param cms       Center of mass energy per nucleon in GeV
11  * @param field     Magnetic field 
12  * 
13  * @ingroup pwg2_forward_analysis_scripts
14  */
15 void
16 RunCopyVtxBias(UShort_t sys, UShort_t cms, Short_t field)
17 {
18   gROOT->Macro("$ALICE_ROOT/PWG2/FORWARD/analysis2/scripts/LoadLibs.C");
19   gSystem->Load("libPWG2forward.so");
20
21   AliFMDAnaParameters* p = AliFMDAnaParameters::Instance();
22   p->SetEnergy(Float_t(cms));
23   p->SetMagField(Float_t(field));
24   p->SetCollisionSystem(sys == 1 ? "pp" : "PbPb");
25   p->Init(true, AliFMDAnaParameters::kBackgroundCorrection|
26           AliFMDAnaParameters::kEventSelectionEfficiency);
27  
28   Int_t    nVtx   = p->GetNvtxBins();
29   Double_t minVtx = -p->GetVtxCutZ();
30   Double_t maxVtx = -p->GetVtxCutZ();
31   Int_t    nEta   = p->GetNetaBins();
32   Double_t minEta = p->GetEtaMin();
33   Double_t maxEta = p->GetEtaMax();
34
35   TAxis vtxAxis(nVtx, minVtx, maxVtx);
36   AliFMDCorrVertexBias* obj = new AliFMDCorrVertexBias;
37   obj->SetVertexAxis(vtxAxis);
38
39   for (UShort_t b = 1; b <= nVtx; b++) { 
40     for (UShort_t q = 0; q < 2; q++) { 
41       Char_t r = q == 0 ? 'I' : 'O';
42
43       TH2F* oldcorr = p->GetEventSelectionEfficiency("INEL",b-1,r);
44       if (!oldcorr) {
45         Warning("RunCopyVtxBias",
46                 "Didn't find secondary map correction "
47                 "for ring type %c, vertex bin %3d", r, b);
48         continue;
49       }
50    
51       TH2D* newcorr = new TH2D(Form("FMDX%c", r), 
52                                Form("Vertex bias correction for %c rings "
53                                     "in vertex bin %d [%+8.4f,%+8.4f]", 
54                                     r, b, vtxAxis.GetBinLowEdge(b), 
55                                     vtxAxis.GetBinUpEdge(b)), 
56                                nEta, minEta, maxEta, 
57                                oldcorr->GetYaxis()->GetNbins(), 
58                                oldcorr->GetYaxis()->GetXmin(), 
59                                oldcorr->GetYaxis()->GetXmax());
60       newcorr->SetXTitle("#eta");
61       newcorr->SetYTitle("#phi [radians]");
62       newcorr->SetZTitle("1/N_{t}#sum_{i}^{N_{tv}} N_{ch,i,primary} / "
63                          "1/N_{v}#sum_{i}^{N_{v}} N_{ch,i,primary}");
64       newcorr->SetDirectory(0);
65       newcorr->SetStats(0);
66       newcorr->Sumw2();
67       newcorr->Add(oldcorr);
68
69       Info("RunCopyVtxBias",
70            "Copying %s to %s", oldcorr->GetName(), newcorr->GetName());
71
72       obj->SetCorrection(r, b, newcorr);
73     }
74   }
75   AliForwardCorrectionManager& mgr = AliForwardCorrectionManager::Instance();
76   TString fname(mgr.GetFileName(AliForwardCorrectionManager::kVertexBias,
77                                 sys, cms, field, false));
78   TFile* output = TFile::Open(fname.Data(), "RECREATE");
79   if (!output) { 
80     Warning("Run", "Failed to open output file %s", fname.Data());
81     return kFALSE;
82   }
83   obj->Write(mgr.GetObjectName(AliForwardCorrectionManager::kVertexBias));
84   output->Write();
85   output->Close();
86   Info("Run", "File %s created.  It should be copied to %s and stored in SVN",
87        fname.Data(),mgr.GetFileDir(AliForwardCorrectionManager::kVertexBias));
88
89 }
90 //
91 // EOF
92 //