Ignore:
Timestamp:
Sep 11, 2008, 1:41:12 PM (16 years ago)
Author:
Pavel Demin
Message:

add SISCone jet algorithm and update names for ConeJetFinder modules

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/modules/MadGraphShowerPartonSelector.cc

    r2 r11  
    3535  void SetEtaMax(Double_t eta);
    3636  void InsertParticleID(Int_t pid);
    37   void InsertAncestorID(Int_t pid);
     37  void InsertExclAncestorID(Int_t pid);
     38  void InsertInclAncestorID(Int_t pid);
    3839  void SetHadronizationInfo(Bool_t info);
    3940
     
    4142
    4243  Bool_t hasBadAncestor(ExRootGenParticle *object);
     44  Bool_t hasGoodAncestor(ExRootGenParticle *object);
    4345
    4446  Double_t fEtaMax;
     
    4749
    4850  set< Int_t > fParticleIDSet;
    49   set< Int_t > fAncestorIDSet;
     51  set< Int_t > fExclAncestorIDSet;
     52  set< Int_t > fInclAncestorIDSet;
    5053};
    5154
     
    7376//------------------------------------------------------------------------------
    7477
    75 void MadGraphShowerPartonClassifier::InsertAncestorID(Int_t pid)
    76 {
    77   fAncestorIDSet.insert(pid);
     78void MadGraphShowerPartonClassifier::InsertExclAncestorID(Int_t pid)
     79{
     80  fExclAncestorIDSet.insert(pid);
     81}
     82
     83//------------------------------------------------------------------------------
     84
     85void MadGraphShowerPartonClassifier::InsertInclAncestorID(Int_t pid)
     86{
     87  fInclAncestorIDSet.insert(pid);
    7888}
    7989
     
    96106  if(particle->PID == 21) return kFALSE;
    97107
     108  // keep all particles if there is no pid in the list
     109  if(fExclAncestorIDSet.empty())
     110  {
     111    return kFALSE;
     112  }
     113
    98114  pidAbs = TMath::Abs(particle->PID);
    99115
    100116  // skip particles with pid included in list
    101   itAncestorIDSet = fAncestorIDSet.find(pidAbs);
    102 
    103   if(itAncestorIDSet != fAncestorIDSet.end()) return kTRUE;
     117  itAncestorIDSet = fExclAncestorIDSet.find(pidAbs);
     118
     119  if(itAncestorIDSet != fExclAncestorIDSet.end()) return kTRUE;
    104120  if(particle->M2 > -1) return kFALSE;
    105121
     
    115131
    116132    // skip particles with pid included in list
    117     itAncestorIDSet = fAncestorIDSet.find(pidAbs);
    118 
    119     if(itAncestorIDSet != fAncestorIDSet.end()) return kTRUE;
     133    itAncestorIDSet = fExclAncestorIDSet.find(pidAbs);
     134
     135    if(itAncestorIDSet != fExclAncestorIDSet.end()) return kTRUE;
     136    if(particle->M2 > -1) return kFALSE;
     137  }
     138
     139  return kFALSE;
     140}
     141
     142//------------------------------------------------------------------------------
     143
     144Bool_t MadGraphShowerPartonClassifier::hasGoodAncestor(ExRootGenParticle *object)
     145{
     146  const int kMaxAncestors = 10;
     147  Int_t i, pidAbs;
     148  ExRootGenParticle *particle = object;
     149  set< Int_t >::const_iterator itAncestorIDSet;
     150
     151  for(i = 0; i < kMaxAncestors && particle->Status != 3; ++i)
     152  {
     153    if(particle->M1 < 0) return kFALSE;
     154
     155    particle = static_cast<ExRootGenParticle*>(fBranchParticle->At(particle->M1));
     156  }
     157
     158  if(particle->PID == 21) return kFALSE;
     159
     160  // keep all particles if there is no pid in the list
     161  if(fInclAncestorIDSet.empty())
     162  {
     163    return kTRUE;
     164  }
     165
     166  pidAbs = TMath::Abs(particle->PID);
     167
     168  // keep particles with pid included in list
     169  itAncestorIDSet = fInclAncestorIDSet.find(pidAbs);
     170
     171  if(itAncestorIDSet != fInclAncestorIDSet.end()) return kTRUE;
     172  if(particle->M2 > -1) return kFALSE;
     173
     174  for(i = 0; i < kMaxAncestors; ++i)
     175  {
     176    if(particle->M1 < 0) return kFALSE;
     177
     178    if(particle->PID == 21) return kFALSE;
     179
     180    particle = static_cast<ExRootGenParticle*>(fBranchParticle->At(particle->M1));
     181
     182    pidAbs = TMath::Abs(particle->PID);
     183
     184    // keep particles with pid included in list
     185    itAncestorIDSet = fInclAncestorIDSet.find(pidAbs);
     186
     187    if(itAncestorIDSet != fInclAncestorIDSet.end()) return kTRUE;
    120188    if(particle->M2 > -1) return kFALSE;
    121189  }
     
    159227  if(hasBadAncestor(particle)) return -1;
    160228
     229  if(!hasGoodAncestor(particle)) return -1;
     230
    161231  return 0;
    162232}
     
    214284  {
    215285    pid = param[i].GetInt();
    216     fClassifier->InsertAncestorID(pid);
     286    fClassifier->InsertExclAncestorID(pid);
     287  }
     288
     289  // read ancestor IDs from configuration file and setup classifier
     290
     291  param = GetParam("IncludedAncestorIDs");
     292  sizeParam = param.GetSize();
     293
     294  for(i = 0; i < sizeParam; ++i)
     295  {
     296    pid = param[i].GetInt();
     297    fClassifier->InsertInclAncestorID(pid);
    217298  }
    218299
Note: See TracChangeset for help on using the changeset viewer.