1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
18 #include "AliLhcIRegion.h"
19 #include "AliLhcBeam.h"
26 #include <TMultiGraph.h>
29 ClassImp(AliLhcIRegion)
31 AliLhcIRegion::AliLhcIRegion(AliLHC* lhc, const char* name, const char* title)
37 fAverageLumiArray = 0;
41 AliLhcIRegion::AliLhcIRegion(const AliLhcIRegion& region)
46 AliLhcIRegion::~AliLhcIRegion()
50 if (fLumiArray) delete fLumiArray;
51 if (fAverageLumiArray) delete fAverageLumiArray;
52 if (fBetaStarArray) delete fBetaStarArray;
56 AliLhcIRegion& AliLhcIRegion::operator=(const AliLhcIRegion & rhs)
58 // Assignment operator
62 void AliLhcIRegion::Init()
65 printf("\n Initializing Interaction Region %s", GetName());
66 printf("\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
68 fBeam1 = fAccelerator->Beam(0);
69 fBeam2 = fAccelerator->Beam(1);
70 fFrequency = 3.e10/(2.*TMath::Pi()*fAccelerator->Radius());
74 fLuminosity0 = fLuminosity;
76 fBetaStar0 = fBetaStar;
77 printf("\n IR Beta* :%10.3e cm ", fBetaStar);
78 printf("\n IR Initial Luminosity :%10.3e cm^-2s^-1 ", fLuminosity);
81 Float_t AliLhcIRegion::Luminosity()
83 Float_t sigma1 = TMath::Sqrt(fBeam1->Emittance()*fBetaStar);
84 Float_t sigma2 = TMath::Sqrt(fBeam2->Emittance()*fBetaStar);
85 fLuminosity = fFrequency *
86 fBeam1->N()*fBeam2->N()/(2.*TMath::Pi()*(sigma1*sigma1+sigma2*sigma2));
90 void AliLhcIRegion::Update()
95 void AliLhcIRegion::SetMonitor(Int_t n)
97 // Initialize monitors
99 if (fLumiArray) delete fLumiArray;
100 if (fAverageLumiArray) delete fAverageLumiArray;
101 if (fBetaStarArray) delete fBetaStarArray;
103 fLumiArray = new Float_t[n];
104 fAverageLumiArray = new Float_t[n];
105 fBetaStarArray = new Float_t[n];
107 fAverageLumiArray[0] = 0.;
111 void AliLhcIRegion::Record()
113 // Record some time dependent quantities
115 Int_t n = fAccelerator->Nt();
118 fLumiArray[n] = fLuminosity;
120 // Average Luminosity respecting set-up and filling time
121 if (fAccelerator->Time() > fAccelerator->SetUpTime())
122 fAverageLumi+=fLuminosity*fAccelerator->TimeStep();
124 fAverageLumiArray[n] = fAverageLumi/
125 (Float_t(n+1)*fAccelerator->TimeStep()+fAccelerator->FillingTime())/
129 fBetaStarArray[n] = fBetaStar;
133 void AliLhcIRegion::DrawPlots()
136 // Draw the monitor plots
138 Float_t* t = fAccelerator->TimeA();
140 char name1[20], name2[20], hname[20];
141 sprintf(name1,"c%s",GetName());
142 sprintf(name2,"b%s",GetName());
144 sprintf(title,"Luminosity Lifetime for %s",GetName());
147 sprintf(hname,"%s%d",name1,0);
148 TH1 *g1 = new TH1F(hname,"Luminosity",fNmax,0,t[fNmax]);
150 g1->SetMaximum(fLumiArray[0]*1.1);
152 g1->GetXaxis()->SetTitle("t (h)");
153 g1->GetYaxis()->SetTitle("L(t) (cm**-2 s**-1)");
154 sprintf(hname,"%s%d",name1,1);
155 TH1 *g2 = new TH1F(hname,"Luminosity",fNmax,0,t[fNmax]);
159 g2->GetXaxis()->SetTitle("t (h)");
160 g2->GetYaxis()->SetTitle("L(t)/L0");
161 sprintf(hname,"%s%d",name1,3);
163 TH1 *g3 = new TH1F(hname,"Average Luminosity",fNmax,0,t[fNmax]);
168 g3->GetXaxis()->SetTitle("t (h)");
169 g3->GetYaxis()->SetTitle("L(t)/L0");
170 sprintf(hname,"%s%d",name1,3);
172 TH1 *g4 = new TH1F(hname,"Beta*",fNmax,0,t[fNmax]);
174 g4->SetMaximum(fBetaStarArray[0]*1.1);
176 g4->GetXaxis()->SetTitle("t (h)");
177 g4->GetYaxis()->SetTitle("beta* (cm)");
179 TGraph* grLumi = new TGraph(fNmax, t, fLumiArray);
180 grLumi->SetHistogram(g1);
182 for (Int_t i=0; i<fNmax; i++) {
183 fLumiArray[i]=fLumiArray[i]/fLuminosity0;
185 TGraph* grLumiN = new TGraph(fNmax, t, fLumiArray);
186 grLumiN->SetHistogram(g2);
188 TGraph* grLumiA = new TGraph(fNmax, t, fAverageLumiArray);
189 grLumiA->SetHistogram(g3);
190 grLumiA->SetLineStyle(2);
192 TGraph* grLumiB = new TGraph(fNmax, t, fBetaStarArray);
193 grLumiB->SetHistogram(g4);
195 TMultiGraph* mg = new TMultiGraph();
201 TCanvas *c1 = new TCanvas(name1,title, 200, 10, 700, 500);
205 mg->GetXaxis()->SetTitle("t (h)");
206 mg->GetYaxis()->SetTitle("L(t)/L0 and <L>/L0");
209 TCanvas *c2 = new TCanvas(name2,title, 200, 10, 700, 500);