ROOT logo
/* *********************************************************************************
 * File    : AddTaskNetParticle.C  
 * Authors : Jochen Thaeder <jochen@thaeder.de>
 *           Michael Weber <m.weber@cern.ch>
 * *********************************************************************************
 * Configuring NetParticle Task:
 * - ARGUMENTS : 
 *     name           -> Name of the task, containing particle type :
 *                       Currently : Proton, Pion, Kaon, Charge      
 *     isModeDist     -> Fill Distributions
 *     isModeEff      -> Fill Efficiency/Contamination ThnSparse
 *     isModeDCA      -> Fill DCA ThnSparse
 *     isModeQA       -> Fill QA ThnSparse
 *     isModeAOD      -> Use AOD input 
 *     isCreateCSC    -> Prepare for CrossSectionCorrection 
 *                       - requires isModeEff to be set
 *                       - Proton only
 *     isSetExt       -> 1 if want to set pt, nSigma from arguments
 *                       0 takes default values 
 *
 *     modeCSC        -> Use differnt Pt cut for
 *                       0 : TPC+TOF
 *                       1 : TPC
 *     modeCuts       -> Different Cut scenarios
 *                       0 : Standard cuts
 *                       1 : LF cuts
 *     modePID        -> PID Strategy 
 *                      -1 :   Default -> 7 (modeCuts=0) and 5 (modeCuts=1)  
 *                       0 :   TPC(TPClow+TPCHigh)
 *                       1 :   ITS
 *                       2 :   TOF
 *                       3 :   ITS+TPC(TPClow+TPCHigh)
 *                       4 :   TPC(TPClow+TPCHigh)+TOF
 *                       5 :   TPC(TPClow+TPCHigh)+TOF for pT >= fMinPtForTOFRequired TOF is required, below, only used if there
 *                       6 :   TPC(TPClow+TPCHigh)+ITS+TOF with TOF only for those tracks which have TOF information
 *                       7 :   TPC(TPClow+TPCHigh)+ITS+TOF for pT >= fMinPtForTOFRequired TOF is required, below, only used if there
 *                       8 :   TPC(TPClow+TPCHigh)+ITS+TOF 
 * 
 * *********************************************************************************
 * - PID Strategy
 *
* *********************************************************************************
 * - OUTPUT CONTAINER : #N = 5
 *   (1) - Standard Output, Distributions
 *   (2) - Efficiency ThnSparse
 *   (3) - Contamination ThnSparse
 *   (4) - DCA ThnSparse
 *   (5) - QA ThnSparse
 *
 ********************************************************************************* */

