ROOT logo
//
// macro to create a residual OCDB 
//

/*
//
//
//
.x $ALICE_ROOT/TPC/Upgrade/macros/ConfigOCDB.C(1)
.L $ALICE_ROOT/TPC/Upgrade/macros/makeResidualSpaceChargeOCDB.C

Example usage rescaling fit:


aliroot -b -q $ALICE_ROOT/TPC/Upgrade/macros/makeResidualSpaceChargeOCDB.C\(0\)


Example usage Jens alignment lookup tables:

ln -sf /hera/alice/wiechula/Upgrade/LUTs_fluctuation_eps20/MeasuredResidual2D/residualMap.1.root current.root
ln -sf /hera/alice/wiechula/Upgrade/LUTs_fluctuation_eps20/ResidualResidual2D/residualMap.1.root mean.root
ln -sf $ALICE_ROOT/OCDB/TPC/Calib/Correction/Run0_999999999_v0_s2.root ocdb.root
aliroot -b -q $ALICE_ROOT/TPC/Upgrade/macros/makeResidualSpaceChargeOCDB.C\(1\)




*/

void makeResidualSpaceChargeOCDBLookup(const char *ocdbInName="ocdb.root",const char *scCurrentName="current.root", const char *scMeanName="mean.root"){
  //
  // Macro to create a clone original  OCDB entry with space point distortion and add there space point
  // distortions cause by resifual sapce charge
  // Output is stored by default in the current directory.
  // 

  // Parameters to Specify:
  //    ocdbInName      : path to the original OCDB entry
  //    scCurrentName   : path to the fluctuetaed distortion map
  //    scMeanName      : path to the mean distortion map
  //    
  
  /*
    scCurrentName="/hera/alice/wiechula/Upgrade/LUTs_fluctuation/dir1/SpaceChargeFluc10_1.lookup.root";
    scMeanName="/hera/alice/wiechula/Upgrade/LUTs_fluctuation/average/SpaceChargeFluc0_1.lookup.root";
    ocdbInName="$ALICE_ROOT/OCDB/TPC/Calib/Correction/Run0_999999999_v0_s2.root"
  */
  TFile * finCurrent = TFile::Open(scCurrentName);
  TFile * finMean = TFile::Open(scMeanName);
  //
  AliTPCCorrectionLookupTable *spaceChargeCurrent=  (AliTPCCorrectionLookupTable *)finCurrent->Get("map");
  AliTPCCorrectionLookupTable *spaceChargeMean   =  (AliTPCCorrectionLookupTable *)finMean->Get("map");
  AliTPCInverseCorrection * spaceChargeInverseMean = new AliTPCInverseCorrection(spaceChargeMean);
  //
  TObjArray * arraySC = new TObjArray(2);
  arraySC->AddAt(spaceChargeCurrent,0);
  arraySC->AddAt(spaceChargeMean,1);
  AliTPCComposedCorrection *corrSC = new AliTPCComposedCorrection(arraySC,AliTPCComposedCorrection::kParallel);
  AliTPCComposedCorrection *corrSCW = new AliTPCComposedCorrection(arraySC,AliTPCComposedCorrection::kParallel);
  AliTPCComposedCorrection::AddVisualCorrection(spaceChargeCurrent,1);
  AliTPCComposedCorrection::AddVisualCorrection(spaceChargeMean,2);
  AliTPCComposedCorrection::AddVisualCorrection(spaceChargeInverseMean,3);
  AliTPCComposedCorrection::AddVisualCorrection(corrSC,4);
  AliTPCComposedCorrection::AddVisualCorrection(corrSCW,5);
  //
  //
  TLinearFitter fitterR(2,"pol1");
  for (Int_t ipoint =0; ipoint<10000; ipoint++){
    Double_t z0 = -250+gRandom->Rndm()*500;
    Double_t r0   = 85+gRandom->Rndm()*(245-85.);
    Double_t phi0 = gRandom->Rndm()*TMath::TwoPi();
    // some problematic parts to be skipped  - investigated later
    Double_t xvalue[2]={0};
    if (TMath::Abs(AliTPCCorrection::GetCorrXYZ(r0*TMath::Cos(phi0), r0*TMath::Sin(phi0), z0,0,1))>50) continue;
    if (TMath::Abs(AliTPCCorrection::GetCorrXYZ(r0*TMath::Cos(phi0), r0*TMath::Sin(phi0), z0,0,2))>50) continue;
    if (TMath::Abs(AliTPCCorrection::GetCorrXYZ(r0*TMath::Cos(phi0), r0*TMath::Sin(phi0), z0,1,1))>20) continue;
    if (TMath::Abs(AliTPCCorrection::GetCorrXYZ(r0*TMath::Cos(phi0), r0*TMath::Sin(phi0), z0,1,2))>20) continue;
    if (TMath::Abs(AliTPCCorrection::GetCorrXYZ(r0*TMath::Cos(phi0), r0*TMath::Sin(phi0), z0,2,1))>50) continue;
    if (TMath::Abs(AliTPCCorrection::GetCorrXYZ(r0*TMath::Cos(phi0), r0*TMath::Sin(phi0), z0,2,2))>50) continue;
    //
    //
    xvalue[0]=AliTPCCorrection::GetCorrXYZ(r0*TMath::Cos(phi0), r0*TMath::Sin(phi0), z0,0,2);
    fitterR.AddPoint(xvalue,AliTPCCorrection::GetCorrXYZ(r0*TMath::Cos(phi0), r0*TMath::Sin(phi0), z0,0,1));
  }
  fitterR->Eval();
  TVectorD weights(2);
  weights[0]=1;
  weights[1]=-1;
  corrSC->SetWeights( &weights);
  weights[1]=-fitterR->GetParameter(1);
  corrSCW->SetWeights( &weights);
  //
  //
  //
  TF1 *fSC = new TF1("fSC","AliTPCCorrection::GetCorrXYZ(x,0,10,0,4)",85,245);  
  TF1 *fSCW = new TF1("fSCW","AliTPCCorrection::GetCorrXYZ(x,0,10,0,5)",85,245);
  fSC->SetLineColor(2);
  fSC->SetLineColor(4);
  fSC->Draw();
  fSCW->Draw("same");
  gPad->SaveAs("residualMap.pdf");
  
  //
  //
  //
  TFile *fileOCDBIn=TFile::Open(ocdbInName);
  AliCDBEntry   *entry =  ( AliCDBEntry   *)fileOCDBIn->Get("AliCDBEntry");
  TObjArray * array = (TObjArray*)entry->GetObject();
  for (Int_t i=0;  i<3;  i++){
    AliTPCComposedCorrection *corr = ( AliTPCComposedCorrection*)array->At(i);
    if (corr){
      TObjArray* corrArray = corr->GetCorrections();
      corrArray->AddLast(corrSCW);
    }    
  }
  AliCDBMetaData *metaData= new AliCDBMetaData();
  metaData->SetObjectClassName("TObjArray");
  metaData->SetResponsible("Marian Ivanov");
  metaData->SetBeamPeriod(1);
  metaData->SetAliRootVersion("05-25-01"); //root version
  metaData->SetComment("Standard+fluctuation");
  AliCDBId* id1=NULL;
  id1=new AliCDBId("TPC/Calib/Correction", 0, 9999999999999999);
  //
  TString localStorage = "local://"+gSystem->GetFromPipe("pwd")+"/OCDB";
  pocdbStorage = AliCDBManager::Instance()->GetStorage(localStorage.Data());
  pocdbStorage->Put(array, (*id1), metaData);


}




