ROOT logo
AliJetReader *CreateJetReader(Char_t *jr,UInt_t filterMask); // Common config
AliJetFinder *CreateJetFinder(Char_t *jf,Float_t radius = -1);

AliAnalysisTaskJets *AddTaskJets(Char_t *jr, Char_t *jf,Float_t radius = -1,UInt_t filterMask = 0,Float_t ptTrackMin = 0.15,Int_t iBack = 0); // for the new AF
Int_t AddTaskJetsDelta(char *nonStdFile = "",UInt_t filterMask = 0,Bool_t kUseAODMC = kTRUE,UInt_t runFlag = 1|4|32|128|256);     
AliAnalysisTaskJets *AddTaskJets(UInt_t filterMask = 0);

Float_t kPtTrackMin = 0.15;
Int_t kBackgroundMode = 0;


AliAnalysisTaskJets *AddTaskJets(UInt_t filterMask ){
  // fills the standard "jets" branch in the AOD
  // need the ESDFilter to run before, to access the AODtracks
  // Tracks selected by the first Filter (1<<0)
  // needs to be adapted for different cuts
  
  // UA1 as standard chosen, since it is the most robust and simple JF
  // R = 0.4 suffficient to provide accurate jet axis for correlation studies
  // energy resolution suffers a little
  // Acceptance of jets not limited by the Jet Finder but should be done
  // by user to abs(eta) < 0.5 

  return AddTaskJets("AOD","UA1",0.4,filterMask);

}



Int_t AddTaskJetsDelta(char *nonStdFile,UInt_t filterMask,Bool_t kUseAODMC,UInt_t runFlag){

  // Adds a whole set of jet finders  all to be written
  // to a delta AOD
  
  // this can in principle be done also with on the fly 
  // if we have an ESD input jet fidner task does automatically fetch the ouput aod

   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   if (!mgr) {
      ::Error("AddTaskJetsDelta", "No analysis manager to connect to.");
      return 0;
   }  
   
   // Check the analysis type using the event handlers connected to the analysis manager.
   //==============================================================================
   if (!mgr->GetInputEventHandler()) {
      ::Error("AddTaskJetsDelta", "This task requires an input event handler");
      return 0;
   }

  AliAODHandler *aodh = (AliAODHandler*)mgr->GetOutputEventHandler();
  if (!aodh) {
    ::Error("AddTaskJetsDelta", "This task needs an output event handler");
    return 0;
  }   

  TString outFile(nonStdFile);

  AliAnalysisTaskJets *jetana = 0;
  Int_t iCount = 0;

  // Jet Fidners Selected by run flag first bit 2^0 second by 2^1 etc
  const char *cJF[14]        = {"UA1","UA1","UA1", "CDF", "CDF","DA","DA","SISCONE","SISCONE","FASTJET","FASTJET","FASTKT","FASTKT","UA1LO"};
  const Float_t radius[14]   = {  0.4,  0.7,  1.0,  0.4,    0.7, 0.4, 0.7,      0.4,     0.7,      0.4,       0.7,     0.4,     0.7,    0.4};
  UInt_t  flag[14]           = {    6,    7,    7,    7,      7,   7,   7,        7,       7,        7,         7,       7,       7,      7};
  // flag[5] = 0; // set siscone to 0 for proof mode...
  // flag first bit AOD, second bit AODMC2 third bit AODMC2 third (8) bit AOODMC2b (limited acceptance)
  // i.e. 7 all, 6 only MC2 and MC
  // this stay at three
  const char *cReader[4] = {"AOD","AODMC","AODMC2","AODMC2b"};  

  

  for(int i = 0; i< 14;i++){
    if(!(runFlag&(1<<i)))continue;
    if(!kUseAODMC)flag[i]&=1; // switch OFF MC if we do not have it
    for(int ib = 0;ib<4;ib++){      
      if(flag[i]&(1<<ib)){
	jetana = AddTaskJets(cReader[ib],cJF[i],radius[i],filterMask);
	if(jetana){
	  char *cRadius = "";
	  if(radius[i]>0)cRadius = Form("%02d",(int)((radius[i]+0.01)*10.)); // add an offset beacuse of precision
	  //	  jetana->SetNonStdBranch(Form("jets%s_%s%s",cReader[ib],cJF[i],cRadius)); // done in addtask jets
	  if(outFile.Length()>0)jetana->SetNonStdOutputFile(outFile.Data());
	  iCount++;
	}
      }
    }
  }
    
  Printf("Added %d JetFinders",iCount);
}





