00001
00002 #include "TFile.h"
00003 #include "TTree.h"
00004 #include "TH3.h"
00005 #include "TNtuple.h"
00006
00007
00008 #include <vector>
00009 #include <map>
00010 #include <algorithm>
00011 #include <cmath>
00012 using namespace std;
00013
00014
00015 #include "StChain.h"
00016 #include "StDetectorDbMaker/StDetectorDbTriggerID.h"
00017
00018
00019 #include "StEvent.h"
00020 #include "StEnumerations.h"
00021 #include "StEventTypes.h"
00022
00023
00024 #include "StPhysicalHelixD.hh"
00025
00026
00027 #include "tables/St_vertexSeed_Table.h"
00028
00029
00030 #include "TFile.h"
00031 #include "StChain.h"
00032 #include "SystemOfUnits.h"
00033
00034
00035 #include "StMuDSTMaker/COMMON/StMuDst.h"
00036 #include "StMuDSTMaker/COMMON/StMuTrack.h"
00037 #include "StMuDSTMaker/COMMON/StMuEvent.h"
00038 #include "StMuDSTMaker/COMMON/StMuDstMaker.h"
00039 #include "StMuDSTMaker/COMMON/StMuEmcCollection.h"
00040 #include "StMuDSTMaker/COMMON/StMuDst.h"
00041 #include "StMuDSTMaker/COMMON/StMuEmcUtil.h"
00042
00043
00044 #include "StEventTypes.h"
00045
00046
00047 #include "StEmcClusterCollection.h"
00048 #include "StEmcPoint.h"
00049 #include "StEmcUtil/geometry/StEmcGeom.h"
00050 #include "StEmcUtil/others/emcDetectorName.h"
00051 #include "StEmcADCtoEMaker/StBemcData.h"
00052 #include "StEmcADCtoEMaker/StEmcADCtoEMaker.h"
00053 #include "StEmcRawMaker/defines.h"
00054 #include "StEmcRawMaker/StBemcRaw.h"
00055 #include "StEmcRawMaker/StBemcTables.h"
00056 #include "StEmcRawMaker/StEmcRawMaker.h"
00057 #include "StEmcRawMaker/defines.h"
00058
00059
00060 #include "StEEmcUtil/database/StEEmcDb.h"
00061 #include "StEEmcUtil/database/EEmcDbItem.h"
00062 #include "StEEmcUtil/database/cstructs/eemcConstDB.hh"
00063 #include "StEEmcUtil/EEfeeRaw/EEname2Index.h"
00064 #include "StEEmcUtil/EEmcGeom/EEmcGeomSimple.h"
00065
00066
00067
00068 #include "StJetHistMaker.h"
00069
00070 ClassImp(StJetHistMaker)
00071
00072
00073
00074 StJetHistMaker::StJetHistMaker(StMuDstMaker* uDstMaker, const char *outputName)
00075 : StMaker("StJetHistMaker"), muDstMaker(uDstMaker), mOutName(outputName), mTables(new StBemcTables())
00076 {
00077 mudst=0;
00078 }
00079
00080 Int_t StJetHistMaker::InitRun(Int_t runId)
00081 {
00082 cout <<"Welcome to StJetHistMaker::InitRun()"<<endl;
00083 mTables->loadTables((StMaker*)this);
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109 return kStOk;
00110
00111 }
00112
00113 Int_t StJetHistMaker::Init()
00114 {
00115 cout << "StJetHistMaker: output file: " << mOutName << endl;
00116
00117
00118 mOutfile = new TFile(mOutName,"RECREATE");
00119
00120
00121 mbVertexZvsNp = new TH2F("mbVertexZvsNp","Z_{vertex} vs N_{good-primary} (mb)", 101, -0.5, 100.5, 400, -200., 200.);
00122 mbTrackKin = new TH3F("mbTrackKin","Eta vs Phi vs Pt (mb)", 200, 0., 10., 100, -3.14159, 3.14159, 100, -1.5, 1.5);
00123 mbNfitVsEta = new TH2F("mbNfitVsEta","Eta vs N_{fit} (mb)", 56, -0.5, 55.5, 100, -1.5, 1.5);
00124
00125
00126 ht1VertexZvsNp = new TH2F("ht1VertexZvsNp","Z_{vertex} vs N_{good-primary} (ht1)", 101, -0.5, 100.5, 400, -200., 200.);
00127 ht1TrackKin = new TH3F("ht1TrackKin","Eta vs Phi vs Pt (ht1)", 200, 0., 10., 100, -3.14159, 3.14159, 100, -1.5, 1.5);
00128 ht1NfitVsEta = new TH2F("ht1NfitVsEta","Eta vs N_{fit} (ht1)", 56, -0.5, 55.5, 100, -1.5, 1.5);
00129
00130
00131 otherVertexZvsNp = new TH2F("otherVertexZvsNp","Z_{vertex} vs N_{good-primary} (other)", 101, -0.5, 100.5, 400, -200., 200.);
00132 otherTrackKin = new TH3F("otherTrackKin","Eta vs Phi vs Pt (other)", 200, 0., 10., 100, -3.14159, 3.14159, 100, -1.5, 1.5);
00133 otherNfitVsEta = new TH2F("otherNfitVsEta","Eta vs N_{fit} (other)", 56, -0.5, 55.5, 100, -1.5, 1.5);
00134
00135
00136 mipHistVsEta = new TH2F("mipHistVsEta","ADC_{MIP} distribution vs Tower Eta",20, 0., 1., 200, 0, 200);
00137 mipEvsEta = new TH2F("mipEvsEta","E_{MIP} distribution vs Tower Eta",20, 0., 1., 200, 0, 2);
00138 towerEvsId = new TH2F("towerEvsId","E_{Tower} vs ID",2401, -0.5, 2400.5, 100, 0., 10.);
00139 towerAdcvsId = new TH2F("towerAdcvsId","ADC_{Tower} vs ID", 2401, -0.5, 2400.5, 100, 0., 500.);
00140
00141
00142 return StMaker::Init();
00143 }
00144
00145 void StJetHistMaker::fillBarrelHits()
00146 {
00147 cout <<"void StJetHistMaker::fillBarrelHits()"<<endl;
00148
00149
00150
00151 StEmcGeom* geom = StEmcGeom::instance("bemc");
00152 assert(geom);
00153
00154
00155 assert(mTables);
00156
00157
00158 StEvent* event = dynamic_cast<StEvent*>( GetInputDS("StEvent") );
00159 assert(event);
00160 StEmcCollection* emc = event->emcCollection();
00161 assert(emc);
00162
00163
00164 StEmcDetector* detector = emc->detector(kBarrelEmcTowerId);
00165 assert(detector);
00166
00167
00168
00169
00170
00171 for(int m = 1; m<=120;m++) {
00172 StEmcModule* module = detector->module(m);
00173 assert(module);
00174
00175 StSPtrVecEmcRawHit& rawHits = module->hits();
00176
00177 for(UInt_t k=0;k<rawHits.size();k++) {
00178 StEmcRawHit* tempRawHit = rawHits[k];
00179
00180
00181 int m = tempRawHit->module();
00182 int e = tempRawHit->eta();
00183 int s = abs(tempRawHit->sub());
00184 int id, status;
00185
00186 geom->getId(m,e,s,id);
00187
00188
00189 mTables->getStatus(BTOW, id, status);
00190
00191
00192 float pedestal, rms;
00193 int CAP=0;
00194 mTables->getPedestal(BTOW, id, CAP, pedestal, rms);
00195
00196
00197 float eta, phi;
00198 geom->getEtaPhi(id,eta,phi);
00199
00200
00201 float gain = -1;
00202 mTables->getCalib(BTOW,id,1,gain);
00203
00204 if (gain!=0. && status==1);
00205
00206
00207
00208
00209 }
00210 }
00211 }
00212
00213 Int_t StJetHistMaker::Make()
00214 {
00215 cout <<" Start StJetHistMaker :: "<< GetName() <<endl;
00216 gMessMgr->SwitchOff("I");
00217 gMessMgr->SwitchOff("E");
00218 gMessMgr->SwitchOff("W");
00219 gMessMgr->SwitchOff("Q");
00220
00221
00222
00223 mudst = muDstMaker->muDst();
00224 StMuEvent* muEvent = mudst->event();
00225
00226
00227 StThreeVectorF vertex = muEvent->primaryVertexPosition();
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239 StMuTriggerIdCollection tic = muEvent -> triggerIdCollection();
00240 StTriggerId l1trig = tic.l1();
00241
00242 int startriggers[3] = {45010, 45201, 45202};
00243 int trigs[3] = {0,0,0};
00244 int prescales[3] = {0,0,0};
00245
00246
00247 for (int i=0; i<3; ++i) {
00248 if (l1trig.isTrigger(startriggers[i])) {
00249 trigs[i] = 1;
00250 }
00251 }
00252
00253
00254 StDetectorDbTriggerID& v = *(StDetectorDbTriggerID::instance());
00255 for(unsigned int i = 0; i < v.getL0NumRows(); i++){
00256
00257 for (int j=0; j<3; ++j) {
00258
00259 if (v.getL0OfflineTrgId(i) == startriggers[j]) {
00260 prescales[j] = v.getPsL0(i);
00261 }
00262 }
00263 }
00264
00265 if (vertex.z()!=0. && fabs(vertex.z())<50 ) {
00266
00267 int nprim = 0;
00268 int nTracks = mudst->primaryTracks()->GetLast()+1;
00269
00270 for(int i = 0; i < nTracks; i++) {
00271 StMuTrack* track = mudst->primaryTracks(i);
00272 assert(track);
00273
00274 if ( track->flag()>0
00275 && track->topologyMap().trackFtpcEast()==false
00276 && track->topologyMap().trackFtpcWest()==false
00277 && track->pt()>0.2
00278 && track->nHitsFit()>30
00279 && fabs(track->eta())<0.5
00280 ) {
00281
00282
00283 StThreeVectorF mom = track->momentum();
00284
00285 ++nprim;
00286
00287
00288 if (trigs[0] == 1) {
00289 mbTrackKin->Fill( mom.perp(), mom.phi(), mom.pseudoRapidity() );
00290 mbNfitVsEta->Fill(track->nHitsFit(), mom.pseudoRapidity());
00291 }
00292 if (trigs[1] == 1) {
00293 ht1TrackKin->Fill( mom.perp(), mom.phi(), mom.pseudoRapidity() );
00294 ht1NfitVsEta->Fill(track->nHitsFit(), mom.pseudoRapidity());
00295 }
00296 if (trigs[0]==0 && trigs[1]==0 && trigs[2]==0) {
00297 otherTrackKin->Fill( mom.perp(), mom.phi(), mom.pseudoRapidity() );
00298 otherNfitVsEta->Fill(track->nHitsFit(), mom.pseudoRapidity());
00299 }
00300
00301 }
00302 }
00303
00304 if (trigs[0] == 1) {
00305 mbVertexZvsNp->Fill(nprim, vertex.z());
00306 }
00307 if (trigs[1] == 1) {
00308 ht1VertexZvsNp->Fill(nprim, vertex.z());
00309 }
00310 if (trigs[0]==0 && trigs[1]==0 && trigs[2]==0) {
00311 otherVertexZvsNp->Fill(nprim, vertex.z());
00312 }
00313 }
00314
00315 return kStOk;
00316 }
00317
00318 void StJetHistMaker::FinishFile(void)
00319 {
00320
00321 mOutfile->Write();
00322 mOutfile->Close();
00323 delete mOutfile;
00324 }
00325
00326 Int_t StJetHistMaker::Finish()
00327 {
00328 FinishFile();
00329 StMaker::Finish();
00330 return kStOK;
00331 }
00332