Python: Shallow copy vs deepcopy

Normal assignment simply points the new variable towards the existing object.

The difference between shallow and deep copying is only relevant for compound objects (objects that contain other objects, like lists or class instances):
  • A shallow copy constructs a new compound object and then (to the extent possible) inserts references into it to the objects found in the original.
  • A deep copy constructs a new compound object and then, recursively, inserts copies into it of the objects found in the original.
To demonstrate, see the following example:

import copy

x = [1, 2, 3]
y = [4, 5, 6]
z = [x, y]
Normal assignment example:
w = z

print id(z) == id(w)          # True - w is the same object as z
print id(z[0]) == id(w[0])    # True - w[0] is the same object as z[0]
Shallow copy example:
w = copy.copy(z)

print id(z) == id(w)          # False - w is now a new object
print id(z[0]) == id(w[0])    # True - w[0] is still the same object as z[0]
Deep copy example:
w = copy.deepcopy(z)

print id(z) == id(w)          # False - w is now a new object
print id(z[0]) == id(w[0])    # False - w[0] is also a new object

Root Commands and Examples

Official ROOT homepage
ROOT tips and tricks from the LHBC twiki
Environment Setup
Sample .rootrc and .rootlogon.C files

Accessing ROOT top level information and services : (more at TROOT.h)
TString rvers=gROOT->GetVersion();
Int_t ivers=gROOT->GetVersionInt();
FWLite Analysis      More here
draws eta spectrum of jets with a pt cut 
Generating Postscript     Click here for a full description
Int_t itype=113; // 113 for Encapsulated PostScript, 100114 for nice paper output
TString psfile="noise_dists_cosmics.eps";
TPostScript ps(psfile,itype);// if no itype given, format is determined by extension
... code goes here... 

or simply call
after canvas is complete
Adding Text     Click here for a full description
TLatex *t = new TLatex();
t->DrawLatex(xtxt,ytxt,"Z ^{#/}(700 GeV) #rightarrow q #bar{q}");

t->SetTextAlign(13); //align at top left
t->SetTextAlign(12); // left, vertically centered
t->SetTextAlign(22); // centered horizontally and vertically
t->SetTextAlign(11); //default bottom alignment
Adding a Legend     Click here for a full description
Double_t xl1=.05, yl1=0.75, xl2=xl1+.3, yl2=yl1+.125;
TLegend *leg = new TLegend(xl1,yl1,xl2,yl2);
leg->AddEntry(h1,"No Ecal","p");   // h1 and h2 are histogram pointers
leg->AddEntry(h2,"Ecal included","p");
Opening of ROOT files
TString dirname = ".";
TString rootname = "hlt1jet_mc_120.root";
rootname = dirname + "/" + rootname;
delete gROOT->GetListOfFiles()->FindObject(rootname); // clear memory of file name

