11 #include "FJ_includes.h"
12 #include "AliJetShape.h"
17 AliFJWrapper(const char *name, const char *title);
18 virtual ~AliFJWrapper();
20 virtual void AddInputVector (Double_t px, Double_t py, Double_t pz, Double_t E, Int_t index = -99999);
21 virtual void AddInputVector (const fastjet::PseudoJet& vec, Int_t index = -99999);
22 virtual void AddInputVectors(const std::vector<fastjet::PseudoJet>& vecs, Int_t offsetIndex = -99999);
23 virtual const char *ClassName() const { return "AliFJWrapper"; }
24 virtual void Clear(const Option_t* /*opt*/ = "");
25 virtual void CopySettingsFrom (const AliFJWrapper& wrapper);
26 virtual void GetMedianAndSigma(Double_t& median, Double_t& sigma, Int_t remove = 0) const;
27 fastjet::ClusterSequenceArea* GetClusterSequence() const { return fClustSeq; }
28 const std::vector<fastjet::PseudoJet> GetInputVectors() const { return fInputVectors; }
29 const std::vector<fastjet::PseudoJet> GetInclusiveJets() const { return fInclusiveJets; }
30 std::vector<fastjet::PseudoJet> GetJetConstituents(UInt_t idx) const;
31 Double_t GetMedianUsedForBgSubtraction() const { return fMedUsedForBgSub; }
32 const char* GetName() const { return fName; }
33 const char* GetTitle() const { return fTitle; }
34 Double_t GetJetArea (UInt_t idx) const;
35 fastjet::PseudoJet GetJetAreaVector (UInt_t idx) const;
36 Double_t GetJetSubtractedPt (UInt_t idx) const;
37 virtual std::vector<double> GetSubtractedJetsPts(Double_t median_pt = -1, Bool_t sorted = kFALSE);
38 Bool_t GetLegacyMode() { return fLegacyMode; }
39 #ifdef FASTJET_VERSION
40 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJetMass() const {return fGenSubtractorInfoJetMass;}
41 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJetAngularity() const {return fGenSubtractorInfoJetAngularity;}
42 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJetpTD() const {return fGenSubtractorInfoJetpTD;}
43 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJetCircularity() const {return fGenSubtractorInfoJetCircularity;}
44 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJetConstituent() const {return fGenSubtractorInfoJetConstituent;}
45 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJetLeSub() const {return fGenSubtractorInfoJetLeSub;}
46 const std::vector<fastjet::PseudoJet> GetConstituentSubtrJets() const { return fConstituentSubtrJets; }
48 virtual std::vector<double> GetGRNumerator() const { return fGRNumerator; }
49 virtual std::vector<double> GetGRDenominator() const { return fGRDenominator; }
50 virtual std::vector<double> GetGRNumeratorSub() const { return fGRNumeratorSub; }
51 virtual std::vector<double> GetGRDenominatorSub()const { return fGRDenominatorSub; }
54 virtual Int_t DoGenericSubtractionJetMass();
55 virtual Int_t DoGenericSubtractionGR(Int_t ijet);
56 virtual Int_t DoGenericSubtractionJetAngularity();
57 virtual Int_t DoGenericSubtractionJetpTD();
58 virtual Int_t DoGenericSubtractionJetCircularity();
59 virtual Int_t DoGenericSubtractionJetConstituent();
60 virtual Int_t DoGenericSubtractionJetLeSub();
61 virtual Int_t DoConstituentSubtraction();
63 void SetStrategy(const fastjet::Strategy &strat) { fStrategy = strat; }
64 void SetAlgorithm(const fastjet::JetAlgorithm &algor) { fAlgor = algor; }
65 void SetRecombScheme(const fastjet::RecombinationScheme &scheme) { fScheme = scheme; }
66 void SetAreaType(const fastjet::AreaType &atype) { fAreaType = atype; }
67 void SetNRepeats(Int_t nrepeat) { fNGhostRepeats = nrepeat; }
68 void SetGhostArea(Double_t gharea) { fGhostArea = gharea; }
69 void SetMaxRap(Double_t maxrap) { fMaxRap = maxrap; }
70 void SetR(Double_t r) { fR = r; }
71 void SetGridScatter(Double_t gridSc) { fGridScatter = gridSc; }
72 void SetKtScatter(Double_t ktSc) { fKtScatter = ktSc; }
73 void SetMeanGhostKt(Double_t meankt) { fMeanGhostKt = meankt; }
74 void SetPluginAlgor(Int_t plugin) { fPluginAlgor = plugin; }
75 void SetUseArea4Vector(Bool_t useA4v) { fUseArea4Vector = useA4v; }
76 void SetupAlgorithmfromOpt(const char *option);
77 void SetupAreaTypefromOpt(const char *option);
78 void SetupSchemefromOpt(const char *option);
79 void SetupStrategyfromOpt(const char *option);
80 void SetLegacyMode (Bool_t mode) { fLegacyMode ^= mode; }
82 void SetUseExternalBkg(Bool_t b, Double_t rho, Double_t rhom) { fUseExternalBkg = b; fRho = rho; fRhom = rhom;}
83 void SetRMaxAndStep(Double_t rmax, Double_t dr) {fRMax = rmax; fDRStep = dr; }
88 std::vector<fastjet::PseudoJet> fInputVectors; //!
89 std::vector<fastjet::PseudoJet> fInclusiveJets; //!
90 std::vector<double> fSubtractedJetsPt; //!
91 std::vector<fastjet::PseudoJet> fConstituentSubtrJets; //!
92 fastjet::AreaDefinition *fAreaDef; //!
93 fastjet::VoronoiAreaSpec *fVorAreaSpec; //!
94 fastjet::GhostedAreaSpec *fGhostedAreaSpec; //!
95 fastjet::JetDefinition *fJetDef; //!
96 fastjet::JetDefinition::Plugin *fPlugin; //!
97 fastjet::RangeDefinition *fRange; //!
98 fastjet::ClusterSequenceArea *fClustSeq; //!
99 fastjet::Strategy fStrategy; //!
100 fastjet::JetAlgorithm fAlgor; //!
101 fastjet::RecombinationScheme fScheme; //!
102 fastjet::AreaType fAreaType; //!
103 Int_t fNGhostRepeats; //!
104 Double_t fGhostArea; //!
105 Double_t fMaxRap; //!
107 // no setters for the moment - used default values in the constructor
108 Double_t fGridScatter; //!
109 Double_t fKtScatter; //!
110 Double_t fMeanGhostKt; //!
111 Int_t fPluginAlgor; //!
113 Double_t fMedUsedForBgSub; //!
114 Bool_t fUseArea4Vector; //!
115 #ifdef FASTJET_VERSION
116 fastjet::JetMedianBackgroundEstimator *fBkrdEstimator; //!
117 //from contrib package
118 fastjet::contrib::GenericSubtractor *fGenSubtractor; //!
119 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetMass; //!
120 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoGRNum; //!
121 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoGRDen; //!
122 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetAngularity;
123 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetpTD;
124 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetCircularity;
125 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetConstituent;
126 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetLeSub;
128 Bool_t fLegacyMode; //!
129 Bool_t fUseExternalBkg; //!
130 Double_t fRho; // pT background density
131 Double_t fRhom; // mT background density
133 Double_t fDRStep; //!
134 std::vector<double> fGRNumerator; //!
135 std::vector<double> fGRDenominator; //!
136 std::vector<double> fGRNumeratorSub; //!
137 std::vector<double> fGRDenominatorSub; //!
139 virtual void SubtractBackground(const Double_t median_pt = -1);
143 AliFJWrapper(const AliFJWrapper& wrapper);
144 AliFJWrapper& operator = (const AliFJWrapper& wrapper);
149 #ifdef AliFJWrapper_CXX
150 #undef AliFJWrapper_CXX
153 #pragma GCC system_header
156 namespace fj = fastjet;
158 //_________________________________________________________________________________________________
159 AliFJWrapper::AliFJWrapper(const char *name, const char *title)
165 , fSubtractedJetsPt ( )
166 , fConstituentSubtrJets ( )
169 , fGhostedAreaSpec (0)
174 , fStrategy (fj::Best)
175 , fAlgor (fj::kt_algorithm)
176 , fScheme (fj::BIpt_scheme)
177 , fAreaType (fj::active_area)
184 , fMeanGhostKt (1e-100)
186 , fMedUsedForBgSub (0)
187 , fUseArea4Vector (kFALSE)
188 #ifdef FASTJET_VERSION
191 , fGenSubtractorInfoJetMass ( )
192 , fGenSubtractorInfoGRNum ( )
193 , fGenSubtractorInfoGRDen ( )
194 , fGenSubtractorInfoJetAngularity ( )
195 , fGenSubtractorInfoJetpTD ( )
196 , fGenSubtractorInfoJetCircularity( )
197 , fGenSubtractorInfoJetConstituent ( )
198 , fGenSubtractorInfoJetLeSub ( )
200 , fLegacyMode (false)
201 , fUseExternalBkg (false)
209 , fGRDenominatorSub()
214 //_________________________________________________________________________________________________
215 AliFJWrapper::~AliFJWrapper()
221 delete fGhostedAreaSpec;
226 #ifdef FASTJET_VERSION
227 if (fBkrdEstimator) delete fBkrdEstimator;
228 if (fGenSubtractor) delete fGenSubtractor;
232 //_________________________________________________________________________________________________
233 void AliFJWrapper::CopySettingsFrom(const AliFJWrapper& wrapper)
235 // Copy some settings.
236 // You very often want to keep most of the settings
237 // but change only the algorithm or R - do it after call to this function
239 fStrategy = wrapper.fStrategy;
240 fAlgor = wrapper.fAlgor;
241 fScheme = wrapper.fScheme;
242 fAreaType = wrapper.fAreaType;
243 fNGhostRepeats = wrapper.fNGhostRepeats;
244 fGhostArea = wrapper.fGhostArea;
245 fMaxRap = wrapper.fMaxRap;
247 fGridScatter = wrapper.fGridScatter;
248 fKtScatter = wrapper.fKtScatter;
249 fMeanGhostKt = wrapper.fMeanGhostKt;
250 fPluginAlgor = wrapper.fPluginAlgor;
251 fUseArea4Vector = wrapper.fUseArea4Vector;
252 fLegacyMode = wrapper.fLegacyMode;
253 fUseExternalBkg = wrapper.fUseExternalBkg;
255 fRhom = wrapper.fRhom;
258 //_________________________________________________________________________________________________
259 void AliFJWrapper::Clear(const Option_t */*opt*/)
261 // Simply clear the input vectors.
262 // Make sure done on every event if the instance is reused
263 // Reset the median to zero.
265 fInputVectors.clear();
266 fMedUsedForBgSub = 0;
268 // for the moment brute force delete everything
269 delete fAreaDef; fAreaDef = 0;
270 delete fVorAreaSpec; fVorAreaSpec = 0;
271 delete fGhostedAreaSpec; fGhostedAreaSpec = 0;
272 delete fJetDef; fJetDef = 0;
273 delete fPlugin; fPlugin = 0;
274 delete fRange; fRange = 0;
275 delete fClustSeq; fClustSeq = 0;
276 #ifdef FASTJET_VERSION
277 if (fBkrdEstimator) delete fBkrdEstimator ; fBkrdEstimator = 0;
278 if (fGenSubtractor) delete fGenSubtractor ; fGenSubtractor = 0;
282 //_________________________________________________________________________________________________
283 void AliFJWrapper::AddInputVector(Double_t px, Double_t py, Double_t pz, Double_t E, Int_t index)
285 // Make the input pseudojet.
287 fastjet::PseudoJet inVec(px, py, pz, E);
289 if (index > -99999) {
290 inVec.set_user_index(index);
292 inVec.set_user_index(fInputVectors.size());
295 // add to the fj container of input vectors
296 fInputVectors.push_back(inVec);
299 //_________________________________________________________________________________________________
300 void AliFJWrapper::AddInputVector(const fj::PseudoJet& vec, Int_t index)
302 // Add an input pseudojet.
304 fj::PseudoJet inVec = vec;
306 if (index > -99999) {
307 inVec.set_user_index(index);
309 inVec.set_user_index(fInputVectors.size());
312 // add to the fj container of input vectors
313 fInputVectors.push_back(inVec);
316 //_________________________________________________________________________________________________
317 void AliFJWrapper::AddInputVectors(const std::vector<fj::PseudoJet>& vecs, Int_t offsetIndex)
319 // Add the input from vector of pseudojets.
321 for (UInt_t i = 0; i < vecs.size(); ++i) {
322 fj::PseudoJet inVec = vecs[i];
323 if (offsetIndex > -99999)
324 inVec.set_user_index(fInputVectors.size() + offsetIndex);
325 // add to the fj container of input vectors
326 fInputVectors.push_back(inVec);
330 //_________________________________________________________________________________________________
331 Double_t AliFJWrapper::GetJetArea(UInt_t idx) const
335 Double_t retval = -1; // really wrong area..
336 if ( idx < fInclusiveJets.size() ) {
337 retval = fClustSeq->area(fInclusiveJets[idx]);
339 AliError(Form("[e] ::GetJetArea wrong index: %d",idx));
344 //_________________________________________________________________________________________________
345 fastjet::PseudoJet AliFJWrapper::GetJetAreaVector(UInt_t idx) const
347 // Get the jet area as vector.
348 fastjet::PseudoJet retval;
349 if ( idx < fInclusiveJets.size() ) {
350 retval = fClustSeq->area_4vector(fInclusiveJets[idx]);
352 AliError(Form("[e] ::GetJetArea wrong index: %d",idx));
357 //_________________________________________________________________________________________________
358 std::vector<double> AliFJWrapper::GetSubtractedJetsPts(Double_t median_pt, Bool_t sorted)
360 // Get subtracted jets pTs, returns vector.
362 SubtractBackground(median_pt);
364 if (kTRUE == sorted) {
365 std::sort(fSubtractedJetsPt.begin(), fSubtractedJetsPt.begin());
367 return fSubtractedJetsPt;
370 //_________________________________________________________________________________________________
371 Double_t AliFJWrapper::GetJetSubtractedPt(UInt_t idx) const
373 // Get subtracted jets pTs, returns Double_t.
375 Double_t retval = -99999.; // really wrong pt..
376 if ( idx < fSubtractedJetsPt.size() ) {
377 retval = fSubtractedJetsPt[idx];
382 //_________________________________________________________________________________________________
383 std::vector<fastjet::PseudoJet>
384 AliFJWrapper::GetJetConstituents(UInt_t idx) const
386 // Get jets constituents.
388 std::vector<fastjet::PseudoJet> retval;
390 if ( idx < fInclusiveJets.size() ) {
391 retval = fClustSeq->constituents(fInclusiveJets[idx]);
393 AliError(Form("[e] ::GetJetConstituents wrong index: %d",idx));
399 //_________________________________________________________________________________________________
400 void AliFJWrapper::GetMedianAndSigma(Double_t &median, Double_t &sigma, Int_t remove) const
402 // Get the median and sigma from fastjet.
403 // User can also do it on his own because the cluster sequence is exposed (via a getter)
406 AliError("[e] Run the jfinder first.");
410 Double_t mean_area = 0;
413 fClustSeq->get_median_rho_and_sigma(*fRange, fUseArea4Vector, median, sigma, mean_area);
415 std::vector<fastjet::PseudoJet> input_jets = sorted_by_pt(fClustSeq->inclusive_jets());
416 input_jets.erase(input_jets.begin(), input_jets.begin() + remove);
417 fClustSeq->get_median_rho_and_sigma(input_jets, *fRange, fUseArea4Vector, median, sigma, mean_area);
420 } catch (fj::Error) {
421 AliError(" [w] FJ Exception caught.");
427 //_________________________________________________________________________________________________
428 Int_t AliFJWrapper::Run()
430 // Run the actual jet finder.
432 if (fAreaType == fj::voronoi_area) {
433 // Rfact - check dependence - default is 1.
434 // NOTE: hardcoded variable!
435 fVorAreaSpec = new fj::VoronoiAreaSpec(1.);
436 fAreaDef = new fj::AreaDefinition(*fVorAreaSpec);
438 fGhostedAreaSpec = new fj::GhostedAreaSpec(fMaxRap,
445 fAreaDef = new fj::AreaDefinition(*fGhostedAreaSpec, fAreaType);
448 // this is acceptable by fastjet:
449 fRange = new fj::RangeDefinition(fMaxRap - 0.95 * fR);
451 if (fAlgor == fj::plugin_algorithm) {
452 if (fPluginAlgor == 0) {
454 // NOTE: hardcoded split parameter
455 Double_t overlap_threshold = 0.75; // NOTE: this actually splits a lot: thr/min(pt1,pt2)
456 fPlugin = new fj::SISConePlugin(fR,
458 0, //search of stable cones - zero = until no more
459 1.0); // this should be seed effectively for proto jets
460 fJetDef = new fastjet::JetDefinition(fPlugin);
461 } else if (fPluginAlgor == 1) {
463 // NOTE: hardcoded split parameter
464 Double_t overlap_threshold = 0.75; // NOTE: this actually splits a lot: thr/min(pt1,pt2)
465 fPlugin = new fj::CDFMidPointPlugin(fR,
467 1.0, //search of stable cones - zero = until no more
468 1.0); // this should be seed effectively for proto jets
469 fJetDef = new fastjet::JetDefinition(fPlugin);
471 AliError("[e] Unrecognized plugin number!");
474 fJetDef = new fj::JetDefinition(fAlgor, fR, fScheme, fStrategy);
478 fClustSeq = new fj::ClusterSequenceArea(fInputVectors, *fJetDef, *fAreaDef);
479 } catch (fj::Error) {
480 AliError(" [w] FJ Exception caught.");
484 // FJ3 :: Define an JetMedianBackgroundEstimator just in case it will be used
485 #ifdef FASTJET_VERSION
486 fBkrdEstimator = new fj::JetMedianBackgroundEstimator(fj::SelectorAbsRapMax(fMaxRap));
489 if (fLegacyMode) { SetLegacyFJ(); } // for FJ 2.x even if fLegacyMode is set, SetLegacyFJ is dummy
492 fInclusiveJets.clear();
493 fInclusiveJets = fClustSeq->inclusive_jets(0.0);
498 //_________________________________________________________________________________________________
499 void AliFJWrapper::SetLegacyFJ()
501 // This methods enable legacy behaviour (FastJet 2.x) when AliROOT is compiled with FastJet 3.x
502 #ifdef FASTJET_VERSION
503 std::cout << "WARNING! Setting FastJet in legacy mode" << std::endl;
504 if (fGhostedAreaSpec) { fGhostedAreaSpec->set_fj2_placement(kTRUE); }
505 if (fBkrdEstimator) {
506 fBkrdEstimator->set_provide_fj2_sigma(kTRUE);
507 fBkrdEstimator->set_use_area_4vector(kFALSE);
512 //_________________________________________________________________________________________________
513 void AliFJWrapper::SubtractBackground(Double_t median_pt)
515 // Subtract the background (specify the value - see below the meaning).
516 // Negative argument means the bg will be determined with the current algorithm
517 // this is the default behavior. Zero is allowed
518 // Note: user may set the switch for area4vector based subtraction.
522 Double_t mean_area = 0;
524 // clear the subtracted jet pt's vector<double>
525 fSubtractedJetsPt.clear();
527 // check what was specified (default is -1)
530 fClustSeq->get_median_rho_and_sigma(*fRange, fUseArea4Vector, median, sigma, mean_area);
534 AliError(" [w] FJ Exception caught.");
537 fMedUsedForBgSub = median;
540 fMedUsedForBgSub = median;
542 // we do not know the sigma in this case
544 if (0.0 == median_pt) {
545 // AliWarning(Form(" [w] Median specified for bg subtraction is ZERO: %f", median_pt )) << endl;
546 fMedUsedForBgSub = 0.;
548 fMedUsedForBgSub = median_pt;
553 for (unsigned i = 0; i < fInclusiveJets.size(); i++) {
554 if ( fUseArea4Vector ) {
555 // subtract the background using the area4vector
556 fj::PseudoJet area4v = fClustSeq->area_4vector(fInclusiveJets[i]);
557 fj::PseudoJet jet_sub = fInclusiveJets[i] - area4v * fMedUsedForBgSub;
558 fSubtractedJetsPt.push_back(jet_sub.perp()); // here we put only the pt of the jet - note: this can be negative
560 // subtract the background using scalars
561 // fj::PseudoJet jet_sub = fInclusiveJets[i] - area * fMedUsedForBgSub_;
562 Double_t area = fClustSeq->area(fInclusiveJets[i]);
563 // standard subtraction
564 Double_t pt_sub = fInclusiveJets[i].perp() - fMedUsedForBgSub * area;
565 fSubtractedJetsPt.push_back(pt_sub); // here we put only the pt of the jet - note: this can be negative
570 //_________________________________________________________________________________________________
571 Int_t AliFJWrapper::DoGenericSubtractionJetMass() {
572 //Do generic subtraction for jet mass
573 #ifdef FASTJET_VERSION
574 if(fUseExternalBkg) fGenSubtractor = new fj::contrib::GenericSubtractor(fRho,fRhom);
575 else fGenSubtractor = new fj::contrib::GenericSubtractor(fBkrdEstimator);
578 AliJetShapeMass shapeMass;
580 // clear the generic subtractor info vector
581 fGenSubtractorInfoJetMass.clear();
582 for (unsigned i = 0; i < fInclusiveJets.size(); i++) {
583 fj::contrib::GenericSubtractorInfo info;
584 if(fInclusiveJets[i].perp()>0.)
585 double subtracted_shape = (*fGenSubtractor)(shapeMass, fInclusiveJets[i], info);
586 fGenSubtractorInfoJetMass.push_back(info);
593 //_________________________________________________________________________________________________
594 Int_t AliFJWrapper::DoGenericSubtractionGR(Int_t ijet) {
595 //Do generic subtraction for jet mass
596 #ifdef FASTJET_VERSION
597 if(fUseExternalBkg) fGenSubtractor = new fj::contrib::GenericSubtractor(fRho,fRhom);
598 else fGenSubtractor = new fj::contrib::GenericSubtractor(fBkrdEstimator);
600 if(ijet>fInclusiveJets.size()) return 0;
602 fGRNumerator.clear();
603 fGRDenominator.clear();
604 fGRNumeratorSub.clear();
605 fGRDenominatorSub.clear();
608 for(Double_t r = 0.; r<fRMax; r+=fDRStep) {
609 AliJetShapeGRNum shapeGRNum(r,fDRStep);
610 AliJetShapeGRDen shapeGRDen(r,fDRStep);
612 // clear the generic subtractor info vector
613 fGenSubtractorInfoGRNum.clear();
614 fGenSubtractorInfoGRDen.clear();
615 fj::contrib::GenericSubtractorInfo infoNum;
616 fj::contrib::GenericSubtractorInfo infoDen;
617 if(fInclusiveJets[ijet].perp()>0.) {
618 double sub_num = (*fGenSubtractor)(shapeGRNum, fInclusiveJets[ijet], infoNum);
619 double sub_den = (*fGenSubtractor)(shapeGRDen, fInclusiveJets[ijet], infoDen);
621 fGenSubtractorInfoGRNum.push_back(infoNum);
622 fGenSubtractorInfoGRDen.push_back(infoDen);
623 fGRNumerator.push_back(infoNum.unsubtracted());
624 fGRDenominator.push_back(infoDen.unsubtracted());
625 fGRNumeratorSub.push_back(infoNum.second_order_subtracted());
626 fGRDenominatorSub.push_back(infoDen.second_order_subtracted());
631 //_________________________________________________________________________________________________
632 Int_t AliFJWrapper::DoGenericSubtractionJetAngularity() {
633 //Do generic subtraction for jet mass
634 #ifdef FASTJET_VERSION
635 if(fUseExternalBkg) fGenSubtractor = new fj::contrib::GenericSubtractor(fRho,fRhom);
636 else fGenSubtractor = new fj::contrib::GenericSubtractor(fBkrdEstimator);
639 AliJetShapeAngularity shapeAngularity;
641 // clear the generic subtractor info vector
642 fGenSubtractorInfoJetAngularity.clear();
643 for (unsigned i = 0; i < fInclusiveJets.size(); i++) {
644 fj::contrib::GenericSubtractorInfo infoAng;
645 if(fInclusiveJets[i].perp()>0.)
646 double subtracted_shape = (*fGenSubtractor)(shapeAngularity, fInclusiveJets[i], infoAng);
647 fGenSubtractorInfoJetAngularity.push_back(infoAng);
653 //_________________________________________________________________________________________________
654 Int_t AliFJWrapper::DoGenericSubtractionJetpTD() {
655 //Do generic subtraction for jet mass
656 #ifdef FASTJET_VERSION
657 if(fUseExternalBkg) fGenSubtractor = new fj::contrib::GenericSubtractor(fRho,fRhom);
658 else fGenSubtractor = new fj::contrib::GenericSubtractor(fBkrdEstimator);
661 AliJetShapepTD shapepTD;
663 // clear the generic subtractor info vector
664 fGenSubtractorInfoJetpTD.clear();
665 for (unsigned i = 0; i < fInclusiveJets.size(); i++) {
666 fj::contrib::GenericSubtractorInfo infopTD;
667 if(fInclusiveJets[i].perp()>0.)
668 double subtracted_shape = (*fGenSubtractor)(shapepTD, fInclusiveJets[i], infopTD);
669 fGenSubtractorInfoJetpTD.push_back(infopTD);
675 //_________________________________________________________________________________________________
676 Int_t AliFJWrapper::DoGenericSubtractionJetCircularity() {
677 //Do generic subtraction for jet mass
678 #ifdef FASTJET_VERSION
679 if(fUseExternalBkg) fGenSubtractor = new fj::contrib::GenericSubtractor(fRho,fRhom);
680 else fGenSubtractor = new fj::contrib::GenericSubtractor(fBkrdEstimator);
683 AliJetShapeCircularity shapecircularity;
685 // clear the generic subtractor info vector
686 fGenSubtractorInfoJetCircularity.clear();
687 for (unsigned i = 0; i < fInclusiveJets.size(); i++) {
688 fj::contrib::GenericSubtractorInfo infoCirc;
689 if(fInclusiveJets[i].perp()>0.)
690 double subtracted_shape = (*fGenSubtractor)(shapecircularity, fInclusiveJets[i], infoCirc);
691 fGenSubtractorInfoJetCircularity.push_back(infoCirc);
698 //_________________________________________________________________________________________________
699 Int_t AliFJWrapper::DoGenericSubtractionJetConstituent() {
700 //Do generic subtraction for jet mass
701 #ifdef FASTJET_VERSION
702 if(fUseExternalBkg) fGenSubtractor = new fj::contrib::GenericSubtractor(fRho,fRhom);
703 else fGenSubtractor = new fj::contrib::GenericSubtractor(fBkrdEstimator);
706 AliJetShapeConstituent shapeconst;
708 // clear the generic subtractor info vector
709 fGenSubtractorInfoJetConstituent.clear();
710 for (unsigned i = 0; i < fInclusiveJets.size(); i++) {
711 fj::contrib::GenericSubtractorInfo infoConst;
712 if(fInclusiveJets[i].perp()>0.)
713 double subtracted_shape = (*fGenSubtractor)(shapeconst, fInclusiveJets[i], infoConst);
714 fGenSubtractorInfoJetConstituent.push_back(infoConst);
720 //_________________________________________________________________________________________________
721 Int_t AliFJWrapper::DoGenericSubtractionJetLeSub() {
722 //Do generic subtraction for jet mass
723 #ifdef FASTJET_VERSION
724 if(fUseExternalBkg) fGenSubtractor = new fj::contrib::GenericSubtractor(fRho,fRhom);
725 else fGenSubtractor = new fj::contrib::GenericSubtractor(fBkrdEstimator);
728 AliJetShapeLeSub shapeLeSub;
730 // clear the generic subtractor info vector
731 fGenSubtractorInfoJetLeSub.clear();
732 for (unsigned i = 0; i < fInclusiveJets.size(); i++) {
733 fj::contrib::GenericSubtractorInfo infoLeSub;
734 if(fInclusiveJets[i].perp()>0.)
735 double subtracted_shape = (*fGenSubtractor)(shapeLeSub, fInclusiveJets[i], infoLeSub);
736 fGenSubtractorInfoJetLeSub.push_back(infoLeSub);
742 //_________________________
745 //_________________________________________________________________________________________________
746 Int_t AliFJWrapper::DoConstituentSubtraction() {
747 //Do constituent subtraction
748 #ifdef FASTJET_VERSION
749 fj::contrib::ConstituentSubtractor *subtractor;
751 subtractor = new fj::contrib::ConstituentSubtractor(fRho,fRhom,kFALSE,kTRUE);
752 else subtractor = new fj::contrib::ConstituentSubtractor(fBkrdEstimator);
754 //clear constituent subtracted jets
755 fConstituentSubtrJets.clear();
756 for (unsigned i = 0; i < fInclusiveJets.size(); i++) {
757 fj::PseudoJet subtracted_jet(0.,0.,0.,0.);
758 if(fInclusiveJets[i].perp()>0.)
759 subtracted_jet = (*subtractor)(fInclusiveJets[i]);
760 fConstituentSubtrJets.push_back(subtracted_jet);
762 if(subtractor) delete subtractor;
768 //_________________________________________________________________________________________________
769 void AliFJWrapper::SetupAlgorithmfromOpt(const char *option)
771 // Setup algorithm from char.
773 std::string opt(option);
775 if (!opt.compare("kt")) fAlgor = fj::kt_algorithm;
776 if (!opt.compare("antikt")) fAlgor = fj::antikt_algorithm;
777 if (!opt.compare("cambridge")) fAlgor = fj::cambridge_algorithm;
778 if (!opt.compare("genkt")) fAlgor = fj::genkt_algorithm;
779 if (!opt.compare("cambridge_passive")) fAlgor = fj::cambridge_for_passive_algorithm;
780 if (!opt.compare("genkt_passive")) fAlgor = fj::genkt_for_passive_algorithm;
781 if (!opt.compare("ee_kt")) fAlgor = fj::ee_kt_algorithm;
782 if (!opt.compare("ee_genkt")) fAlgor = fj::ee_genkt_algorithm;
783 if (!opt.compare("plugin")) fAlgor = fj::plugin_algorithm;
786 //_________________________________________________________________________________________________
787 void AliFJWrapper::SetupAreaTypefromOpt(const char *option)
789 // Setup area type from char.
791 std::string opt(option);
793 if (!opt.compare("active")) fAreaType = fj::active_area;
794 if (!opt.compare("invalid")) fAreaType = fj::invalid_area;
795 if (!opt.compare("active_area_explicit_ghosts")) fAreaType = fj::active_area_explicit_ghosts;
796 if (!opt.compare("one_ghost_passive")) fAreaType = fj::one_ghost_passive_area;
797 if (!opt.compare("passive")) fAreaType = fj::passive_area;
798 if (!opt.compare("voronoi")) fAreaType = fj::voronoi_area;
801 //_________________________________________________________________________________________________
802 void AliFJWrapper::SetupSchemefromOpt(const char *option)
805 // setup scheme from char
808 std::string opt(option);
810 if (!opt.compare("BIpt")) fScheme = fj::BIpt_scheme;
811 if (!opt.compare("BIpt2")) fScheme = fj::BIpt2_scheme;
812 if (!opt.compare("E")) fScheme = fj::E_scheme;
813 if (!opt.compare("pt")) fScheme = fj::pt_scheme;
814 if (!opt.compare("pt2")) fScheme = fj::pt2_scheme;
815 if (!opt.compare("Et")) fScheme = fj::Et_scheme;
816 if (!opt.compare("Et2")) fScheme = fj::Et2_scheme;
819 //_________________________________________________________________________________________________
820 void AliFJWrapper::SetupStrategyfromOpt(const char *option)
822 // Setup strategy from char.
824 std::string opt(option);
826 if (!opt.compare("Best")) fStrategy = fj::Best;
827 if (!opt.compare("N2MinHeapTiled")) fStrategy = fj::N2MinHeapTiled;
828 if (!opt.compare("N2Tiled")) fStrategy = fj::N2Tiled;
829 if (!opt.compare("N2PoorTiled")) fStrategy = fj::N2PoorTiled;
830 if (!opt.compare("N2Plain")) fStrategy = fj::N2Plain;
831 if (!opt.compare("N3Dumb")) fStrategy = fj::N3Dumb;
832 if (!opt.compare("NlnN")) fStrategy = fj::NlnN;
833 if (!opt.compare("NlnN3pi")) fStrategy = fj::NlnN3pi;
834 if (!opt.compare("NlnN4pi")) fStrategy = fj::NlnN4pi;
835 if (!opt.compare("NlnNCam4pi")) fStrategy = fj::NlnNCam4pi;
836 if (!opt.compare("NlnNCam2pi2R")) fStrategy = fj::NlnNCam2pi2R;
837 if (!opt.compare("NlnNCam")) fStrategy = fj::NlnNCam;
838 if (!opt.compare("plugin")) fStrategy = fj::plugin_strategy;