Joanna8848
BAN USERZHOU XING p. 1/2
121 Lafayette Rd. Apt. 326, Syracuse, NY 13205
Cell: (315) 4806818 Email: zhxing@syr.edu
EDUCATION
Syracuse University, College of Art and Science, Syracuse, NY. (Expected May 2013)
Ph.D. in Physics (GPA: 3.98/4.0).
Physics course: Classical Mechanics, Electromagnetic Theory, Quantum Mechanics, Quantum Field Theory etc.
Engineering course: Object Oriented Design, Algorithm, VLSI Design Methods, FPGA Circuits and Applications etc.
Dissertation: Measurement of the D_s^+D_s^ Production Asymmetry and Semileptonic CP Violating Asymmetry a_sl in B ̅_s decays
Advisors: Prof. Marina Artuso and Prof. Sheldon Stone
University of Science and Technology of China (USTC), Hefei, China. (May 2008)
B.S. in Modern Physics; Major: electronics specialized in experimental particle physics.
Institute of High Energy Physics (IHEP), CAS, Beijing, China. (2007 summer school)
Participated in beam test to characterize the performance of CsI crystal calorimeter for BES detector.
INTERNATIONAL COLLABORATIVE RESEARCH
The European Organization for Nuclear Research (CERN), LHCb collaboration, France and Switzerland. (20112012)
Software Package Development (C++ and Python)
Independently developed and implemented a novel approach to measure detector tracking efficiencies, denoted as “partial and full” method, where the efficiency is extracted from the ratio of full and partial reconstruction of D^(*+) decay sequence with one track ignored in the latter case. The design consists of two major packages: one provides the user interface to the information of the full reconstruction and the other one performs the kinematic fitting utility on a tuplebased data structure. Physics properties of the missing track are inferred and optimized by kinematic fitting using “Lagrange multiplier” method. This is pioneering work in LHCb collaboration on tracking efficiency estimation which requires profound knowledge of physics, statistics and software engineering skills. The asymmetry between detection efficiency of positively and negatively charged track is determined at 0.18% level of precision. After being incorporated into LHCb software framework this tool has been used by many LHCb analyses now [2][4][7].
Developed specific GUI system for experimental data quality monitoring in order to study the radiation damage effects of nonn sensors in VELO subdetector. Also in charge of code maintenance for this particular package.
Physics Analyses (C and C++)
Performed analysis for the measurement of semileptonic CP violating asymmetry a_sl in B ̅_s decays, which is one of the major physics program in LHCb, the result is very consistent with the Standard Model. I implemented independently the whole analysis which was chosen as the baseline for publication [4] and developed a new calibration algorithm for muon trigger and identification efficiencies which minimizes the bias from the trigger system. Also developed an algorithm to emulate the muon hardware trigger threshold by doing a lookup table search.
Performed analysis for the measurement of D_s^+D_s^ production asymmetry [2] which is a litmus test for “partial and full” method of pion detection efficiencies and milestone towards the a_sl measurement. This result can constrain future models of heavy flavor production.
Performed analysis for the measurement of form factors in Λ_b→Λ_c μν semileptonic decays.
Performed analysis for the measurement of B hadron fractions using semileptonic B decays. [1]
BEAM TEST DATA ANALYSES
Syracuse University (20092011)
Analyzed testbeam data to characterize Timepix hybrid pixel detector (C++): (a) built comprehensive software framework which allows efficient object instantiation such as pixel clustering, pattern recognition, and particle track fitting. Unbiased spatial resolution of 4.0±0.1 μm for angled tracks and 4.411 μm for perpendicular tracks were achieved for DUT (b) a charge calibration method developed allowing a precise measure of the true deposited charge with predicated response function called for each of the 64k pixel cells (c) Landau distribution study: different models such as Bichsel approach, BlunckLeisegang function implemented to study both MPV and the broadening effects due to atomic binning, electric noise and gain calibration etc. [8]
ACADEMIC ELECTRONICS DESIGNS
Syracuse University (20082010)
VLSI design: 8bit Microprocessor with AMI 0.6 μm technology. The design was implemented using VHDL and Verilog and sent to MOSIS for fabrication.
FPGA design: developed an efficient largescale data reduction architecture with zerosuppression algorithm based on “KolmogorovSmirnov” statistical test, the design was prototyped on Xilinx Spartan3E FPGA Family.
SKILLS
Object Oriented Design (C++) Radiation Detection Latex
Python Imaging Detector Technologies Xilinx ISE suite
C Programming Data Quality Monitoring ASIC Design
Linux/Unix Platform Cadence Suite TCAD Simulation
VHDL and Verilog Synopsis LabVIEW
Largescale Data Analysis
PUBLICATIONS AND CONFERENCE CONTRIBUTIONS
[1] LHCb collaboration, “Measurement of b hadron production fraction in 7 TeV pp collisions”, Physical Review D 85, 032008 (2012)
[2] LHCb collaboration, “Measurement of the D_s^+D_s^ production asymmetry in 7 TeV pp collisions ”, Physics Letters B 713 (2012) 186195
[3] Z. Xing, “D_s^+D_s^ production asymmetry measurement”, in LHCC open session, March 21, 2012 at CERN, Switzerland
[4] LHCb collaboration, “Flavour specific CP asymmetry using semileptonic B_s decays”, LHCbCONF2012022
[5] Z. Xing, “Recent CPV results in LHCb”, 3rd Implications of LHC results for TeVscale physics workshop, July 16, 2012, CERN
[6] Z. Xing, “Measurement of the CP violating semileptonic asymmetry in B ̅_s decays”, 7th International Workshop on the CKM Unitarity Triangle, October 2, 2012, Cincinnati
[7] LHCb collaboration, “Measurement of the D^± production asymmetry at LHCb”, LHCbPAPER2012026
[8] K. Akiba et al., “Charged particle tracking with the Timepix ASIC”, Nuclear Instruments and Methods in Physics Research A 661 (2012) 3149
[9] Z. Xing, “Test beam studies of the performance of Timepix hybrid pixel detector”, US LHC User Organization Annual Meeting, October 29, 2010, Fermi lab
[10] P. Collins et al., “The LHCb VELO upgrade”, Nuclear Instruments and Methods in Physics Research A 636 (2011) S185S193
AWARDS AND HONORS
Research Assistantship, Syracuse University, 2009present
Teaching Assistantship, Syracuse University, 20082009
Outstanding Student Scholarship, USTC, 20062007
PROFESSIONAL AFFILIATIONS
American Physical Society
A little more challenging questions would look like this:
You are given two sorted lists of size m and n. Give an O(log m + log n) time algorithm for computing the kth smallest element in the union of the two lists.
Algorithm GetMutualMedian(A[m], B[n])
Input: sorted array A[m] and B[n]
Output: return the median of the combined array C[m+n]
if m=1, n=1 return A[m] or B[n]
if A[m/2] < B[n/2]: upper half of B is larger than lower half of B and lower half of A, thus upper half of B
should be larger than (m+n)/2 elements, recursively call GetMutualMedian(A[m], B[1n/2])
if A[m/2] > B[n/2]: upper half of A is larger than lower half of A and lower half of B, thus upper half of A
should be larger than (m+n)/2 elements, recursively call GetMutualMedian(A[1m/2], B[n])
if A[m/2] == B[n/2]: return A[m/2] or B[n/2]
Time complexity = log(m)+log(n)
how about using a prefix tree (trie) data structure:
key #1 (1,2,3)
key #2 (4,5,6)
key #3 (7,8,9)
key #4 (0)
if dial 41567895432 then dial 212233... with automatic completion provided
This is a subsequence problem, instead of substring, I think the right algorithm to use should be "building a prefix table" using dynamic programming.
 Joanna8848 February 28, 2013#include <iostream>