cout << "Rootname:" << rootname << endl;
if( gSystem->AccessPathName(rootname) ) {
  cout << endl << "File: " << rootname << " not there!!!" << endl << endl;
TFile *rootfile = new TFile(rootname);
  or, for files in dcache:
TString rootname = "dcap://";
TFile *_file0 = new TDCacheFile(rootname);
  or, for files in CASTOR (CERN):
TFile *_file0 = TFile::Open("rfio:/castor/");
Listing of Histograms
rootfile->ls(); // list everything
Testing if a histogram exists in memory
TString hname="TriggerJets";
TKey *key = file->FindKey(hname);
if (key ==0){
  cout << "!!Histogram does not exist!!" << endl;
  throw 1;
TH1F *h =  (TH1F*)file->Get(hname);
Plotting of Histograms
TString hname="TriggerJets"; // From list of keys
TH1F *h = (TH1F*)_file0->Get(hname);
h->UseCurrentStyle(); // important for imported histograms
  Alternatively, call gROOT->ForceStyle(); before importing to set the style for all hists
h->GetXaxis()->SetRangeUser(0.,600.); // Set the range
h->SetFillColor(kYellow); // Fill fill color to yellow
h->SetFillColor(kYellow); // Fill fill color to yellow
h->SetMarkerStyle(20); h->SetMarkerColor(kBlue); h->SetMarkerSize(.6); // Draw histograms with blue markers
Profile Plots     
TProfile *prof = a_2d_histogram->ProfileX();
  to fit with p1:
TF1 *p1fit = new TF1("P1","pol1",0,300);
Number of Events in a Tree     
TTree *srctree = dynamic_cast(_file0->Get("Events")); // TTree name is "Events"
cout << "Number of Events: " << srctree->GetEntries() << endl;
Filling Histograms with Variables from a Root Tree     Click here for more info
TH1F *h = new TH1F("jetPt","Jet Pt",25,0.0,250.);
Fitting of Histograms     Click here for more info
double minf=0.0, maxf=100.;
TF1 *gfit = new TF1("Gaussian","gaus",minf,maxf); // Create the fit function
h->Fit("Gaussian","RQ"); // Fit histogram h"
     or h->Fit(gfit,"RQ");

double chisq=gfit->GetChisquare();
double ndf=gfit->GetNDF();
double chisqdf=chisq/ndf;
cout << "Chisquare: " << chisq << "/" << ndf << " : " << chisqdf << endl;

Double_t amp = gfit->GetParameter(0); //value of 0th parameter
Double_t eamp = gfit->GetParError(0); //error on 0th parameter
Double_t mean = gfit->GetParameter(1); //value of 1st parameter
Double_t emean = gfit->GetParError(1); //error on 1st parameter
Addition, subtraction, multiplication and division of histograms     Click here for a full description
n1->Sumw2(); d1->Sumw2(); // store sum of squares of weights (if not already done)
TH1F *rat = d1->Clone(); rat->SetName("Ratio"); // Clone one of the histograms
Extracting Histogram Information     Click here for a full description
h->GetMean(1); // For axis = 1,2 or 3 returns the mean value of the histogram along X,Y or Z axis.
h->GetRMS(1); h->GetRMSError(1);
h->GetXaxis()->SetRangeUser(0.,600.); // If range is set, mean is computed over specifed range
Axis names and values     Click here for a full description
TString xaxis="p_{T} (GeV/c)";
Colors and Palettes
The basic colors: kWhite, kBlack, kRed, kGreen, kBlue, kYellow, kMagenta, kCyan
   (defined in $ROOTSYS/include/Gtypes.h)
gROOT->GetListOfColors()->Print(); // generates a full listing

To define your own color:
TColor *colorname = new TColor(colornum,r,g,b,"colorname"); colornum > 228 and 0 < r,g,b < 1
   e.g. TColor *col = new TColor(229,.3,.5,.6,"");
Existing color numbers can be redefined as follows:
Working with the Canvas     Click here for a full description
TCanvas *c1 = new TCanvas("c1","Root Canvas 1"); // Default Canvas
Int_t wtopx,wtopy; UInt_t ww, wh;
c1->GetCanvasPar(wtopx,wtopy,ww,wh); // Gets Canvas Parameters

TCanvas *c1 = new TCanvas("c1","Root Canvas",Int_t wtopx, Int_t wtopy, Int_t ww, Int_t wh);
TCanvas *c1 = new TCanvas("c1","Root Canvas",900,20,540,550); // My Default Canvas

Interview Questions

A submarine has two torpedoes with 1/3 probability of hitting a target. Both were fired on the same target.  What is the probability that at least one of the torpedoes will hit the target?

2/3 x 2/3 = 4/9 is probability of neither hitting 
thus the probability of one hitting is 1 - 4/9 = 5/9

Python: read() vs readline() vs readlines()

a.txt contains

read() example:
f = open('a.txt','r')

readline() example:
f = open('a.txt','r'):
print f.readline()

readlines() example:
f = open('a.txt','r'):
print f.readlines()
['11\n', '22\n', '33\n']



PISIKA Copyright © 2009