ROOT logo

/*************************************************************************************************
***  Add Fragmentation Function Task ***
**************************************************************************************************
The fragmentation function task expects an ESD filter and jet finder running before this task. 
Or it runs on delta-AODs filled with filtered tracks and jets before.

** Parameters **
(char) recJetsBranch: branch in AOD for (reconstructed) jets
(char) genJetsBranch: branch in AOD for (generated) jets
(char) jetType: "AOD"   jets from recJetsBranch
                "AODMC" jets from genJetsBranch
                "KINE"  jets from PYCELL
                 +"b" (e.g. "AODb") jets with acceptance cuts
(char) trackType: "AOD"     reconstructed tracks from AOD filled by ESD filter (choose filter mask!)
                  "AODMC"   MC tracks from AOD filled by kine filter
                  "KINE"    kine particles from MC event 
                  +"2" (e.g. "AOD2")  charged tracks only
                  +"b" (e.g. "AOD2b") with acceptance cuts
(UInt_t) filterMask: select filter bit of ESD filter task

***************************************************************************************************/

// _______________________________________________________________________________________

AliAnalysisTaskIDFFTCF *AddTaskIDFFTCF(
        const char* recJetsBranch,
	const char* recJetsBackBranch,
	const char* genJetsBranch,
	const char* jetType,
	const char* trackType,
	UInt_t filterMask,
        Float_t radius,
        int kBackgroundMode,
        Int_t PtTrackMin,
        Int_t TPCCutMode,
        Int_t TOFCutMode,
        Int_t eventClass=0,
        TString BrOpt="",
        TString BrOpt2="",
        TString BrOpt3="",
        Float_t radiusBckg=0.4,
	Int_t FFMaxTrackPt = -1,
	Int_t FFMinNTracks = 0,
	UInt_t filterMaskTracks = 0,
	Bool_t useLeading = kFALSE)
{
   // Creates a fragmentation function task,
   // configures it and adds it to the analysis manager.

   //******************************************************************************
   //*** Configuration Parameter **************************************************
   //******************************************************************************

   // space for configuration parameter: histo bin, cuts, ...
   // so far only default parameter used

   Int_t debug = -1; // debug level, -1: not set here

   //******************************************************************************


   // Get the pointer to the existing analysis manager via the static access method.
   //==============================================================================
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   if (!mgr) {
	  ::Error("AddTaskFragmentationFunctionNew", "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("AddTaskFragmentationFunctionNew", "This task requires an input event handler");
	  return NULL;
   }

   TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
   Printf("Data Type: %s", type.Data());

   TString branchRecBackJets(recJetsBackBranch);
   TString branchRecJets(recJetsBranch);
   TString branchGenJets(genJetsBranch);
   TString typeJets(jetType);
   TString typeTracks(trackType);

   if(branchRecBackJets.Length()==0) branchRecBackJets = "noRecBackJets";
   if(branchRecJets.Length()==0) branchRecJets = "noRecJets";
   if(branchGenJets.Length()==0) branchGenJets = "noGenJets";
   if(typeTracks.Length()==0) typeTracks = "trackTypeUndef";
   if(typeJets.Length()==0)   typeJets   = "jetTypeUndef";
   
   // Create the task and configure it.
   //===========================================================================

   AliAnalysisTaskIDFFTCF *task = new AliAnalysisTaskIDFFTCF(
        Form("IFFFTCF %s %s %s %s", branchRecJets.Data(), branchGenJets.Data(), typeJets.Data(), typeTracks.Data()));
   
   if(debug>=0) task->SetDebugLevel(debug);
   
   task->SetTPCCutMode(TPCCutMode);
   task->SetTOFCutMode(TOFCutMode);

   Printf("Rec Jets %s", branchRecJets.Data());
   Printf("Back Rec Jets %s", branchRecBackJets.Data());
   Printf("Gen Jets %s", branchGenJets.Data());
   Printf("Jet Type %s", typeJets.Data());
   Printf("Track Type %s", typeTracks.Data());
   
   // attach the filter mask and options
   TString cAdd = "";
   cAdd += Form("%02d",(int)((TMath::Abs(radius)+0.01)*10.));
   cAdd += Form("_B%d",(int)((kBackgroundMode)));
   cAdd += Form("_Filter%05d",filterMask);
   cAdd += Form("_Cut%05d",PtTrackMin);
   cAdd += Form("%s",BrOpt.Data());
   cAdd += Form("%s",BrOpt2.Data());

   Printf("%s",cAdd.Data());

   TString cAddb = "";
   cAddb += Form("%02d",(int)((radiusBckg+0.01)*10.));
   cAddb += Form("_B%d",(int)((kBackgroundMode)));
   cAddb += Form("_Filter%05d",filterMask);
   cAddb += Form("_Cut%05d",PtTrackMin);
   cAddb += Form("%s",BrOpt.Data());
   cAddb += Form("%s",BrOpt2.Data());

   Printf("%s",cAddb.Data());

   TString cAddmc = "";
   cAddmc += Form("%02d",(int)((TMath::Abs(radius)+0.01)*10.));
   cAddmc += Form("_B%d",(int)((kBackgroundMode)));
   cAddmc += Form("_Filter%05d",filterMask);
   cAddmc += Form("_Cut%05d",PtTrackMin);
   cAddmc += Form("%s",BrOpt3.Data());

   Printf("%s",cAddmc.Data());


   if(branchRecJets.Contains("AOD")&&branchRecJets.Contains("jets")&&!branchRecJets.Contains("MC"))branchRecJets = branchRecJets + cAdd;
   if(branchRecJets.Contains("AOD")&&branchRecJets.Contains("cluster")&&!branchRecJets.Contains("MC"))branchRecJets = branchRecJets + cAdd;

   if(branchRecBackJets.Contains("back")&&branchRecBackJets.Contains("cluster")&&!branchRecBackJets.Contains("MC"))branchRecBackJets = branchRecBackJets + cAddb; 

   if(branchGenJets.Contains("AOD")&&branchGenJets.Contains("MC"))branchGenJets = branchGenJets + cAddmc;

   Printf("Gen jets branch %s: ", branchGenJets.Data());
   Printf("Rec jets branch %s: ", branchRecJets.Data());
   Printf("Jet backg branch %s: ", branchRecBackJets.Data());

   if(!branchRecJets.Contains("noRecJets")) task->SetBranchRecJets(branchRecJets);
   if(!branchRecBackJets.Contains("noRecBackJets")) task->SetBranchRecBackJets(branchRecBackJets);
   if(!branchGenJets.Contains("noGenJets")) task->SetBranchGenJets(branchGenJets);


   if(typeTracks.Contains("AODMC2b"))      task->SetTrackTypeGen(AliAnalysisTaskIDFFTCF::kTrackAODMCChargedAcceptance);
   else if(typeTracks.Contains("AODMC2"))  task->SetTrackTypeGen(AliAnalysisTaskIDFFTCF::kTrackAODMCCharged);
   else if(typeTracks.Contains("AODMC"))   task->SetTrackTypeGen(AliAnalysisTaskIDFFTCF::kTrackAODMCAll);
   else if(typeTracks.Contains("KINE2b"))  task->SetTrackTypeGen(AliAnalysisTaskIDFFTCF::kTrackKineChargedAcceptance);
   else if(typeTracks.Contains("KINE2"))   task->SetTrackTypeGen(AliAnalysisTaskIDFFTCF::kTrackKineCharged);
   else if(typeTracks.Contains("KINE"))    task->SetTrackTypeGen(AliAnalysisTaskIDFFTCF::kTrackKineAll);
   else if(typeTracks.Contains("AODb"))    task->SetTrackTypeGen(AliAnalysisTaskIDFFTCF::kTrackAODCuts);
   else if(typeTracks.Contains("AOD"))     task->SetTrackTypeGen(AliAnalysisTaskIDFFTCF::kTrackAOD);
   else if(typeTracks.Contains("trackTypeUndef")) task->SetTrackTypeGen(0); // undefined
   else Printf("trackType %s not found", typeTracks.Data());

   if(typeJets.Contains("AODMCb"))         task->SetJetTypeGen(AliAnalysisTaskIDFFTCF::kJetsGenAcceptance);
   else if(typeJets.Contains("AODMC"))     task->SetJetTypeGen(AliAnalysisTaskIDFFTCF::kJetsGen);
   else if(typeJets.Contains("KINEb"))     task->SetJetTypeGen(AliAnalysisTaskIDFFTCF::kJetsKineAcceptance);
   else if(typeJets.Contains("KINE"))      task->SetJetTypeGen(AliAnalysisTaskIDFFTCF::kJetsKine);
   else if(typeJets.Contains("AODb"))      task->SetJetTypeGen(AliAnalysisTaskIDFFTCF::kJetsRecAcceptance);
   else if(typeJets.Contains("AOD"))       task->SetJetTypeGen(AliAnalysisTaskIDFFTCF::kJetsRec);
   else if(typeJets.Contains("jetTypeUndef")) task->SetJetTypeGen(0); // undefined
   else Printf("jetType %s not found", typeJets.Data());
   
   if(typeJets.Contains("AODMCb")) task->SetJetTypeRecEff(AliAnalysisTaskIDFFTCF::kJetsGenAcceptance); // kJetsRecAcceptance
   else if(typeJets.Contains("AODb")) task->SetJetTypeRecEff(AliAnalysisTaskIDFFTCF::kJetsRecAcceptance); 
   else task->SetJetTypeRecEff(0);

   if(!filterMaskTracks) task->SetFilterMask(filterMask);
   else task->SetFilterMask(filterMaskTracks);

   task->SetEventSelectionMask(AliVEvent::kMB);
   task->SetEventClass(eventClass);
  
   // Set default parameters 
   // Cut selection 

   if(PtTrackMin == 150)       task->SetTrackCuts();  // default : pt > 0.150 GeV, |eta|<0.9, full phi acc
   else if(PtTrackMin == 1000) task->SetTrackCuts(1.0, -0.9, 0.9, 0., 2*TMath::Pi());
   else if(PtTrackMin == 2000) task->SetTrackCuts(2.0, -0.9, 0.9, 0., 2*TMath::Pi());
   else                        task->SetTrackCuts(0.001*PtTrackMin,-0.9, 0.9, 0., 2*TMath::Pi());


   task->SetJetCuts();          // default: jet pt > 5 GeV, |eta|<0.5, full phi acc
   task->SetFFRadius(radius); 
   task->SetQAMode();           // default: qaMode = 3
   task->SetFFMode();           // default: ffMode = 1
   task->SetEffMode(0);         // default: effMode = 1
   task->SetHighPtThreshold();  // default: pt > 5 Gev

   // Define histo bins
   task->SetFFHistoBins(23, 5, 120, 480, 0., 120.,70,  0., 7., 52, 0.,  1.3);

   task->SetQAJetHistoBins();
   task->SetQATrackHistoBins();

   if(FFMaxTrackPt>0) task->SetFFMaxTrackPt(FFMaxTrackPt);
   if(FFMinNTracks>0) task->SetFFMinNTracks(FFMinNTracks);
   if(useLeading)     task->UseLeadingJet(kTRUE);

   mgr->AddTask(task);

   // 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
   //==============================================================================
   
   TString strList(Form("fracfunc_%s_%s_%s_%s_tpc%d_tof%d_cl%d", branchRecJets.Data(), branchGenJets.Data(), typeTracks.Data(), typeJets.Data(), TPCCutMode, TOFCutMode, eventClass));
   
   TString strDir(Form("%s:PWGJE_FragmentationFunction_%s_%s_%s_%s_tpc%d_tof%d_cl%d", 
		       AliAnalysisManager::GetCommonFileName(), branchRecJets.Data(), branchGenJets. Data(), 
		       typeTracks.Data(), typeJets.Data(), TPCCutMode, TOFCutMode, eventClass));



   if(FFMaxTrackPt>0){
     strList += Form("_FFMaxPt%d", FFMaxTrackPt);
     strDir  += Form("_FFMaxPt%d", FFMaxTrackPt);
   }
   if(FFMinNTracks>0){
     strList += Form("_minNTr%d",FFMinNTracks);
     strDir  += Form("_minNTr%d",FFMinNTracks);
   }

   if(radius<0){
     strList += "_trackRefs";
     strDir  += "_trackRefs";
   }
   if(filterMaskTracks){
     strList += Form("_TrackFilter%05d",filterMaskTracks);
     strDir  += Form("_TrackFilter%05d",filterMaskTracks);
   }
   if(useLeading){
     strList += "_lJet";
     strDir  += "_lJet";
   }


   AliAnalysisDataContainer *coutput_FragFunc = mgr->CreateContainer(strList,TList::Class(),
								     AliAnalysisManager::kOutputContainer,
								     strDir);

   mgr->ConnectInput  (task, 0, mgr->GetCommonInputContainer());
   //mgr->ConnectOutput (task, 0, mgr->GetCommonOutputContainer()); // OB
   mgr->ConnectOutput (task, 1, coutput_FragFunc);
   
   if(AliAnalysisTaskIDFFTCF::fkDump){
     AliAnalysisDataContainer *dtree = mgr->CreateContainer(strList+"_tree",  TTree::Class(), AliAnalysisManager::kOutputContainer, strDir);
     mgr->ConnectOutput (task, 2, dtree);
   }

   printf("======================= TPCCutMode %d ----------- TOFCutMode %d\n", task->GetTPCCutMode(), task->GetTOFCutMode());

   return task;
}
 AddTaskIDFFTCF.C:1
 AddTaskIDFFTCF.C:2
 AddTaskIDFFTCF.C:3
 AddTaskIDFFTCF.C:4
 AddTaskIDFFTCF.C:5
 AddTaskIDFFTCF.C:6
 AddTaskIDFFTCF.C:7
 AddTaskIDFFTCF.C:8
 AddTaskIDFFTCF.C:9
 AddTaskIDFFTCF.C:10
 AddTaskIDFFTCF.C:11
 AddTaskIDFFTCF.C:12
 AddTaskIDFFTCF.C:13
 AddTaskIDFFTCF.C:14
 AddTaskIDFFTCF.C:15
 AddTaskIDFFTCF.C:16
 AddTaskIDFFTCF.C:17
 AddTaskIDFFTCF.C:18
 AddTaskIDFFTCF.C:19
 AddTaskIDFFTCF.C:20
 AddTaskIDFFTCF.C:21
 AddTaskIDFFTCF.C:22
 AddTaskIDFFTCF.C:23
 AddTaskIDFFTCF.C:24
 AddTaskIDFFTCF.C:25
 AddTaskIDFFTCF.C:26
 AddTaskIDFFTCF.C:27
 AddTaskIDFFTCF.C:28
 AddTaskIDFFTCF.C:29
 AddTaskIDFFTCF.C:30
 AddTaskIDFFTCF.C:31
 AddTaskIDFFTCF.C:32
 AddTaskIDFFTCF.C:33
 AddTaskIDFFTCF.C:34
 AddTaskIDFFTCF.C:35
 AddTaskIDFFTCF.C:36
 AddTaskIDFFTCF.C:37
 AddTaskIDFFTCF.C:38
 AddTaskIDFFTCF.C:39
 AddTaskIDFFTCF.C:40
 AddTaskIDFFTCF.C:41
 AddTaskIDFFTCF.C:42
 AddTaskIDFFTCF.C:43
 AddTaskIDFFTCF.C:44
 AddTaskIDFFTCF.C:45
 AddTaskIDFFTCF.C:46
 AddTaskIDFFTCF.C:47
 AddTaskIDFFTCF.C:48
 AddTaskIDFFTCF.C:49
 AddTaskIDFFTCF.C:50
 AddTaskIDFFTCF.C:51
 AddTaskIDFFTCF.C:52
 AddTaskIDFFTCF.C:53
 AddTaskIDFFTCF.C:54
 AddTaskIDFFTCF.C:55
 AddTaskIDFFTCF.C:56
 AddTaskIDFFTCF.C:57
 AddTaskIDFFTCF.C:58
 AddTaskIDFFTCF.C:59
 AddTaskIDFFTCF.C:60
 AddTaskIDFFTCF.C:61
 AddTaskIDFFTCF.C:62
 AddTaskIDFFTCF.C:63
 AddTaskIDFFTCF.C:64
 AddTaskIDFFTCF.C:65
 AddTaskIDFFTCF.C:66
 AddTaskIDFFTCF.C:67
 AddTaskIDFFTCF.C:68
 AddTaskIDFFTCF.C:69
 AddTaskIDFFTCF.C:70
 AddTaskIDFFTCF.C:71
 AddTaskIDFFTCF.C:72
 AddTaskIDFFTCF.C:73
 AddTaskIDFFTCF.C:74
 AddTaskIDFFTCF.C:75
 AddTaskIDFFTCF.C:76
 AddTaskIDFFTCF.C:77
 AddTaskIDFFTCF.C:78
 AddTaskIDFFTCF.C:79
 AddTaskIDFFTCF.C:80
 AddTaskIDFFTCF.C:81
 AddTaskIDFFTCF.C:82
 AddTaskIDFFTCF.C:83
 AddTaskIDFFTCF.C:84
 AddTaskIDFFTCF.C:85
 AddTaskIDFFTCF.C:86
 AddTaskIDFFTCF.C:87
 AddTaskIDFFTCF.C:88
 AddTaskIDFFTCF.C:89
 AddTaskIDFFTCF.C:90
 AddTaskIDFFTCF.C:91
 AddTaskIDFFTCF.C:92
 AddTaskIDFFTCF.C:93
 AddTaskIDFFTCF.C:94
 AddTaskIDFFTCF.C:95
 AddTaskIDFFTCF.C:96
 AddTaskIDFFTCF.C:97
 AddTaskIDFFTCF.C:98
 AddTaskIDFFTCF.C:99
 AddTaskIDFFTCF.C:100
 AddTaskIDFFTCF.C:101
 AddTaskIDFFTCF.C:102
 AddTaskIDFFTCF.C:103
 AddTaskIDFFTCF.C:104
 AddTaskIDFFTCF.C:105
 AddTaskIDFFTCF.C:106
 AddTaskIDFFTCF.C:107
 AddTaskIDFFTCF.C:108
 AddTaskIDFFTCF.C:109
 AddTaskIDFFTCF.C:110
 AddTaskIDFFTCF.C:111
 AddTaskIDFFTCF.C:112
 AddTaskIDFFTCF.C:113
 AddTaskIDFFTCF.C:114
 AddTaskIDFFTCF.C:115
 AddTaskIDFFTCF.C:116
 AddTaskIDFFTCF.C:117
 AddTaskIDFFTCF.C:118
 AddTaskIDFFTCF.C:119
 AddTaskIDFFTCF.C:120
 AddTaskIDFFTCF.C:121
 AddTaskIDFFTCF.C:122
 AddTaskIDFFTCF.C:123
 AddTaskIDFFTCF.C:124
 AddTaskIDFFTCF.C:125
 AddTaskIDFFTCF.C:126
 AddTaskIDFFTCF.C:127
 AddTaskIDFFTCF.C:128
 AddTaskIDFFTCF.C:129
 AddTaskIDFFTCF.C:130
 AddTaskIDFFTCF.C:131
 AddTaskIDFFTCF.C:132
 AddTaskIDFFTCF.C:133
 AddTaskIDFFTCF.C:134
 AddTaskIDFFTCF.C:135
 AddTaskIDFFTCF.C:136
 AddTaskIDFFTCF.C:137
 AddTaskIDFFTCF.C:138
 AddTaskIDFFTCF.C:139
 AddTaskIDFFTCF.C:140
 AddTaskIDFFTCF.C:141
 AddTaskIDFFTCF.C:142
 AddTaskIDFFTCF.C:143
 AddTaskIDFFTCF.C:144
 AddTaskIDFFTCF.C:145
 AddTaskIDFFTCF.C:146
 AddTaskIDFFTCF.C:147
 AddTaskIDFFTCF.C:148
 AddTaskIDFFTCF.C:149
 AddTaskIDFFTCF.C:150
 AddTaskIDFFTCF.C:151
 AddTaskIDFFTCF.C:152
 AddTaskIDFFTCF.C:153
 AddTaskIDFFTCF.C:154
 AddTaskIDFFTCF.C:155
 AddTaskIDFFTCF.C:156
 AddTaskIDFFTCF.C:157
 AddTaskIDFFTCF.C:158
 AddTaskIDFFTCF.C:159
 AddTaskIDFFTCF.C:160
 AddTaskIDFFTCF.C:161
 AddTaskIDFFTCF.C:162
 AddTaskIDFFTCF.C:163
 AddTaskIDFFTCF.C:164
 AddTaskIDFFTCF.C:165
 AddTaskIDFFTCF.C:166
 AddTaskIDFFTCF.C:167
 AddTaskIDFFTCF.C:168
 AddTaskIDFFTCF.C:169
 AddTaskIDFFTCF.C:170
 AddTaskIDFFTCF.C:171
 AddTaskIDFFTCF.C:172
 AddTaskIDFFTCF.C:173
 AddTaskIDFFTCF.C:174
 AddTaskIDFFTCF.C:175
 AddTaskIDFFTCF.C:176
 AddTaskIDFFTCF.C:177
 AddTaskIDFFTCF.C:178
 AddTaskIDFFTCF.C:179
 AddTaskIDFFTCF.C:180
 AddTaskIDFFTCF.C:181
 AddTaskIDFFTCF.C:182
 AddTaskIDFFTCF.C:183
 AddTaskIDFFTCF.C:184
 AddTaskIDFFTCF.C:185
 AddTaskIDFFTCF.C:186
 AddTaskIDFFTCF.C:187
 AddTaskIDFFTCF.C:188
 AddTaskIDFFTCF.C:189
 AddTaskIDFFTCF.C:190
 AddTaskIDFFTCF.C:191
 AddTaskIDFFTCF.C:192
 AddTaskIDFFTCF.C:193
 AddTaskIDFFTCF.C:194
 AddTaskIDFFTCF.C:195
 AddTaskIDFFTCF.C:196
 AddTaskIDFFTCF.C:197
 AddTaskIDFFTCF.C:198
 AddTaskIDFFTCF.C:199
 AddTaskIDFFTCF.C:200
 AddTaskIDFFTCF.C:201
 AddTaskIDFFTCF.C:202
 AddTaskIDFFTCF.C:203
 AddTaskIDFFTCF.C:204
 AddTaskIDFFTCF.C:205
 AddTaskIDFFTCF.C:206
 AddTaskIDFFTCF.C:207
 AddTaskIDFFTCF.C:208
 AddTaskIDFFTCF.C:209
 AddTaskIDFFTCF.C:210
 AddTaskIDFFTCF.C:211
 AddTaskIDFFTCF.C:212
 AddTaskIDFFTCF.C:213
 AddTaskIDFFTCF.C:214
 AddTaskIDFFTCF.C:215
 AddTaskIDFFTCF.C:216
 AddTaskIDFFTCF.C:217
 AddTaskIDFFTCF.C:218
 AddTaskIDFFTCF.C:219
 AddTaskIDFFTCF.C:220
 AddTaskIDFFTCF.C:221
 AddTaskIDFFTCF.C:222
 AddTaskIDFFTCF.C:223
 AddTaskIDFFTCF.C:224
 AddTaskIDFFTCF.C:225
 AddTaskIDFFTCF.C:226
 AddTaskIDFFTCF.C:227
 AddTaskIDFFTCF.C:228
 AddTaskIDFFTCF.C:229
 AddTaskIDFFTCF.C:230
 AddTaskIDFFTCF.C:231
 AddTaskIDFFTCF.C:232
 AddTaskIDFFTCF.C:233
 AddTaskIDFFTCF.C:234
 AddTaskIDFFTCF.C:235
 AddTaskIDFFTCF.C:236
 AddTaskIDFFTCF.C:237
 AddTaskIDFFTCF.C:238
 AddTaskIDFFTCF.C:239
 AddTaskIDFFTCF.C:240
 AddTaskIDFFTCF.C:241
 AddTaskIDFFTCF.C:242
 AddTaskIDFFTCF.C:243
 AddTaskIDFFTCF.C:244
 AddTaskIDFFTCF.C:245
 AddTaskIDFFTCF.C:246
 AddTaskIDFFTCF.C:247
 AddTaskIDFFTCF.C:248
 AddTaskIDFFTCF.C:249
 AddTaskIDFFTCF.C:250
 AddTaskIDFFTCF.C:251
 AddTaskIDFFTCF.C:252
 AddTaskIDFFTCF.C:253
 AddTaskIDFFTCF.C:254
 AddTaskIDFFTCF.C:255
 AddTaskIDFFTCF.C:256
 AddTaskIDFFTCF.C:257
 AddTaskIDFFTCF.C:258
 AddTaskIDFFTCF.C:259
 AddTaskIDFFTCF.C:260
 AddTaskIDFFTCF.C:261
 AddTaskIDFFTCF.C:262
 AddTaskIDFFTCF.C:263
 AddTaskIDFFTCF.C:264
 AddTaskIDFFTCF.C:265
 AddTaskIDFFTCF.C:266
 AddTaskIDFFTCF.C:267