ROOT logo
class AliAnalysisDataContainer;
class AliFlowTrackCuts;
class AliFlowEventCuts;


void AddTaskPIDFlow(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="",
                                   Int_t AODfilterBitRP = 272,
                                   Int_t AODfilterBitPOI = 272,
                                   Int_t charge=0,
                                   Int_t MinTPCdedx = 10,
                                   Int_t ncentrality = 2,
                                   Bool_t doQA=kTRUE,
                                   Bool_t isPID = kTRUE,
                                   Bool_t UseQC = kFALSE,
                                   Bool_t UseSP = kFALSE,
                                   Bool_t UseSPSUB = kTRUE,
                                   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)
Double_t minA = -0.8;//
Double_t maxA = 0.8;//
Double_t minB = -0.8;//
Double_t maxB = 0.8;//

// RUN SETTINGS
// Flow analysis method can be:(set to kTRUE or kFALSE)
Bool_t SPSUB    = UseSPSUB;
Bool_t SP       = UseSP;  // scalar product method (similar to eventplane method)
Bool_t QC       = UseQC;  // cumulants using Q vectors
    
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----------
//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);
const char* poitypestr = AliFlowTrackCuts::GetParamTypeName(poitype);

    
//===========================================================================
// 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] = DefinecutsEvent();
    //cutsEvent[icentr]->SetUsedDataset(is2011);
    cutsEvent[icentr]->SetCentralityPercentileRange(centrMin[icentr],centrMax[icentr]);
    cutsEvent[icentr]->SetCentralityPercentileMethod(AliFlowEventCuts::kV0);
    //  cutsEvent->SetRefMultMethod(AliFlowEventCuts::kVZERO);
    //cutsEvent->SetCentralityPercentileMethod(AliFlowEventCuts::kSPD1tracklets);
    //cutsEvent->SetNContributorsRange(2);
    cutsEvent[icentr]->SetPrimaryVertexZrange(-10.,10.);
    cutsEvent[icentr]->SetQA(doQA);
    cutsEvent[icentr]->SetCutTPCmultiplicityOutliers();
    
    
    // RP TRACK CUTS:
    cutsRP[icentr] = DefineRPcuts();
    cutsRP[icentr]->SetParamType(rptype);
    cutsRP[icentr]->SetParamMix(rpmix);
    cutsRP[icentr]->SetPtRange(0.2,5.);
    cutsRP[icentr]->SetEtaRange(etamin,etamax);
    cutsRP[icentr]->SetMinNClustersTPC(70);
    //  cutsRP->SetMinChi2PerClusterTPC(0.1);//
    // cutsRP->SetMaxChi2PerClusterTPC(4.0);//
    cutsRP[icentr]->SetMaxDCAToVertexXY(3.0);
    cutsRP[icentr]->SetMaxDCAToVertexZ(3.0);
    cutsRP[icentr]->SetAcceptKinkDaughters(kFALSE);
    cutsRP[icentr]->SetMinimalTPCdedx(MinTPCdedx);
    cutsRP[icentr]->SetAODfilterBit(AODfilterBitRP);
    cutsRP[icentr]->SetQA(doQA);
    
    // POI TRACK CUTS:
    cutsPOI[icentr] = DefinePOIcuts();
    cutsPOI[icentr]->GetBayesianResponse()->ForceOldDedx(); // for 2010 data to use old TPC PID Response instead of the official one
    cutsPOI[icentr]->SetParamType(poitype);
    cutsPOI[icentr]->SetParamMix(poimix);
    cutsPOI[icentr]->SetPtRange(0.2,5.);//
    cutsPOI[icentr]->SetEtaRange(etamin,etamax);
    //cutsPOI->SetRequireCharge(kTRUE);
    //cutsPOI->SetPID(PdgRP);
    cutsPOI[icentr]->SetMinNClustersTPC(70);
    // cutsPOI->SetMinChi2PerClusterTPC(0.1); //
    // cutsPOI->SetMaxChi2PerClusterTPC(4.0); //
    //  cutsPOI->SetRequireITSRefit(kTRUE);
    //  cutsPOI->SetRequireTPCRefit(kTRUE);
    //  cutsPOI->SetMinNClustersITS(2);
    //cutsPOI->SetMaxChi2PerClusterITS(1.e+09);
    cutsPOI[icentr]->SetMaxDCAToVertexXY(3.0);
    cutsPOI[icentr]->SetMaxDCAToVertexZ(3.0);
    //cutsPOI->SetDCAToVertex2D(kTRUE);
    //cutsPOI->SetMaxNsigmaToVertex(1.e+10);
    //cutsPOI->SetRequireSigmaToVertex(kFALSE);
    cutsPOI[icentr]->SetAcceptKinkDaughters(kFALSE);
    if(isPID) cutsPOI[icentr]->SetPID(particleType, sourcePID);//particleType, sourcePID
    if (charge!=0) cutsPOI[icentr]->SetCharge(charge);
    //cutsPOI->SetAllowTOFmismatch(kFALSE);
    cutsPOI[icentr]->SetRequireStrictTOFTPCagreement(kTRUE);
    //iexample: francesco's tunig TPC Bethe Bloch for data:
     cutsPOI[icentr]->SetMinimalTPCdedx(MinTPCdedx);
    cutsPOI[icentr]->SetAODfilterBit(AODfilterBitPOI);
    // cutsPOI->SetAODfilterBit(768);
    cutsPOI[icentr]->SetQA(doQA);
    cutsPOI[icentr]->SetPriors((centrMin[icentr]+centrMax[icentr])*0.5); // set priors and PID as a function of the centrality

    //=====================================================================
 
    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]+=cutsPOI[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];
    
