00001 #include "StEEmcDisplayMaker.h"
00002
00003 #include "StEEmcPool/StEEmcA2EMaker/StEEmcA2EMaker.h"
00004 #include "StEEmcPool/StEEmcClusterMaker/StEEmcGenericClusterMaker.h"
00005 #include "StEEmcPool/StEEmcPointMaker/StEEmcGenericPointMaker.h"
00006 #include "StEEmcPool/StEEmcPi0Mixer/StEEmcPi0Maker.h"
00007
00008 #include "StMessMgr.h"
00009
00010
00011 #include "StMuDSTMaker/COMMON/StMuDstMaker.h"
00012 #include "StMuDSTMaker/COMMON/StMuDst.h"
00013 #include "StMuDSTMaker/COMMON/StMuEvent.h"
00014 #include "StMuDSTMaker/COMMON/StMuTriggerIdCollection.h"
00015
00016 #include "StEvent/StEvent.h"
00017 #include "StEvent/StTriggerIdCollection.h"
00018 #include "StEvent/StTriggerId.h"
00019
00020 #include "StEEmcDisplay.h"
00021
00022 #include "TString.h"
00023 #include "TTree.h"
00024
00025 ClassImp(StEEmcDisplayMaker);
00026
00027 StEEmcDisplayMaker::StEEmcDisplayMaker( const Char_t *name ) : StMaker(name)
00028 {
00029 mDisplay=new StEEmcDisplay();
00030 mFileLocal=true;
00031 mFile=0;
00032 mTree=0;
00033 mCheckTrigger=false;
00034 }
00035
00036
00037 Int_t StEEmcDisplayMaker::Init()
00038 {
00039
00040
00041 if ( mFile )
00042 {
00043 LOG_INFO<<"creating TTree, resident in file="<<mFile->GetName()<<endm;
00044 mTree=new TTree("mTree","StEEmcDisplayMaker TTree");
00045 mTree->Branch("display",&mDisplay,32000,2);
00046 mTree->SetDirectory( mFile );
00047 }
00048
00049 return StMaker::Init();
00050 }
00051
00052
00053 Int_t StEEmcDisplayMaker::Make()
00054 {
00055
00056
00057 Int_t run = GetRunNumber();
00058 Int_t event = GetEventNumber();
00059
00060 LOG_INFO<<"run="<<run<<" event="<<event<<endm;
00061
00062 Int_t triggerid = checkTrigger();
00063 if ( mCheckTrigger && !triggerid ) return kStOK;
00064
00065 LOG_INFO << "triggers "<<triggerList()<<endm;
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080 #if 0
00081
00082 if ( mEEpairs )
00083 {
00084 Bool_t go = false;
00085 StEEmcPairVec_t pairs = mEEpairs->pairs();
00086 for ( UInt_t ii=0;ii<pairs.size();ii++ )
00087 {
00088 if ( pair.mass() > 0.11 && pair.mass() < 0.16 ) go = true;
00089 if ( pair.mass() > 0.45 && pair.mass() < 0.65 ) go = true;
00090 }
00091 if ( !go ) return kStOK;
00092 }
00093
00094 #endif
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104 TString name="R";name+=run;name+="-";name+=event;
00105 TString title="run=";title+=run;
00106 title+=" event=";title+=event;
00107 title+=" triggers=";title+=triggerList();
00108
00109 title+=" ntow/pre1/pre2/post=";
00110 title+=mEEanalysis->numberOfHitTowers(0);title+="/";
00111 title+=mEEanalysis->numberOfHitTowers(1);title+="/";
00112 title+=mEEanalysis->numberOfHitTowers(2);title+="/";
00113 title+=mEEanalysis->numberOfHitTowers(3);
00114
00115 mDisplay->SetName(name);
00116 mDisplay->SetTitle(title);
00117
00118
00119
00120
00121
00122 if ( mEEanalysis )
00123 {
00124
00125
00126 for ( Int_t layer=0;layer<4;layer++ )
00127 for ( Int_t i=0;i<mEEanalysis->numberOfHitTowers(layer);i++ )
00128 mDisplay->add( mEEanalysis->hittower(i,layer) );
00129
00130
00131 for ( Int_t sec=0;sec<12;sec++ )
00132 for ( Int_t plane=0;plane<2;plane++ )
00133 for ( Int_t i=0;i<mEEanalysis->numberOfHitStrips(sec,plane);i++ )
00134 mDisplay->add( mEEanalysis->hitstrip(sec,plane,i) );
00135
00136 }
00137 else
00138 LOG_WARN<<" adc-to-energy maker not in chain"<<endm;
00139
00140
00141
00142
00143
00144
00145
00146
00147 StEEmcSmdClusterVec_t uclusters;
00148 StEEmcSmdClusterVec_t vclusters;
00149 std::vector<Int_t> uflags;
00150 std::vector<Int_t> vflags;
00151 std::map<Int_t,Int_t> umap;
00152 std::map<Int_t,Int_t> vmap;
00153
00154 Int_t nu=0;
00155 Int_t nv=0;
00156
00157 if ( mEEclusters )
00158 {
00159
00160 for ( Int_t sec=0;sec<12;sec++ )
00161 {
00162 StEEmcSmdClusterVec_t u=mEEclusters->smdclusters(sec,0);
00163 for ( UInt_t ii=0;ii<u.size();ii++ )
00164 {
00165 uclusters.push_back( u[ii] );
00166 uflags.push_back(0);
00167 umap[ u[ii].key() ] = nu;
00168 LOG_INFO<<"++++ ukey="<<u[ii].key()<<" uid="<<nu << endm;
00169 nu++;
00170 }
00171
00172 StEEmcSmdClusterVec_t v=mEEclusters->smdclusters(sec,1);
00173 for ( UInt_t ii=0;ii<v.size();ii++ )
00174 {
00175 vclusters.push_back( v[ii] );
00176 vflags.push_back(0);
00177 vmap[ v[ii].key() ] = nv;
00178 LOG_INFO<<"++++ vkey="<<v[ii].key()<<" vid="<<nv << endm;
00179 nv++;
00180 }
00181
00182 }
00183
00184 }
00185 else
00186 LOG_WARN<<" cluster maker not in chain"<<endm;
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196 StEEmcPointVec_t points;
00197 std::vector<Int_t> pflags;
00198 std::vector<Int_t> point_uid;
00199 std::vector<Int_t> point_vid;
00200
00201 if ( mEEpoints )
00202 {
00203 points = mEEpoints->points();
00204 for ( UInt_t ii=0;ii<points.size();ii++ )
00205 {
00206 StEEmcPoint p=points[ii];
00207 StEEmcSmdCluster u=p.cluster(0);
00208 StEEmcSmdCluster v=p.cluster(1);
00209 Int_t ukey=u.key();
00210 Int_t vkey=v.key();
00211 pflags.push_back( 0 );
00212 Int_t uid=umap[ukey];
00213 Int_t vid=vmap[vkey];
00214 point_uid.push_back( uid );
00215 point_vid.push_back( vid );
00216 LOG_INFO<<"++++" << " point key="<<p.key()<<" ukey="<<ukey<<" vkey="<<vkey << " uid="<<uid<<" vid="<<vid << endm;
00217 }
00218
00219 }
00220 else
00221 LOG_WARN<<" point maker not in chain" << endm;
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232 StEEmcPairVec_t pairs;
00233 if ( mEEpairs )
00234 {
00235 pairs = mEEpairs->pairs();
00236 }
00237 else
00238 LOG_WARN<<" pi0 maker is not in chain"<<endm;
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252 for ( UInt_t i = 0; i < points.size(); i++ )
00253 {
00254
00255
00256 Int_t icol = 20 + 10 * ( i%3 ) + i/3;
00257
00258 StEEmcPoint p = points[i];
00259 mDisplay->add(p,icol);
00260
00261 StEEmcSmdCluster u=uclusters[ point_uid[i] ];
00262 StEEmcSmdCluster v=vclusters[ point_vid[i] ];
00263
00264
00265
00266 mDisplay->add(u, icol, 1001);
00267 mDisplay->add(v, icol, 1001);
00268
00269 uflags[ point_uid[i] ] = 1;
00270 vflags[ point_vid[i] ] = 1;
00271
00272 }
00273
00274
00275
00276 for ( UInt_t i = 0; i < uclusters.size(); i++ )
00277 {
00278
00279 if ( uflags[i] ) continue;
00280 mDisplay->add( uclusters[i], 13+i%5, 3425 );
00281
00282 }
00283
00284 for ( UInt_t i = 0; i < vclusters.size(); i++ )
00285 {
00286
00287 if ( vflags[i] ) continue;
00288 mDisplay->add( vclusters[i], 13+i%5, 3425 );
00289
00290 }
00291
00292 if ( mTree )
00293 {
00294 mTree->Fill();
00295 }
00296 else
00297 LOG_WARN<<" tree doesn't exist, no data saved"<<endm;
00298
00299
00300 return kStOK;
00301 }
00302
00303
00304 void StEEmcDisplayMaker::Clear( Option_t *opts )
00305 {
00306 mDisplay->clear();
00307 }
00308
00309
00310 TFile *StEEmcDisplayMaker::setFile( const Char_t *file, const Option_t *opts )
00311 {
00312 mFile=new TFile(file,opts);
00313 mFileLocal=true;
00314 return mFile;
00315 }
00316 TFile *StEEmcDisplayMaker::setFile( TFile *file )
00317 {
00318 mFile=file;
00319 mFileLocal=false;
00320 return mFile;
00321 }
00322
00323
00324
00325 Int_t StEEmcDisplayMaker::checkTrigger()
00326 {
00327
00329 if ( mTriggerList.size() == 0 ) return 1;
00330
00331 StTriggerId nominal;
00332
00334 StMuDstMaker *mumk = (StMuDstMaker*)GetMaker("MuDst");
00335 StEvent *event = (StEvent*)GetInputDS("StEvent");
00336
00337 if ( mumk )
00338 {
00339 nominal = mumk->muDst()->event()->triggerIdCollection().nominal();
00340 goto CHECK_TRIGGER;
00341 }
00342
00344
00345 if ( event )
00346 {
00347 nominal=*event->triggerIdCollection()->nominal();
00348 goto CHECK_TRIGGER;
00349 }
00350
00352 goto NO_DATA;
00353
00354
00355 CHECK_TRIGGER:
00356
00357 for ( UInt_t ii=0;ii<mTriggerList.size();ii++ )
00358 {
00359 if ( nominal.isTrigger( mTriggerList[ii] ) ) return mTriggerList[ii];
00360 }
00361 return 0;
00362
00363 NO_DATA:
00364 assert(2+2==5);
00365 return 0;
00366
00367 }
00368
00369 const
00370 Char_t *StEEmcDisplayMaker::triggerList()
00371 {
00372
00373 static TString triggers="";
00374
00375 StTriggerId nominal;
00377 StMuDstMaker *mumk = (StMuDstMaker*)GetMaker("MuDst");
00378 StEvent *event = (StEvent*)GetInputDS("StEvent");
00379 if ( mumk )
00380 {
00381 nominal = mumk->muDst()->event()->triggerIdCollection().nominal();
00382 goto CHECK_TRIGGER;
00383 }
00384
00386 if ( event )
00387 {
00388 nominal=*event->triggerIdCollection()->nominal();
00389 goto CHECK_TRIGGER;
00390 }
00391
00393 goto NO_DATA;
00394
00395
00396 CHECK_TRIGGER:
00397
00398 triggers="";
00399
00400 for ( UInt_t ii=0;ii<mTriggerList.size();ii++ )
00401 {
00402 if ( nominal.isTrigger( mTriggerList[ii] ) ) {
00403 triggers+=mTriggerList[ii];
00404 triggers+=" ";
00405 }
00406 }
00407
00408 return triggers.Data();
00409
00410 NO_DATA:
00411 assert(2+2==5);
00412 return 0;
00413
00414 }