00001 #include "StMaker.h"
00002
00003
00004 #include <StMuDSTMaker/COMMON/StMuDstMaker.h>
00005 #include <StMuDSTMaker/COMMON/StMuDst.h>
00006 #include <StMuDSTMaker/COMMON/StMuEvent.h>
00007
00008 #include <StTriggerUtilities/StTriggerSimuMaker.h>
00009 #include <StTriggerUtilities/StTriggerSimuResult.h>
00010 #include <StTriggerUtilities/Bemc/StBemcTriggerSimu.h>
00011
00012 #include <StSpinPool/StMCAsymMaker/StMCAsymMaker.h>
00013
00014 #include <TChain.h>
00015 #include <TDirectory.h>
00016
00017 #include "StjMCMuDst.h"
00018 #include "StjMCKinMuDst.h"
00019 #include "StjMCParticleList.h"
00020 #include "StjMCParticlePrint.h"
00021
00022 #include <libgen.h>
00023
00024 #include <string>
00025 #include <cstring>
00026
00027 using namespace std;
00028
00029 class StjMCAsymMaker : public StMaker {
00030
00031 public:
00032
00033 StjMCAsymMaker(const Char_t *name, TDirectory* file, StMuDstMaker* uDstMaker)
00034 : StMaker(name), _file(file), _uDstMaker(uDstMaker)
00035 { }
00036
00037 virtual ~StjMCAsymMaker() { }
00038
00039 const char* GetCVS() const
00040 {static const char cvs[]="Tag $Name: $ $Id: StjMCAsymMaker.C,v 1.2 2009/04/28 02:38:07 tai Exp $ built "__DATE__" "__TIME__; return cvs;}
00041
00042 private:
00043
00044 TDirectory* _file;
00045 TTree* _tree;
00046
00047 StMuDstMaker* _uDstMaker;
00048 StjMCMuDst* _mc;
00049
00050 Int_t _runNumber;
00051 Int_t _eventId;
00052 Double_t _vertexZ;
00053
00054 Double_t _s;
00055 Double_t _t;
00056 Double_t _u;
00057 Double_t _pt;
00058 Double_t _costh;
00059 Double_t _x1;
00060 Double_t _x2;
00061 Int_t _pid;
00062
00063 Int_t _pdg1;
00064 Int_t _pdg2;
00065 Int_t _pdg3;
00066 Int_t _pdg4;
00067
00068 Double_t _a_ll;
00069
00070 Double_t _f1_cteq5m1;
00071 Double_t _f2_cteq5m1;
00072 Double_t _f1_cteq5l;
00073 Double_t _f2_cteq5l;
00074
00075 Double_t _df1_gsa_nlo;
00076 Double_t _df2_gsa_nlo;
00077 Double_t _df1_gsb_nlo;
00078 Double_t _df2_gsb_nlo;
00079 Double_t _df1_gsc_nlo;
00080 Double_t _df2_gsc_nlo;
00081
00082 Double_t _df1_grsv_lo;
00083 Double_t _df2_grsv_lo;
00084 Double_t _df1_grsv_nlo;
00085 Double_t _df2_grsv_nlo;
00086 Double_t _df1_grsv_g0;
00087 Double_t _df2_grsv_g0;
00088 Double_t _df1_grsv_gmax;
00089 Double_t _df2_grsv_gmax;
00090 Double_t _df1_grsv_gmin;
00091 Double_t _df2_grsv_gmin;
00092
00093 Double_t _df1_grsv_m015;
00094 Double_t _df2_grsv_m015;
00095 Double_t _df1_grsv_m030;
00096 Double_t _df2_grsv_m030;
00097 Double_t _df1_grsv_m045;
00098 Double_t _df2_grsv_m045;
00099 Double_t _df1_grsv_m060;
00100 Double_t _df2_grsv_m060;
00101 Double_t _df1_grsv_m075;
00102 Double_t _df2_grsv_m075;
00103 Double_t _df1_grsv_m090;
00104 Double_t _df2_grsv_m090;
00105 Double_t _df1_grsv_m105;
00106 Double_t _df2_grsv_m105;
00107 Double_t _df1_grsv_p030;
00108 Double_t _df2_grsv_p030;
00109 Double_t _df1_grsv_p045;
00110 Double_t _df2_grsv_p045;
00111 Double_t _df1_grsv_p060;
00112 Double_t _df2_grsv_p060;
00113 Double_t _df1_grsv_p070;
00114 Double_t _df2_grsv_p070;
00115
00116 Double_t _df1_dssv_nlo;
00117 Double_t _df2_dssv_nlo;
00118
00119 StjMCParticle getMcParticleForId(const StjMCParticleList& list, int id)
00120 {
00121 for(StjMCParticleList::const_iterator it = list.begin(); it != list.end(); ++it)
00122 {
00123 if((*it).mcparticleId == id) return (*it);
00124 }
00125 return StjMCParticle();
00126 }
00127
00128 public:
00129
00130 Int_t Init()
00131 {
00132 _mc = new StjMCMuDst(_uDstMaker);
00133
00134 _file->cd();
00135 _tree = new TTree("mcasym", "mcasym");
00136 _tree->Branch("runNumber" , &_runNumber , "runNumber/I" );
00137 _tree->Branch("eventId" , &_eventId , "eventId/I" );
00138 _tree->Branch("vertexZ" , &_vertexZ , "vertexZ/D" );
00139
00140 _tree->Branch("s" , &_s , "s/D");
00141 _tree->Branch("t" , &_t , "t/D");
00142 _tree->Branch("u" , &_u , "u/D");
00143 _tree->Branch("pt" , &_pt , "pt/D");
00144 _tree->Branch("costh" , &_costh , "costh/D");
00145 _tree->Branch("x1" , &_x1 , "x1/D");
00146 _tree->Branch("x2" , &_x2 , "x2/D");
00147 _tree->Branch("pid" , &_pid , "pid/I");
00148 _tree->Branch("pdg1" , &_pdg1 , "pdg1/I");
00149 _tree->Branch("pdg2" , &_pdg2 , "pdg2/I");
00150 _tree->Branch("pdg3" , &_pdg3 , "pdg3/I");
00151 _tree->Branch("pdg4" , &_pdg4 , "pdg4/I");
00152 _tree->Branch("a_ll" , &_a_ll , "a_ll/D");
00153 _tree->Branch("f1_cteq5m1" , &_f1_cteq5m1 , "f1_cteq5m1/D");
00154 _tree->Branch("f2_cteq5m1" , &_f2_cteq5m1 , "f2_cteq5m1/D");
00155 _tree->Branch("f1_cteq5l" , &_f1_cteq5l , "f1_cteq5l/D");
00156 _tree->Branch("f2_cteq5l" , &_f2_cteq5l , "f2_cteq5l/D");
00157 _tree->Branch("df1_gsa_nlo" , &_df1_gsa_nlo , "df1_gsa_nlo/D");
00158 _tree->Branch("df2_gsa_nlo" , &_df2_gsa_nlo , "df2_gsa_nlo/D");
00159 _tree->Branch("df1_gsb_nlo" , &_df1_gsb_nlo , "df1_gsb_nlo/D");
00160 _tree->Branch("df2_gsb_nlo" , &_df2_gsb_nlo , "df2_gsb_nlo/D");
00161 _tree->Branch("df1_gsc_nlo" , &_df1_gsc_nlo , "df1_gsc_nlo/D");
00162 _tree->Branch("df2_gsc_nlo" , &_df2_gsc_nlo , "df2_gsc_nlo/D");
00163 _tree->Branch("df1_grsv_lo" , &_df1_grsv_lo , "df1_grsv_lo/D");
00164 _tree->Branch("df2_grsv_lo" , &_df2_grsv_lo , "df2_grsv_lo/D");
00165 _tree->Branch("df1_grsv_nlo" , &_df1_grsv_nlo , "df1_grsv_nlo/D");
00166 _tree->Branch("df2_grsv_nlo" , &_df2_grsv_nlo , "df2_grsv_nlo/D");
00167 _tree->Branch("df1_grsv_g0" , &_df1_grsv_g0 , "df1_grsv_g0/D");
00168 _tree->Branch("df2_grsv_g0" , &_df2_grsv_g0 , "df2_grsv_g0/D");
00169 _tree->Branch("df1_grsv_gmax" , &_df1_grsv_gmax , "df1_grsv_gmax/D");
00170 _tree->Branch("df2_grsv_gmax" , &_df2_grsv_gmax , "df2_grsv_gmax/D");
00171 _tree->Branch("df1_grsv_gmin" , &_df1_grsv_gmin , "df1_grsv_gmin/D");
00172 _tree->Branch("df2_grsv_gmin" , &_df2_grsv_gmin , "df2_grsv_gmin/D");
00173 _tree->Branch("df1_grsv_m015" , &_df1_grsv_m015 , "df1_grsv_m015/D");
00174 _tree->Branch("df2_grsv_m015" , &_df2_grsv_m015 , "df2_grsv_m015/D");
00175 _tree->Branch("df1_grsv_m030" , &_df1_grsv_m030 , "df1_grsv_m030/D");
00176 _tree->Branch("df2_grsv_m030" , &_df2_grsv_m030 , "df2_grsv_m030/D");
00177 _tree->Branch("df1_grsv_m045" , &_df1_grsv_m045 , "df1_grsv_m045/D");
00178 _tree->Branch("df2_grsv_m045" , &_df2_grsv_m045 , "df2_grsv_m045/D");
00179 _tree->Branch("df1_grsv_m060" , &_df1_grsv_m060 , "df1_grsv_m060/D");
00180 _tree->Branch("df2_grsv_m060" , &_df2_grsv_m060 , "df2_grsv_m060/D");
00181 _tree->Branch("df1_grsv_m075" , &_df1_grsv_m075 , "df1_grsv_m075/D");
00182 _tree->Branch("df2_grsv_m075" , &_df2_grsv_m075 , "df2_grsv_m075/D");
00183 _tree->Branch("df1_grsv_m090" , &_df1_grsv_m090 , "df1_grsv_m090/D");
00184 _tree->Branch("df2_grsv_m090" , &_df2_grsv_m090 , "df2_grsv_m090/D");
00185 _tree->Branch("df1_grsv_m105" , &_df1_grsv_m105 , "df1_grsv_m105/D");
00186 _tree->Branch("df2_grsv_m105" , &_df2_grsv_m105 , "df2_grsv_m105/D");
00187 _tree->Branch("df1_grsv_p030" , &_df1_grsv_p030 , "df1_grsv_p030/D");
00188 _tree->Branch("df2_grsv_p030" , &_df2_grsv_p030 , "df2_grsv_p030/D");
00189 _tree->Branch("df1_grsv_p045" , &_df1_grsv_p045 , "df1_grsv_p045/D");
00190 _tree->Branch("df2_grsv_p045" , &_df2_grsv_p045 , "df2_grsv_p045/D");
00191 _tree->Branch("df1_grsv_p060" , &_df1_grsv_p060 , "df1_grsv_p060/D");
00192 _tree->Branch("df2_grsv_p060" , &_df2_grsv_p060 , "df2_grsv_p060/D");
00193 _tree->Branch("df1_grsv_p070" , &_df1_grsv_p070 , "df1_grsv_p070/D");
00194 _tree->Branch("df2_grsv_p070" , &_df2_grsv_p070 , "df2_grsv_p070/D");
00195 _tree->Branch("df1_dssv_nlo" , &_df1_dssv_nlo , "df1_dssv_nlo/D");
00196 _tree->Branch("df2_dssv_nlo" , &_df2_dssv_nlo , "df2_dssv_nlo/D");
00197
00198 return kStOk;
00199 }
00200
00201 Int_t Make()
00202 {
00203 _runNumber = _uDstMaker->muDst()->event()->runId();
00204 _eventId = _uDstMaker->muDst()->event()->eventId();
00205 _vertexZ = _uDstMaker->muDst()->event()->primaryVertexPosition().z();
00206
00207 StTriggerSimuMaker* trigSimu = dynamic_cast<StTriggerSimuMaker*>(GetMaker("StarTrigSimu"));
00208 StTriggerSimuResult trigResult = trigSimu->detailedResult(117001);
00209
00210 StMCAsymMaker *asym = dynamic_cast<StMCAsymMaker*>(GetMaker("MCAsym"));
00211
00212 StjMCKinMuDst* mckin = new StjMCKinMuDst(_uDstMaker);
00213 _s = mckin->s();
00214 _t = mckin->t();
00215 _u = mckin->u();
00216 _pt = mckin->pt();
00217 _costh = mckin->costh();
00218 _x1 = mckin->x1();
00219 _x2 = mckin->x2();
00220 _pid = mckin->pid();
00221
00222
00223 StjMCParticleList list = _mc->getMCParticleList();
00224 StjMCParticle part1 = getMcParticleForId(list, 5);
00225 StjMCParticle part2 = getMcParticleForId(list, 6);
00226 StjMCParticle part3 = getMcParticleForId(list, 7);
00227 StjMCParticle part4 = getMcParticleForId(list, 8);
00228
00229 _pdg1 = part1.pdg;
00230 _pdg2 = part2.pdg;
00231 _pdg3 = part3.pdg;
00232 _pdg4 = part4.pdg;
00233
00234 _a_ll = asym->getPartonicALL(_s, _t, _u, _pid, _pdg1, _pdg2, _pdg3, _pdg4);
00235
00236 Double_t Q2 = _pt*_pt;
00237
00238 _f1_cteq5m1 = asym->get_unpolPDF_NLO(_pdg1, _x1, Q2);
00239 _f2_cteq5m1 = asym->get_unpolPDF_NLO(_pdg2, _x2, Q2);
00240 _f1_cteq5l = asym->get_unpolPDF_LO(_pdg1, _x1, Q2);
00241 _f2_cteq5l = asym->get_unpolPDF_LO(_pdg2, _x2, Q2);
00242
00243 _df1_gsa_nlo = asym->get_polPDF_NLO_GSA(_pdg1, _x1, Q2);
00244 _df2_gsa_nlo = asym->get_polPDF_NLO_GSA(_pdg2, _x2, Q2);
00245 _df1_gsb_nlo = asym->get_polPDF_NLO_GSB(_pdg1, _x1, Q2);
00246 _df2_gsb_nlo = asym->get_polPDF_NLO_GSB(_pdg2, _x2, Q2);
00247 _df1_gsc_nlo = asym->get_polPDF_NLO_GSC(_pdg1, _x1, Q2);
00248 _df2_gsc_nlo = asym->get_polPDF_NLO_GSC(_pdg2, _x2, Q2);
00249
00250 _df1_grsv_lo = asym->get_polPDF_LO(_pdg1, _x1, Q2);
00251 _df2_grsv_lo = asym->get_polPDF_LO(_pdg2, _x2, Q2);
00252 _df1_grsv_nlo = asym->get_polPDF_NLO(_pdg1, _x1, Q2);
00253 _df2_grsv_nlo = asym->get_polPDF_NLO(_pdg2, _x2, Q2);
00254 _df1_grsv_g0 = asym->get_polPDF_NLO_g0(_pdg1, _x1, Q2);
00255 _df2_grsv_g0 = asym->get_polPDF_NLO_g0(_pdg2, _x2, Q2);
00256 _df1_grsv_gmax = asym->get_polPDF_NLO_gmax(_pdg1, _x1, Q2);
00257 _df2_grsv_gmax = asym->get_polPDF_NLO_gmax(_pdg2, _x2, Q2);
00258 _df1_grsv_gmin = asym->get_polPDF_NLO_gmin(_pdg1, _x1, Q2);
00259 _df2_grsv_gmin = asym->get_polPDF_NLO_gmin(_pdg2, _x2, Q2);
00260
00261 _df1_grsv_m015 = asym->get_polPDF_NLO_m015(_pdg1, _x1, Q2);
00262 _df2_grsv_m015 = asym->get_polPDF_NLO_m015(_pdg2, _x2, Q2);
00263 _df1_grsv_m030 = asym->get_polPDF_NLO_m030(_pdg1, _x1, Q2);
00264 _df2_grsv_m030 = asym->get_polPDF_NLO_m030(_pdg2, _x2, Q2);
00265 _df1_grsv_m045 = asym->get_polPDF_NLO_m045(_pdg1, _x1, Q2);
00266 _df2_grsv_m045 = asym->get_polPDF_NLO_m045(_pdg2, _x2, Q2);
00267 _df1_grsv_m060 = asym->get_polPDF_NLO_m060(_pdg1, _x1, Q2);
00268 _df2_grsv_m060 = asym->get_polPDF_NLO_m060(_pdg2, _x2, Q2);
00269 _df1_grsv_m075 = asym->get_polPDF_NLO_m075(_pdg1, _x1, Q2);
00270 _df2_grsv_m075 = asym->get_polPDF_NLO_m075(_pdg2, _x2, Q2);
00271 _df1_grsv_m090 = asym->get_polPDF_NLO_m090(_pdg1, _x1, Q2);
00272 _df2_grsv_m090 = asym->get_polPDF_NLO_m090(_pdg2, _x2, Q2);
00273 _df1_grsv_m105 = asym->get_polPDF_NLO_m105(_pdg1, _x1, Q2);
00274 _df2_grsv_m105 = asym->get_polPDF_NLO_m105(_pdg2, _x2, Q2);
00275 _df1_grsv_p030 = asym->get_polPDF_NLO_p030(_pdg1, _x1, Q2);
00276 _df2_grsv_p030 = asym->get_polPDF_NLO_p030(_pdg2, _x2, Q2);
00277 _df1_grsv_p045 = asym->get_polPDF_NLO_p045(_pdg1, _x1, Q2);
00278 _df2_grsv_p045 = asym->get_polPDF_NLO_p045(_pdg2, _x2, Q2);
00279 _df1_grsv_p060 = asym->get_polPDF_NLO_p060(_pdg1, _x1, Q2);
00280 _df2_grsv_p060 = asym->get_polPDF_NLO_p060(_pdg2, _x2, Q2);
00281 _df1_grsv_p070 = asym->get_polPDF_NLO_p070(_pdg1, _x1, Q2);
00282 _df2_grsv_p070 = asym->get_polPDF_NLO_p070(_pdg2, _x2, Q2);
00283
00284 _df1_dssv_nlo = asym->get_polPDF_NLO_DSSV(_pdg1, _x1, Q2);
00285 _df2_dssv_nlo = asym->get_polPDF_NLO_DSSV(_pdg2, _x2, Q2);
00286
00287 _tree->Fill();
00288 return kStOk;
00289 }
00290
00291 Int_t Finish()
00292 {
00293 _tree->BuildIndex("runNumber", "eventId");
00294 return kStOk;
00295 }
00296 ClassDef(StjMCAsymMaker, 0)
00297 };