AliAnalysisTask *AddTaskNetParticle(const Char_t *name      = "ITS_NetProton", 
				    Bool_t  isModeDist      = kTRUE, 
				    Bool_t  isModeEff       = kFALSE, 
				    Bool_t  isModeDCA       = kFALSE,
				    Bool_t  isModeQA        = kFALSE,
				    Bool_t  isCreateCSC     = kFALSE, 
				    Bool_t  isModeAOD       = kFALSE,
				    Bool_t  isSetExt        = kFALSE,
				    Int_t   aodFilterBit    = 1024, /* 1024 = RAA cuts */
				    Int_t   modeCSC         = 0, 
				    Int_t   modeCuts        = 0, 
				    Int_t   modePID         =-1,
				    Float_t gMinPt          = 0.3,
				    Float_t gMaxPt          = 2.5,
				    Float_t gMinPtForTof    = 0.21,
				    Float_t gMaxPtForTPClow = 0.69,
				    Float_t gMinPtEff       = 0.3,    
				    Float_t gMaxPtEff       = 2.5,
				    Float_t gSigmaITS       = 4.0,
				    Float_t gSigmaTOF       = 4.0,
				    Float_t gSigmaTPC       = 4.0,   
				    Float_t gSigmaTPClow    = 3.0) {

  TString sName(name);

  if (isCreateCSC && !isModeEff) {
    Error("AddTaskNetParticle", "Creating CrossSectionCorrection needs 'isModeEff' to be set.");
    return NULL;
  }

  // ----------------------------------------------
  // -- Get the current analysis manager
  // ----------------------------------------------
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) {
    Error("AddTaskNetParticle", "No analysis manager found.");
    return NULL;
  }

  // ----------------------------------------------
  // -- Check for MC
  // ----------------------------------------------
  Bool_t isMC = (mgr->GetMCtruthEventHandler() != NULL);
  if (isMC)
    Info("AddTaskNetParticle", "This task has MC.");
  
  // ----------------------------------------------
  // -- Create task 
  // ----------------------------------------------
  AliAnalysisTaskNetParticle *task = new AliAnalysisTaskNetParticle("AliAnalysisTaskNetParticle");
  if (!task) {
    Error("AddTaskNetParticle", "Task could not be created.");
    return NULL;
  }

  // ----------------------------------------------
  // -- Configure flags
  // ----------------------------------------------
  if (isMC) 
    task->SetIsMC();
  if (isModeEff) 
    task->SetModeEffCreation(1);             // => 1 = on    | 0 = off (default)
  if (isModeDCA)
    task->SetModeDCACreation(1);             // => 1 = on    | 0 = off (default)
  if (isModeDist)
    task->SetModeDistCreation(1);            // => 1 = on    | 0 = off (default)
  if (isModeAOD) {
    task->SetIsAOD(1);                       // => 1 = AOD   | 0 = ESD (default)
    task->SetTrackFilterBit(aodFilterBit);   
  }
  if (isModeQA)
    task->SetModeQACreation(1);              // => 1 = on    | 0 = off (default)
  
  // ----------------------------------------------
  // -- Create helper class
  // ----------------------------------------------
  AliAnalysisNetParticleHelper *helper = new AliAnalysisNetParticleHelper;
  if (!helper) {
    Error("AddTaskNetParticle", "Helper could not be created.");
    delete task;
    return NULL;
  }

  task->SetNetParticleHelper(helper);

  // ----------------------------------------------
  // -- Set particle type
  // ----------------------------------------------
  Float_t minPt, maxPt, minPtEff, maxPtEff, minPtForTOF, etaMax, etaMaxEff, nSigmaITS, nSigmaTPC, nSigmaTPClow, nSigmaTOF, maxPtForTPClow; 
  Int_t pidStrategy;


if (sName.Contains("Proton")) {
    helper->SetParticleSpecies(AliPID::kProton);
    minPtForTOF    = 0.69;                //    minPtForTOF = 0.21;
    maxPtForTPClow = 0.69;
    minPt          = 0.5;     maxPt   = 2.0;    //    minPt    = 0.22;     maxPt   = 4.5;
    minPtEff       = 0.3;    maxPtEff = 2.5;    //    minPtEff = 0.22;     maxPtEff = 4.5;
    
    etaMax         = 0.8;  
    etaMaxEff      = 0.8;  
    nSigmaITS      = 4.0;   nSigmaTPC = 4.0;   nSigmaTPClow = 3.0;   nSigmaTOF = 4.0; 

    // For TPC only case
    if (isCreateCSC && modeCSC == 1)
      minPtForTOF = maxPtEff;
  }
  else if (sName.Contains("Pion")) {
    helper->SetParticleSpecies(AliPID::kPion);
    minPtForTOF    = 0.3;
    maxPtForTPClow = 0.69;
    minPt          = 0.3;    maxPt    = 1.5;
    minPtEff       = 0.3;    maxPtEff = 2.5;
  
    etaMax         = 8.8;    
    etaMaxEff      = 8.8;  
    nSigmaITS      = 4.0;   nSigmaTPC = 4.0;   nSigmaTPClow = 3.0;   nSigmaTOF = 4.0;   
    pidStrategy    = 1;
  }
  else if (sName.Contains("Kaon")) {
    helper->SetParticleSpecies(AliPID::kKaon);
    minPtForTOF    = 0.3;
    maxPtForTPClow = 0.69;
    minPt          = 0.3;    maxPt    = 1.5;
    minPtEff       = 0.3;    maxPtEff = 2.5;
 
    etaMax         = 0.8;   
    etaMaxEff      = 0.8; 
    nSigmaITS      = 4.0;   nSigmaTPC = 4.0;   nSigmaTPClow = 3.0;   nSigmaTOF = 4.0;      
    pidStrategy    = 1;
  }
  else if (sName.Contains("Charge")) {
    helper->SetUsePID(kFALSE);
    minPtForTOF    = 0.1;
    maxPtForTPClow = 0.1;
    minPt          = 0.1;    maxPt    = 2.5;
    minPtEff       = 0.1;    maxPtEff = 3.0;

    etaMax         = 0.8; 
    etaMaxEff      = 0.8; 
    nSigmaITS      = -1.;   nSigmaTPC = -1.;   nSigmaTOF = -1.;
    pidStrategy    = 1;
  }
  else {
    Error("AddTaskNetParticle", "Unknown Particle type.");
    delete task;
    return NULL;
  }
 
