ROOT logo

class AliAnalysisDataContainer;
class AliFlowTrackCuts;
class AliFlowTrackSimpleCuts;
class AliFlowEventCuts;
class AliFlowEventSimpleCuts;


void AddTaskPIDFlowSP(Int_t triggerSelectionString=AliVEvent::kMB,
                                   Float_t etamin=-0.8,
                                   Float_t etamax=0.8,
                                   Float_t EtaGap=0.2,
                                   TString fileNameBase="AnalysisResults",
                                   TString uniqueStr="Pion_02",
                                   TString Qvector ="Qa",
                                   Int_t AODfilterBit = 272,
                                   Int_t charge=0,
                                   Int_t MinTPCdedx = 10,
                                   Int_t ncentrality = 6,
                                   Bool_t doQA=kTRUE,
                                   Bool_t isPID = kTRUE,
                                   Bool_t VZERO = kFALSE, // use vzero sp method
                                   Bool_t is2011 = kFALSE,
                                   AliPID::EParticleType particleType=AliPID::kPion,
                                   AliFlowTrackCuts::PIDsource sourcePID=AliFlowTrackCuts::kTOFbayesian) {

// Define a range of the detector to exclude
Bool_t ExcludeRegion = kFALSE;
Double_t excludeEtaMin = -0.;
Double_t excludeEtaMax = 0.;
Double_t excludePhiMin = 0.;
Double_t excludePhiMax = 0.;
   
//Define the range for eta subevents (for SP method) with TPC
Double_t minA = -0.8;//
Double_t maxA = -0.5*EtaGap;//
Double_t minB = +0.5*EtaGap;//
Double_t maxB = +0.8;//
    
int centrMin[9] = {0,5,10,20,30,40,50,60,70};
int centrMax[9] = {5,10,20,30,40,50,60,70,80};
const int ncentr = ncentrality;
    
    
//---------Data selection---------- ESD only!!!
//kMC, kGlobal, kESD_TPConly, kESD_SPDtracklet
AliFlowTrackCuts::trackParameterType rptype = AliFlowTrackCuts::kTPCstandalone;
AliFlowTrackCuts::trackParameterType poitype = AliFlowTrackCuts::kTPCstandalone;
    
//---------Parameter mixing--------
//kPure - no mixing, kTrackWithMCkine, kTrackWithMCPID, kTrackWithMCpt
AliFlowTrackCuts::trackParameterMix rpmix = AliFlowTrackCuts::kPure;
AliFlowTrackCuts::trackParameterMix poimix = AliFlowTrackCuts::kPure;
    
const char* rptypestr = AliFlowTrackCuts::GetParamTypeName(rptype);  //ESD
const char* poitypestr = AliFlowTrackCuts::GetParamTypeName(poitype); //ESD

    
//===========================================================================
// EVENTS CUTS:
AliFlowEventCuts* cutsEvent[ncentr];
AliFlowTrackCuts* cutsRP[ncentr];
AliFlowTrackCuts* cutsPOI[ncentr];
TString outputSlotName[ncentr][4];
TString suffixName[ncentr];
    
for(int icentr=0;icentr<ncentr;icentr++){
    cutsEvent[icentr] = new AliFlowEventCuts(Form("eventcuts_%d",icentr));
    cutsEvent[icentr]->SetLHC11h(is2011);
    cutsEvent[icentr]->SetCentralityPercentileRange(centrMin[icentr],centrMax[icentr]);
    cutsEvent[icentr]->SetCentralityPercentileMethod(AliFlowEventCuts::kV0);
    //  cutsEvent[icentr]->SetRefMultMethod(AliFlowEventCuts::kVZERO);
    //cutsEvent[icentr]->SetCentralityPercentileMethod(AliFlowEventCuts::kSPD1tracklets);
    //cutsEvent[icentr]->SetNContributorsRange(2);
    cutsEvent[icentr]->SetPrimaryVertexZrange(-10.,10.);
    cutsEvent[icentr]->SetQA(doQA);
    cutsEvent[icentr]->SetCutTPCmultiplicityOutliers();
    
    
    // RP TRACK CUTS:
    if(!VZERO){
        cutsRP[icentr] = new AliFlowTrackCuts(Form("RP_%d",icentr));
        //cutsRP[icentr]->SetParamType(rptype);
        //cutsRP[icentr]->SetParamMix(rpmix);
        cutsRP[icentr]->SetPtRange(0.2,5.);
        cutsRP[icentr]->SetEtaRange(etamin,etamax);
        cutsRP[icentr]->SetMinNClustersTPC(70);
        cutsRP[icentr]->SetMinChi2PerClusterTPC(0.1);
        cutsRP[icentr]->SetMaxChi2PerClusterTPC(4.0);
        cutsRP[icentr]->SetMaxDCAToVertexXY(2.4);
        cutsRP[icentr]->SetMaxDCAToVertexZ(3.0);
        cutsRP[icentr]->SetAcceptKinkDaughters(kFALSE);
        cutsRP[icentr]->SetMinimalTPCdedx(MinTPCdedx);
        cutsRP[icentr]->SetAODfilterBit(AODfilterBit);
    }
    
    if(VZERO) { // use vzero sub analysis
        if(!is2011) cutsRP[icentr] = AliFlowTrackCuts::GetStandardVZEROOnlyTrackCuts2010(); // select vzero tracks
        if(is2011)  cutsRP[icentr] = AliFlowTrackCuts::GetStandardVZEROOnlyTrackCuts2011(); // select vzero tracks
        
        if(!cutsRP[icentr]) {
            cout << " Fatal error: no RP cuts found! " << endl;
            return 0x0;
        }

     }//vzero is not a tracking device it is just a scintillator. so pt range or DCAtoVertex are not set here.
    cutsRP[icentr]->SetQA(doQA);

    
    //POIs for SP and QC method
    //===========================================================================
    AliFlowTrackCuts  *SP_POI[ncentr];
    //half window for POIs
    //=======================SP POI Cuts
    SP_POI[icentr] = DefinePOIcuts(icentr);

    SP_POI[icentr]->GetBayesianResponse()->ForceOldDedx(); // for 2010 data to use old TPC PID Response instead of the official one
    //SP_POI[icentr]->SetParamType(poitype);
    //SP_POI[icentr]->SetParamMix(poimix);
    SP_POI[icentr]->SetPtRange(0.2,5.);//
    SP_POI[icentr]->SetMinNClustersTPC(70);
    SP_POI[icentr]->SetMinChi2PerClusterTPC(0.1);
    SP_POI[icentr]->SetMaxChi2PerClusterTPC(4.0);
    if(!VZERO && Qvector=="Qa"){
        SP_POI[icentr]->SetEtaRange( +0.5*EtaGap, etamax );
        printf(" > NOTE: Using half TPC (Qa) as POI selection u < \n");

    }
    if(!VZERO && Qvector=="Qb"){
        SP_POI[icentr]->SetEtaRange( etamin,-0.5*EtaGap );
        printf(" > NOTE: Using half TPC (Qb) as POI selection u < \n");

    }
    if(VZERO){
        SP_POI[icentr]->SetEtaRange( etamin,etamax );
        printf(" > NOTE: Using full TPC as POI selection u < \n");
    }
    //SP_POI->SetRequireITSRefit(kTRUE);
    //SP_POI->SetRequireTPCRefit(kTRUE);
    //SP_POI->SetMinNClustersITS(2);
    //SP_POI->SetMaxChi2PerClusterITS(1.e+09);
    SP_POI[icentr]->SetMaxDCAToVertexXY(2.4);
    SP_POI[icentr]->SetMaxDCAToVertexZ(3.0);
    //SP_POI->SetDCAToVertex2D(kTRUE);
    //SP_POI->SetMaxNsigmaToVertex(1.e+10);
    //SP_POI->SetRequireSigmaToVertex(kFALSE);
    SP_POI[icentr]->SetAcceptKinkDaughters(kFALSE);
    if(isPID) SP_POI[icentr]->SetPID(particleType, sourcePID);//particleType, sourcePID
    if (charge!=0) SP_POI[icentr]->SetCharge(charge);
    //SP_POI->SetAllowTOFmismatch(kFALSE);
    SP_POI[icentr]->SetRequireStrictTOFTPCagreement(kTRUE);
    SP_POI[icentr]->SetMinimalTPCdedx(MinTPCdedx);
    SP_POI[icentr]->SetAODfilterBit(AODfilterBit);
    SP_POI[icentr]->SetQA(doQA);
    SP_POI[icentr]->SetPriors((centrMin[icentr]+centrMax[icentr])*0.5);




    //=====================================================================
 
    if(!VZERO && Qvector=="Qa") suffixName[icentr] = "Qa";
    if(!VZERO && Qvector=="Qb") suffixName[icentr] = "Qb";
    if(VZERO) suffixName[icentr] = "vzero";
    suffixName[icentr] += "-highharmflow";
    suffixName[icentr] += Form("%i_", centrMin[icentr]);
    suffixName[icentr] += Form("%i_", centrMax[icentr]);
    suffixName[icentr] += Form("%.f_", EtaGap*10);

    if(isPID){
        suffixName[icentr]+=AliFlowTrackCuts::PIDsourceName(sourcePID);
        suffixName[icentr]+="_";
        suffixName[icentr]+=AliPID::ParticleName(particleType);//particleType
    }
    else{
        suffixName[icentr]+="AllCharged";
    }
    if (charge<0) suffixName[icentr]+="-";
    if (charge>0) suffixName[icentr]+="+";


    for(int harmonic=2;harmonic<6;harmonic++){  //for v2,v3,v4 and v5
        outputSlotName[icentr][harmonic-2] = "";
        outputSlotName[icentr][harmonic-2]+=uniqueStr;
        outputSlotName[icentr][harmonic-2]+=Form("_v%i_",harmonic);
        outputSlotName[icentr][harmonic-2]+=cutsRP[icentr]->GetName();
        outputSlotName[icentr][harmonic-2]+="_";
        outputSlotName[icentr][harmonic-2]+=SP_POI[icentr]->GetName();
        outputSlotName[icentr][harmonic-2]+=Form("_%i-",centrMin[icentr]);
        outputSlotName[icentr][harmonic-2]+=Form("%i_",centrMax[icentr]);
        
        
        if(isPID){
            outputSlotName[icentr][harmonic-2]+=AliFlowTrackCuts::PIDsourceName(sourcePID);//sourcePID
            outputSlotName[icentr][harmonic-2]+="_";
            outputSlotName[icentr][harmonic-2]+=AliPID::ParticleName(particleType);//particleType
        }
        else{
            outputSlotName[icentr][harmonic-2]+="AllCharged";
        }
        if (charge<0) outputSlotName[icentr][harmonic-2]+="-";
        if (charge>0) outputSlotName[icentr][harmonic-2]+="+";
    }
}


TString fileName(fileNameBase);
fileName.Append(".root");


    
//====================================FLOWPACKAGE TASKS=========================//
AliAnalysisDataContainer *cinput1[ncentr];
AliAnalysisDataContainer *coutputFE[ncentr];
AliAnalysisDataContainer* coutputFEQA[ncentr];
AliAnalysisTaskFlowEvent *taskFE[ncentr];

AliAnalysisDataContainer *flowEvent[ncentr][4];
AliAnalysisTaskFilterFE *tskFilter[ncentr][4];

AliAnalysisDataContainer *coutputSP[ncentr][4];
AliAnalysisTaskScalarProduct *taskSP[ncentr][4];

TString outputQA[ncentr];
TString myNameSP[ncentr][4];
TString slot[ncentr][4];

for (int icentr=0; icentr<ncentr; icentr++) {
        
    // Get the pointer to the existing analysis manager via the static access method.
        //==============================================================================
    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
    if (!mgr) {
        Error("AddTaskFlowEvent", "No analysis manager to connect to.");
        return NULL;
    }
        
    // Check the analysis type using the event handlers connected to the analysis
    // manager. The availability of MC handler can also be checked here.
    //==============================================================================
    if (!mgr->GetInputEventHandler()) {
        ::Error("AddTaskFlowEvent", "This task requires an input event handler");
        return NULL;
    }

    taskFE[icentr] = new AliAnalysisTaskFlowEvent(Form("TaskFlowEvent_%s",suffixName[icentr].Data()),"",doQA);
    taskFE[icentr]->SelectCollisionCandidates(triggerSelectionString);
    
  //  if(taskFE[icentr]->SetVZEROSubEvents(EP3sub)) cout << " --> Setting up VZERO subevents method ... " << endl;
    
    if(!VZERO) taskFE[icentr]->SetSubeventEtaRange(minA, maxA, minB, maxB);
    if(VZERO)  taskFE[icentr]->SetSubeventEtaRange(-5,-1.5,+1.5,5);
    mgr->AddTask(taskFE[icentr]);

    // Pass cuts for RPs and POIs to the task:
    taskFE[icentr]->SetCutsEvent(cutsEvent[icentr]);
    taskFE[icentr]->SetCutsRP(cutsRP[icentr]);
    taskFE[icentr]->SetCutsPOI(SP_POI[icentr]);
    if (cutsRP[icentr]->GetParamType()==AliFlowTrackCuts::kVZERO)
    {
        //TODO: since this is set in a static object all analyses in an analysis train
        //will be affected.
        taskFE[icentr]->SetHistWeightvsPhiMin(0.);
        taskFE[icentr]->SetHistWeightvsPhiMax(200.);
    }
    
    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
    
    cinput1[icentr] = mgr->GetCommonInputContainer();
    
    coutputFE[icentr] = mgr->CreateContainer(Form("FlowEvent_%s",suffixName[icentr].Data()),AliFlowEventSimple::Class(),AliAnalysisManager::kExchangeContainer);

    mgr->ConnectInput(taskFE[icentr],0,cinput1[icentr]);
    mgr->ConnectOutput(taskFE[icentr],1,coutputFE[icentr]);
    //==========================================================
    
    TString Species = "";
    if(isPID) Species += AliPID::ParticleName(particleType);
    else      Species += "Allcharged";
        

    for(int harm=2;harm<6;harm++){
        myNameSP[icentr][harm-2] = "SP_";
        myNameSP[icentr][harm-2] += Qvector;
        myNameSP[icentr][harm-2] += Form("_v%i_%s_%.f",harm,outputSlotName[icentr][harm-2].Data(),EtaGap*10);
        
        flowEvent[icentr][harm-2] = mgr->CreateContainer( Form("Filter_%s", myNameSP[icentr][harm-2].Data()),
                                                                   AliFlowEventSimple::Class(),
                                                                   AliAnalysisManager::kExchangeContainer );
        
        tskFilter[icentr][harm-2] = new AliAnalysisTaskFilterFE( Form("TaskFilter_%s",myNameSP[icentr][harm-2].Data()),cutsRP[icentr], NULL);
        if(!VZERO){
            tskFilter[icentr][harm-2]->SetSubeventEtaRange(etamin, -.5*EtaGap, +.5*EtaGap, etamax);
        }
        if(VZERO) tskFilter[icentr][harm-2]->SetSubeventEtaRange(-5,-1.5,+1.5,5);
        mgr->AddTask(tskFilter[icentr][harm-2]);
        mgr->ConnectInput( tskFilter[icentr][harm-2],0,coutputFE[icentr]);
        mgr->ConnectOutput(tskFilter[icentr][harm-2],1,flowEvent[icentr][harm-2]);
        
        
        taskSP[icentr][harm-2] = new AliAnalysisTaskScalarProduct(Form("TaskScalarProduct_%s",outputSlotName[icentr][harm-2].Data()),kFALSE);
        taskSP[icentr][harm-2]->SetHarmonic(harm);
        taskSP[icentr][harm-2]->SelectCollisionCandidates(triggerSelectionString);
        taskSP[icentr][harm-2]->SetRelDiffMsub(1.0);
        taskSP[icentr][harm-2]->SetTotalQvector(Qvector);
        taskSP[icentr][harm-2]->SetApplyCorrectionForNUA(kTRUE);
        
        TString outputSP = fileName;
        outputSP += ":outputSPanalysis";
        outputSP+= rptypestr;
        slot[icentr][harm-2] = "SP_";
        slot[icentr][harm-2] += outputSlotName[icentr][harm-2];
        slot[icentr][harm-2] += "_";
        slot[icentr][harm-2] += Qvector;
        coutputSP[icentr][harm-2] = mgr->CreateContainer(Form("%s_%.f",slot[icentr][harm-2].Data(),EtaGap*10),
                                         TList::Class(),AliAnalysisManager::kOutputContainer,outputSP);
        mgr->AddTask(taskSP[icentr][harm-2]);
        mgr->ConnectInput(taskSP[icentr][harm-2],0,flowEvent[icentr][harm-2]);
        mgr->ConnectInput(taskSP[icentr][harm-2],0,coutputFE[icentr]);
        mgr->ConnectOutput(taskSP[icentr][harm-2],1,coutputSP[icentr][harm-2]);
    }


    if (taskFE[icentr]->GetQAOn()) {
        outputQA[icentr] = fileName;
        outputQA[icentr] += ":QA";
        coutputFEQA[icentr] = mgr->CreateContainer(Form("QA_%s",suffixName[icentr].Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputQA[icentr]);
        mgr->ConnectOutput(taskFE[icentr],2,coutputFEQA[icentr]);
    }


}
}

//===========================================================================

AliFlowEventCuts* DefinecutsEvent(Int_t icentr){
    AliFlowEventCuts* cutsEvent = new AliFlowEventCuts(Form("eventcuts_%d",icentr));
    return cutsEvent;
}
AliFlowTrackCuts* DefineRPcuts(Int_t icentr){
    AliFlowTrackCuts* cutsRP = new AliFlowTrackCuts(Form("RP_%d",icentr));
    return cutsRP;
}
AliFlowTrackCuts* DefinePOIcuts(Int_t icentr){
    AliFlowTrackCuts* cutsPOI = new AliFlowTrackCuts(Form("POI_%d",icentr));
    return cutsPOI;
}




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