00001 #include "StEEmcMixHistMaker.h"
00002 #include "TLine.h"
00003 #include <iostream>
00004
00005 ClassImp(StEEmcMixHistMaker);
00006
00007
00008 StEEmcMixHistMaker::StEEmcMixHistMaker(const Char_t *name):StEEmcMixMaker(name)
00009 {
00010
00011 std::cout << "In constructor" << std::endl << std::flush;
00012
00013 mMin=0.1;
00014 mMax=0.18;
00015
00016 std::cout << "..." << std::endl << std::flush;
00017
00018 }
00019
00020
00021 Int_t StEEmcMixHistMaker::Init()
00022 {
00023
00024 book(hMass,"hMass","Dipoint invariant mass spectrum",120,0.,1.2);
00025 book(hEnergy,"hEnergy","Dipoint energy distribution",100,0.,40.);
00026 book(hPT,"hPT","Dipoint PT distribution",100,0.,20.);
00027 book(hZgg,"hZgg","Dipoint asymmetry",100,0.,1.);
00028 book(hPhigg,"hPhigg","Dipoint opening angle",100,0.,0.2);
00029 book(hU1,"hU1","U seed strip for higher energy gamma",288,0.,288.);
00030 book(hU2,"hU2","U seed strip for lower energy gamma",288,0.,288.);
00031 book(hV1,"hV1","V seed strip for higher energy gamma",288,0.,288.);
00032 book(hV2,"hV2","V seed strip for lower energy gamma",288,0.,288.);
00033
00034 return StEEmcMixMaker::Init();
00035 }
00036
00037
00038 void StEEmcMixHistMaker::book( TH1F **h, const Char_t *name, const Char_t *title, Int_t nbin, Float_t min, Float_t max )
00039 {
00040
00041 const Char_t *n[]={"R","B","S"};
00042 const Char_t *t[]={", real events", ", mixed events", ", background subtracked"};
00043 const Int_t col[]={1,2,4};
00044
00045 for ( Int_t i=0;i<3;i++ )
00046 {
00047 h[i]=new TH1F(TString(name)+n[i], TString(title)+t[i], nbin, min, max );
00048 h[i]->Sumw2();
00049 h[i]->SetLineColor( col[i] );
00050 }
00051
00052 }
00053
00054
00055 Int_t StEEmcMixHistMaker::Make()
00056 {
00057 Int_t stat=StEEmcMixMaker::Make();
00058 if ( stat != kStOK ) return stat;
00059
00060
00061
00062
00063
00064
00066 if ( mCandidates.size() > 1 ) return kStOK;
00067
00068
00069 for ( UInt_t i=0; i<mCandidates.size(); i++ )
00070 {
00071 if ( accept(mCandidates[i] ) )
00072 fill( 0, mCandidates[i] );
00073 }
00074
00075 for ( UInt_t i=0; i<mBackground.size(); i++ )
00076 {
00077 if ( accept(mBackground[i]) )
00078 fill( 1, mBackground[i] );
00079 }
00080
00081 return kStOK;
00082
00083 }
00084
00085
00086 void StEEmcMixHistMaker::fill( Int_t mode, StEEmcPair &pair )
00087 {
00088 hMass[mode]->Fill( pair.mass() );
00089 if ( pair.mass() >= mMin && pair.mass() < mMax ) {
00090 hEnergy[mode]->Fill( pair.energy() );
00091 hPT[mode]->Fill( pair.momentum().Perp() );
00092 hZgg[mode]->Fill( pair.zgg() );
00093 hPhigg[mode]->Fill( pair.phigg() );
00094 hU1[mode]->Fill( pair.point(0).cluster(0).mean() );
00095 hU2[mode]->Fill( pair.point(1).cluster(0).mean() );
00096 hV1[mode]->Fill( pair.point(0).cluster(1).mean() );
00097 hV2[mode]->Fill( pair.point(1).cluster(1).mean() );
00098 }
00099 }
00100
00101
00102 Int_t StEEmcMixHistMaker::Finish()
00103 {
00104
00106 Float_t norm=1.0;
00107
00108
00109
00110 Float_t a=hMass[0]->Integral(80,120);
00111 Float_t b=hMass[1]->Integral(80,120);
00112 if ( b > 0. ) norm = a/b;
00113
00114 subtract(hMass,norm);
00115 subtract(hEnergy,norm);
00116 subtract(hPT,norm);
00117 subtract(hZgg,norm);
00118 subtract(hPhigg,norm);
00119 subtract(hU1,norm);
00120 subtract(hU2,norm);
00121 subtract(hV1,norm);
00122 subtract(hV2,norm);
00123
00124 return kStOK;
00125
00126 }
00127
00128 void StEEmcMixHistMaker::subtract( TH1F **h, Float_t norm )
00129 {
00130 h[1]->Scale(norm);
00131 h[2]->Add(h[0], 1.0);
00132 h[2]->Add(h[1],-1.0);
00133 }
00134
00135 Bool_t StEEmcMixHistMaker::accept( StEEmcPair &pair )
00136 {
00137 if ( pair.pt() < 2.0 ) return false;
00138 return true;
00139 }