5 // Author: R.Reed, M.Connors
7 #include "AliAnalysisTaskEmcalJetSpectra.h"
11 #include <TClonesArray.h>
14 #include <THnSparse.h>
16 #include <TLorentzVector.h>
17 #include <TParameter.h>
18 #include <TParticle.h>
22 #include "AliAODEvent.h"
23 #include "AliAnalysisManager.h"
24 #include "AliAnalysisTask.h"
25 #include "AliCentrality.h"
26 #include "AliESDEvent.h"
27 #include "AliESDInputHandler.h"
28 #include "AliEmcalJet.h"
29 #include "AliVCluster.h"
30 #include "AliRhoParameter.h"
31 #include "AliEmcalParticle.h"
32 #include "AliLocalRhoParameter.h"
33 #include "AliAnalysisTaskLocalRho.h"
35 ClassImp(AliAnalysisTaskEmcalJetSpectra)
37 //________________________________________________________________________
38 AliAnalysisTaskEmcalJetSpectra::AliAnalysisTaskEmcalJetSpectra() :
39 AliAnalysisTaskEmcalJet("spectra",kFALSE),
44 fHistRhovsdEPLOC(0), fHistRhovsdEPGL(0),
45 fHistJetPtvsdEPLOC(0), fHistJetPtvsdEPGL(0),
46 fHistRhovsEPLOC(0), fHistRhovsEPGL(0),
47 fHistJetPtvsEPLOC(0), fHistJetPtvsEPGL(0),
48 fHistCorJetPt(0), fHistCorJetPtGL(0)
50 // Default constructor.
51 for (Int_t i = 0;i<6;++i){
52 fHistJetPtvsTrackPt[i] = 0;
53 fHistRawJetPtvsTrackPt[i] = 0;
59 fHistJetPtvsdEP[i] = 0;
60 fHistJetPtvsdEPBias[i] = 0;
61 fHistJetPtvsEP[i] = 0;
62 fHistJetPtvsEPBias[i] = 0;
64 fHistCorJetPtfromLocalRho[i]= 0;
65 fHistCorJetPtfromGlobalRho[i] = 0;
67 fHistCorJetPtfromLocalRhoIN[i] = 0;
68 fHistCorJetPtfromLocalRhoOUT[i] = 0;
69 fHistCorJetPtfromGlobalRhoIN[i] = 0;
70 fHistCorJetPtfromGlobalRhoOUT[i]= 0;
71 fHistRhodEPcentLOC[i] = 0;
72 fHistRhodEPcentGL[i] = 0;
73 fHistCorJetPtdEPcentLOC[i] = 0;
74 fHistCorJetPtdEPcentGL[i] = 0;
75 fHistRhoEPcentLOC[i] = 0;
76 fHistRhoEPcentGL[i] = 0;
77 fHistCorJetPtEPcentLOC[i] = 0;
78 fHistCorJetPtEPcentGL[i] = 0;
82 SetMakeGeneralHistograms(kTRUE);
86 //________________________________________________________________________
87 AliAnalysisTaskEmcalJetSpectra::AliAnalysisTaskEmcalJetSpectra(const char *name) :
88 AliAnalysisTaskEmcalJet(name,kTRUE),
93 fHistRhovsdEPLOC(0), fHistRhovsdEPGL(0),
94 fHistJetPtvsdEPLOC(0), fHistJetPtvsdEPGL(0),
95 fHistRhovsEPLOC(0), fHistRhovsEPGL(0),
96 fHistJetPtvsEPLOC(0), fHistJetPtvsEPGL(0),
97 fHistCorJetPt(0), fHistCorJetPtGL(0)
99 for (Int_t i = 0;i<6;++i){
100 fHistJetPtvsTrackPt[i] = 0;
101 fHistRawJetPtvsTrackPt[i] = 0;
107 fHistJetPtvsdEP[i] = 0;
108 fHistJetPtvsdEPBias[i] = 0;
109 fHistJetPtvsEP[i] = 0;
110 fHistJetPtvsEPBias[i] = 0;
112 fHistCorJetPtfromLocalRho[i]= 0;
113 fHistCorJetPtfromGlobalRho[i] = 0;
115 fHistCorJetPtfromLocalRhoIN[i] = 0;
116 fHistCorJetPtfromLocalRhoOUT[i] = 0;
117 fHistCorJetPtfromGlobalRhoIN[i] = 0;
118 fHistCorJetPtfromGlobalRhoOUT[i]= 0;
119 fHistRhodEPcentLOC[i] = 0;
120 fHistRhodEPcentGL[i] = 0;
121 fHistCorJetPtdEPcentLOC[i] = 0;
122 fHistCorJetPtdEPcentGL[i] = 0;
123 fHistRhoEPcentLOC[i] = 0;
124 fHistRhoEPcentGL[i] = 0;
125 fHistCorJetPtEPcentLOC[i] = 0;
126 fHistCorJetPtEPcentGL[i] = 0;
130 SetMakeGeneralHistograms(kTRUE);
133 //________________________________________________________________________
134 void AliAnalysisTaskEmcalJetSpectra::UserCreateOutputObjects()
137 if (! fCreateHisto) return;
139 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
141 fHistRhovsCent = new TH2F("RhovsCent", "RhovsCent", 100, 0.0, 100.0, 500, 0, 500);
142 fHistNjetvsCent = new TH2F("NjetvsCent", "NjetvsCent", 100, 0.0, 100.0, 100, 0, 100);
144 fHistGLvsLOCrho = new TH2F("GLvsLOCrho", "GLvsLOCrho", 400, 0.0, 400.0, 400, 0.0, 400.0);
146 fHistRhovsdEPLOC = new TH2F("RhovsdEPLOC", "RhovsdEPLOC",400,0,400, 144,-1*TMath::Pi(),1*TMath::Pi());
147 fHistRhovsdEPGL = new TH2F("RhovsdEPGL", "RhovsdEPGL",400,0,400, 144,-1*TMath::Pi(),1*TMath::Pi());
148 fHistJetPtvsdEPLOC = new TH2F("JetPtvsdEPLOC", "JetPtvsdEPLOC", 500, -250, 250, 144,-1*TMath::Pi(),1*TMath::Pi());
149 fHistJetPtvsdEPGL = new TH2F("JetPtvsdEPGL", "JetPtvsdEPGL", 500, -250, 250, 144,-1*TMath::Pi(),1*TMath::Pi());
150 fHistRhovsEPLOC = new TH2F("RhovsEPLOC", "RhovsEPLOC",400,0,400, 144,-1*TMath::Pi(),1*TMath::Pi());
151 fHistRhovsEPGL = new TH2F("RhovsEPGL", "RhovsEPGL",400,0,400, 144,-1*TMath::Pi(),1*TMath::Pi());
152 fHistJetPtvsEPLOC = new TH2F("JetPtvsEPLOC", "JetPtvsEPLOC", 500, -250, 250, 144,-1*TMath::Pi(),1*TMath::Pi());
153 fHistJetPtvsEPGL = new TH2F("JetPtvsEPGL", "JetPtvsEPGL", 500, -250, 250, 144,-1*TMath::Pi(),1*TMath::Pi());
155 fHistCorJetPtGL = new TH1F("NjetvsCorrJetPtGL", "NjetvsCorrJetPtGL", 500, -250, 250);
156 fHistCorJetPt = new TH1F("NjetvsCorrJetPt", "NjetvsCorrJetPt", 500, -250, 250);
160 for (Int_t i = 0;i<6;++i){
161 name = TString(Form("JetPtvsTrackPt_%i",i));
162 title = TString(Form("Jet pT vs Leading Track pT cent bin %i",i));
163 fHistJetPtvsTrackPt[i] = new TH2F(name,title,1000,-500,500,100,0,100);
164 fOutput->Add(fHistJetPtvsTrackPt[i]);
165 name = TString(Form("RawJetPtvsTrackPt_%i",i));
166 title = TString(Form("Raw Jet pT vs Leading Track pT cent bin %i",i));
167 fHistRawJetPtvsTrackPt[i] = new TH2F(name,title,1000,-500,500,100,0,100);
168 fOutput->Add(fHistRawJetPtvsTrackPt[i]);
169 name = TString(Form("TrackPt_%i",i));
170 title = TString(Form("Track pT cent bin %i",i));
171 fHistTrackPt[i] = new TH1F(name,title,1000,0,200);
172 fOutput->Add(fHistTrackPt[i]);
174 name = TString(Form("EP0_%i",i));
175 title = TString(Form("EP VZero cent bin %i",i));
176 fHistEP0[i] = new TH1F(name,title,100,-TMath::Pi(),TMath::Pi());
177 fOutput->Add(fHistEP0[i]);
178 name = TString(Form("EP0A_%i",i));
179 title = TString(Form("EP VZero cent bin %i",i));
180 fHistEP0A[i] = new TH1F(name,title,100,-TMath::Pi(),TMath::Pi());
181 fOutput->Add(fHistEP0A[i]);
182 name = TString(Form("EP0C_%i",i));
183 title = TString(Form("EP VZero cent bin %i",i));
184 fHistEP0C[i] = new TH1F(name,title,100,-TMath::Pi(),TMath::Pi());
185 fOutput->Add(fHistEP0C[i]);
186 name = TString(Form("EPAvsC_%i",i));
187 title = TString(Form("EP VZero cent bin %i",i));
188 fHistEPAvsC[i] = new TH2F(name,title,100,-TMath::Pi(),TMath::Pi(),100,-TMath::Pi(),TMath::Pi());
189 fOutput->Add(fHistEPAvsC[i]);
190 name = TString(Form("JetPtvsdEP_%i",i));
191 title = TString(Form("Jet pt vs dEP cent bin %i",i));
192 fHistJetPtvsdEP[i] = new TH2F(name,title,1000,-500,500,400,-2*TMath::Pi(),2*TMath::Pi());
193 fOutput->Add(fHistJetPtvsdEP[i]);
194 name = TString(Form("JetPtvsdEPBias_%i",i));
195 title = TString(Form("Bias Jet pt vs dEP cent bin %i",i));
196 fHistJetPtvsdEPBias[i] = new TH2F(name,title,1000,-500,500,400,-2*TMath::Pi(),2*TMath::Pi());
197 fOutput->Add(fHistJetPtvsdEPBias[i]);
198 name = TString(Form("JetPtvsEP_%i",i));
199 title = TString(Form("Jet pt vs EP cent bin %i",i));
200 fHistJetPtvsEP[i] = new TH2F(name,title,1000,-500,500,400,-2*TMath::Pi(),2*TMath::Pi());
201 fOutput->Add(fHistJetPtvsEP[i]);
202 name = TString(Form("JetPtvsEPBias_%i",i));
203 title = TString(Form("Bias Jet pt vs EP cent bin %i",i));
204 fHistJetPtvsEPBias[i] = new TH2F(name,title,1000,-500,500,400,-2*TMath::Pi(),2*TMath::Pi());
205 fOutput->Add(fHistJetPtvsEPBias[i]);
206 name = TString(Form("RhovsEP_%i",i));
207 title = TString(Form("Rho vs EP cent bin %i",i));
208 fHistRhovsEP[i] = new TH2F(name,title,500,0,500,400,-2*TMath::Pi(),2*TMath::Pi());
209 fOutput->Add(fHistRhovsEP[i]);
211 name = TString(Form("NjetvsCorrJetPtfromLocalRho_%i",i));
212 title = TString(Form("Njets vs Corrected jet pT from Local Rho cent bin %i",i));
213 fHistCorJetPtfromLocalRho[i] = new TH1F(name,title, 500, -250,250);
214 fOutput->Add(fHistCorJetPtfromLocalRho[i]);
216 name = TString(Form("NjetvsCorrJetPtfromGlobalRho_%i",i));
217 title = TString(Form("Njets vs Corrected jet pT from Global Rho cent bin %i",i));
218 fHistCorJetPtfromGlobalRho[i] = new TH1F(name,title, 500, -250,250);
219 fOutput->Add(fHistCorJetPtfromGlobalRho[i]);
221 name = TString(Form("NjetvsCorrJetPtfromGlobalRhoIN_%i",i));
222 title = TString(Form("Njets vs Corrected jet pT from Global Rho IN PLANE cent bin %i",i));
223 fHistCorJetPtfromGlobalRhoIN[i] = new TH1F(name,title, 500, -250,250);
224 fOutput->Add(fHistCorJetPtfromGlobalRhoIN[i]);
226 name = TString(Form("NjetvsCorrJetPtfromGlobalRhoOUT_%i",i));
227 title = TString(Form("Njets vs Corrected jet pT from Global Rho OUT PLANE cent bin %i",i));
228 fHistCorJetPtfromGlobalRhoOUT[i] = new TH1F(name,title, 500, -250, 250);
229 fOutput->Add(fHistCorJetPtfromGlobalRhoOUT[i]);
231 name = TString(Form("RhovsdEPcentGLOBAL_%i",i));
232 title = TString(Form("Rho vs delta Event Plane angle for Global Rho cent bin %i",i));
233 fHistRhodEPcentGL[i] = new TH2F(name,title,400,0,400, 144,-1*TMath::Pi(),1*TMath::Pi());
234 fOutput->Add(fHistRhodEPcentGL[i]);
236 name = TString(Form("JePtvsdEPcentGLOBAL_%i",i));
237 title = TString(Form("Jet Pt vs delta Event Plane angle for Global Rho cent bin %i",i));
238 fHistCorJetPtdEPcentGL[i] = new TH2F(name,title, 500, -250, 250, 144,-1*TMath::Pi(),1*TMath::Pi());
239 fOutput->Add(fHistCorJetPtdEPcentGL[i]);
241 name = TString(Form("NjetvsCorrJetPtfromLocalRhoIN_%i",i));
242 title = TString(Form("Njets vs Corrected jet pT from Local Rho IN PLANE cent bin %i",i));
243 fHistCorJetPtfromLocalRhoIN[i] = new TH1F(name,title, 500, -250, 250);
244 fOutput->Add(fHistCorJetPtfromLocalRhoIN[i]);
246 name = TString(Form("NjetvsCorrJetPtfromLocalRhoOUT_%i",i));
247 title = TString(Form("Njets vs Corrected jet pT from Local Rho OUT PLANE cent bin %i",i));
248 fHistCorJetPtfromLocalRhoOUT[i] = new TH1F(name,title, 500, -250, 250);
249 fOutput->Add(fHistCorJetPtfromLocalRhoOUT[i]);
251 name = TString(Form("RhovsdEPcentLOCAL_%i",i));
252 title = TString(Form("Rho vs delta Event Plane angle for Local Rho cent bin %i",i));
253 fHistRhodEPcentLOC[i] = new TH2F(name,title,400,0,400, 144,-1*TMath::Pi(),1*TMath::Pi());
254 fOutput->Add(fHistRhodEPcentLOC[i]);
256 name = TString(Form("JetPtvsdEPcentLOCAL_%i",i));
257 title = TString(Form("Jet Pt vs delta Event Plane angle for Local Rho cent bin %i",i));
258 fHistCorJetPtdEPcentLOC[i] = new TH2F(name,title, 500, -250, 250, 144,-1*TMath::Pi(),1*TMath::Pi());
259 fOutput->Add(fHistCorJetPtdEPcentLOC[i]);
262 name = TString(Form("RhovsEPcentGLOBAL_%i",i));
263 title = TString(Form("Rho vs Event Plane angle for Global Rho cent bin %i",i));
264 fHistRhoEPcentGL[i] = new TH2F(name,title,400,0,400, 144,-1*TMath::Pi(),1*TMath::Pi());
265 fOutput->Add(fHistRhoEPcentGL[i]);
267 name = TString(Form("RhovsEPcentLOCAL_%i",i));
268 title = TString(Form("Rho vs Event Plane angle for Local Rho cent bin %i",i));
269 fHistRhoEPcentLOC[i] = new TH2F(name,title,400,0,400, 144,-1*TMath::Pi(),1*TMath::Pi());
270 fOutput->Add(fHistRhoEPcentLOC[i]);
272 name = TString(Form("JetPtvsEPcentLOCAL_%i",i));
273 title = TString(Form("Jet Pt vs Event Plane angle for Local Rho cent bin %i",i));
274 fHistCorJetPtEPcentLOC[i] = new TH2F(name,title, 500, -250, 250, 144,-1*TMath::Pi(),1*TMath::Pi());
275 fOutput->Add(fHistCorJetPtEPcentLOC[i]);
278 name = TString(Form("JetPtvsEPcentGLOBAL_%i",i));
279 title = TString(Form("Jet Pt vs Event Plane angle for Global Rho cent bin %i",i));
280 fHistCorJetPtEPcentGL[i] = new TH2F(name,title, 500, -250, 250, 144,-1*TMath::Pi(),1*TMath::Pi());
281 fOutput->Add(fHistCorJetPtEPcentGL[i]);
286 fOutput->Add(fHistRhovsCent);
287 fOutput->Add(fHistNjetvsCent);
289 fOutput->Add(fHistGLvsLOCrho);
291 fOutput->Add(fHistRhovsdEPLOC);
292 fOutput->Add(fHistRhovsdEPGL);
293 fOutput->Add(fHistJetPtvsdEPLOC);
294 fOutput->Add(fHistJetPtvsdEPGL);
296 fOutput->Add(fHistRhovsEPLOC);
297 fOutput->Add(fHistJetPtvsEPLOC);
299 fOutput->Add(fHistCorJetPtGL);
300 fOutput->Add(fHistCorJetPt);
301 fOutput->Add(fHistRhovsEPGL);
302 fOutput->Add(fHistJetPtvsEPGL);
304 PostData(1, fOutput);
307 //________________________________________________________________________
309 Int_t AliAnalysisTaskEmcalJetSpectra::GetCentBin(Double_t cent) const
311 // Get centrality bin.
314 if (cent>=0 && cent<10)
316 else if (cent>=10 && cent<20)
318 else if (cent>=20 && cent<30)
320 else if (cent>=30 && cent<40)
322 else if (cent>=40 && cent<50)
324 else if (cent>=50 && cent<90)
329 //________________________________________________________________________
331 Float_t AliAnalysisTaskEmcalJetSpectra:: RelativePhi(Double_t mphi,Double_t vphi) const
333 if (vphi < -1*TMath::Pi()) vphi += (2*TMath::Pi());
334 else if (vphi > TMath::Pi()) vphi -= (2*TMath::Pi());
335 if (mphi < -1*TMath::Pi()) mphi += (2*TMath::Pi());
336 else if (mphi > TMath::Pi()) mphi -= (2*TMath::Pi());
337 double dphi = mphi-vphi;
338 if (dphi < -1*TMath::Pi()) dphi += (2*TMath::Pi());
339 else if (dphi > TMath::Pi()) dphi -= (2*TMath::Pi());
341 return dphi;//dphi in [-Pi, Pi]
345 //________________________________________________________________________
346 Bool_t AliAnalysisTaskEmcalJetSpectra::Run()
348 Int_t centbin = GetCentBin(fCent);
349 //for pp analyses we will just use the first centrality bin
356 const Int_t nTrack = fTracks->GetEntriesFast();
357 for (int i = 0;i<nTrack;i++){
358 AliVParticle *track = static_cast<AliVParticle*>(fTracks->At(i));
361 fHistTrackPt[centbin]->Fill(track->Pt());
365 AliWarning(Form("%s: No LocalRho object found, attempting to get it from Event based on name!",GetName()));
366 fLocalRho = GetLocalRhoFromEvent(fLocalRhoName);
370 fHistEP0[centbin]->Fill(fEPV0);
371 fHistEP0A[centbin]->Fill(fEPV0A);
372 fHistEP0C[centbin]->Fill(fEPV0C);
373 fHistEPAvsC[centbin]->Fill(fEPV0A,fEPV0C);
374 fRho = GetRhoFromEvent(fRhoName);
375 fRhoVal = fRho->GetVal();
376 fHistRhovsCent->Fill(fCent,fRhoVal);
377 fHistRhovsEP[centbin]->Fill(fRhoVal,fEPV0);
378 const Int_t Njets = fJets->GetEntriesFast();
381 for (Int_t iJets = 0; iJets < Njets; ++iJets) {
382 AliEmcalJet *jet = static_cast<AliEmcalJet*>(fJets->At(iJets));
389 if (jet->MaxTrackPt()>100)
391 if (! AcceptJet(jet))
393 // jets.push_back(jet);
395 Double_t jetPt = -500;
396 jetPt = jet->Pt()-jet->Area()*fRhoVal;
397 fHistJetPtvsTrackPt[centbin]->Fill(jetPt,jet->MaxTrackPt());
398 fHistRawJetPtvsTrackPt[centbin]->Fill(jet->Pt(),jet->MaxTrackPt());
399 fHistJetPtvsdEP[centbin]->Fill(jetPt,RelativePhi((fEPV0+TMath::Pi()),jet->Phi()));
400 fHistJetPtvsEP[centbin]->Fill(jetPt,fEPV0);
402 // get local rho value
403 fLocalRhoVal = fLocalRho->GetLocalVal(jet->Phi(), 0.2);
404 Double_t jetPtLocal = jet->Pt() - jet->Area()*fLocalRhoVal;
406 // calculate relative angle between jet and event plane
407 Float_t dEP = -500; // initialize angle between jet and event plane
408 dEP = RelativeEPJET(jet->Phi(),fEPV0);
410 fHistCorJetPtfromLocalRho[centbin]->Fill(jetPtLocal);
411 fHistCorJetPtfromGlobalRho[centbin]->Fill(jetPt);
413 fHistRhodEPcentLOC[centbin]->Fill(fLocalRhoVal,dEP);
415 fHistRhovsdEPLOC->Fill(fLocalRhoVal,dEP);
416 fHistJetPtvsdEPLOC->Fill(jetPtLocal,dEP);
418 fHistRhoEPcentGL[centbin]->Fill(fRhoVal,fEPV0);
419 fHistRhoEPcentLOC[centbin]->Fill(fLocalRhoVal,fEPV0);
421 fHistCorJetPtEPcentGL[centbin]->Fill(jetPt,fEPV0);
422 fHistCorJetPtEPcentLOC[centbin]->Fill(jetPt,fEPV0);
424 fHistRhovsEPGL->Fill(fRhoVal,fEPV0);
425 fHistRhovsEPLOC->Fill(fLocalRhoVal,fEPV0);
426 fHistJetPtvsEPGL->Fill(jetPt,fEPV0);
427 fHistJetPtvsEPLOC->Fill(jetPtLocal,fEPV0);
429 fHistCorJetPt->Fill(jetPtLocal);
430 fHistCorJetPtGL->Fill(jetPt);
432 fHistGLvsLOCrho->Fill(fRhoVal,fLocalRhoVal);
434 // apply max track bias
435 if (jet->MaxTrackPt()>5.0){
436 fHistJetPtvsdEPBias[centbin]->Fill(jetPt,RelativePhi((fEPV0+TMath::Pi()),jet->Phi()));
437 fHistJetPtvsEPBias[centbin]->Fill(jetPt,fEPV0);
440 // in plane and out of plane histo's
441 if( dEP>0 && dEP<=(TMath::Pi()/6) ){
442 // we are IN plane, lets fill some histo's
443 fHistCorJetPtfromLocalRhoIN[centbin]->Fill(jetPtLocal);
444 fHistCorJetPtfromGlobalRhoIN[centbin]->Fill(jetPt);
445 }else if( dEP>(TMath::Pi()/3) && dEP<=(TMath::Pi()/2) ){
446 // we are OUT of PLANE, lets fill some histo's
447 fHistCorJetPtfromLocalRhoOUT[centbin]->Fill(jetPtLocal);
448 fHistCorJetPtfromGlobalRhoOUT[centbin]->Fill(jetPt);
453 fHistNjetvsCent->Fill(fCent,NjetAcc);
458 //_________________________________________________________________________
459 Float_t AliAnalysisTaskEmcalJetSpectra:: RelativeEPJET(Double_t jetAng, Double_t EPAng) const
460 { // function to calculate angle between jet and EP in the 1st quadrant (0,Pi/2)
461 Double_t dphi = (EPAng - jetAng);
463 // ran into trouble with a few dEP<-Pi so trying this...
464 if( dphi<-1*TMath::Pi() ){
465 dphi = dphi + 1*TMath::Pi();
468 if( (dphi>0) && (dphi<1*TMath::Pi()/2) ){
469 // Do nothing! we are in quadrant 1
470 }else if( (dphi>1*TMath::Pi()/2) && (dphi<1*TMath::Pi()) ){
471 dphi = 1*TMath::Pi() - dphi;
472 }else if( (dphi<0) && (dphi>-1*TMath::Pi()/2) ){
474 }else if( (dphi<-1*TMath::Pi()/2) && (dphi>-1*TMath::Pi()) ){
475 dphi = dphi + 1*TMath::Pi();
479 if( dphi < 0 || dphi > TMath::Pi()/2 )
480 AliWarning(Form("%s: dPHI is outside of restricted range: [0,Pi/2]",GetName()));
482 return dphi; // dphi in [0, Pi/2]