AliAnalysisTaskJets *AddTaskJets(Char_t *jr, Char_t *jf, Float_t radius,UInt_t filterMask,float ptTrackMin,int iBack)
{
  // Creates a jet finder task, configures it and adds it to the analysis manager.

  kPtTrackMin = ptTrackMin;
  kBackgroundMode = iBack;
  // Get the pointer to the existing analysis manager via the static access method.
  //==============================================================================
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) {
    ::Error("AddTaskJets", "No analysis manager to connect to.");
    return NULL;
  }  
  
  // Check the analysis type using the event handlers connected to the analysis manager.
  //==============================================================================
  if (!mgr->GetInputEventHandler()) {
    ::Error("AddTaskJets", "This task requires an input event handler");
    return NULL;
   }
  
  AliAODHandler *aodh = (AliAODHandler*)mgr->GetOutputEventHandler();
  if (!aodh) {
    ::Error("AddTaskJets", "This task needs an output event handler");
    return NULL;
  }   
  

  // Create the task and configure it.
  //===========================================================================
  AliAnalysisTaskJets *jetana;
   AliJetReader *er = CreateJetReader(jr,filterMask);
   // Define jet header and jet finder
   AliJetFinder *jetFinder = CreateJetFinder(jf,radius);

   if (jetFinder){
       if (er) jetFinder->SetJetReader(er);
   }



   TString cAdd = "";
   cAdd += Form("%02d",(int)((radius+0.01)*10.));
   cAdd += Form("_B%d",(int)((kBackgroundMode)));
   cAdd += Form("_Filter%05d",filterMask);
   cAdd += Form("_Cut%05d",(int)((1000.*kPtTrackMin)));
   Printf("%s",cAdd.Data());
   jetana = new AliAnalysisTaskJets(Form("JetAnalysis%s_%s%s",jr,jf,cAdd.Data()));


   TString c_jr(jr);
   c_jr.ToLower();
   TString c_jf(jf);
   c_jf.ToLower();

   /*
   if(c_jf.CompareTo("ua1")==0 && TMath::Abs(radius-0.4) < 0.01 && c_jr.CompareTo("aod") == 0){
     // do nothing, this is the standard jet finder R = 0.4, UA1 on AOD
   }
   else{

     
 }
   */
   TString bName =  Form("jets%s_%s%s",jr,jf,cAdd.Data());
   jetana->SetNonStdBranch(bName.Data());
   Printf("Set jet branchname \"%s\"",bName.Data());


   AliAnalysisDataContainer *cout_jet = mgr->CreateContainer(
							     Form("jethist_%s_%s%s",
								  c_jr.Data(),
								  c_jf.Data(),
								  cAdd.Data()), 
							     TList::Class(),
							     AliAnalysisManager::kOutputContainer, 
							     Form("%s:PWGJE_jethist_%s_%s%s",AliAnalysisManager::GetCommonFileName(),
								  c_jr.Data(),
								  c_jf.Data(),
								  cAdd.Data()));

   // Connect jet finder to task.
   jetana->SetJetFinder(jetFinder);
   jetana->SetConfigFile("");
   jetana->SetDebugLevel(2);
   if(TMath::Abs((radius-0.4))< 0.02&&c_jf.Contains("fastjet")){
     //     jetana->SetFilterPt(20.);
   }


   mgr->AddTask(jetana);


   // Create ONLY the output containers for the data produced by the task.
   // Get and connect other common input/output containers via the manager as below
   //==============================================================================
   mgr->ConnectInput  (jetana, 0, mgr->GetCommonInputContainer());
// AOD output slot will be used in a different way in future
   mgr->ConnectOutput (jetana, 0, mgr->GetCommonOutputContainer());
   mgr->ConnectOutput (jetana, 1, cout_jet);
   
   return jetana;
}

