6bc8ec4da488eaa23a575700f792e825a5a91eaf
[u/mrichter/AliRoot.git] / PWG2 / FORWARD / analysis2 / scripts / RunCopySecMap.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 RunCopySecMap(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  
27   Int_t    nVtx   = p->GetNvtxBins();
28   Double_t minVtx = -p->GetVtxCutZ();
29   Double_t maxVtx = p->GetVtxCutZ();
30   Int_t    nEta   = p->GetNetaBins();
31   Double_t minEta = p->GetEtaMin();
32   Double_t maxEta = p->GetEtaMax();
33
34   TAxis vtxAxis(nVtx, minVtx, maxVtx);
35   AliFMDCorrSecondaryMap* m = new AliFMDCorrSecondaryMap;
36   m->SetVertexAxis(nVtx, minVtx, maxVtx);
37   m->SetEtaAxis(nEta,minEta,maxEta);
38   AliFMDCorrDoubleHit* dh = new AliFMDCorrDoubleHit;
39
40   for (UShort_t d = 1; d <= 3; d++) { 
41     UShort_t nQ = (d == 1 ? 1 : 2);
42     for (UShort_t q = 0; q < nQ; q++) { 
43       Char_t r = (q == 0 ? 'I' : 'O');
44      
45       TH1F* old2hit = p->GetDoubleHitCorrection(d, r);
46       if (!old2hit) 
47         Warning("RunCopySecMap",
48                 "Didn't find double hit correction for FMD%d%c", d, r);
49       else { 
50         TH1D* new2hit = new TH1D(Form("FMD%d%c", d, r), 
51                                  Form("Double hit correction for FMD%d%c",d,r), 
52                                  nEta, minEta, maxEta);
53         new2hit->SetXTitle("#eta");
54         new2hit->SetYTitle("#sum_{i} N_{i,strips hit}(#eta)/"
55                            "#sum_{i} N_{i,total hits}(#eta)");
56         new2hit->SetFillColor(Color(d,r));
57         new2hit->SetFillStyle(3001);
58         new2hit->SetDirectory(0);
59         new2hit->SetStats(0);
60         new2hit->Sumw2();
61         new2hit->Add(old2hit);
62
63         Info("RunCopySecMap", 
64              "Copying %s to %s", old2hit->GetName(), new2hit->GetName());
65
66         dh->SetCorrection(d, r, new2hit);
67       }
68
69       for (UShort_t b = 1; b <= nVtx; b++) { 
70         TH2F* oldmap = p->GetBackgroundCorrection(d, r, b-1);
71         if (!oldmap) {
72           Warning("RunCopySecMap",
73                   "Didn't find secondary map correction "
74                   "for FMD%d%c, vertex bin %3d", d, r, b);
75           continue;
76         }
77        
78         TH2D* newmap = new TH2D(Form("FMD%d%c_vtxbin%03d", d, r, b), 
79                                 Form("Secondary map correction for FMD%d%c "
80                                      "in vertex bin %d [%+8.4f,%+8.4f]", 
81                                      d, r, b, vtxAxis.GetBinLowEdge(b), 
82                                      vtxAxis.GetBinUpEdge(b)), 
83                                 nEta, minEta, maxEta, 
84                                 oldmap->GetYaxis()->GetNbins(), 
85                                 oldmap->GetYaxis()->GetXmin(), 
86                                 oldmap->GetYaxis()->GetXmax());
87         newmap->SetXTitle("#eta");
88         newmap->SetYTitle("#phi [radians]");
89         newmap->SetZTitle("#sum_{i} N_{ch,i,primary} / #sum_{i} N_{ch,i,FMD}");
90         newmap->SetDirectory(0);
91         newmap->SetStats(0);
92         newmap->Sumw2();
93         newmap->Add(oldmap);
94
95         Info("RunCopySecMap",
96              "Copying %s to %s", oldmap->GetName(), newmap->GetName());
97
98         m->SetCorrection(d, r, b, newmap);
99       }
100     }
101   }
102   AliForwardCorrectionManager& mgr = AliForwardCorrectionManager::Instance();
103   TString fname(mgr.GetFileName(AliForwardCorrectionManager::kSecondaryMap,
104                                 sys, cms, field, false));
105   TFile* output = TFile::Open(fname.Data(), "RECREATE");
106   if (!output) { 
107     Warning("Run", "Failed to open output file %s", fname.Data());
108     return kFALSE;
109   }
110   m->Write(mgr.GetObjectName(AliForwardCorrectionManager::kSecondaryMap));
111   output->Write();
112   output->Close();
113   Info("Run", "File %s created.  It should be copied to %s and stored in SVN",
114        fname.Data(),mgr.GetFileDir(AliForwardCorrectionManager::kSecondaryMap));
115
116   fname = mgr.GetFileName(AliForwardCorrectionManager::kDoubleHit,
117                           sys, cms, field, false);
118   output = TFile::Open(fname.Data(), "RECREATE");
119   if (!output) { 
120     Warning("Run", "Failed to open output file %s", fname.Data());
121     return kFALSE;
122   }
123   dh->Write(mgr.GetObjectName(AliForwardCorrectionManager::kDoubleHit));
124   output->Write();
125   output->Close();
126   Info("Run", "File %s created.  It should be copied to %s and stored in SVN",
127        fname.Data(),mgr.GetFileDir(AliForwardCorrectionManager::kDoubleHit));
128 }
129 //
130 // EOF
131 //