AliFlowTrackCuts *QC_POI[ncentr], *SP_POI[ncentr][2], *SP_POI_gap[ncentr][2]; // POIs
    
TString outputQA[ncentr];

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);
//    taskFE[icentr]->SetSubeventEtaRange(minA, maxA, minB, maxB);
    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(cutsPOI[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.);
    }
    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]);

    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]);
    }


    //POIs for SP and QC method
    //===========================================================================
 
    //half window for POIs
    //=====================QC POI cuts
    QC_POI[icentr] = new AliFlowTrackCuts(Form("Filter_%d",icentr));
    QC_POI[icentr]->SetEtaRange( -0.8,+0.8 );
    QC_POI[icentr]->GetBayesianResponse()->ForceOldDedx(); // for 2010 data to use old TPC PID Response instead of the official one
    QC_POI[icentr]->SetParamType(poitype);
//    QC_POI[icentr]->SetParamMix(poimix);
    QC_POI[icentr]->SetPtRange(0.2,5.);//
    QC_POI[icentr]->SetMinNClustersTPC(70);
    // SP_POI->SetMinChi2PerClusterTPC(0.1); //
    // SP_POI->SetMaxChi2PerClusterTPC(4.0); //
    //  SP_POI->SetRequireITSRefit(kTRUE);
    //  SP_POI->SetRequireTPCRefit(kTRUE);
    //  SP_POI->SetMinNClustersITS(2);
    //  SP_POI->SetMaxChi2PerClusterITS(1.e+09);
    QC_POI[icentr]->SetMaxDCAToVertexXY(3.0);
    QC_POI[icentr]->SetMaxDCAToVertexZ(3.0);
    //SP_POI->SetDCAToVertex2D(kTRUE);
    //SP_POI->SetMaxNsigmaToVertex(1.e+10);
    //SP_POI->SetRequireSigmaToVertex(kFALSE);
    QC_POI[icentr]->SetAcceptKinkDaughters(kFALSE);
    if(isPID) QC_POI[icentr]->SetPID(particleType, sourcePID);//particleType, sourcePID
    if (charge!=0) QC_POI[icentr]->SetCharge(charge);
    //SP_POI->SetAllowTOFmismatch(kFALSE);
    QC_POI[icentr]->SetRequireStrictTOFTPCagreement(kTRUE);
    QC_POI[icentr]->SetMinimalTPCdedx(MinTPCdedx);
    QC_POI[icentr]->SetAODfilterBit(AODfilterBitPOI);
    QC_POI[icentr]->SetQA(doQA);
    QC_POI[icentr]->SetPriors((centrMin[icentr]+centrMax[icentr])*0.5);

    //=======================SP POI Cuts
    SP_POI[icentr][0] = new AliFlowTrackCuts(Form("Filterhf0_%d",icentr));
    SP_POI[icentr][1] = new AliFlowTrackCuts(Form("Filterhf1_%d",icentr));
    for(int hw=0;hw<2;hw++){
        SP_POI[icentr][hw]->GetBayesianResponse()->ForceOldDedx(); // for 2010 data to use old TPC PID Response instead of the official one
        SP_POI[icentr][hw]->SetParamType(poitype);
        //      SP_POI[icentr][hw]->SetParamMix(poimix);
        SP_POI[icentr][hw]->SetPtRange(0.2,5.);//
        SP_POI[icentr][hw]->SetMinNClustersTPC(70);
        // SP_POI->SetMinChi2PerClusterTPC(0.1); //
        // SP_POI->SetMaxChi2PerClusterTPC(4.0); //
        //  SP_POI->SetRequireITSRefit(kTRUE);
        //  SP_POI->SetRequireTPCRefit(kTRUE);
        //  SP_POI->SetMinNClustersITS(2);
        //  SP_POI->SetMaxChi2PerClusterITS(1.e+09);
        SP_POI[icentr][hw]->SetMaxDCAToVertexXY(3.0);
        SP_POI[icentr][hw]->SetMaxDCAToVertexZ(3.0);
        //SP_POI->SetDCAToVertex2D(kTRUE);
        //SP_POI->SetMaxNsigmaToVertex(1.e+10);
        //SP_POI->SetRequireSigmaToVertex(kFALSE);
        SP_POI[icentr][hw]->SetAcceptKinkDaughters(kFALSE);
        if(isPID) SP_POI[icentr][hw]->SetPID(particleType, sourcePID);//particleType, sourcePID
        if (charge!=0) SP_POI[icentr][hw]->SetCharge(charge);
        //SP_POI->SetAllowTOFmismatch(kFALSE);
        SP_POI[icentr][hw]->SetRequireStrictTOFTPCagreement(kTRUE);
        SP_POI[icentr][hw]->SetMinimalTPCdedx(MinTPCdedx);
        SP_POI[icentr][hw]->SetAODfilterBit(AODfilterBitPOI);
        SP_POI[icentr][hw]->SetQA(doQA);
        SP_POI[icentr][hw]->SetPriors((centrMin[icentr]+centrMax[icentr])*0.5);
    }


    TString Species = "";
    if(isPID) Species += AliPID::ParticleName(particleType);
    else      Species += "Allcharged";

    for(int harm=2;harm<6;harm++){

        if(QC) {
            AddQCmethod( "QC", fileName, rptypestr, outputSlotName[icentr][harm-2], triggerSelectionString, coutputFE[icentr],NULL, QC_POI[icentr],  harm); // QC TPC
        }

        if(SP) {

            AddSPmethod( "SP", fileName, rptypestr,outputSlotName[icentr][harm-2], triggerSelectionString, coutputFE[icentr], cutsRP[icentr], SP_POI[icentr][0], "Qa", harm, etamin, etamax,0); // SP Qa
            AddSPmethod( "SP", fileName, rptypestr, outputSlotName[icentr][harm-2], triggerSelectionString, coutputFE[icentr], cutsRP[icentr], SP_POI[icentr][1], "Qb", harm, etamin, etamax,0); // SP Qb
        }
        if(SPSUB){
            AddSPmethod( "SP", fileName, rptypestr, outputSlotName[icentr][harm-2], triggerSelectionString, coutputFE[icentr], cutsRP[icentr], SP_POI[icentr][0], "Qa", harm, etamin, etamax, EtaGap); // SP Qa
            AddSPmethod( "SP", fileName, rptypestr, outputSlotName[icentr][harm-2], triggerSelectionString, coutputFE[icentr], cutsRP[icentr], SP_POI[icentr][1], "Qb", harm, etamin, etamax, EtaGap); // SP Qb
        }
    }
}
}
//AddSPmthod
//AddQCmethod
//===========================================================================
//QC method
void AddQCmethod(char *name="",TString fileName="", TString rptypestr="", TString outputSlotName="", Int_t triggerSelectionString=0,AliAnalysisDataContainer* coutputFE,AliFlowTrackCuts* cutsRP, AliFlowTrackCuts* cutsPOI, Int_t harm=2) {
    
    AliAnalysisDataContainer *coutputQC;
    AliAnalysisTaskQCumulants *taskQC;
 
    TString myNameQC = Form("%sv%i%s",name,harm,outputSlotName.Data());
    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
    
    AliAnalysisDataContainer *flowEvent = mgr->CreateContainer( Form("Filter_%s", myNameQC.Data()),
                                                                AliFlowEventSimple::Class(),
                                                                AliAnalysisManager::kExchangeContainer );
    AliAnalysisTaskFilterFE *tskFilter = new AliAnalysisTaskFilterFE( Form("TaskFilter_%s",myNameQC.Data()),NULL, NULL);
    mgr->AddTask(tskFilter);
    mgr->ConnectInput( tskFilter,0,coutputFE);
    mgr->ConnectOutput(tskFilter,1,flowEvent);
    
    taskQC = new AliAnalysisTaskQCumulants(Form("TaskQCumulants_%s",outputSlotName.Data()));
    taskQC->SelectCollisionCandidates(triggerSelectionString);
    taskQC->SetCalculateCumulantsVsM(kFALSE);
    taskQC->SetnBinsMult(10000);
    taskQC->SetMinMult(0.);
    taskQC->SetMaxMult(10000.);
    taskQC->SetHarmonic(harm);
    taskQC->SetApplyCorrectionForNUA(kFALSE);
    taskQC->SetFillMultipleControlHistograms(kFALSE);
    
    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();

    TString outputQC = fileName;
    outputQC += ":outputQCanalysis";
    outputQC+= rptypestr;
    
    coutputQC = mgr->CreateContainer(Form("QC_%s",outputSlotName.Data()),
                                        TList::Class(),AliAnalysisManager::kOutputContainer,outputQC);
    mgr->AddTask(taskQC);
    mgr->ConnectInput(taskQC,0,flowEvent);
    mgr->ConnectOutput(taskQC,1,coutputQC);
}
//SPmethod