AliJetFinder *CreateJetFinder(Char_t *jf,Float_t radius){
  AliJetFinder *jetFinder = 0;

  switch (jf) {
  case "CDF":
    AliCdfJetHeader *jh = new AliCdfJetHeader();
    jh->SetRadius(0.7);
    if(radius>0)jh->SetRadius(radius);    
    jh->SetAODwrite(kTRUE);
    jh->SetAODtracksWrite(kTRUE);
    //    jh->SetDebugCDF(1);
    jetFinder = new AliCdfJetFinder();
    if (jh) jetFinder->SetJetHeader(jh);
    break;

  case "DA":
    AliDAJetHeader *jh=new AliDAJetHeader();
    jh->SetComment("DA jet code with default parameters");
    jh->SelectJets(kTRUE);
//    jh->SetNeff(200);
//    jh->SetEtaEff(2.2);
    if(radius>0)jh->SetRadius(radius);
    jh->SetEtMin(5.);
    jetFinder = new AliDAJetFinder();
    if (jh) jetFinder->SetJetHeader(jh);
    break;

  case "FASTJET":
    // DEFAULT is ANTI KT
    AliFastJetHeaderV1 *jh = new AliFastJetHeaderV1();
    jh->SetRparam(0.4); // setup parameters                                  
    Double_t rBkg = 0.6;
    if(radius>0)jh->SetRparam(radius);
    jh->SetAlgorithm(2); // antikt from fastjet/JetDefinition.hh
    /*
      $FASTJET/include/fastjet/JetDefinition.hh
      enum JetAlgorithm {kt_algorithm, cambridge_algorithm,
      antikt_algorithm, genkt_algorithm,
      ee_kt_algorithm, ee_genkt_algorithm, ...};

     */
    jetFinder = new AliFastJetFinder();
    jh->SetPtMin(1);
    jh->SetRparamBkg(rBkg);
    jh->SetGhostEtaMax(0.9+rBkg);
    if (jh) jetFinder->SetJetHeader(jh);
    break;

  case "FASTKT":
    AliFastJetHeaderV1 *jh = new AliFastJetHeaderV1();
    jh->SetRparam(0.4); // setup parameters                                  
    Double_t rBkg = 0.6;
    if(radius>0)jh->SetRparam(radius);
    jh->SetAlgorithm(0); // kt from fastjet/JetDefinition.hh
    jh->SetPtMin(1);
    jh->SetRparamBkg(rBkg);
    jh->SetGhostEtaMax(0.9+rBkg);
    jetFinder = new AliFastJetFinder();
    if (jh) jetFinder->SetJetHeader(jh);
    break;

  case "SISCONE":
    AliSISConeJetHeader * jh = new AliSISConeJetHeader();

    jh->SetJetEtaMax(1.5);
    jh->SetJetEtaMin(-1.5);

    //siscone parameters
    jh->SetConeRadius(0.4);                   // default cone radius
    if(radius>0)jh->SetConeRadius(radius);   // cone radius

    jh->SetOverlapThreshold(0.75);            // overlap parameter, between 0 and 1 excluded!! 0.75 value is advised
    jh->SetPtProtojetMin(0);                  // pt min of protojets
    jh->SetMinJetPt(5);                      // Ptmin of jets (GeV)

    //do you want to subtract BG (0 = no, 1 = yes)
    jh->SetBGMode(0); // if 1 set also the radius for the background determination..

    //for background
    jh->SetRapRange( -0.9, 0.9);              // rapidity range for subtracting background must be < ghostmaxrap-0.95*R
    jh->SetPhiRange(0 , 2*TMath::Pi());       // phi range for subtracting background
    
    //to determine jets area
    jh->SetBGAlgorithm(1);                    // algorithm for rho calculation : 0 = kT, 1 = Cambridge
    jh->SetGhostEtaMax(4);                    // eta max where ghosts are generated 
    jh->SetGhostArea(0.05);                   // area of a ghost 
    jh->SetMeanGhostKt(1e-100);               // average transverse momentum of the ghosts.
    jh->SetAreaTypeNumber(4);                 // from 1 to 5 : 1 = active_area, 2 = active_area_explicit_ghosts, 3 = one_ghost_passive_area, 4 = passive_area, 5 = voronoi_area
    jetFinder = new AliSISConeJetFinder();
    if (jh) jetFinder->SetJetHeader(jh);
    break;

  case "UA1":
    AliUA1JetHeaderV1 *jh=new AliUA1JetHeaderV1();
    jh->SetComment("UA1 jet code with default parameters");
    jh->BackgMode(0);
    jh->SetRadius(0.4);
    if(radius>0)jh->SetRadius(radius);
    jh->SetEtSeed(4.);
    jh->SetNAcceptJets(6);
    jh->SetLegoNbinPhi(432);
    jh->SetLegoNbinEta(274);
    jh->SetLegoEtaMin(-2);
    jh->SetLegoEtaMax(+2);
    jh->SetMinJetEt(5.);
    jh->SetJetEtaMax(1.5);
    jh->SetJetEtaMin(-1.5);
    jh->BackgMode(kBackgroundMode);

    jetFinder = new AliUA1JetFinderV1();
    if (jh) jetFinder->SetJetHeader(jh);
    break;
  case "UA1LO":
    AliUA1JetHeaderV1 *jh=new AliUA1JetHeaderV1();
    jh->SetComment("UA1 jet code with Lo Pt settings parameters");
    jh->BackgMode(0);
    jh->SetRadius(0.4);
    if(radius>0)jh->SetRadius(radius);
    jh->SetEtSeed(1.);
    jh->SetNAcceptJets(6);
    jh->SetLegoNbinPhi(432);
    jh->SetLegoNbinEta(274);
    jh->SetLegoEtaMin(-2);
    jh->SetLegoEtaMax(+2);
    jh->SetMinJetEt(1.);
    jh->SetJetEtaMax(1.5);
    jh->SetJetEtaMin(-1.5);
    jh->BackgMode(kBackgroundMode);

    jetFinder = new AliUA1JetFinderV1();
    if (jh) jetFinder->SetJetHeader(jh);
    break;



  case "UA1MC":
    AliUA1JetHeaderV1 *jh=new AliUA1JetHeaderV1();
    jh->SetComment("UA1 jet code with default MC parameters");
    jh->BackgMode(0);
    jh->SetRadius(1.0);
    if(radius>0)jh->SetRadius(radius);
    jh->SetEtSeed(4.);
    jh->SetNAcceptJets(6);
    jh->SetLegoNbinPhi(432);
    jh->SetLegoNbinEta(274);
    jh->SetLegoEtaMin(-2);
    jh->SetLegoEtaMax(+2);
    jh->SetMinJetEt(5.);
    jh->SetJetEtaMax(1.5);
    jh->SetJetEtaMin(-1.5);
    jh->BackgMode(kBackgroundMode);
    jetFinder = new AliUA1JetFinderV1();
    if (jh) jetFinder->SetJetHeader(jh);
    break;
  default:
    Printf("\n >>>>>>> AddTaskJets Error Wrong jet finder selected\n");
    break;
  }

  return jetFinder;

}