#include <vector>
using namespace std;
int main()
{
//sort 26 chats from AZ using "counting sort"
//time complexity O(n)
string input("SHEEP");
string ruler("PSEH");
vector<int> C(256,0), C_prime(256,0);//use ASCII code as index for counting array
string result=input;
//create counting auxilliary array called "C", it counts frequencies for each char
for(string::const_iterator p=input.begin();p!=input.end();p++){
C[int(*p)]++;
}
//convert C to C_prime (Auxilliary array)
int count=0;
for(string::const_iterator p=ruler.begin();p!=ruler.end();p++ ){
count += C[int(*p)];
C_prime[int(*p)]=count;
}
// input > C_prime > result mapping
for(string::const_iterator p = input.end()1;p>=input.begin();p){
result[C_prime[int(*p)]1] = *p;
C_prime[int(*p)];
}
// output the sorted array : "PSEEH"
cout<<result<<endl;
return 0;
}
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int main(int argc, char* argv[]){
int N = atoi(argv[1]);
vector<bool> flags(N,true);
for(int i=2;i<=sqrt(N);i++){
if(flags[i1]==true){
for(int j=i*i;j<=N;){
flags[j1]=false;
j+=i;
}//inner for
}//if
}//outer for
int count=0;
for(int ii=1;ii<flags.size();ii++)
{
if(flags[ii]==true) count++;
}
cout<<count<<endl;
return 0;
}
0:56#hepc1 ./a.out 100
25
0:56#hepc1
0:56#hepc1 ./a.out 1000000
78498
#include <iostream>
using namespace std;
#include <stdio.h>
#include <stdlib.h>
/* A binary tree node has data, pointer to left child
and a pointer to right child */
class node
{
public:
node(int dat){ data = dat; left = NULL; right=NULL; }
int data;
node* left;
node* right;
};
/* returns max of two integers */
int max(int a, int b);
/* function to Compute height of a tree. */
int height(node* node);
/* Function to get diameter of a binary tree */
int diameter(node * tree)
{
/* base case where tree is empty */
if (tree == 0) return 0;
/* get the height of left and right subtrees */
int lheight = height(tree>left);
int rheight = height(tree>right);
/* get the diameter of left and right subtrees */
int ldiameter = diameter(tree>left);
int rdiameter = diameter(tree>right);
/* Return max of following three
1) Diameter of left subtree
2) Diameter of right subtree
3) Height of left subtree + height of right subtree + 1 */
cout<< lheight + rheight + 1 <<" "<< ldiameter << " "<< rdiameter <<endl;
return max(lheight + rheight + 1, max(ldiameter, rdiameter));
}
/* UTILITY FUNCTIONS TO TEST diameter() FUNCTION */
/* The function Compute the "height" of a tree. Height is the
number f nodes along the longest path from the root node
down to the farthest leaf node.*/
int height(node* node)
{
/* base case tree is empty */
if(node == NULL) return 0;
/* If tree is not empty then height = 1 + max of left
height and right heights */
return 1 + max(height(node>left), height(node>right));
}
/* Helper function that allocates a new node with the
given data and NULL left and right pointers. */
/* returns maximum of two integers */
int max(int a, int b)
{
return (a >= b)? a: b;
}
/* Driver program to test above functions*/
int main()
{
/* Constructed binary tree is
1
/ \
2 3
/ \
4 5
/ \
6 7
*/
node *root = new node(1);
root>left = new node(2);
root>right = new node(3);
root>left>left = new node(4);
root>left>right = new node(5);
root>left>left>left = new node(6);
root>left>right>right = new node(7);
printf("Diameter of the given binary tree is %d\n", diameter(root));
cout<< "node 1 has height "<< height(root)<<endl;
return 0;
}
Suppose the 5 seats are numbered thus different than each other.
Total # of possible ways to sit = 5 !
# of possible ways to sit when two people are together = 10 (10 ways to arrange the two peopl) x 3!
Probability = (10 x 3 !)/5! = 1/2 = 50%
Based upon quick sort algorithm:
RandomizedSelect(A[p..r],i) looking for ith o.s.
if p = rreturn A[p]
q < RandomizedPartition(A,p,r)
k < qp+1 the size of the left partition
if i=k then the pivot value is the answer
return A[q]
else if i < k then the answer is in the front
return RandomizedSelect(A,p,q1,i)
else then the answer is in the back half
return RandomizedSelect(A,q+1,r,ik)
T[n] = O(n)
class C
{
1) A default constructor
C();
2) A default destructor
~C();
3) A copy constructor
C(const C & );
4) A copy assignment operator
C& operator = (const C &);
};
plus
C* operator &();
const C* operator &() const;
class A vtable points to base virtual function A::foo()
class B vtable points to most derived function which is B::foo() (if there is one), otherwise it points to base virtual function too
#include <iostream>
#include <deque>
using namespace std;
void main()
{
int d(0);
deque<char> binary;
cout<<"Please Enter Decimal Number:"<<endl;
cin >> d;
while(d > 0)
{
if(d%2==0)
{
binary.push_front('0');
}
else
{
binary.push_front('1');
}
d = d/2;
}
for (deque<char>::iterator it = binary.begin(); it!=binary.end(); ++it){
cout << *it;
}
cout<<endl;
}
int i, x;
i = 2;
x = ++i;
// now i = 3, x = 3
i = 2;
x = i++;
// now i = 3, x = 2
'Post' means after  that is, the increment is done after the variable is read. 'Pre' means before  so the variable value is incremented first, then used in the expression.
case( I )
#include <iostream>
using namespace std;
void main()
{
int count = 0;
for(int i=0; i < 10; ++i){
count = count++;
}
cout<<"Output of this code is: "<<endl;
std::cout << count <<endl;
}
root [0] .L main.C
root [1] main()
Output of this code is:
0
case ( II )
#include <iostream>
using namespace std;
void main()
{
int count = 0;
for(int i=0; i < 10; ++i){
count = ++count;
}
cout<<"Output of this code is: "<<endl;
std::cout << count <<endl;
}
root [0] .L main.C
root [1] main()
Output of this code is:
10
#include <iostream>
#include <string>
using namespace std;
int convert_string()
{
cout<<"Please input your stringnumber here: "<<endl;
string in;
cin >> in ;
double tens(1),sum(0);
for(int i= in.length()1 ; i>=0 ; i)
{
sum += (int(in[i])int('0'))*tens;
tens *= 10;
}
cout<<sum<<endl;
return sum;
}
int convert_char()
{
cout<<"Please input your stringnumber here: "<<endl;
char in[100];
cin >> in ;
double tens(1),sum(0);
int j = 0;
int count = 0;
while(in[j]!='\0')
{
j++;
count++;
}
for(int i= count1 ; i>=0 ; i)
{
sum += (int(in[i])int('0'))*tens;
tens *= 10;
}
cout<<sum<<endl;
return sum;
}
#include <iostream>
using namespace std;
class integer
{
public:
int output(){return inte; }
protected:
void input()
{
cout<<"Enter Integer: ";
cin>>inte;
}
private:
int inte;
};
class character : public integer
{
public:
void calc();
void display();
void useinput(){input();}
protected:
private:
char ch;
};
void character::calc()
{
cout<<"Enter Character: ";
cin>>ch;
}
void character::display()
{
if( (int(ch)48) % this>output() ==0 ){
cout<< "Divides Completely"<<endl;
}
else{
cout<< "Does not divide"<<endl;
}
}
int main()
{
character a;
a.useinput();
a.calc();
a.display();
return 0;
}