void AddSPmethod(char *name="", TString fileName="", TString rptypestr="",TString outputSlotName="", Int_t triggerSelectionString=0,AliAnalysisDataContainer* coutputFE, AliFlowTrackCuts* cutsRP,AliFlowTrackCuts* cutsPOI, char* Qvector, Int_t harm=2, Double_t etamin=-0.8, Double_t etamax=0.8, Double_t gap=0.0) {
 
    AliAnalysisDataContainer *coutputSP;
    AliAnalysisTaskScalarProduct *taskSP;
    
    if(Qvector=="Qa"){
        cutsPOI->SetEtaRange( +0.5*gap, +0.8 );
    }
    if(Qvector=="Qb"){
        cutsPOI->SetEtaRange( -0.8,-0.5*gap );
    }
    
    TString myNameSP = Form("%s_v%i_%s_%s_%.f",name,harm,Qvector,outputSlotName.Data(),gap*10);
    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
    
    AliAnalysisDataContainer *flowEvent = mgr->CreateContainer( Form("Filter_%s", myNameSP.Data()),
                                                                AliFlowEventSimple::Class(),
                                                                AliAnalysisManager::kExchangeContainer );
    
    AliAnalysisTaskFilterFE *tskFilter = new AliAnalysisTaskFilterFE( Form("TaskFilter_%s",myNameSP.Data()),
                                                                     cutsRP, NULL);
    tskFilter->SetSubeventEtaRange(etamin, -.5*gap, +.5*gap, etamax);
    mgr->AddTask(tskFilter);
    mgr->ConnectInput( tskFilter,0,coutputFE);
    mgr->ConnectOutput(tskFilter,1,flowEvent);

    
    taskSP = new AliAnalysisTaskScalarProduct(Form("TaskScalarProduct_%s",outputSlotName.Data()),kFALSE);
    taskSP->SetHarmonic(harm);
    taskSP->SelectCollisionCandidates(triggerSelectionString);
    taskSP->SetRelDiffMsub(1.0);
    taskSP->SetTotalQvector(Qvector);
    taskSP->SetApplyCorrectionForNUA(kTRUE);
    
    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();


    TString outputSP = fileName;
    outputSP += ":outputSPanalysis";
    outputSP+= rptypestr;
    coutputSP = mgr->CreateContainer(Form("SP_%s_%s_%.f",outputSlotName.Data(),Qvector,gap*10),
                                        TList::Class(),AliAnalysisManager::kOutputContainer,outputSP);
    mgr->AddTask(taskSP);
    mgr->ConnectInput(taskSP,0,flowEvent);
    mgr->ConnectOutput(taskSP,1,coutputSP);
}
AliFlowEventCuts* DefinecutsEvent(){
    AliFlowEventCuts* cutsEvent = new AliFlowEventCuts("eventcuts");
    return cutsEvent;
}
AliFlowTrackCuts* DefineRPcuts(){
    AliFlowTrackCuts* cutsRP = new AliFlowTrackCuts("TPConlyRP");
    return cutsRP;
}
AliFlowTrackCuts* DefinePOIcuts(){
    AliFlowTrackCuts* cutsPOI = new AliFlowTrackCuts("TPConlyPOI");
    return cutsPOI;
}


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