AliJetReader *CreateJetReader(Char_t *jr,UInt_t filterMask){
  AliJetReader *er = 0;
  Float_t ptCut  = kPtTrackMin ; // cut on track p_T
  switch (jr) {
  case "MC":
    AliJetKineReaderHeader *jrh = new AliJetKineReaderHeader();
    jrh->SetComment("MC full Kinematics");
    jrh->SetFastSimTPC(kFALSE);
    jrh->SetFastSimEMCAL(kFALSE);
    jrh->SetPtCut(ptCut);
    jrh->SetFiducialEta(-2.1,2.1); // to take all MC particles default is 0 .9                                                                             
    // Define reader and set its header                                     
    er = new AliJetKineReader();
    er->SetReaderHeader(jrh);
    break;
  case "MC2":
    AliJetKineReaderHeader *jrh = new AliJetKineReaderHeader();
    jrh->SetComment("MC full Kinematics spearate config charged only");
    jrh->SetFastSimTPC(kFALSE);
    jrh->SetFastSimEMCAL(kFALSE);
    jrh->SetChargedOnly(kTRUE);
    jrh->SetPtCut(ptCut);
    jrh->SetFiducialEta(-2.1,2.1); // to take all MC particles default is 0 .9                                                                             
    // Define reader and set its header                                     
    er = new AliJetKineReader();
    er->SetReaderHeader(jrh);
    break;
  case "ESD":
    AliJetESDReaderHeader *jrh = new AliJetESDReaderHeader();
    jrh->SetComment("Testing");
    jrh->SetFirstEvent(0.);
    jrh->SetLastEvent(1000);
    jrh->SetPtCut(ptCut);
    jrh->SetReadSignalOnly(kFALSE);
    // Define reader and set its header                                     
    er = new AliJetESDReader();
    er->SetReaderHeader(jrh);
    break;

  case "AOD":
    AliJetAODReaderHeader *jrh = new AliJetAODReaderHeader();
    jrh->SetComment("AOD Reader");
    jrh->SetPtCut(ptCut); // set low p_T cut of to 150 MeV
    jrh->SetTestFilterMask(32); // Change this one for a different set of cuts
    if(filterMask>0)jrh->SetTestFilterMask(filterMask); 
    // Define reader and set its header
    er = new AliJetAODReader();
    er->SetReaderHeader(jrh);
    break;
  case "AODMC":
    AliJetAODReaderHeader *jrh = new AliJetAODReaderHeader();
    jrh->SetComment("AOD MC Reader");
    jrh->SetPtCut(ptCut);
    jrh->SetFiducialEta(-2.1,2.1); // to take all MC particles default is 0.9
    jrh->SetReadAODMC(1);// 1 all primary MC , 2 all primary charged
    // Define reader and set its header
    er = new AliJetAODReader();
    er->SetReaderHeader(jrh);
    break;
  case "AODMC2":
    AliJetAODReaderHeader *jrh = new AliJetAODReaderHeader();
    jrh->SetComment("AOD MC Reader");
    jrh->SetPtCut(ptCut);
    jrh->SetFiducialEta(-2.1,2.1); // to take all MC particles default is 0.9
    jrh->SetReadAODMC(2);// 1 all primary MC , 2 all primary charged
    // Define reader and set its header
    er = new AliJetAODReader();
    er->SetReaderHeader(jrh);
    break;
  case "AODMC2b":
    AliJetAODReaderHeader *jrh = new AliJetAODReaderHeader();
    jrh->SetComment("AOD MC Reader");
    jrh->SetPtCut(ptCut);
    jrh->SetFiducialEta(-0.9,0.9); // to take all MC particles default is 0.9
    jrh->SetReadAODMC(2);// 1 all primary MC , 2 all primary charged
    // Define reader and set its header
    er = new AliJetAODReader();
    er->SetReaderHeader(jrh);
    break;
  case "AODextra":
    AliJetAODReaderHeader *jrh = new AliJetAODReaderHeader();
    jrh->SetComment("AOD Reader with extra branch");
    jrh->SetPtCut(ptCut); // set low p_T cut of to ptCut
    jrh->SetTestFilterMask(32); // Change this one for a different set of cuts
    jrh->SetReadBranches(AliJetAODReaderHeader::kReadStdBranch | AliJetAODReaderHeader::kReadNonStdBranch);
    jrh->SetNonStdBranch("aodExtraTracks");
    if(filterMask>0)jrh->SetTestFilterMask(filterMask); 
    // Define reader and set its header
    er = new AliJetAODReader();
    er->SetReaderHeader(jrh);
    break;
  case "AODextraonly":
    AliJetAODReaderHeader *jrh = new AliJetAODReaderHeader();
    jrh->SetComment("AOD Reader with extra branch");
    jrh->SetPtCut(ptCut); // set low p_T cut of to 150 MeV
    jrh->SetTestFilterMask(32); // Change this one for a different set of cuts
    jrh->SetReadBranches(AliJetAODReaderHeader::kReadNonStdBranch);
    jrh->SetNonStdBranch("aodExtraTracks");
    if(filterMask>0)jrh->SetTestFilterMask(filterMask); 
    // Define reader and set its header
    er = new AliJetAODReader();
    er->SetReaderHeader(jrh);
    break;
  case "AODMCextra":
    AliJetAODReaderHeader *jrh = new AliJetAODReaderHeader();
    jrh->SetComment("AOD MC Reader with extra branch");
    jrh->SetPtCut(ptCut);
    jrh->SetFiducialEta(-2.1,2.1); // to take all MC particles default is 0.9
    jrh->SetReadAODMC(1);// 1 all primary MC , 2 all primary charged
    jrh->SetReadBranches(AliJetAODReaderHeader::kReadStdBranch | AliJetAODReaderHeader::kReadNonStdBranch);
    jrh->SetNonStdBranch("aodExtraMCparticles");
    // Define reader and set its header
    er = new AliJetAODReader();
    er->SetReaderHeader(jrh);
    break;
  case "AODMC2extra":
    AliJetAODReaderHeader *jrh = new AliJetAODReaderHeader();
    jrh->SetComment("AOD MC Reader with extra branch");
    jrh->SetPtCut(ptCut);
    jrh->SetFiducialEta(-2.1,2.1); // to take all MC particles default is 0.9
    jrh->SetReadAODMC(2);// 1 all primary MC , 2 all primary charged
    jrh->SetReadBranches(AliJetAODReaderHeader::kReadStdBranch | AliJetAODReaderHeader::kReadNonStdBranch);
    jrh->SetNonStdBranch("aodExtraMCparticles");
    // Define reader and set its header
    er = new AliJetAODReader();
    er->SetReaderHeader(jrh);
    break;
  default:
    ::Error("AddTaskJets", "Wrong jet reader selected\n");
    return 0;
  }

  return er;

}
 AddTaskJets.C:1
 AddTaskJets.C:2
 AddTaskJets.C:3
 AddTaskJets.C:4
 AddTaskJets.C:5
 AddTaskJets.C:6
 AddTaskJets.C:7
 AddTaskJets.C:8
 AddTaskJets.C:9
 AddTaskJets.C:10
 AddTaskJets.C:11
 AddTaskJets.C:12
 AddTaskJets.C:13
 AddTaskJets.C:14
 AddTaskJets.C:15
 AddTaskJets.C:16
 AddTaskJets.C:17
 AddTaskJets.C:18
 AddTaskJets.C:19
 AddTaskJets.C:20
 AddTaskJets.C:21
 AddTaskJets.C:22
 AddTaskJets.C:23
 AddTaskJets.C:24
 AddTaskJets.C:25
 AddTaskJets.C:26
 AddTaskJets.C:27
 AddTaskJets.C:28
 AddTaskJets.C:29
 AddTaskJets.C:30
 AddTaskJets.C:31
 AddTaskJets.C:32
 AddTaskJets.C:33
 AddTaskJets.C:34
 AddTaskJets.C:35
 AddTaskJets.C:36
 AddTaskJets.C:37
 AddTaskJets.C:38
 AddTaskJets.C:39
 AddTaskJets.C:40
 AddTaskJets.C:41
 AddTaskJets.C:42
 AddTaskJets.C:43
 AddTaskJets.C:44
 AddTaskJets.C:45
 AddTaskJets.C:46
 AddTaskJets.C:47
 AddTaskJets.C:48
 AddTaskJets.C:49
 AddTaskJets.C:50
 AddTaskJets.C:51
 AddTaskJets.C:52
 AddTaskJets.C:53
 AddTaskJets.C:54
 AddTaskJets.C:55
 AddTaskJets.C:56
 AddTaskJets.C:57
 AddTaskJets.C:58
 AddTaskJets.C:59
 AddTaskJets.C:60
 AddTaskJets.C:61
 AddTaskJets.C:62
 AddTaskJets.C:63
 AddTaskJets.C:64
 AddTaskJets.C:65
 AddTaskJets.C:66
 AddTaskJets.C:67
 AddTaskJets.C:68
 AddTaskJets.C:69
 AddTaskJets.C:70
 AddTaskJets.C:71
 AddTaskJets.C:72
 AddTaskJets.C:73
 AddTaskJets.C:74
 AddTaskJets.C:75
 AddTaskJets.C:76
 AddTaskJets.C:77
 AddTaskJets.C:78
 AddTaskJets.C:79
 AddTaskJets.C:80
 AddTaskJets.C:81
 AddTaskJets.C:82
 AddTaskJets.C:83
 AddTaskJets.C:84
 AddTaskJets.C:85
 AddTaskJets.C:86
 AddTaskJets.C:87
 AddTaskJets.C:88
 AddTaskJets.C:89
 AddTaskJets.C:90
 AddTaskJets.C:91
 AddTaskJets.C:92
 AddTaskJets.C:93
 AddTaskJets.C:94
 AddTaskJets.C:95
 AddTaskJets.C:96
 AddTaskJets.C:97
 AddTaskJets.C:98
 AddTaskJets.C:99
 AddTaskJets.C:100
 AddTaskJets.C:101
 AddTaskJets.C:102
 AddTaskJets.C:103
 AddTaskJets.C:104
 AddTaskJets.C:105
 AddTaskJets.C:106
 AddTaskJets.C:107
 AddTaskJets.C:108
 AddTaskJets.C:109
 AddTaskJets.C:110
 AddTaskJets.C:111
 AddTaskJets.C:112
 AddTaskJets.C:113
 AddTaskJets.C:114
 AddTaskJets.C:115
 AddTaskJets.C:116
 AddTaskJets.C:117
 AddTaskJets.C:118
 AddTaskJets.C:119
 AddTaskJets.C:120
 AddTaskJets.C:121
 AddTaskJets.C:122
 AddTaskJets.C:123
 AddTaskJets.C:124
 AddTaskJets.C:125
 AddTaskJets.C:126
 AddTaskJets.C:127
 AddTaskJets.C:128
 AddTaskJets.C:129
 AddTaskJets.C:130
 AddTaskJets.C:131
 AddTaskJets.C:132
 AddTaskJets.C:133
 AddTaskJets.C:134
 AddTaskJets.C:135
 AddTaskJets.C:136
 AddTaskJets.C:137
 AddTaskJets.C:138
 AddTaskJets.C:139
 AddTaskJets.C:140
 AddTaskJets.C:141
 AddTaskJets.C:142
 AddTaskJets.C:143
 AddTaskJets.C:144
 AddTaskJets.C:145
 AddTaskJets.C:146
 AddTaskJets.C:147
 AddTaskJets.C:148
 AddTaskJets.C:149
 AddTaskJets.C:150
 AddTaskJets.C:151
 AddTaskJets.C:152
 AddTaskJets.C:153
 AddTaskJets.C:154
 AddTaskJets.C:155
 AddTaskJets.C:156
 AddTaskJets.C:157
 AddTaskJets.C:158
 AddTaskJets.C:159
 AddTaskJets.C:160
 AddTaskJets.C:161
 AddTaskJets.C:162
 AddTaskJets.C:163
 AddTaskJets.C:164
 AddTaskJets.C:165
 AddTaskJets.C:166
 AddTaskJets.C:167
 AddTaskJets.C:168
 AddTaskJets.C:169
 AddTaskJets.C:170
 AddTaskJets.C:171
 AddTaskJets.C:172
 AddTaskJets.C:173
 AddTaskJets.C:174
 AddTaskJets.C:175
 AddTaskJets.C:176
 AddTaskJets.C:177
 AddTaskJets.C:178
 AddTaskJets.C:179
 AddTaskJets.C:180
 AddTaskJets.C:181
 AddTaskJets.C:182
 AddTaskJets.C:183
 AddTaskJets.C:184
 AddTaskJets.C:185
 AddTaskJets.C:186
 AddTaskJets.C:187
 AddTaskJets.C:188
 AddTaskJets.C:189
 AddTaskJets.C:190
 AddTaskJets.C:191
 AddTaskJets.C:192
 AddTaskJets.C:193
 AddTaskJets.C:194
 AddTaskJets.C:195
 AddTaskJets.C:196
 AddTaskJets.C:197
 AddTaskJets.C:198
 AddTaskJets.C:199
 AddTaskJets.C:200
 AddTaskJets.C:201
 AddTaskJets.C:202
 AddTaskJets.C:203
 AddTaskJets.C:204
 AddTaskJets.C:205
 AddTaskJets.C:206
 AddTaskJets.C:207
 AddTaskJets.C:208
 AddTaskJets.C:209
 AddTaskJets.C:210
 AddTaskJets.C:211
 AddTaskJets.C:212
 AddTaskJets.C:213
 AddTaskJets.C:214
 AddTaskJets.C:215
 AddTaskJets.C:216
 AddTaskJets.C:217
 AddTaskJets.C:218
 AddTaskJets.C:219
 AddTaskJets.C:220
 AddTaskJets.C:221
 AddTaskJets.C:222
 AddTaskJets.C:223
 AddTaskJets.C:224
 AddTaskJets.C:225
 AddTaskJets.C:226
 AddTaskJets.C:227
 AddTaskJets.C:228
 AddTaskJets.C:229
 AddTaskJets.C:230
 AddTaskJets.C:231
 AddTaskJets.C:232
 AddTaskJets.C:233
 AddTaskJets.C:234
 AddTaskJets.C:235
 AddTaskJets.C:236
 AddTaskJets.C:237
 AddTaskJets.C:238
 AddTaskJets.C:239
 AddTaskJets.C:240
 AddTaskJets.C:241
 AddTaskJets.C:242
 AddTaskJets.C:243
 AddTaskJets.C:244
 AddTaskJets.C:245
 AddTaskJets.C:246
 AddTaskJets.C:247
 AddTaskJets.C:248
 AddTaskJets.C:249
 AddTaskJets.C:250
 AddTaskJets.C:251
 AddTaskJets.C:252
 AddTaskJets.C:253
 AddTaskJets.C:254
 AddTaskJets.C:255
 AddTaskJets.C:256
 AddTaskJets.C:257
 AddTaskJets.C:258
 AddTaskJets.C:259
 AddTaskJets.C:260
 AddTaskJets.C:261
 AddTaskJets.C:262
 AddTaskJets.C:263
 AddTaskJets.C:264
 AddTaskJets.C:265
 AddTaskJets.C:266
 AddTaskJets.C:267
 AddTaskJets.C:268
 AddTaskJets.C:269
 AddTaskJets.C:270
 AddTaskJets.C:271
 AddTaskJets.C:272
 AddTaskJets.C:273
 AddTaskJets.C:274
 AddTaskJets.C:275
 AddTaskJets.C:276
 AddTaskJets.C:277
 AddTaskJets.C:278
 AddTaskJets.C:279
 AddTaskJets.C:280
 AddTaskJets.C:281
 AddTaskJets.C:282
 AddTaskJets.C:283
 AddTaskJets.C:284
 AddTaskJets.C:285
 AddTaskJets.C:286
 AddTaskJets.C:287
 AddTaskJets.C:288
 AddTaskJets.C:289
 AddTaskJets.C:290
 AddTaskJets.C:291
 AddTaskJets.C:292
 AddTaskJets.C:293
 AddTaskJets.C:294
 AddTaskJets.C:295
 AddTaskJets.C:296
 AddTaskJets.C:297
 AddTaskJets.C:298
 AddTaskJets.C:299
 AddTaskJets.C:300
 AddTaskJets.C:301
 AddTaskJets.C:302
 AddTaskJets.C:303
 AddTaskJets.C:304
 AddTaskJets.C:305
 AddTaskJets.C:306
 AddTaskJets.C:307
 AddTaskJets.C:308
 AddTaskJets.C:309
 AddTaskJets.C:310
 AddTaskJets.C:311
 AddTaskJets.C:312
 AddTaskJets.C:313
 AddTaskJets.C:314
 AddTaskJets.C:315
 AddTaskJets.C:316
 AddTaskJets.C:317
 AddTaskJets.C:318
 AddTaskJets.C:319
 AddTaskJets.C:320
 AddTaskJets.C:321
 AddTaskJets.C:322
 AddTaskJets.C:323
 AddTaskJets.C:324
 AddTaskJets.C:325
 AddTaskJets.C:326
 AddTaskJets.C:327
 AddTaskJets.C:328
 AddTaskJets.C:329
 AddTaskJets.C:330
 AddTaskJets.C:331
 AddTaskJets.C:332
 AddTaskJets.C:333
 AddTaskJets.C:334
 AddTaskJets.C:335
 AddTaskJets.C:336
 AddTaskJets.C:337
 AddTaskJets.C:338
 AddTaskJets.C:339
 AddTaskJets.C:340
 AddTaskJets.C:341
 AddTaskJets.C:342
 AddTaskJets.C:343
 AddTaskJets.C:344
 AddTaskJets.C:345
 AddTaskJets.C:346
 AddTaskJets.C:347
 AddTaskJets.C:348
 AddTaskJets.C:349
 AddTaskJets.C:350
 AddTaskJets.C:351
 AddTaskJets.C:352
 AddTaskJets.C:353
 AddTaskJets.C:354
 AddTaskJets.C:355
 AddTaskJets.C:356
 AddTaskJets.C:357
 AddTaskJets.C:358
 AddTaskJets.C:359
 AddTaskJets.C:360
 AddTaskJets.C:361
 AddTaskJets.C:362
 AddTaskJets.C:363
 AddTaskJets.C:364
 AddTaskJets.C:365
 AddTaskJets.C:366
 AddTaskJets.C:367
 AddTaskJets.C:368
 AddTaskJets.C:369
 AddTaskJets.C:370
 AddTaskJets.C:371
 AddTaskJets.C:372
 AddTaskJets.C:373
 AddTaskJets.C:374
 AddTaskJets.C:375
 AddTaskJets.C:376
 AddTaskJets.C:377
 AddTaskJets.C:378
 AddTaskJets.C:379
 AddTaskJets.C:380
 AddTaskJets.C:381
 AddTaskJets.C:382
 AddTaskJets.C:383
 AddTaskJets.C:384
 AddTaskJets.C:385
 AddTaskJets.C:386
 AddTaskJets.C:387
 AddTaskJets.C:388
 AddTaskJets.C:389
 AddTaskJets.C:390
 AddTaskJets.C:391
 AddTaskJets.C:392
 AddTaskJets.C:393
 AddTaskJets.C:394
 AddTaskJets.C:395
 AddTaskJets.C:396
 AddTaskJets.C:397
 AddTaskJets.C:398
 AddTaskJets.C:399
 AddTaskJets.C:400
 AddTaskJets.C:401
 AddTaskJets.C:402
 AddTaskJets.C:403
 AddTaskJets.C:404
 AddTaskJets.C:405
 AddTaskJets.C:406
 AddTaskJets.C:407
 AddTaskJets.C:408
 AddTaskJets.C:409
 AddTaskJets.C:410
 AddTaskJets.C:411
 AddTaskJets.C:412
 AddTaskJets.C:413
 AddTaskJets.C:414
 AddTaskJets.C:415
 AddTaskJets.C:416
 AddTaskJets.C:417
 AddTaskJets.C:418
 AddTaskJets.C:419
 AddTaskJets.C:420
 AddTaskJets.C:421
 AddTaskJets.C:422
 AddTaskJets.C:423
 AddTaskJets.C:424
 AddTaskJets.C:425
 AddTaskJets.C:426
 AddTaskJets.C:427
 AddTaskJets.C:428
 AddTaskJets.C:429
 AddTaskJets.C:430
 AddTaskJets.C:431
 AddTaskJets.C:432
 AddTaskJets.C:433
 AddTaskJets.C:434
 AddTaskJets.C:435
 AddTaskJets.C:436
 AddTaskJets.C:437
 AddTaskJets.C:438
 AddTaskJets.C:439
 AddTaskJets.C:440
 AddTaskJets.C:441
 AddTaskJets.C:442
 AddTaskJets.C:443
 AddTaskJets.C:444
 AddTaskJets.C:445
 AddTaskJets.C:446
 AddTaskJets.C:447
 AddTaskJets.C:448
 AddTaskJets.C:449
 AddTaskJets.C:450
 AddTaskJets.C:451
 AddTaskJets.C:452
 AddTaskJets.C:453
 AddTaskJets.C:454
 AddTaskJets.C:455
 AddTaskJets.C:456
 AddTaskJets.C:457
 AddTaskJets.C:458
 AddTaskJets.C:459
 AddTaskJets.C:460
 AddTaskJets.C:461
 AddTaskJets.C:462
 AddTaskJets.C:463
 AddTaskJets.C:464
 AddTaskJets.C:465
 AddTaskJets.C:466
 AddTaskJets.C:467
 AddTaskJets.C:468
 AddTaskJets.C:469
 AddTaskJets.C:470
 AddTaskJets.C:471
 AddTaskJets.C:472
 AddTaskJets.C:473
 AddTaskJets.C:474
 AddTaskJets.C:475
 AddTaskJets.C:476
 AddTaskJets.C:477
 AddTaskJets.C:478
 AddTaskJets.C:479
 AddTaskJets.C:480
 AddTaskJets.C:481
 AddTaskJets.C:482
 AddTaskJets.C:483
 AddTaskJets.C:484
 AddTaskJets.C:485
 AddTaskJets.C:486
 AddTaskJets.C:487
 AddTaskJets.C:488
 AddTaskJets.C:489
 AddTaskJets.C:490
 AddTaskJets.C:491
 AddTaskJets.C:492
 AddTaskJets.C:493
 AddTaskJets.C:494
 AddTaskJets.C:495
 AddTaskJets.C:496
 AddTaskJets.C:497
 AddTaskJets.C:498
 AddTaskJets.C:499
 AddTaskJets.C:500