Joanna8848
October 29, 2012 The level of the water should be lower compared to L1, the reasons are explained as following:
case (I), boat + rock are in an equlibrium state which means: floating force generated by water == gravitational force of the boat+rock, in physics language
rho * Volume_water * g = (m_rock + m_boat) *g
case (II), boat is still in an equilibrium state (floating force== gravitational force) however the rock must go to the bottom of the water as it has much larger density (floating force << gravitational force)
so rho * Volume_water * g << (m_rock+m_boat) *g
to conclude, Volume_water_1 > Volume_water_2
so, water_level_2 < water_level_1
Repdeloresrdaniels, Cloud Support Associate at JDA
Crossed the country marketing wool in Nigeria. Was quite successful How to Get Girlfriend Back By Vashikaran Mantra . Spent a ...
Rep
RepWilliamDGiles, Cloud Support Associate at ADP
Spent 20012006 creating marketing channels for tar worldwide. Was quite successful at building tobacco for farmers. Won several awards for ...
Repbilliejeckley, SEO at Flipkart
Spent 20022008 testing the market for spittakes in Los Angeles, CA. Spent 20012004 deploying how to get boyfriend back by ...
Repmerrittmonique9, Android Engineer at AMD
I am Monique and working in high court from last 20 years.Handel many cases in my career.Build and ...
RepAmmoBoard, Employee at A9
The best online ammo shop to buy ammunition for your rifles, handguns & shotguns from top brands you like.
Open Chat in New Window
 Joanna8848 March 01, 2013