// ----------------------------------------------
// -- use value arguments --
// ----------------------------------------------
 if (isSetExt) {
   minPt          = gMinPt;    
   maxPt          = gMaxPt;
   minPtForTOF    = gMinPtForTof;     
   maxPtForTPClow = gMaxPtForTPClow;
   minPtEff       = gMinPtEff;
   maxPtEff       = gMaxPtEff;
   
   nSigmaITS      = gSigmaITS;   
   nSigmaTPC      = gSigmaTPC;   
   nSigmaTPClow   = gSigmaTPClow;  
   nSigmaTOF      = gSigmaTOF;
    
 }
 // ----------------------------------------------
 // -- PID Strategy
 // ----------------------------------------------
 
  if (modePID     == -1) { // default
    pidStrategy   =   7;         // 7: ITS + TPC + TOF (using minPtForTOF)
    if (modeCuts  ==  1)
      pidStrategy =   5;       // 5: TPC + TOF (using minPtForTOF) 
  }
  else
    pidStrategy   = modePID;
  
  // ----------------------------------------------
  // -- Read Environment Variables 
  // ----------------------------------------------
  ifstream in;
  in.open("setRunENV.txt");
  
  TString current;    
  while(in.good()) {
    in >> current;
    
    TObjArray *arr = current.Tokenize('=');
    if (!arr) 
      continue;
    
    TObjString* oKey = dynamic_cast<TObjString*>(arr->At(0));
    TObjString* oValue = dynamic_cast<TObjString*>(arr->At(1));
    if (!oKey)
      continue;

    TString key(oKey->GetString());
    TString value(oValue->GetString());
   
    if (!key.CompareTo("NETPARTICLE_PID_STRATEGY")) {
      pidStrategy = value.Atoi();
      printf(">>>> USE NETPARTICLE_PID_STRATEGY %d\n", pidStrategy);
    }
    if (!key.CompareTo("NETPARTICLE_NSIGMAMAX_ITS")) {
      nSigmaITS = value.Atof();
      printf(">>>> USE NETPARTICLE_NSIGMAMAX_ITS %.2f\n", nSigmaITS);
    }
    if (!key.CompareTo("NETPARTICLE_NSIGMAMAX_TPC")) {
      nSigmaTPC = value.Atof();
      printf(">>>> USE NETPARTICLE_NSIGMAMAX_TPC %.2f\n", nSigmaTPC);
    }
    if (!key.CompareTo("NETPARTICLE_NSIGMAMAX_TOF")) {
      nSigmaTOF = value.Atof();
      printf(">>>> USE NETPARTICLE_NSIGMAMAX_TOF %.2f\n", nSigmaTOF);
    }

    arr->Clear();
    delete arr;
  }

  in.close();

  // ----------------------------------------------
  // -- Configure cuts 
  // ----------------------------------------------

  // -- Set cut flags 
  task->SetESDTrackCutMode(modeCuts);       // => 0 = normal | 1 = LF

  // -- Set analysis ranges
  task->SetEtaMax(etaMax);                  // eta cut
  task->SetEtaMaxEff(etaMaxEff);            // eta cut for efficiency
  task->SetPtRange(minPt, maxPt);           // pt cut range for the analysis
  task->SetPtRangeEff(minPtEff, maxPtEff);  // pt cut range for the correction / efficiency / contamination creation

  // ----------------------------------------------
  // -- Configure cuts - helper class
  // ----------------------------------------------

  // -- Set standard event cuts
  helper->SetVertexZMax(10.);   
  helper->SetCentralityBinMax(7);

  // -- Set track event cuts
  helper->SetRapidityMax(0.5); 
  //  helper->SetRapidityMax(0.2); 
  helper->SetMinTrackLengthMC(70.);  
  helper->SetNSigmaMaxCdd(0.);    //  3. ||   ->> Turn off sigmaDCA cuts for now
  helper->SetNSigmaMaxCzz(0.);    //  3. ||   ->> Turn off sigmaDCA cuts for now
  helper->SetPhiRange(0., 3.88);  //  Only used if requested in task - default is TwoPi

  // -- Set pid cuts
  helper->SetPIDStrategy(pidStrategy);
  helper->SetNSigmaMaxITS(nSigmaITS);
  helper->SetNSigmaMaxTPC(nSigmaTPC);
  helper->SetNSigmaMaxTPClow(nSigmaTPClow);
  helper->SetNSigmaMaxTOF(nSigmaTOF);
  helper->SetMinPtForTOFRequired(minPtForTOF);
  helper->SetMaxPtForTPClow(maxPtForTPClow);
  
  // -- Set N sub samples
  helper->SetNSubSamples(20);

  // ----------------------------------------------
  // -- Add task to the ANALYSIS manager
  // ----------------------------------------------
  mgr->AddTask(task);

  // ----------------------------------------------
  // -- data containers - input
  // ----------------------------------------------
  AliAnalysisDataContainer *cinput  = mgr->GetCommonInputContainer();

  // ----------------------------------------------
  // -- data containers - output
  // ----------------------------------------------
  TString outputFileName   = Form("%s:%s", AliAnalysisManager::GetCommonFileName(), name);
  TString outputQAFileName = Form("%s:%s", AliAnalysisManager::GetCommonFileName(), name);
    
  AliAnalysisDataContainer *coutput     = mgr->CreateContainer(name, TList::Class(),  AliAnalysisManager::kOutputContainer, outputFileName);
  AliAnalysisDataContainer *coutputEff  = mgr->CreateContainer(Form("%s_eff",  name), TList::Class(), AliAnalysisManager::kOutputContainer, outputFileName);
  AliAnalysisDataContainer *coutputCont = mgr->CreateContainer(Form("%s_cont", name), TList::Class(), AliAnalysisManager::kOutputContainer, outputFileName);
  AliAnalysisDataContainer *coutputDca  = mgr->CreateContainer(Form("%s_dca",  name), TList::Class(), AliAnalysisManager::kOutputContainer, outputFileName);

  AliAnalysisDataContainer *coutputQA   = mgr->CreateContainer(Form("%sQA",    name), TList::Class(), AliAnalysisManager::kOutputContainer, outputQAFileName);
    
  mgr->ConnectInput  (task,  0, cinput );
  mgr->ConnectOutput (task,  1, coutput);
  mgr->ConnectOutput (task,  2, coutputEff);
  mgr->ConnectOutput (task,  3, coutputCont);
  mgr->ConnectOutput (task,  4, coutputDca);
  mgr->ConnectOutput (task,  5, coutputQA);

  return task;
}
 AddTaskNetParticle.C:1
 AddTaskNetParticle.C:2
 AddTaskNetParticle.C:3
 AddTaskNetParticle.C:4
 AddTaskNetParticle.C:5
 AddTaskNetParticle.C:6
 AddTaskNetParticle.C:7
 AddTaskNetParticle.C:8
 AddTaskNetParticle.C:9
 AddTaskNetParticle.C:10
 AddTaskNetParticle.C:11
 AddTaskNetParticle.C:12
 AddTaskNetParticle.C:13
 AddTaskNetParticle.C:14
 AddTaskNetParticle.C:15
 AddTaskNetParticle.C:16
 AddTaskNetParticle.C:17
 AddTaskNetParticle.C:18
 AddTaskNetParticle.C:19
 AddTaskNetParticle.C:20
 AddTaskNetParticle.C:21
 AddTaskNetParticle.C:22
 AddTaskNetParticle.C:23
 AddTaskNetParticle.C:24
 AddTaskNetParticle.C:25
 AddTaskNetParticle.C:26
 AddTaskNetParticle.C:27
 AddTaskNetParticle.C:28
 AddTaskNetParticle.C:29
 AddTaskNetParticle.C:30
 AddTaskNetParticle.C:31
 AddTaskNetParticle.C:32
 AddTaskNetParticle.C:33
 AddTaskNetParticle.C:34
 AddTaskNetParticle.C:35
 AddTaskNetParticle.C:36
 AddTaskNetParticle.C:37
 AddTaskNetParticle.C:38
 AddTaskNetParticle.C:39
 AddTaskNetParticle.C:40
 AddTaskNetParticle.C:41
 AddTaskNetParticle.C:42
 AddTaskNetParticle.C:43
 AddTaskNetParticle.C:44
 AddTaskNetParticle.C:45
 AddTaskNetParticle.C:46
 AddTaskNetParticle.C:47
 AddTaskNetParticle.C:48
 AddTaskNetParticle.C:49
 AddTaskNetParticle.C:50
 AddTaskNetParticle.C:51
 AddTaskNetParticle.C:52
 AddTaskNetParticle.C:53
 AddTaskNetParticle.C:54
 AddTaskNetParticle.C:55
 AddTaskNetParticle.C:56
 AddTaskNetParticle.C:57
 AddTaskNetParticle.C:58
 AddTaskNetParticle.C:59
 AddTaskNetParticle.C:60
 AddTaskNetParticle.C:61
 AddTaskNetParticle.C:62
 AddTaskNetParticle.C:63
 AddTaskNetParticle.C:64
 AddTaskNetParticle.C:65
 AddTaskNetParticle.C:66
 AddTaskNetParticle.C:67
 AddTaskNetParticle.C:68
 AddTaskNetParticle.C:69
 AddTaskNetParticle.C:70
 AddTaskNetParticle.C:71
 AddTaskNetParticle.C:72
 AddTaskNetParticle.C:73
 AddTaskNetParticle.C:74
 AddTaskNetParticle.C:75
 AddTaskNetParticle.C:76
 AddTaskNetParticle.C:77
 AddTaskNetParticle.C:78
 AddTaskNetParticle.C:79
 AddTaskNetParticle.C:80
 AddTaskNetParticle.C:81
 AddTaskNetParticle.C:82
 AddTaskNetParticle.C:83
 AddTaskNetParticle.C:84
 AddTaskNetParticle.C:85
 AddTaskNetParticle.C:86
 AddTaskNetParticle.C:87
 AddTaskNetParticle.C:88
 AddTaskNetParticle.C:89
 AddTaskNetParticle.C:90
 AddTaskNetParticle.C:91
 AddTaskNetParticle.C:92
 AddTaskNetParticle.C:93
 AddTaskNetParticle.C:94
 AddTaskNetParticle.C:95
 AddTaskNetParticle.C:96
 AddTaskNetParticle.C:97
 AddTaskNetParticle.C:98
 AddTaskNetParticle.C:99
 AddTaskNetParticle.C:100
 AddTaskNetParticle.C:101
 AddTaskNetParticle.C:102
 AddTaskNetParticle.C:103
 AddTaskNetParticle.C:104
 AddTaskNetParticle.C:105
 AddTaskNetParticle.C:106
 AddTaskNetParticle.C:107
 AddTaskNetParticle.C:108
 AddTaskNetParticle.C:109
 AddTaskNetParticle.C:110
 AddTaskNetParticle.C:111
 AddTaskNetParticle.C:112
 AddTaskNetParticle.C:113
 AddTaskNetParticle.C:114
 AddTaskNetParticle.C:115
 AddTaskNetParticle.C:116
 AddTaskNetParticle.C:117
 AddTaskNetParticle.C:118
 AddTaskNetParticle.C:119
 AddTaskNetParticle.C:120
 AddTaskNetParticle.C:121
 AddTaskNetParticle.C:122
 AddTaskNetParticle.C:123
 AddTaskNetParticle.C:124
 AddTaskNetParticle.C:125
 AddTaskNetParticle.C:126
 AddTaskNetParticle.C:127
 AddTaskNetParticle.C:128
 AddTaskNetParticle.C:129
 AddTaskNetParticle.C:130
 AddTaskNetParticle.C:131
 AddTaskNetParticle.C:132
 AddTaskNetParticle.C:133
 AddTaskNetParticle.C:134
 AddTaskNetParticle.C:135
 AddTaskNetParticle.C:136
 AddTaskNetParticle.C:137
 AddTaskNetParticle.C:138
 AddTaskNetParticle.C:139
 AddTaskNetParticle.C:140
 AddTaskNetParticle.C:141
 AddTaskNetParticle.C:142
 AddTaskNetParticle.C:143
 AddTaskNetParticle.C:144
 AddTaskNetParticle.C:145
 AddTaskNetParticle.C:146
 AddTaskNetParticle.C:147
 AddTaskNetParticle.C:148
 AddTaskNetParticle.C:149
 AddTaskNetParticle.C:150
 AddTaskNetParticle.C:151
 AddTaskNetParticle.C:152
 AddTaskNetParticle.C:153
 AddTaskNetParticle.C:154
 AddTaskNetParticle.C:155
 AddTaskNetParticle.C:156
 AddTaskNetParticle.C:157
 AddTaskNetParticle.C:158
 AddTaskNetParticle.C:159
 AddTaskNetParticle.C:160
 AddTaskNetParticle.C:161
 AddTaskNetParticle.C:162
 AddTaskNetParticle.C:163
 AddTaskNetParticle.C:164
 AddTaskNetParticle.C:165
 AddTaskNetParticle.C:166
 AddTaskNetParticle.C:167
 AddTaskNetParticle.C:168
 AddTaskNetParticle.C:169
 AddTaskNetParticle.C:170
 AddTaskNetParticle.C:171
 AddTaskNetParticle.C:172
 AddTaskNetParticle.C:173
 AddTaskNetParticle.C:174
 AddTaskNetParticle.C:175
 AddTaskNetParticle.C:176
 AddTaskNetParticle.C:177
 AddTaskNetParticle.C:178
 AddTaskNetParticle.C:179
 AddTaskNetParticle.C:180
 AddTaskNetParticle.C:181
 AddTaskNetParticle.C:182
 AddTaskNetParticle.C:183
 AddTaskNetParticle.C:184
 AddTaskNetParticle.C:185
 AddTaskNetParticle.C:186
 AddTaskNetParticle.C:187
 AddTaskNetParticle.C:188
 AddTaskNetParticle.C:189
 AddTaskNetParticle.C:190
 AddTaskNetParticle.C:191
 AddTaskNetParticle.C:192
 AddTaskNetParticle.C:193
 AddTaskNetParticle.C:194
 AddTaskNetParticle.C:195
 AddTaskNetParticle.C:196
 AddTaskNetParticle.C:197
 AddTaskNetParticle.C:198
 AddTaskNetParticle.C:199
 AddTaskNetParticle.C:200
 AddTaskNetParticle.C:201
 AddTaskNetParticle.C:202
 AddTaskNetParticle.C:203
 AddTaskNetParticle.C:204
 AddTaskNetParticle.C:205
 AddTaskNetParticle.C:206
 AddTaskNetParticle.C:207
 AddTaskNetParticle.C:208
 AddTaskNetParticle.C:209
 AddTaskNetParticle.C:210
 AddTaskNetParticle.C:211
 AddTaskNetParticle.C:212
 AddTaskNetParticle.C:213
 AddTaskNetParticle.C:214
 AddTaskNetParticle.C:215
 AddTaskNetParticle.C:216
 AddTaskNetParticle.C:217
 AddTaskNetParticle.C:218
 AddTaskNetParticle.C:219
 AddTaskNetParticle.C:220
 AddTaskNetParticle.C:221
 AddTaskNetParticle.C:222
 AddTaskNetParticle.C:223
 AddTaskNetParticle.C:224
 AddTaskNetParticle.C:225
 AddTaskNetParticle.C:226
 AddTaskNetParticle.C:227
 AddTaskNetParticle.C:228
 AddTaskNetParticle.C:229
 AddTaskNetParticle.C:230
 AddTaskNetParticle.C:231
 AddTaskNetParticle.C:232
 AddTaskNetParticle.C:233
 AddTaskNetParticle.C:234
 AddTaskNetParticle.C:235
 AddTaskNetParticle.C:236
 AddTaskNetParticle.C:237
 AddTaskNetParticle.C:238
 AddTaskNetParticle.C:239
 AddTaskNetParticle.C:240
 AddTaskNetParticle.C:241
 AddTaskNetParticle.C:242
 AddTaskNetParticle.C:243
 AddTaskNetParticle.C:244
 AddTaskNetParticle.C:245
 AddTaskNetParticle.C:246
 AddTaskNetParticle.C:247
 AddTaskNetParticle.C:248
 AddTaskNetParticle.C:249
 AddTaskNetParticle.C:250
 AddTaskNetParticle.C:251
 AddTaskNetParticle.C:252
 AddTaskNetParticle.C:253
 AddTaskNetParticle.C:254
 AddTaskNetParticle.C:255
 AddTaskNetParticle.C:256
 AddTaskNetParticle.C:257
 AddTaskNetParticle.C:258
 AddTaskNetParticle.C:259
 AddTaskNetParticle.C:260
 AddTaskNetParticle.C:261
 AddTaskNetParticle.C:262
 AddTaskNetParticle.C:263
 AddTaskNetParticle.C:264
 AddTaskNetParticle.C:265
 AddTaskNetParticle.C:266
 AddTaskNetParticle.C:267
 AddTaskNetParticle.C:268
 AddTaskNetParticle.C:269
 AddTaskNetParticle.C:270
 AddTaskNetParticle.C:271
 AddTaskNetParticle.C:272
 AddTaskNetParticle.C:273
 AddTaskNetParticle.C:274
 AddTaskNetParticle.C:275
 AddTaskNetParticle.C:276
 AddTaskNetParticle.C:277
 AddTaskNetParticle.C:278
 AddTaskNetParticle.C:279
 AddTaskNetParticle.C:280
 AddTaskNetParticle.C:281
 AddTaskNetParticle.C:282
 AddTaskNetParticle.C:283
 AddTaskNetParticle.C:284
 AddTaskNetParticle.C:285
 AddTaskNetParticle.C:286
 AddTaskNetParticle.C:287
 AddTaskNetParticle.C:288
 AddTaskNetParticle.C:289
 AddTaskNetParticle.C:290
 AddTaskNetParticle.C:291
 AddTaskNetParticle.C:292
 AddTaskNetParticle.C:293
 AddTaskNetParticle.C:294
 AddTaskNetParticle.C:295
 AddTaskNetParticle.C:296
 AddTaskNetParticle.C:297
 AddTaskNetParticle.C:298
 AddTaskNetParticle.C:299
 AddTaskNetParticle.C:300
 AddTaskNetParticle.C:301
 AddTaskNetParticle.C:302
 AddTaskNetParticle.C:303
 AddTaskNetParticle.C:304
 AddTaskNetParticle.C:305
 AddTaskNetParticle.C:306
 AddTaskNetParticle.C:307
 AddTaskNetParticle.C:308
 AddTaskNetParticle.C:309
 AddTaskNetParticle.C:310
 AddTaskNetParticle.C:311
 AddTaskNetParticle.C:312
 AddTaskNetParticle.C:313
 AddTaskNetParticle.C:314
 AddTaskNetParticle.C:315
 AddTaskNetParticle.C:316
 AddTaskNetParticle.C:317
 AddTaskNetParticle.C:318
 AddTaskNetParticle.C:319
 AddTaskNetParticle.C:320
 AddTaskNetParticle.C:321
 AddTaskNetParticle.C:322
 AddTaskNetParticle.C:323
 AddTaskNetParticle.C:324
 AddTaskNetParticle.C:325
 AddTaskNetParticle.C:326
 AddTaskNetParticle.C:327
 AddTaskNetParticle.C:328
 AddTaskNetParticle.C:329
 AddTaskNetParticle.C:330
 AddTaskNetParticle.C:331
 AddTaskNetParticle.C:332
 AddTaskNetParticle.C:333
 AddTaskNetParticle.C:334
 AddTaskNetParticle.C:335
 AddTaskNetParticle.C:336
 AddTaskNetParticle.C:337
 AddTaskNetParticle.C:338
 AddTaskNetParticle.C:339
 AddTaskNetParticle.C:340
 AddTaskNetParticle.C:341
 AddTaskNetParticle.C:342
 AddTaskNetParticle.C:343
 AddTaskNetParticle.C:344
 AddTaskNetParticle.C:345
 AddTaskNetParticle.C:346
 AddTaskNetParticle.C:347
 AddTaskNetParticle.C:348