void makeResidualSpaceChargeOCDBFit(const char *ocdbInName="ocdb.root",const char *scCurrentName="current.root", const char *scMeanName="mean.root"){
  //
  // Macro to create a clone original  OCDB entry with space point distortion and add there space point
  // distortions cause by resifual sapce charge
  // Output is stored by default in the current directory.
  // 

  // Parameters to Specify:
  //    ocdbInName      : path to the original OCDB entry
  //    scCurrentName   : path to the fluctuetaed distortion map
  //    scMeanName      : path to the mean distortion map
  //    
  
  /*
    scCurrentName="/hera/alice/miranov/SpaceCharge/Fluctuations/PbPbWithGain/dirmergeAll/dEpsilon20/dir0/SpaceChargeFluc10_1.root";
    scMeanName="/hera/alice/miranov/SpaceCharge/Fluctuations/PbPbWithGain/dirmergeAll/dEpsilon20/dir0//SpaceChargeFluc0_1.root";
    ocdbInName="$ALICE_ROOT/OCDB/TPC/Calib/Correction/Run0_999999999_v0_s2.root"
  */
  TFile * finCurrent = TFile::Open(scCurrentName);
  TFile * finMean = TFile::Open(scMeanName);
  //
  AliTPCCorrectionLookupTable *spaceChargeCurrent=  (AliTPCCorrectionLookupTable *)finCurrent->Get("DistRef");
  AliTPCCorrectionLookupTable *spaceChargeMean   =  (AliTPCCorrectionLookupTable *)finMean->Get("DistRef");
  AliTPCInverseCorrection * spaceChargeInverseMean = new AliTPCInverseCorrection(spaceChargeMean);
  //
  TObjArray * arraySC = new TObjArray(2);
  arraySC->AddAt(spaceChargeCurrent,0);
  arraySC->AddAt(spaceChargeMean,1);
  AliTPCComposedCorrection *corrSC = new AliTPCComposedCorrection(arraySC,AliTPCComposedCorrection::kParallel);
  AliTPCComposedCorrection *corrSCW = new AliTPCComposedCorrection(arraySC,AliTPCComposedCorrection::kParallel);
  AliTPCComposedCorrection::AddVisualCorrection(spaceChargeCurrent,1);
  AliTPCComposedCorrection::AddVisualCorrection(spaceChargeMean,2);
  AliTPCComposedCorrection::AddVisualCorrection(spaceChargeInverseMean,3);
  AliTPCComposedCorrection::AddVisualCorrection(corrSC,4);
  AliTPCComposedCorrection::AddVisualCorrection(corrSCW,5);
  //
  //
  TLinearFitter fitterR(2,"pol1");
  for (Int_t ipoint =0; ipoint<10000; ipoint++){
    Double_t z0 = -250+gRandom->Rndm()*500;
    Double_t r0   = 85+gRandom->Rndm()*(245-85.);
    Double_t phi0 = gRandom->Rndm()*TMath::TwoPi();
    // some problematic parts to be skipped  - investigated later
    Double_t xvalue[2]={0};
    if (TMath::Abs(AliTPCCorrection::GetCorrXYZ(r0*TMath::Cos(phi0), r0*TMath::Sin(phi0), z0,0,1))>50) continue;
    if (TMath::Abs(AliTPCCorrection::GetCorrXYZ(r0*TMath::Cos(phi0), r0*TMath::Sin(phi0), z0,0,2))>50) continue;
    if (TMath::Abs(AliTPCCorrection::GetCorrXYZ(r0*TMath::Cos(phi0), r0*TMath::Sin(phi0), z0,1,1))>20) continue;
    if (TMath::Abs(AliTPCCorrection::GetCorrXYZ(r0*TMath::Cos(phi0), r0*TMath::Sin(phi0), z0,1,2))>20) continue;
    if (TMath::Abs(AliTPCCorrection::GetCorrXYZ(r0*TMath::Cos(phi0), r0*TMath::Sin(phi0), z0,2,1))>50) continue;
    if (TMath::Abs(AliTPCCorrection::GetCorrXYZ(r0*TMath::Cos(phi0), r0*TMath::Sin(phi0), z0,2,2))>50) continue;
    //
    //
    xvalue[0]=AliTPCCorrection::GetCorrXYZ(r0*TMath::Cos(phi0), r0*TMath::Sin(phi0), z0,1,2);
    fitterR.AddPoint(xvalue,AliTPCCorrection::GetCorrXYZ(r0*TMath::Cos(phi0), r0*TMath::Sin(phi0), z0,1,1));
  }
  fitterR->Eval();
  TVectorD weights(2);
  weights[0]=1;
  weights[1]=-1;
  corrSC->SetWeights( &weights);
  weights[1]=-fitterR->GetParameter(1);
  corrSCW->SetWeights( &weights);
  //
  //
  //
  TF1 *fSC = new TF1("fSC","AliTPCCorrection::GetCorrXYZ(x,0,10,1,4)",85,245);  
  TF1 *fSCW = new TF1("fSCW","AliTPCCorrection::GetCorrXYZ(x,0,10,1,5)",85,245);
  fSC->SetLineColor(2);
  fSC->SetLineColor(4);
  fSC->GetXaxis()->SetTitle(" R (cm)");
  fSC->GetYaxis()->SetTitle(" #Delta_{R#phi} (cm)");
  TCanvas * canvasDist = new TCanvas("canvasDist","canvasDist",600,500);
  TF1 *f1sc = new TF1("f1sc","[0]+[1]*x+[2]*x**2",85,245);
  TF1 *f1scw = new TF1("f1scw","[0]+[1]*x+[2]*x**2",85,245);

  {
    fSC->Draw();
    fSCW->Draw();
    fSC->SetMinimum(-1);
    fSC->SetMaximum(2.);
    fSC->GetHistogram()->SetLineColor(2);
    fSCW->GetHistogram()->SetLineColor(4);
    //
    f1sc->SetLineColor(2);
    f1scw->SetLineColor(4);
    f1sc->SetLineWidth(0.5);
    f1scw->SetLineWidth(0.5);
    //
    fSC->GetHistogram()->Fit(f1sc);
    fSCW->GetHistogram()->Fit(f1scw);
    //
    fSC->GetHistogram()->Draw("");
    fSCW->GetHistogram()->Draw("same");
    //
    TF1 *f1scp=new TF1(*f1sc);
    TF1 *f1scm=new TF1(*f1sc);
    f1scp->SetLineStyle(2); f1scm->SetLineStyle(2);
    f1scp->SetParameter(0, f1sc->GetParameter(0)+ 0.3);
    f1scm->SetParameter(0, f1sc->GetParameter(0)- 0.3);
    f1scp->Draw("same");
    f1scm->Draw("same");
    //
    TF1 *f1scwp=new TF1(*f1scw);
    TF1 *f1scwm=new TF1(*f1scw);
    f1scwp->SetLineStyle(2); f1scwm->SetLineStyle(2);
    f1scwp->SetParameter(0, f1scw->GetParameter(0)+ 0.3);
    f1scwm->SetParameter(0, f1scw->GetParameter(0)- 0.3);
    f1scwp->Draw("same");
    f1scwm->Draw("same");
  }
  TLegend * legend = new TLegend(0.3,0.5,0.89,0.89,"Residual #Delta_{R#phi} distortions and helix fit");
  legend->SetBorderSize(0);
  legend->AddEntry(fSC->GetHistogram(),"Stage 0: #Delta_{R#phic}-#Delta_{R#phimean}");
  legend->AddEntry(fSCW->GetHistogram(),"Stage 1: #Delta_{R#phic}-k_{fit}#Delta_{R#phimean}");
  legend->Draw();
  gPad->SaveAs("residualMapTrackFit.pdf");
  
  //
  //
  //
  TFile *fileOCDBIn=TFile::Open(ocdbInName);
  AliCDBEntry   *entry =  ( AliCDBEntry   *)fileOCDBIn->Get("AliCDBEntry");
  TObjArray * array = (TObjArray*)entry->GetObject();
  for (Int_t i=0;  i<3;  i++){
    AliTPCComposedCorrection *corr = ( AliTPCComposedCorrection*)array->At(i);
    if (corr){
      TObjArray* corrArray = corr->GetCorrections();
      corrArray->AddLast(corrSCW);
    }    
  }
  AliCDBMetaData *metaData= new AliCDBMetaData();
  metaData->SetObjectClassName("TObjArray");
  metaData->SetResponsible("Marian Ivanov");
  metaData->SetBeamPeriod(1);
  metaData->SetAliRootVersion("05-25-01"); //root version
  metaData->SetComment("Standard+fluctuation");
  AliCDBId* id1=NULL;
  id1=new AliCDBId("TPC/Calib/Correction", 0, 9999999999999999);
  //
  TString localStorage = "local://"+gSystem->GetFromPipe("pwd")+"/OCDB";
  pocdbStorage = AliCDBManager::Instance()->GetStorage(localStorage.Data());
  pocdbStorage->Put(array, (*id1), metaData);


}




