Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
// Take two treeFile names as input,
// plot pixel module positions using PlotMillePede::DrawOrigPos(..)
// for BPIX and (BPIX+FPIX) and get the mean values of the histograms
// (i.e. centre of gravity).
// These are printed (in cm) and the difference is evaluated (in mum).
//
// Before executing this script you have to execute allMillePede.C.

#include <vector>
#include <iostream>
#include "GFUtils/GFHistManager.h"
#include "GFUtils/GFHistArray.h"
#include "PlotMillePede.h"

void pixelPositionChange(const char *treeFile1, const char *treeFile2)
{
  std::vector<PlotMillePede*> ps;
  ps.push_back(new PlotMillePede(treeFile1));
  ps.push_back(new PlotMillePede(treeFile2));

  std::vector<double> meanBPIX_X(ps.size());
  std::vector<double> meanBPIX_Y(ps.size());
  std::vector<double> meanBPIX_Z(ps.size());

  std::vector<double> meanPixel_X(ps.size());
  std::vector<double> meanPixel_Y(ps.size());
  std::vector<double> meanPixel_Z(ps.size());
  for (unsigned int i = 0; i < ps.size(); ++i) {
    ps[i]->GetHistManager()->SetBatch();
    ps[i]->SetSubDetId(1);
    ps[i]->DrawOrigPos();
    meanBPIX_X[i] = ps[i]->GetHistManager()->GetHistsOf(0,2)->First()->GetMean();
    meanBPIX_Y[i] = ps[i]->GetHistManager()->GetHistsOf(0,3)->First()->GetMean();
    meanBPIX_Z[i] = ps[i]->GetHistManager()->GetHistsOf(0,4)->First()->GetMean();
    ps[i]->SetSubDetIds(1,2);
    ps[i]->DrawOrigPos(true);
    meanPixel_X[i] = ps[i]->GetHistManager()->GetHistsOf(1,2)->First()->GetMean();
    meanPixel_Y[i] = ps[i]->GetHistManager()->GetHistsOf(1,3)->First()->GetMean();
    meanPixel_Z[i] = ps[i]->GetHistManager()->GetHistsOf(1,4)->First()->GetMean();

  }
  ps[0]->GetHistManager()->Overlay(ps[1]->GetHistManager(), 0, 0, "second");
  ps[0]->GetHistManager()->Overlay(ps[1]->GetHistManager(), 1, 1, "second");
  ps[0]->GetHistManager()->SetBatch(false);
  ps[0]->GetHistManager()->SameWithStats(true);
  ps[0]->GetHistManager()->Draw();

  const char separator[] = "====================================================\n";

  std::cout << separator << "BPIX:\n" << separator 
	    << "x1 x2: " << meanBPIX_X[0] << " " << meanBPIX_X[1]
	    << '\n'
	    // << ", diff (in mum) " 
	    // << (meanBPIX_X[1] - meanBPIX_X[0])* 10000. << '\n'

	    << "y1 y2: " << meanBPIX_Y[0] << " " << meanBPIX_Y[1]
	    << '\n'
	    // << ", diff (in mum) " 
	    // << (meanBPIX_Y[1] - meanBPIX_Y[0])* 10000. << '\n'

	    << "z1 z2: " << meanBPIX_Z[0] << " " << meanBPIX_Z[1]
	    << '\n'
	    // << ", diff (in mum) " 
	    // << (meanBPIX_Z[1] - meanBPIX_Z[0])* 10000.

	    << "Delta(x,y,z) = 2-1 = ("
	    << (meanBPIX_X[1] - meanBPIX_X[0])* 10000. << ','
	    << (meanBPIX_Y[1] - meanBPIX_Y[0])* 10000. << ','
	    << (meanBPIX_Z[1] - meanBPIX_Z[0])* 10000. << ") mum"
	    << std::endl;

  std::cout << separator << "Pixel:\n" << separator; 
  
  std::cout << "x1 x2: " << meanPixel_X[0] << " " << meanPixel_X[1]
	    << '\n'
	    // << ", diff (in mum) " 
	    // << (meanPixel_X[1] - meanPixel_X[0])* 10000. << '\n'

	    << "y1 y2 " << meanPixel_Y[0] << " " << meanPixel_Y[1]
	    << '\n'
	    // << ", diff (in mum) " 
	    // << (meanPixel_Y[1] - meanPixel_Y[0])* 10000. << '\n'

	    << "z1 z2: " << meanPixel_Z[0] << " " << meanPixel_Z[1]
	    << '\n'
	    // << ", diff (in mum) " 
	    // << (meanPixel_Z[1] - meanPixel_Z[0])* 10000.

	    << "Delta(x,y,z) = 2-1 = ("
	    << (meanPixel_X[1] - meanPixel_X[0])* 10000. << ','
	    << (meanPixel_Y[1] - meanPixel_Y[0])* 10000. << ','
	    << (meanPixel_Z[1] - meanPixel_Z[0])* 10000. << ") mum"
	    << std::endl;
  
  TString shortFileName1(treeFile1);
  if (shortFileName1.Contains("/")) { // remove all directory info
    shortFileName1.Remove(0, shortFileName1.Last('/') + 1);
  }
  TString shortFileName2(treeFile2);
  if (shortFileName2.Contains("/")) {
    shortFileName2.Remove(0, shortFileName2.Last('/') + 1);
  }

  std::cout << "|  | *" << shortFileName1 << "* || *"<< shortFileName1 << "*||\n"
	    << "| *Position* |  *BPIX* | *Full Pixel* | *BPIX* | *Full Pixel* |\n"
	    << "|  x  | " << meanBPIX_X[0] << " | " << meanPixel_X[0] << " | " << meanBPIX_X[1] << " | " << meanPixel_X[1] << " |\n"
	    << "|  y  | " << meanBPIX_Y[0] << " | " << meanPixel_Y[0] << " | " << meanBPIX_Y[1] << " | " << meanPixel_Y[1] << " |\n"
	    << "|  z  | " << meanBPIX_Z[0] << " | " << meanPixel_Z[0] << " | " << meanBPIX_Z[1] << " | " << meanPixel_Z[1] << " |\n"
	    << std::endl;

  std::cout << separator << separator << separator << std::endl; 

}