9 #include "FJ_includes.h"
10 #include "AliJetShape.h"
15 AliFJWrapper(const char *name, const char *title);
16 virtual ~AliFJWrapper();
18 virtual void AddInputVector (Double_t px, Double_t py, Double_t pz, Double_t E, Int_t index = -99999);
19 virtual void AddInputVector (const fastjet::PseudoJet& vec, Int_t index = -99999);
20 virtual void AddInputVectors(const std::vector<fastjet::PseudoJet>& vecs, Int_t offsetIndex = -99999);
21 virtual const char *ClassName() const { return "AliFJWrapper"; }
22 virtual void Clear(const Option_t* /*opt*/ = "");
23 virtual void CopySettingsFrom (const AliFJWrapper& wrapper);
24 virtual void GetMedianAndSigma(Double_t& median, Double_t& sigma, Int_t remove = 0) const;
25 fastjet::ClusterSequenceArea* GetClusterSequence() const { return fClustSeq; }
26 const std::vector<fastjet::PseudoJet> GetInputVectors() const { return fInputVectors; }
27 const std::vector<fastjet::PseudoJet> GetInclusiveJets() const { return fInclusiveJets; }
28 std::vector<fastjet::PseudoJet> GetJetConstituents(UInt_t idx) const;
29 Double_t GetMedianUsedForBgSubtraction() const { return fMedUsedForBgSub; }
30 const char* GetName() const { return fName; }
31 const char* GetTitle() const { return fTitle; }
32 Double_t GetJetArea (UInt_t idx) const;
33 fastjet::PseudoJet GetJetAreaVector (UInt_t idx) const;
34 Double_t GetJetSubtractedPt (UInt_t idx) const;
35 virtual std::vector<double> GetSubtractedJetsPts(Double_t median_pt = -1, Bool_t sorted = kFALSE);
36 Bool_t GetLegacyMode() { return fLegacyMode; }
37 #ifdef FASTJET_VERSION
38 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJetMass() const {return fGenSubtractorInfoJetMass ; }
39 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJetAngularity() const {return fGenSubtractorInfoJetAngularity ; }
40 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJetpTD() const {return fGenSubtractorInfoJetpTD ; }
41 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJetCircularity() const {return fGenSubtractorInfoJetCircularity ; }
42 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJetSigma2() const {return fGenSubtractorInfoJetSigma2 ; }
43 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJetConstituent() const {return fGenSubtractorInfoJetConstituent ; }
44 const std::vector<fastjet::contrib::GenericSubtractorInfo> GetGenSubtractorInfoJetLeSub() const {return fGenSubtractorInfoJetLeSub ; }
45 const std::vector<fastjet::PseudoJet> GetConstituentSubtrJets() const {return fConstituentSubtrJets ; }
47 virtual std::vector<double> GetGRNumerator() const { return fGRNumerator ; }
48 virtual std::vector<double> GetGRDenominator() const { return fGRDenominator ; }
49 virtual std::vector<double> GetGRNumeratorSub() const { return fGRNumeratorSub ; }
50 virtual std::vector<double> GetGRDenominatorSub() const { return fGRDenominatorSub ; }
53 virtual Int_t DoGenericSubtractionJetMass();
54 virtual Int_t DoGenericSubtractionGR(Int_t ijet);
55 virtual Int_t DoGenericSubtractionJetAngularity();
56 virtual Int_t DoGenericSubtractionJetpTD();
57 virtual Int_t DoGenericSubtractionJetCircularity();
58 virtual Int_t DoGenericSubtractionJetSigma2();
59 virtual Int_t DoGenericSubtractionJetConstituent();
60 virtual Int_t DoGenericSubtractionJetLeSub();
61 virtual Int_t DoConstituentSubtraction();
63 void SetName(const char* name) { fName = name; }
64 void SetTitle(const char* title) { fTitle = title; }
65 void SetStrategy(const fastjet::Strategy &strat) { fStrategy = strat; }
66 void SetAlgorithm(const fastjet::JetAlgorithm &algor) { fAlgor = algor; }
67 void SetRecombScheme(const fastjet::RecombinationScheme &scheme) { fScheme = scheme; }
68 void SetAreaType(const fastjet::AreaType &atype) { fAreaType = atype; }
69 void SetNRepeats(Int_t nrepeat) { fNGhostRepeats = nrepeat; }
70 void SetGhostArea(Double_t gharea) { fGhostArea = gharea; }
71 void SetMaxRap(Double_t maxrap) { fMaxRap = maxrap; }
72 void SetR(Double_t r) { fR = r; }
73 void SetGridScatter(Double_t gridSc) { fGridScatter = gridSc; }
74 void SetKtScatter(Double_t ktSc) { fKtScatter = ktSc; }
75 void SetMeanGhostKt(Double_t meankt) { fMeanGhostKt = meankt; }
76 void SetPluginAlgor(Int_t plugin) { fPluginAlgor = plugin; }
77 void SetUseArea4Vector(Bool_t useA4v) { fUseArea4Vector = useA4v; }
78 void SetupAlgorithmfromOpt(const char *option);
79 void SetupAreaTypefromOpt(const char *option);
80 void SetupSchemefromOpt(const char *option);
81 void SetupStrategyfromOpt(const char *option);
82 void SetLegacyMode (Bool_t mode) { fLegacyMode ^= mode; }
84 void SetUseExternalBkg(Bool_t b, Double_t rho, Double_t rhom) { fUseExternalBkg = b; fRho = rho; fRhom = rhom;}
85 void SetRMaxAndStep(Double_t rmax, Double_t dr) {fRMax = rmax; fDRStep = dr; }
90 std::vector<fastjet::PseudoJet> fInputVectors; //!
91 std::vector<fastjet::PseudoJet> fInclusiveJets; //!
92 std::vector<double> fSubtractedJetsPt; //!
93 std::vector<fastjet::PseudoJet> fConstituentSubtrJets; //!
94 fastjet::AreaDefinition *fAreaDef; //!
95 fastjet::VoronoiAreaSpec *fVorAreaSpec; //!
96 fastjet::GhostedAreaSpec *fGhostedAreaSpec; //!
97 fastjet::JetDefinition *fJetDef; //!
98 fastjet::JetDefinition::Plugin *fPlugin; //!
99 fastjet::RangeDefinition *fRange; //!
100 fastjet::ClusterSequenceArea *fClustSeq; //!
101 fastjet::Strategy fStrategy; //!
102 fastjet::JetAlgorithm fAlgor; //!
103 fastjet::RecombinationScheme fScheme; //!
104 fastjet::AreaType fAreaType; //!
105 Int_t fNGhostRepeats; //!
106 Double_t fGhostArea; //!
107 Double_t fMaxRap; //!
109 // no setters for the moment - used default values in the constructor
110 Double_t fGridScatter; //!
111 Double_t fKtScatter; //!
112 Double_t fMeanGhostKt; //!
113 Int_t fPluginAlgor; //!
115 Double_t fMedUsedForBgSub; //!
116 Bool_t fUseArea4Vector; //!
117 #ifdef FASTJET_VERSION
118 fastjet::JetMedianBackgroundEstimator *fBkrdEstimator; //!
119 //from contrib package
120 fastjet::contrib::GenericSubtractor *fGenSubtractor; //!
121 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetMass; //!
122 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoGRNum; //!
123 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoGRDen; //!
124 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetAngularity; //!
125 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetpTD; //!
126 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetCircularity; //!
127 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetSigma2; //!
128 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetConstituent; //!
129 std::vector<fastjet::contrib::GenericSubtractorInfo> fGenSubtractorInfoJetLeSub; //!
131 Bool_t fLegacyMode; //!
132 Bool_t fUseExternalBkg; //!
133 Double_t fRho; // pT background density
134 Double_t fRhom; // mT background density
136 Double_t fDRStep; //!
137 std::vector<double> fGRNumerator; //!
138 std::vector<double> fGRDenominator; //!
139 std::vector<double> fGRNumeratorSub; //!
140 std::vector<double> fGRDenominatorSub; //!
142 virtual void SubtractBackground(const Double_t median_pt = -1);
146 AliFJWrapper(const AliFJWrapper& wrapper);
147 AliFJWrapper& operator = (const AliFJWrapper& wrapper);
152 #ifdef AliFJWrapper_CXX
153 #undef AliFJWrapper_CXX
156 #pragma GCC system_header
159 namespace fj = fastjet;
161 //_________________________________________________________________________________________________
162 AliFJWrapper::AliFJWrapper(const char *name, const char *title)
168 , fSubtractedJetsPt ( )
169 , fConstituentSubtrJets ( )
172 , fGhostedAreaSpec (0)
177 , fStrategy (fj::Best)
178 , fAlgor (fj::kt_algorithm)
179 , fScheme (fj::BIpt_scheme)
180 , fAreaType (fj::active_area)
187 , fMeanGhostKt (1e-100)
189 , fMedUsedForBgSub (0)
190 , fUseArea4Vector (kFALSE)
191 #ifdef FASTJET_VERSION
194 , fGenSubtractorInfoJetMass ( )
195 , fGenSubtractorInfoGRNum ( )
196 , fGenSubtractorInfoGRDen ( )
197 , fGenSubtractorInfoJetAngularity ( )
198 , fGenSubtractorInfoJetpTD ( )
199 , fGenSubtractorInfoJetCircularity( )
200 , fGenSubtractorInfoJetSigma2()
201 , fGenSubtractorInfoJetConstituent ( )
202 , fGenSubtractorInfoJetLeSub ( )
204 , fLegacyMode (false)
205 , fUseExternalBkg (false)
213 , fGRDenominatorSub()
218 //_________________________________________________________________________________________________
219 AliFJWrapper::~AliFJWrapper()
225 delete fGhostedAreaSpec;
230 #ifdef FASTJET_VERSION
231 if (fBkrdEstimator) delete fBkrdEstimator;
232 if (fGenSubtractor) delete fGenSubtractor;
236 //_________________________________________________________________________________________________
237 void AliFJWrapper::CopySettingsFrom(const AliFJWrapper& wrapper)
239 // Copy some settings.
240 // You very often want to keep most of the settings
241 // but change only the algorithm or R - do it after call to this function
243 fStrategy = wrapper.fStrategy;
244 fAlgor = wrapper.fAlgor;
245 fScheme = wrapper.fScheme;
246 fAreaType = wrapper.fAreaType;
247 fNGhostRepeats = wrapper.fNGhostRepeats;
248 fGhostArea = wrapper.fGhostArea;
249 fMaxRap = wrapper.fMaxRap;
251 fGridScatter = wrapper.fGridScatter;
252 fKtScatter = wrapper.fKtScatter;
253 fMeanGhostKt = wrapper.fMeanGhostKt;
254 fPluginAlgor = wrapper.fPluginAlgor;
255 fUseArea4Vector = wrapper.fUseArea4Vector;
256 fLegacyMode = wrapper.fLegacyMode;
257 fUseExternalBkg = wrapper.fUseExternalBkg;
259 fRhom = wrapper.fRhom;
262 //_________________________________________________________________________________________________
263 void AliFJWrapper::Clear(const Option_t */*opt*/)
265 // Simply clear the input vectors.
266 // Make sure done on every event if the instance is reused
267 // Reset the median to zero.
269 fInputVectors.clear();
270 fMedUsedForBgSub = 0;
272 // for the moment brute force delete everything
273 delete fAreaDef; fAreaDef = 0;
274 delete fVorAreaSpec; fVorAreaSpec = 0;
275 delete fGhostedAreaSpec; fGhostedAreaSpec = 0;
276 delete fJetDef; fJetDef = 0;
277 delete fPlugin; fPlugin = 0;
278 delete fRange; fRange = 0;
279 delete fClustSeq; fClustSeq = 0;
280 #ifdef FASTJET_VERSION
281 if (fBkrdEstimator) delete fBkrdEstimator ; fBkrdEstimator = 0;
282 if (fGenSubtractor) delete fGenSubtractor ; fGenSubtractor = 0;
286 //_________________________________________________________________________________________________
287 void AliFJWrapper::AddInputVector(Double_t px, Double_t py, Double_t pz, Double_t E, Int_t index)
289 // Make the input pseudojet.
291 fastjet::PseudoJet inVec(px, py, pz, E);
293 if (index > -99999) {
294 inVec.set_user_index(index);
296 inVec.set_user_index(fInputVectors.size());
299 // add to the fj container of input vectors
300 fInputVectors.push_back(inVec);
303 //_________________________________________________________________________________________________
304 void AliFJWrapper::AddInputVector(const fj::PseudoJet& vec, Int_t index)
306 // Add an input pseudojet.
308 fj::PseudoJet inVec = vec;
310 if (index > -99999) {
311 inVec.set_user_index(index);
313 inVec.set_user_index(fInputVectors.size());
316 // add to the fj container of input vectors
317 fInputVectors.push_back(inVec);
320 //_________________________________________________________________________________________________
321 void AliFJWrapper::AddInputVectors(const std::vector<fj::PseudoJet>& vecs, Int_t offsetIndex)
323 // Add the input from vector of pseudojets.
325 for (UInt_t i = 0; i < vecs.size(); ++i) {
326 fj::PseudoJet inVec = vecs[i];
327 if (offsetIndex > -99999)
328 inVec.set_user_index(fInputVectors.size() + offsetIndex);
329 // add to the fj container of input vectors
330 fInputVectors.push_back(inVec);
334 //_________________________________________________________________________________________________
335 Double_t AliFJWrapper::GetJetArea(UInt_t idx) const
339 Double_t retval = -1; // really wrong area..
340 if ( idx < fInclusiveJets.size() ) {
341 retval = fClustSeq->area(fInclusiveJets[idx]);
343 AliError(Form("[e] ::GetJetArea wrong index: %d",idx));
348 //_________________________________________________________________________________________________
349 fastjet::PseudoJet AliFJWrapper::GetJetAreaVector(UInt_t idx) const
351 // Get the jet area as vector.
352 fastjet::PseudoJet retval;
353 if ( idx < fInclusiveJets.size() ) {
354 retval = fClustSeq->area_4vector(fInclusiveJets[idx]);
356 AliError(Form("[e] ::GetJetArea wrong index: %d",idx));
361 //_________________________________________________________________________________________________
362 std::vector<double> AliFJWrapper::GetSubtractedJetsPts(Double_t median_pt, Bool_t sorted)
364 // Get subtracted jets pTs, returns vector.
366 SubtractBackground(median_pt);
368 if (kTRUE == sorted) {
369 std::sort(fSubtractedJetsPt.begin(), fSubtractedJetsPt.begin());
371 return fSubtractedJetsPt;
374 //_________________________________________________________________________________________________
375 Double_t AliFJWrapper::GetJetSubtractedPt(UInt_t idx) const
377 // Get subtracted jets pTs, returns Double_t.
379 Double_t retval = -99999.; // really wrong pt..
380 if ( idx < fSubtractedJetsPt.size() ) {
381 retval = fSubtractedJetsPt[idx];
386 //_________________________________________________________________________________________________
387 std::vector<fastjet::PseudoJet>
388 AliFJWrapper::GetJetConstituents(UInt_t idx) const
390 // Get jets constituents.
392 std::vector<fastjet::PseudoJet> retval;
394 if ( idx < fInclusiveJets.size() ) {
395 retval = fClustSeq->constituents(fInclusiveJets[idx]);
397 AliError(Form("[e] ::GetJetConstituents wrong index: %d",idx));
403 //_________________________________________________________________________________________________
404 void AliFJWrapper::GetMedianAndSigma(Double_t &median, Double_t &sigma, Int_t remove) const
406 // Get the median and sigma from fastjet.
407 // User can also do it on his own because the cluster sequence is exposed (via a getter)
410 AliError("[e] Run the jfinder first.");
414 Double_t mean_area = 0;
417 fClustSeq->get_median_rho_and_sigma(*fRange, fUseArea4Vector, median, sigma, mean_area);
419 std::vector<fastjet::PseudoJet> input_jets = sorted_by_pt(fClustSeq->inclusive_jets());
420 input_jets.erase(input_jets.begin(), input_jets.begin() + remove);
421 fClustSeq->get_median_rho_and_sigma(input_jets, *fRange, fUseArea4Vector, median, sigma, mean_area);
424 } catch (fj::Error) {
425 AliError(" [w] FJ Exception caught.");
431 //_________________________________________________________________________________________________
432 Int_t AliFJWrapper::Run()
434 // Run the actual jet finder.
436 if (fAreaType == fj::voronoi_area) {
437 // Rfact - check dependence - default is 1.
438 // NOTE: hardcoded variable!
439 fVorAreaSpec = new fj::VoronoiAreaSpec(1.);
440 fAreaDef = new fj::AreaDefinition(*fVorAreaSpec);
442 fGhostedAreaSpec = new fj::GhostedAreaSpec(fMaxRap,
449 fAreaDef = new fj::AreaDefinition(*fGhostedAreaSpec, fAreaType);
452 // this is acceptable by fastjet:
453 fRange = new fj::RangeDefinition(fMaxRap - 0.95 * fR);
455 if (fAlgor == fj::plugin_algorithm) {
456 if (fPluginAlgor == 0) {
458 // NOTE: hardcoded split parameter
459 Double_t overlap_threshold = 0.75; // NOTE: this actually splits a lot: thr/min(pt1,pt2)
460 fPlugin = new fj::SISConePlugin(fR,
462 0, //search of stable cones - zero = until no more
463 1.0); // this should be seed effectively for proto jets
464 fJetDef = new fastjet::JetDefinition(fPlugin);
465 } else if (fPluginAlgor == 1) {
467 // NOTE: hardcoded split parameter
468 Double_t overlap_threshold = 0.75; // NOTE: this actually splits a lot: thr/min(pt1,pt2)
469 fPlugin = new fj::CDFMidPointPlugin(fR,
471 1.0, //search of stable cones - zero = until no more
472 1.0); // this should be seed effectively for proto jets
473 fJetDef = new fastjet::JetDefinition(fPlugin);
475 AliError("[e] Unrecognized plugin number!");
478 fJetDef = new fj::JetDefinition(fAlgor, fR, fScheme, fStrategy);
482 fClustSeq = new fj::ClusterSequenceArea(fInputVectors, *fJetDef, *fAreaDef);
483 } catch (fj::Error) {
484 AliError(" [w] FJ Exception caught.");
488 // FJ3 :: Define an JetMedianBackgroundEstimator just in case it will be used
489 #ifdef FASTJET_VERSION
490 fBkrdEstimator = new fj::JetMedianBackgroundEstimator(fj::SelectorAbsRapMax(fMaxRap));
493 if (fLegacyMode) { SetLegacyFJ(); } // for FJ 2.x even if fLegacyMode is set, SetLegacyFJ is dummy
496 fInclusiveJets.clear();
497 fInclusiveJets = fClustSeq->inclusive_jets(0.0);
502 //_________________________________________________________________________________________________
503 void AliFJWrapper::SetLegacyFJ()
505 // This methods enable legacy behaviour (FastJet 2.x) when AliROOT is compiled with FastJet 3.x
506 #ifdef FASTJET_VERSION
507 std::cout << "WARNING! Setting FastJet in legacy mode" << std::endl;
508 if (fGhostedAreaSpec) { fGhostedAreaSpec->set_fj2_placement(kTRUE); }
509 if (fBkrdEstimator) {
510 fBkrdEstimator->set_provide_fj2_sigma(kTRUE);
511 fBkrdEstimator->set_use_area_4vector(kFALSE);
516 //_________________________________________________________________________________________________
517 void AliFJWrapper::SubtractBackground(Double_t median_pt)
519 // Subtract the background (specify the value - see below the meaning).
520 // Negative argument means the bg will be determined with the current algorithm
521 // this is the default behavior. Zero is allowed
522 // Note: user may set the switch for area4vector based subtraction.
526 Double_t mean_area = 0;
528 // clear the subtracted jet pt's vector<double>
529 fSubtractedJetsPt.clear();
531 // check what was specified (default is -1)
534 fClustSeq->get_median_rho_and_sigma(*fRange, fUseArea4Vector, median, sigma, mean_area);
538 AliError(" [w] FJ Exception caught.");
541 fMedUsedForBgSub = median;
544 fMedUsedForBgSub = median;
546 // we do not know the sigma in this case
548 if (0.0 == median_pt) {
549 // AliWarning(Form(" [w] Median specified for bg subtraction is ZERO: %f", median_pt )) << endl;
550 fMedUsedForBgSub = 0.;
552 fMedUsedForBgSub = median_pt;
557 for (unsigned i = 0; i < fInclusiveJets.size(); i++) {
558 if ( fUseArea4Vector ) {
559 // subtract the background using the area4vector
560 fj::PseudoJet area4v = fClustSeq->area_4vector(fInclusiveJets[i]);
561 fj::PseudoJet jet_sub = fInclusiveJets[i] - area4v * fMedUsedForBgSub;
562 fSubtractedJetsPt.push_back(jet_sub.perp()); // here we put only the pt of the jet - note: this can be negative
564 // subtract the background using scalars
565 // fj::PseudoJet jet_sub = fInclusiveJets[i] - area * fMedUsedForBgSub_;
566 Double_t area = fClustSeq->area(fInclusiveJets[i]);
567 // standard subtraction
568 Double_t pt_sub = fInclusiveJets[i].perp() - fMedUsedForBgSub * area;
569 fSubtractedJetsPt.push_back(pt_sub); // here we put only the pt of the jet - note: this can be negative
574 //_________________________________________________________________________________________________
575 Int_t AliFJWrapper::DoGenericSubtractionJetMass() {
576 //Do generic subtraction for jet mass
577 #ifdef FASTJET_VERSION
578 if(fUseExternalBkg) fGenSubtractor = new fj::contrib::GenericSubtractor(fRho,fRhom);
579 else fGenSubtractor = new fj::contrib::GenericSubtractor(fBkrdEstimator);
582 AliJetShapeMass shapeMass;
584 // clear the generic subtractor info vector
585 fGenSubtractorInfoJetMass.clear();
586 for (unsigned i = 0; i < fInclusiveJets.size(); i++) {
587 fj::contrib::GenericSubtractorInfo info;
588 if(fInclusiveJets[i].perp()>0.)
589 double subtracted_shape = (*fGenSubtractor)(shapeMass, fInclusiveJets[i], info);
590 fGenSubtractorInfoJetMass.push_back(info);
596 //_________________________________________________________________________________________________
597 Int_t AliFJWrapper::DoGenericSubtractionGR(Int_t ijet) {
598 //Do generic subtraction for jet mass
599 #ifdef FASTJET_VERSION
600 if(fUseExternalBkg) fGenSubtractor = new fj::contrib::GenericSubtractor(fRho,fRhom);
601 else fGenSubtractor = new fj::contrib::GenericSubtractor(fBkrdEstimator);
603 if(ijet>fInclusiveJets.size()) return 0;
605 fGRNumerator.clear();
606 fGRDenominator.clear();
607 fGRNumeratorSub.clear();
608 fGRDenominatorSub.clear();
611 for(Double_t r = 0.; r<fRMax; r+=fDRStep) {
612 AliJetShapeGRNum shapeGRNum(r,fDRStep);
613 AliJetShapeGRDen shapeGRDen(r,fDRStep);
615 // clear the generic subtractor info vector
616 fGenSubtractorInfoGRNum.clear();
617 fGenSubtractorInfoGRDen.clear();
618 fj::contrib::GenericSubtractorInfo infoNum;
619 fj::contrib::GenericSubtractorInfo infoDen;
620 if(fInclusiveJets[ijet].perp()>0.) {
621 double sub_num = (*fGenSubtractor)(shapeGRNum, fInclusiveJets[ijet], infoNum);
622 double sub_den = (*fGenSubtractor)(shapeGRDen, fInclusiveJets[ijet], infoDen);
624 fGenSubtractorInfoGRNum.push_back(infoNum);
625 fGenSubtractorInfoGRDen.push_back(infoDen);
626 fGRNumerator.push_back(infoNum.unsubtracted());
627 fGRDenominator.push_back(infoDen.unsubtracted());
628 fGRNumeratorSub.push_back(infoNum.second_order_subtracted());
629 fGRDenominatorSub.push_back(infoDen.second_order_subtracted());
634 //_________________________________________________________________________________________________
635 Int_t AliFJWrapper::DoGenericSubtractionJetAngularity() {
636 //Do generic subtraction for jet mass
637 #ifdef FASTJET_VERSION
638 if(fUseExternalBkg) fGenSubtractor = new fj::contrib::GenericSubtractor(fRho,fRhom);
639 else fGenSubtractor = new fj::contrib::GenericSubtractor(fBkrdEstimator);
642 AliJetShapeAngularity shapeAngularity;
644 // clear the generic subtractor info vector
645 fGenSubtractorInfoJetAngularity.clear();
646 for (unsigned i = 0; i < fInclusiveJets.size(); i++) {
647 fj::contrib::GenericSubtractorInfo infoAng;
648 if(fInclusiveJets[i].perp()>0.)
649 double subtracted_shape = (*fGenSubtractor)(shapeAngularity, fInclusiveJets[i], infoAng);
650 fGenSubtractorInfoJetAngularity.push_back(infoAng);
655 //_________________________________________________________________________________________________
656 Int_t AliFJWrapper::DoGenericSubtractionJetpTD() {
657 //Do generic subtraction for jet mass
658 #ifdef FASTJET_VERSION
659 if(fUseExternalBkg) fGenSubtractor = new fj::contrib::GenericSubtractor(fRho,fRhom);
660 else fGenSubtractor = new fj::contrib::GenericSubtractor(fBkrdEstimator);
663 AliJetShapepTD shapepTD;
665 // clear the generic subtractor info vector
666 fGenSubtractorInfoJetpTD.clear();
667 for (unsigned i = 0; i < fInclusiveJets.size(); i++) {
668 fj::contrib::GenericSubtractorInfo infopTD;
669 if(fInclusiveJets[i].perp()>0.)
670 double subtracted_shape = (*fGenSubtractor)(shapepTD, fInclusiveJets[i], infopTD);
671 fGenSubtractorInfoJetpTD.push_back(infopTD);
676 //_________________________________________________________________________________________________
677 Int_t AliFJWrapper::DoGenericSubtractionJetCircularity() {
678 //Do generic subtraction for jet mass
679 #ifdef FASTJET_VERSION
680 if(fUseExternalBkg) fGenSubtractor = new fj::contrib::GenericSubtractor(fRho,fRhom);
681 else fGenSubtractor = new fj::contrib::GenericSubtractor(fBkrdEstimator);
684 AliJetShapeCircularity shapecircularity;
686 // clear the generic subtractor info vector
687 fGenSubtractorInfoJetCircularity.clear();
688 for (unsigned i = 0; i < fInclusiveJets.size(); i++) {
689 fj::contrib::GenericSubtractorInfo infoCirc;
690 if(fInclusiveJets[i].perp()>0.)
691 double subtracted_shape = (*fGenSubtractor)(shapecircularity, fInclusiveJets[i], infoCirc);
692 fGenSubtractorInfoJetCircularity.push_back(infoCirc);
697 //_________________________________________________________________________________________________
698 Int_t AliFJWrapper::DoGenericSubtractionJetSigma2() {
699 //Do generic subtraction for jet mass
700 #ifdef FASTJET_VERSION
701 if(fUseExternalBkg) fGenSubtractor = new fj::contrib::GenericSubtractor(fRho,fRhom);
702 else fGenSubtractor = new fj::contrib::GenericSubtractor(fBkrdEstimator);
705 AliJetShapeSigma2 shapesigma2;
707 // clear the generic subtractor info vector
708 fGenSubtractorInfoJetSigma2.clear();
709 for (unsigned i = 0; i < fInclusiveJets.size(); i++) {
710 fj::contrib::GenericSubtractorInfo infoSigma;
711 if(fInclusiveJets[i].perp()>0.)
712 double subtracted_shape = (*fGenSubtractor)(shapesigma2, fInclusiveJets[i], infoSigma);
713 fGenSubtractorInfoJetSigma2.push_back(infoSigma);
718 //_________________________________________________________________________________________________
719 Int_t AliFJWrapper::DoGenericSubtractionJetConstituent() {
720 //Do generic subtraction for jet mass
721 #ifdef FASTJET_VERSION
722 if(fUseExternalBkg) fGenSubtractor = new fj::contrib::GenericSubtractor(fRho,fRhom);
723 else fGenSubtractor = new fj::contrib::GenericSubtractor(fBkrdEstimator);
726 AliJetShapeConstituent shapeconst;
728 // clear the generic subtractor info vector
729 fGenSubtractorInfoJetConstituent.clear();
730 for (unsigned i = 0; i < fInclusiveJets.size(); i++) {
731 fj::contrib::GenericSubtractorInfo infoConst;
732 if(fInclusiveJets[i].perp()>0.)
733 double subtracted_shape = (*fGenSubtractor)(shapeconst, fInclusiveJets[i], infoConst);
734 fGenSubtractorInfoJetConstituent.push_back(infoConst);
740 //_________________________________________________________________________________________________
741 Int_t AliFJWrapper::DoGenericSubtractionJetLeSub() {
742 //Do generic subtraction for jet mass
743 #ifdef FASTJET_VERSION
744 if(fUseExternalBkg) fGenSubtractor = new fj::contrib::GenericSubtractor(fRho,fRhom);
745 else fGenSubtractor = new fj::contrib::GenericSubtractor(fBkrdEstimator);
748 AliJetShapeLeSub shapeLeSub;
750 // clear the generic subtractor info vector
751 fGenSubtractorInfoJetLeSub.clear();
752 for (unsigned i = 0; i < fInclusiveJets.size(); i++) {
753 fj::contrib::GenericSubtractorInfo infoLeSub;
754 if(fInclusiveJets[i].perp()>0.)
755 double subtracted_shape = (*fGenSubtractor)(shapeLeSub, fInclusiveJets[i], infoLeSub);
756 fGenSubtractorInfoJetLeSub.push_back(infoLeSub);
762 //_________________________________________________________________________________________________
763 Int_t AliFJWrapper::DoConstituentSubtraction() {
764 //Do constituent subtraction
765 #ifdef FASTJET_VERSION
766 fj::contrib::ConstituentSubtractor *subtractor;
768 subtractor = new fj::contrib::ConstituentSubtractor(fRho,fRhom,kFALSE,kTRUE);
769 else subtractor = new fj::contrib::ConstituentSubtractor(fBkrdEstimator);
771 //clear constituent subtracted jets
772 fConstituentSubtrJets.clear();
773 for (unsigned i = 0; i < fInclusiveJets.size(); i++) {
774 fj::PseudoJet subtracted_jet(0.,0.,0.,0.);
775 if(fInclusiveJets[i].perp()>0.)
776 subtracted_jet = (*subtractor)(fInclusiveJets[i]);
777 fConstituentSubtrJets.push_back(subtracted_jet);
779 if(subtractor) delete subtractor;
785 //_________________________________________________________________________________________________
786 void AliFJWrapper::SetupAlgorithmfromOpt(const char *option)
788 // Setup algorithm from char.
790 std::string opt(option);
792 if (!opt.compare("kt")) fAlgor = fj::kt_algorithm;
793 if (!opt.compare("antikt")) fAlgor = fj::antikt_algorithm;
794 if (!opt.compare("cambridge")) fAlgor = fj::cambridge_algorithm;
795 if (!opt.compare("genkt")) fAlgor = fj::genkt_algorithm;
796 if (!opt.compare("cambridge_passive")) fAlgor = fj::cambridge_for_passive_algorithm;
797 if (!opt.compare("genkt_passive")) fAlgor = fj::genkt_for_passive_algorithm;
798 if (!opt.compare("ee_kt")) fAlgor = fj::ee_kt_algorithm;
799 if (!opt.compare("ee_genkt")) fAlgor = fj::ee_genkt_algorithm;
800 if (!opt.compare("plugin")) fAlgor = fj::plugin_algorithm;
803 //_________________________________________________________________________________________________
804 void AliFJWrapper::SetupAreaTypefromOpt(const char *option)
806 // Setup area type from char.
808 std::string opt(option);
810 if (!opt.compare("active")) fAreaType = fj::active_area;
811 if (!opt.compare("invalid")) fAreaType = fj::invalid_area;
812 if (!opt.compare("active_area_explicit_ghosts")) fAreaType = fj::active_area_explicit_ghosts;
813 if (!opt.compare("one_ghost_passive")) fAreaType = fj::one_ghost_passive_area;
814 if (!opt.compare("passive")) fAreaType = fj::passive_area;
815 if (!opt.compare("voronoi")) fAreaType = fj::voronoi_area;
818 //_________________________________________________________________________________________________
819 void AliFJWrapper::SetupSchemefromOpt(const char *option)
822 // setup scheme from char
825 std::string opt(option);
827 if (!opt.compare("BIpt")) fScheme = fj::BIpt_scheme;
828 if (!opt.compare("BIpt2")) fScheme = fj::BIpt2_scheme;
829 if (!opt.compare("E")) fScheme = fj::E_scheme;
830 if (!opt.compare("pt")) fScheme = fj::pt_scheme;
831 if (!opt.compare("pt2")) fScheme = fj::pt2_scheme;
832 if (!opt.compare("Et")) fScheme = fj::Et_scheme;
833 if (!opt.compare("Et2")) fScheme = fj::Et2_scheme;
836 //_________________________________________________________________________________________________
837 void AliFJWrapper::SetupStrategyfromOpt(const char *option)
839 // Setup strategy from char.
841 std::string opt(option);
843 if (!opt.compare("Best")) fStrategy = fj::Best;
844 if (!opt.compare("N2MinHeapTiled")) fStrategy = fj::N2MinHeapTiled;
845 if (!opt.compare("N2Tiled")) fStrategy = fj::N2Tiled;
846 if (!opt.compare("N2PoorTiled")) fStrategy = fj::N2PoorTiled;
847 if (!opt.compare("N2Plain")) fStrategy = fj::N2Plain;
848 if (!opt.compare("N3Dumb")) fStrategy = fj::N3Dumb;
849 if (!opt.compare("NlnN")) fStrategy = fj::NlnN;
850 if (!opt.compare("NlnN3pi")) fStrategy = fj::NlnN3pi;
851 if (!opt.compare("NlnN4pi")) fStrategy = fj::NlnN4pi;
852 if (!opt.compare("NlnNCam4pi")) fStrategy = fj::NlnNCam4pi;
853 if (!opt.compare("NlnNCam2pi2R")) fStrategy = fj::NlnNCam2pi2R;
854 if (!opt.compare("NlnNCam")) fStrategy = fj::NlnNCam;
855 if (!opt.compare("plugin")) fStrategy = fj::plugin_strategy;