void makeResidualSpaceChargeOCDBAlign(const char *ocdbInName="ocdb.root",const char *scCurrentName="current.root", const char *scMeanName="mean.root"){
  //
  // Macro to create a clone original  OCDB entry with space point distortion and add there space point
  // distortion due residual space charge isalignemnt
  // Output is stored by default in the current directory.
  // 

  // Parameters to Specify:
  //    ocdbInName      : path to the original OCDB entry
  //    scCurrentName   : path to the fluctuetaed distortion map
  //    scMeanName      : path to the mean distortion map
  //    
  
  /*
    scCurrentName="/hera/alice/wiechula/Upgrade/LUTs_fluctuation_eps20/MeasuredResidual2D/residualMap.10.root";
    scMeanName="/hera/alice/wiechula/Upgrade/LUTs_fluctuation_eps20/ResidualResidual2D/residualMap.10.root";
    ocdbInName="$ALICE_ROOT/OCDB/TPC/Calib/Correction/Run0_999999999_v0_s2.root"
  */
  TFile * finCurrent = TFile::Open(scCurrentName);
  TFile * finMean = TFile::Open(scMeanName);
  //
  AliTPCCorrectionLookupTable *spaceChargeCurrent=  (AliTPCCorrectionLookupTable *)finCurrent->Get("map");
  AliTPCCorrectionLookupTable *spaceChargeMean   =  (AliTPCCorrectionLookupTable *)finMean->Get("map");
  //
  TObjArray * arraySC = new TObjArray(2);
  arraySC->AddAt(spaceChargeCurrent,0);
  arraySC->AddAt(spaceChargeMean,1);
  AliTPCComposedCorrection *corrSC = new AliTPCComposedCorrection(arraySC,AliTPCComposedCorrection::kParallel);
  AliTPCComposedCorrection *corrSCW = new AliTPCComposedCorrection(arraySC,AliTPCComposedCorrection::kParallel);
  AliTPCComposedCorrection::AddVisualCorrection(spaceChargeCurrent,1);        // reconstructed
  AliTPCComposedCorrection::AddVisualCorrection(spaceChargeMean,2);           // ideal
  AliTPCComposedCorrection::AddVisualCorrection(corrSCW,5);
  //
  TVectorD weights(2);
  weights[0]=1;
  weights[1]=1;
  corrSCW->SetWeights( &weights);
  TTreeSRedirector * pcstream = new TTreeSRedirector("residualDelta.root","recreate");
  //
  for (Int_t ipoint=0; ipoint<50000; ipoint++){ 
    Double_t phi = gRandom->Rndm()*TMath::TwoPi();
    Double_t r   = 85+gRandom->Rndm()*(245-85);
    Double_t theta   = -0.9+gRandom->Rndm()*1.8;
    Double_t z=r*theta;     
    Double_t x = r*TMath::Cos(phi);
    Double_t y = r*TMath::Sin(phi);
    Double_t drInput = AliTPCCorrection::GetCorrXYZ(x,y,z,0,1);
    Double_t drOutput = AliTPCCorrection::GetCorrXYZ(x,y,z,0,2);
    Double_t drDiff = AliTPCCorrection::GetCorrXYZ(x,y,z,0,5);
    Double_t drphiInput = AliTPCCorrection::GetCorrXYZ(x,y,z,1,1);   // 
    Double_t drphiOutput = AliTPCCorrection::GetCorrXYZ(x,y,z,1,2);  //
    Double_t drphiDiff = AliTPCCorrection::GetCorrXYZ(x,y,z,1,5);  //    
    //
    (*pcstream)<<"diff"<<
      "phi="<<phi<<
      "r="<<r<<
      "x="<<x<<
      "y="<<y<<
      "z="<<z<<
      //
      "drInput="<<drInput<<
      "drOutput="<<drOutput<<
      "drDiff="<<drDiff<<
      //
      "drphiInput="<<drphiInput<<
      "drphiOutput="<<drphiOutput<<
      "drphiDiff="<<drphiDiff<<
      "\n";
  }
  TTree * tree = ((*pcstream)<<"diff")->GetTree();
  //
  TCanvas *canvas = new TCanvas("canvasDiff","canvasDiff",900,800); 
  canvas->Divide(3,2);
  canvas->cd(1);
  tree->Draw("drphiOutput:drphiInput","abs(drphiDiff)+abs(drphiOutput)+abs(drphiInput)<3","");
  canvas->cd(2);
  tree->Draw("drphiDiff:r","abs(drphiDiff)+abs(drphiOutput)+abs(drphiInput)<3","colz");
  canvas->cd(3);
  tree->Draw("drphiDiff","abs(drphiDiff)+abs(drphiOutput)+abs(drphiInput)<3","");
  canvas->cd(4);
  tree->Draw("drOutput:drInput","abs(drDiff)+abs(drOutput)+abs(drInput)<3","");
  canvas->cd(5);
  tree->Draw("drDiff:r","abs(drDiff)+abs(drOutput)+abs(drInput)<3","colz");
  canvas->cd(6);
  tree->Draw("drDiff","abs(drDiff)+abs(drOutput)+abs(drInput)<3","");
  canvas->SaveAs("residualSpaceChargeDistortion.pdf");
  //
  //
  //
  TFile *fileOCDBIn=TFile::Open(ocdbInName);
  AliCDBEntry   *entry =  ( AliCDBEntry   *)fileOCDBIn->Get("AliCDBEntry");
  TObjArray * array = (TObjArray*)entry->GetObject();
  for (Int_t i=0;  i<3;  i++){
    AliTPCComposedCorrection *corr = ( AliTPCComposedCorrection*)array->At(i);
    if (corr){
      TObjArray* corrArray = corr->GetCorrections();
      corrArray->AddLast(corrSCW);
    }    
  }
  AliCDBMetaData *metaData= new AliCDBMetaData();
  metaData->SetObjectClassName("TObjArray");
  metaData->SetResponsible("Marian Ivanov");
  metaData->SetBeamPeriod(1);
  metaData->SetAliRootVersion("05-25-01"); //root version
  metaData->SetComment("Standard+fluctuation");
  AliCDBId* id1=NULL;
  id1=new AliCDBId("TPC/Calib/Correction", 0, 9999999999999999);
  //
  TString localStorage = "local://"+gSystem->GetFromPipe("pwd")+"/OCDB";
  pocdbStorage = AliCDBManager::Instance()->GetStorage(localStorage.Data());
  pocdbStorage->Put(array, (*id1), metaData);


}



void makeResidualSpaceChargeOCDB(Int_t action=1){
  //
  //
  //
  if (action==0) makeResidualSpaceChargeOCDBFit();  // fit mean charge to current charge
  if (action==1) makeResidualSpaceChargeOCDBAlign();  // use difference of the map and the reconstructed distorion map as a residual OCDB
}

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