1 #ifndef HPARTICLEEVTCHARABK_H
2 #define HPARTICLEEVTCHARABK_H
16 #include "TProfile2D.h"
19 #include "TGraphErrors.h"
29 #include "hrootsource.h"
30 #include "hiterator.h"
44 #include "hcategory.h"
83 kNumCentralityEstimator
88 if(e ==kTOFRPC)
return 500;
89 else if(e==kTOF)
return 500;
90 else if(e==kRPC)
return 500;
91 else if(e==kTOFRPCtot)
return 500;
92 else if(e==kTOFtot)
return 500;
93 else if(e==kRPCtot)
return 500;
94 else if(e==kSelectedParticleCand)
return 500;
95 else if(e==kSelectedParticleCandCorr)
return 500;
96 else if(e==kSelectedParticleCandSecNorm)
return 500;
97 else if(e==kSelectedParticleCandNorm)
return 500;
98 else if(e==kSelectedParticleCandCorrPerWire)
return 500;
99 else if(e==kPrimaryParticleCand)
return 500;
100 else if(e==kMdcWires)
return 1000;
101 else if(e==kMdcWiresOuterMod)
return 1000;
102 else if(e==kFWSumChargeSpec)
return 1000;
103 else if(e==kFWSumChargeZ)
return 500;
104 else if(e==kDirectivity)
return 1000;
105 else if(e==kRatioEtEz)
return 1000;
106 else if(e==kEt)
return 1000;
112 if(e ==kTOFRPC)
return 500;
113 else if(e==kTOF)
return 500;
114 else if(e==kRPC)
return 500;
115 else if(e==kTOFRPCtot)
return 500;
116 else if(e==kTOFtot)
return 500;
117 else if(e==kRPCtot)
return 500;
118 else if(e==kSelectedParticleCand)
return 500;
119 else if(e==kSelectedParticleCandCorr)
return 500;
120 else if(e==kSelectedParticleCandSecNorm)
return 50;
121 else if(e==kSelectedParticleCandNorm)
return 50;
122 else if(e==kSelectedParticleCandCorrPerWire)
return 500;
123 else if(e==kPrimaryParticleCand)
return 500;
124 else if(e==kMdcWires)
return 10000;
125 else if(e==kMdcWiresOuterMod)
return 10000;
126 else if(e==kFWSumChargeSpec)
return 10000;
127 else if(e==kFWSumChargeZ)
return 500;
128 else if(e==kDirectivity)
return 3;
129 else if(e==kRatioEtEz)
return 3;
130 else if(e==kEt)
return 30000;
136 if(e ==kTOFRPC)
return "TOFRPC";
137 else if(e==kTOF)
return "TOF";
138 else if(e==kRPC)
return "RPC";
139 else if(e==kTOFRPCtot)
return "TOFRPCtot";
140 else if(e==kTOFtot)
return "TOFtot";
141 else if(e==kRPCtot)
return "RPCtot";
142 else if(e==kSelectedParticleCand)
return "SelectedParticleCand";
143 else if(e==kSelectedParticleCandCorr)
return "SelectedParticleCandCorr";
144 else if(e==kSelectedParticleCandSecNorm)
return "SelectedParticleCandSecNorm";
145 else if(e==kSelectedParticleCandNorm)
return "SelectedParticleCandNorm";
146 else if(e==kSelectedParticleCandCorrPerWire)
return "SelectedParticleCandCorrPerWire";
147 else if(e==kPrimaryParticleCand)
return "PrimaryParticleCand";
148 else if(e==kMdcWires)
return "MdcWires";
149 else if(e==kMdcWiresOuterMod)
return "MdcWiresOuterMod";
150 else if(e==kFWSumChargeSpec)
return "FWSumChargeSpec";
151 else if(e==kFWSumChargeZ)
return "FWSumChargeZ";
152 else if(e==kDirectivity)
return "Directivity";
153 else if(e==kRatioEtEz)
return "RatioEtEz";
154 else if(e==kEt)
return "Et";
160 if(s.CompareTo(
"TOFRPC")==0 || s.CompareTo(
"TOFRPCtimecut")==0)
return kTOFRPC;
161 else if(s.CompareTo(
"TOF")==0 || s.CompareTo(
"TOFtimecut")==0)
return kTOF;
162 else if(s.CompareTo(
"RPC")==0 || s.CompareTo(
"RPCtimecut")==0)
return kRPC;
163 else if(s.CompareTo(
"TOFRPCtot")==0)
return kTOFRPCtot;
164 else if(s.CompareTo(
"TOFtot")==0)
return kTOFtot;
165 else if(s.CompareTo(
"RPCtot")==0)
return kRPCtot;
166 else if(s.CompareTo(
"SelectedParticleCand")==0)
return kSelectedParticleCand;
167 else if(s.CompareTo(
"SelectedParticleCandCorr")==0)
return kSelectedParticleCandCorr;
168 else if(s.CompareTo(
"SelectedParticleCandSecNorm")==0)
return kSelectedParticleCandSecNorm;
169 else if(s.CompareTo(
"SelectedParticleCandNorm")==0)
return kSelectedParticleCandNorm;
170 else if(s.CompareTo(
"SelectedParticleCandCorrPerWire")==0)
return kSelectedParticleCandCorrPerWire;
171 else if(s.CompareTo(
"PrimaryParticleCand")==0)
return kPrimaryParticleCand;
172 else if(s.CompareTo(
"MdcWires")==0)
return kMdcWires;
173 else if(s.CompareTo(
"MdcWiresOuterMod")==0)
return kMdcWiresOuterMod;
174 else if(s.CompareTo(
"FWSumChargeSpec")==0)
return kFWSumChargeSpec;
175 else if(s.CompareTo(
"FWSumChargeZ")==0)
return kFWSumChargeZ;
176 else if(s.CompareTo(
"Directivity")==0)
return kDirectivity;
177 else if(s.CompareTo(
"RatioEtEz")==0)
return kRatioEtEz;
178 else if(s.CompareTo(
"Et")==0)
return kEt;
179 else return kNumCentralityEstimator;
199 if(e==k10)
return "10pc";
200 else if(e==k5)
return "5pc";
201 else if(e==k2)
return "2pc";
202 else if(e==k1)
return "1pc";
203 else if(e==k13)
return "13pc";
204 else if(e==k15)
return "15pc";
205 else if(e==k20)
return "20pc";
206 else if(e==k1040)
return "1040class";
207 else if(e==kFOPI)
return "FOPI";
213 if(e==k10)
return 10. ;
214 else if(e==k5)
return 5. ;
215 else if(e==k2)
return 2. ;
216 else if(e==k1)
return 1. ;
217 else if(e==k13)
return 13. ;
218 else if(e==k15)
return 15. ;
219 else if(e==k20)
return 20. ;
220 else if(e==k1040)
return 0. ;
221 else if(e==kFOPI)
return 0. ;
226 kNoCorrection = 0x00,
231 kWidthEqualization = 0x10,
233 kWeightCharge = 0x40,
236 kScalingFW = kScaleFW,
237 kReCentering = kReCenter,
238 kScaling = kWidthEqualization,
239 kFlattening = kFlatten,
240 kRotation = kFlatten,
242 kDefault = kShiftFW|kWeightCharge|kRotation
248 if(e==kNoCorrection)
return "NoCorrection";
250 if(isFlagSet(kSmear,e) ) s +=
"Smear";
251 if(isFlagSet(kShiftFW,e) ) s +=
"ShifFW";
252 if(isFlagSet(kScaleFW,e) ) s +=
"ScalFW";
253 if(isFlagSet(kReCenter,e) ) s +=
"Recent";
254 if(isFlagSet(kScaling,e) ) s +=
"Scale";
255 if(isFlagSet(kFlattening,e) ) s +=
"Flatt";
256 if(isFlagSet(kWeightCharge,e) ) s +=
"WCharge";
257 if(isFlagSet(kWeightTheta,e) ) s +=
"WTheta";
292 kNumEventPlaneParameter
297 if(e==kFWx)
return "FWx" ;
298 else if(e==kFWy )
return "FWy" ;
299 else if(e==kQx )
return "Qx" ;
300 else if(e==kQy )
return "Qy" ;
301 else if(e==kQxWCharge )
return "QxWCharge" ;
302 else if(e==kQyWCharge )
return "QyWCharge" ;
303 else if(e==kQx2 )
return "Qx2" ;
304 else if(e==kQy2 )
return "Qy2" ;
305 else if(e==kQx2WCharge )
return "Qx2WCharge" ;
306 else if(e==kQy2WCharge )
return "Qy2WCharge" ;
308 else if(e==kFourierC1 )
return "FourierC1" ;
309 else if(e==kFourierC2 )
return "FourierC2" ;
310 else if(e==kFourierC3 )
return "FourierC3" ;
311 else if(e==kFourierC4 )
return "FourierC4" ;
312 else if(e==kFourierC5 )
return "FourierC5" ;
313 else if(e==kFourierC6 )
return "FourierC6" ;
314 else if(e==kFourierC7 )
return "FourierC7" ;
315 else if(e==kFourierC8 )
return "FourierC8" ;
316 else if(e==kFourierS1 )
return "FourierS1" ;
317 else if(e==kFourierS2 )
return "FourierS2" ;
318 else if(e==kFourierS3 )
return "FourierS3" ;
319 else if(e==kFourierS4 )
return "FourierS4" ;
320 else if(e==kFourierS5 )
return "FourierS5" ;
321 else if(e==kFourierS6 )
return "FourierS6" ;
322 else if(e==kFourierS7 )
return "FourierS7" ;
323 else if(e==kFourierS8 )
return "FourierS8" ;
324 else if(e==kResolution )
return "Resolution" ;
325 else if(e==kResolutionWCharge)
return "ResolutionWCharge";
326 else if(e==kChi )
return "Chi" ;
333 if(s.CompareTo(
"FWx")==0)
return kFWx;
334 else if(s.CompareTo(
"FWy")==0)
return kFWy;
335 else if(s.CompareTo(
"Qx")==0)
return kQx;
336 else if(s.CompareTo(
"Qy")==0)
return kQy;
337 else if(s.CompareTo(
"QxWCharge")==0)
return kQxWCharge;
338 else if(s.CompareTo(
"QyWCharge")==0)
return kQyWCharge;
339 else if(s.CompareTo(
"Qx2")==0)
return kQx2;
340 else if(s.CompareTo(
"Qy2")==0)
return kQy2;
341 else if(s.CompareTo(
"Qx2WCharge")==0)
return kQx2WCharge;
342 else if(s.CompareTo(
"Qy2WCharge")==0)
return kQy2WCharge;
343 else if(s.CompareTo(
"FourierC1")==0)
return kFourierC1;
344 else if(s.CompareTo(
"FourierC2")==0)
return kFourierC2;
345 else if(s.CompareTo(
"FourierC3")==0)
return kFourierC3;
346 else if(s.CompareTo(
"FourierC4")==0)
return kFourierC4;
347 else if(s.CompareTo(
"FourierC5")==0)
return kFourierC5;
348 else if(s.CompareTo(
"FourierC6")==0)
return kFourierC6;
349 else if(s.CompareTo(
"FourierC7")==0)
return kFourierC7;
350 else if(s.CompareTo(
"FourierC8")==0)
return kFourierC8;
351 else if(s.CompareTo(
"FourierS1")==0)
return kFourierS1;
352 else if(s.CompareTo(
"FourierS2")==0)
return kFourierS2;
353 else if(s.CompareTo(
"FourierS3")==0)
return kFourierS3;
354 else if(s.CompareTo(
"FourierS4")==0)
return kFourierS4;
355 else if(s.CompareTo(
"FourierS5")==0)
return kFourierS5;
356 else if(s.CompareTo(
"FourierS6")==0)
return kFourierS6;
357 else if(s.CompareTo(
"FourierS7")==0)
return kFourierS7;
358 else if(s.CompareTo(
"FourierS8")==0)
return kFourierS8;
359 else if(s.CompareTo(
"Resolution")==0)
return kResolution;
360 else if(s.CompareTo(
"ResolutionWCharge")==0)
return kResolutionWCharge;
361 else if(s.CompareTo(
"Chi")==0)
return kChi;
362 else return kNumEventPlaneParameter;
393 SimpleQVector(Int_t se=0, Float_t
phi=-1., Float_t w1=1., Float_t w2=1., UInt_t f=kNoCorrection){
403 void Set(Float_t x, Float_t y, Float_t w1=1., Float_t w2=1.)
404 { fPhi = TVector2::Phi_0_2pi( TMath::Pi()+TMath::ATan2(-y,-x) );fWeight1 = w1;fWeight2 = w2;}
405 void SetOrg(Float_t x, Float_t y) { fPhiOrg = TVector2::Phi_0_2pi( TMath::Pi()+TMath::ATan2(-y,-x) );}
410 void Rotate(Float_t psi) { fPhi = TVector2::Phi_0_2pi( fPhi+psi );}
418 Float_t
Phi() {
return fPhi;}
421 Float_t
X() {
return TMath::Cos(fPhi);}
422 Float_t
Y() {
return TMath::Sin(fPhi);}
423 Float_t
XOrg() {
return TMath::Cos(fPhiOrg);}
424 Float_t
YOrg() {
return TMath::Sin(fPhiOrg);}
428 printf(
"Phi: %.5f, PhiOrg: %.5f, Weight1: %.3f, Weight2: %.3f, SubEvent: %d \n",
429 fPhi,fPhiOrg,fWeight1,fWeight2,fSubEvent);
439 fFlag = kNoCorrection;
443 #define MAXFWCELLS 302
454 if(e==kBetaCuts )
return "BetaCuts" ;
455 else if(e==kTimeCuts )
return "TimeCuts" ;
456 else if(e==kChargeCuts )
return "ChargeCuts" ;
461 HParticleEvtChara(
const Text_t* name=
"HParticleEvtChara",
const Text_t* title=
"HParticleEvtChara");
472 Bool_t setParameterFile(TString ParameterFile);
476 Int_t loadDayOfYear();
477 Bool_t loadParameterFile();
478 Bool_t saveParameterFile();
479 Bool_t loadCentralityEstimatorHist();
480 Bool_t addEstimatorHist(TH1F* hist, Float_t fractionXsection=100., UInt_t centE=kTOFRPC, Int_t direction=-1);
481 Bool_t saveCentralityEstimatorHist();
483 Bool_t loadEventPlaneCorrectionHist();
484 Bool_t addEventPlaneCorrectionHist(TProfile2D *hist, UInt_t epParam=kQx);
485 Bool_t saveEventPlaneCorrectionHist();
487 Bool_t loadFWCutValuesHist();
488 Bool_t addFWCutValuesHist(TH1 *hist, Int_t cell, UInt_t eFWCut);
489 Bool_t saveFWCutValuesHist();
495 Float_t getEventWeight();
499 Bool_t PassesCutsFW(
HWallHitSim* wall, UInt_t eFWCut);
501 TH1F* getEventPlaneCorrectionHist(UInt_t flag)
const;
502 Float_t getCorrection(UInt_t flag=kQx);
503 Float_t getCorrectionError(UInt_t flag=kQx);
505 Float_t getSmearValue(Int_t size=1);
506 Float_t getThetaWeight(
HWallHitSim* wall, Float_t min=3.5, Float_t max=8.);
508 vector<Int_t> getFWhits();
510 void printHitArray();
511 void printQVectors();
513 Bool_t fillQVectors(UInt_t EPcorr=kNoCorrection, UInt_t nHarmonic=1);
515 Float_t getCorrectionPhi(Float_t
phi);
516 Float_t getEventPlane(UInt_t EPcorr=kNoCorrection, UInt_t SubEvent=0, UInt_t nHarmonic=1);
517 Float_t getEventPlaneWeight(UInt_t EPcorr=kNoCorrection, UInt_t SubEvent=0, UInt_t nHarmonic=1);
518 Float_t getEventPlaneParameter(UInt_t flag=kQx, Bool_t corr=kFALSE);
521 Int_t getCentralityClass(TString estimator);
522 Int_t getCentralityClass(UInt_t centE=kTOFRPC, UInt_t centC=k10);
523 Float_t getCentralityEstimator(UInt_t centE=kTOFRPC);
524 TH1F* getCentralityClassHist(UInt_t centE=kTOFRPC, UInt_t centC=k10)
const;
526 Bool_t printCentralityClass(TString estimator);
527 Bool_t printCentralityClass(UInt_t centE=kTOFRPC, UInt_t centC=k10);
528 Bool_t printCentralityClass(TH1* htemp);
531 Float_t getCentralityPercentile(TString estimator);
532 Float_t getCentralityPercentile(UInt_t centE=kTOFRPC);
533 TH1F* getCentralityPercentileHist(UInt_t centE=kTOFRPC)
const;
535 Int_t getCentralityClass5(TString estimator);
536 Int_t getCentralityClass10(TString estimator);
539 TH2D* makeEPresolution(TProfile2D* hist, Bool_t calcChi=kFALSE);
540 TH1* makeEPresolution(TH3* hist, Bool_t calcChi=kFALSE);
541 Double_t ModifiedBesselI( Int_t
n , Double_t x)
const;
542 Double_t ComputeResolution( Double_t x, Int_t
n=1 )
const;
543 Double_t FindXi( Double_t res, Double_t prec=1e-6, Int_t
n=1)
const;
545 TH1F* makePercentiles(TH1F* hist, Float_t fractionXsection=100., Int_t direction=-1);
546 Int_t getCentralityClassNbins(UInt_t centC=k10);
547 Float_t* getCentralityClassArray(UInt_t centC=k10);
548 TH1F* makeClasses(TH1F *h, Float_t fractionXsection=100., UInt_t centC=k10, Int_t direction=-1);
551 Int_t getNbins(TString estimator);
552 Int_t getNbins(UInt_t centE=kTOFRPC, UInt_t centC=k10);
553 Float_t* getUpEdgeArray(UInt_t centE=kTOFRPC, UInt_t centC=k10);
554 Float_t* getBinCenterArray(UInt_t centE=kTOFRPC, UInt_t centC=k10);
555 vector<TString> getLabelArray(UInt_t centE=kTOFRPC, UInt_t centC=k10);
558 Int_t getMdcWiresOuterMod();
559 Float_t getSelectedParticleCandSecNorm();
560 Float_t getSelectedParticleCandCorrPerWire();
561 Float_t getFWSumChargeSpec();
562 Float_t getFWSumZ(Int_t minZ=1, Int_t maxZ=99, UInt_t SubEvent=0);
564 Float_t getRatioEtEz();
565 Float_t getDirectivity();
612 inline Bool_t
isFlagSet(UInt_t flag, UInt_t status){
return (flag==(status&flag));}
613 inline Float_t
getPhi(Float_t x, Float_t y){
return TVector2::Phi_0_2pi( TMath::Pi()+TMath::ATan2(-y,-x) );}
TString getStringCentralityClass(UInt_t e)
TString getStringCentralityEstimator(UInt_t e)
Float_t getCentralityClassBinSize(UInt_t e)
UInt_t getCentralityEstimatorFromString(TString s)
vector< TH1 * > fEstimatorHist
Bool_t excludeNoisyFWcells
Float_t getVersion()
destructor
TString getStringEventPlaneCorrection(UInt_t e)
vector< Bool_t > useFWCut
vector< Float_t > fFWmaxBeta
void Set(Float_t x, Float_t y, Float_t w1=1., Float_t w2=1.)
void setReferenceMean(Float_t referenceMean)
void setExcludeNoisyFWcells(Bool_t b=kTRUE)
Float_t getPhi(Float_t x, Float_t y)
HCategory * fParticleEvtInfoCat
vector< Float_t > fFWminCharge
vector< Float_t > fFWminBeta
void SetFlag(UInt_t flag)
void SetSubEvent(Int_t se)
void SetOrg(Float_t x, Float_t y)
HCategory * fParticleCandCat
vector< TH2 * > fEventPlaneCorrectionHist
void setUseFWCut(UInt_t eFWCut, Bool_t b=kTRUE)
Int_t getCentralityEstimatorBinMax(UInt_t e)
vector< Float_t > fFWChargeCuts
Bool_t isFlagSet(UInt_t flag, UInt_t status)
Float_t fReferenceMeanSelTrack
UInt_t fEventPlaneCorrectionFlag
void setPostFix(TString postFix)
TString getStringFWCutValues(UInt_t e)
vector< TH1 * > fCentralityPercentileHist
vector< vector< TH1 * > > fFWCutValuesHist
UInt_t getEventPlaneParameterFromString(TString s)
SimpleQVector(Int_t se=0, Float_t phi=-1., Float_t w1=1., Float_t w2=1., UInt_t f=kNoCorrection)
Int_t getCentralityEstimatorBinSize(UInt_t e)
vector< vector< TH1 * > > fCentralityHist
UInt_t currentEventSeqNumber
TString getStringEventPlaneParameter(UInt_t e)
vector< Int_t > iFWHitvector
vector< SimpleQVector * > arrayOfHits