ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/L1RpcTriggerAnalysis/src/PatternManager.cc
(Generate patch)

Comparing UserCode/L1RpcTriggerAnalysis/src/PatternManager.cc (file contents):
Revision 1.6 by konec, Thu May 23 18:24:04 2013 UTC vs.
Revision 1.12 by akalinow, Fri Jun 28 08:31:12 2013 UTC

# Line 8 | Line 8
8   #include "UserCode/L1RpcTriggerAnalysis/interface/DTphDigiSpec.h"
9   #include "UserCode/L1RpcTriggerAnalysis/interface/CSCDigiSpec.h"
10   #include "UserCode/L1RpcTriggerAnalysis/interface/RPCDigiSpec.h"
11 + #include "DataFormats/MuonDetId/interface/MuonSubdetId.h"
12  
13   #include "UserCode/L1RpcTriggerAnalysis/interface/Pattern.h"
14   #include "UserCode/L1RpcTriggerAnalysis/interface/GoldenPattern.h"
# Line 49 | Line 50 | PatternManager::~PatternManager()
50  
51   void PatternManager::run(const EventObj* ev, const TrackObj * simu, const HitSpecObj * hitSpec,  const VDigiSpec & vDigi)
52   {
53 +
54 +  if (theConfig.exists("patternInpFile") &&
55 +      theConfig.exists("patternOutFile")) return;
56 +
57    if (!hitSpec) return;
58    if (hitSpec->rawId() == 0 ) return;
59 <  double phiref = hitSpec->position().phi();
60 <  double ptref  = simu->pt();
59 >
60 >  int stripRef = -1;
61 >  for (VDigiSpec::const_iterator is= vDigi.begin(); is!=vDigi.end(); ++is) {  
62 >    if(is->first!=hitSpec->rawId()) continue;
63 >    RPCDigiSpec digi(is->first, is->second);
64 >    stripRef = digi.halfStrip();
65 >  }
66 >
67 >  ///Use only events with a digi in reference station
68 >  if(stripRef<0) return;
69 >
70 >  //float phiref = hitSpec->position().phi();
71 >  float phiref = stripRef;
72 >  float ptref  = simu->pt();
73    int    chargeref = simu->charge();
74    unsigned int detref =  hitSpec->rawId();
58 /*
59  if (detref != 637602109 && detref != 637634877 &&
60      detref != 637599914 && detref != 637632682 ) return;
61
62  bool precisePos = ( fabs(hitSpec->position().phi()-1.025) < 0.001);
63  if (!precisePos) return;
64  if ( simu->pt() < 16.) return;
65 */
66
75  
76    GoldenPattern::Key key( detref, ptref, chargeref, phiref);
77 +  //if(detref!=637602109 || chargeref<0 || phiref!=80) return;
78 +  //std::cout<<key<<std::endl;
79  
80    Pattern pattern;
81    theEvForPatCounter++;
82 <  for (VDigiSpec::const_iterator is= vDigi.begin(); is!=vDigi.end(); is++) {
82 >  for (VDigiSpec::const_iterator is= vDigi.begin(); is!=vDigi.end(); ++is) {
83      bool isOK = pattern.add(*is);
84      if (!isOK) return;
85    }
# Line 84 | Line 94 | void PatternManager::run(const EventObj*
94   L1Obj PatternManager::check(const EventObj* ev, const TrackObj * simu, const HitSpecObj * hitSpec,  const VDigiSpec & vDigi)
95   {
96    L1Obj candidate;
97 +
98 +  if (theConfig.exists("patternInpFile") &&
99 +      theConfig.exists("patternOutFile")) return candidate;
100 +
101    if (!hitSpec) return candidate;
102    if (hitSpec->rawId() == 0 ) return candidate;
103 <  double phiref = hitSpec->position().phi();
104 <  double ptref  = simu->pt();
103 >  float phiref = hitSpec->position().phi();
104 >  float ptref  = simu->pt();
105    int    chargeref = simu->charge();
106    unsigned int detref =  hitSpec->rawId();
107   /*
# Line 99 | Line 113 | L1Obj PatternManager::check(const EventO
113    if ( simu->pt() < 26. || simu->pt() > 27.  ) return candidate;
114  
115   */
116 < //  std::cout <<" ------------------ EVENT: " << std::endl;
116 > //  std::cout <<" ------------------ EVENT: "<<*ev <<" number of digis: "<<vDigi.size()<< std::endl;
117    std::vector<Pattern> vpattern(1);
118    theEvForPatCounter++;
119 <  for (VDigiSpec::const_iterator is= vDigi.begin(); is!=vDigi.end(); is++) {
120 <    bool isOK = Pattern::add(vpattern,*is);
119 >  static bool skipRpcData   = theConfig.getUntrackedParameter<bool>("skipRpcData",  false);
120 >  static bool skipDtCscData = theConfig.getUntrackedParameter<bool>("skipDtCscData",false);
121 >  for (VDigiSpec::const_iterator is= vDigi.begin(); is!=vDigi.end(); ++is) {
122 >    DetId detId( is->first);
123 >    if (skipRpcData   && detId.subdetId()==MuonSubdetId::RPC) continue;
124 >    if (skipDtCscData && (detId.subdetId()==MuonSubdetId::DT || detId.subdetId()==MuonSubdetId::CSC) ) continue;
125 >    if(detId.subdetId()==MuonSubdetId::DT && DTphDigiSpec(is->first, is->second).bxNum()!=0) continue; //AK. Correct?
126 > //    std::cout << "adding------- "<< is-vDigi.begin()+1 <<" digi det: "<<is->first<<"(rpc:"<<(detId.subdetId()==MuonSubdetId::RPC)<<") data: "<<is->second<< std::endl;
127 >    Pattern::add(vpattern,*is);
128 > //    std::cout <<" after vpattern has size: "<<vpattern.size() << std::endl;
129 >    if (vpattern.size() > 100) break;
130    }
131    if (vpattern[0].size() == 0) return candidate;
132 < //  std::cout <<" ------------------ END EVENT, COMPARE" << std::endl;
132 >  //std::cout <<" ------------------ END EVENT, NOW COMPARE, has #patterns: "<<vpattern.size()<<" vpattern[0].size="<<vpattern[0].size() << std::endl;
133  
134    GoldenPattern::Key thisKey(detref, ptref, chargeref, phiref );
135 < //  std::cout << thisKey <<" PATTENR_SIZE: "<<pattern.size()<< std::endl;
135 >  //std::cout << thisKey << std::endl;
136  
137    GoldenPattern::Result bestMatching;
138    GoldenPattern::Key    bestKey;
139 <  for (std::map< GoldenPattern::Key, GoldenPattern>::iterator igps = theGPs.begin(); igps != theGPs.end(); igps++) {
117 <  for (auto ip=vpattern.begin(); ip!= vpattern.end();++ip) {
139 >  for (auto ip=vpattern.cbegin(); ip!= vpattern.cend();++ip) {
140      const Pattern & pattern = *ip;
141 < //    if (!(thisKey==igps->first)) continue;
142 < //    std::cout << " HAS PATTERN "<<pattern << std::endl;
143 <    GoldenPattern & gp = igps->second;
144 <    GoldenPattern::Result result = gp.compare(pattern);
145 < //    if (!result.hasRpcDet(637602109) && !result.hasRpcDet(637634877) && !result.hasRpcDet(637599914) && !result.hasRpcDet(637632682)) continue;
146 < //   if (!result.hasRpcDet(igps->first.theDet)) continue;
147 < //   if (result.nMatchedTot() < 5 )continue;
148 < //   if (!result) continue;
149 < //    std::cout <<"PATT KEY: "<<igps->first<<" "<<result<<" is Less: "<<(result<bestMatching)<<" isBetter: "<<(result>bestMatching)<<" isBerres: "<<(bestMatching<result)  ; //<<std::endl;
150 <    if (bestMatching < result) {
151 <      bestMatching = result;
152 <      bestKey =  igps->first;
153 < //      std::cout <<" ----"<<" pt: "<< bestKey.ptValue()<<std::endl;
154 <    }
133 < //else std::cout <<std::endl;
134 <  }
141 >    //  std::cout << " HAS PATTERN "<<pattern << std::endl;
142 >    for (std::map< GoldenPattern::Key, GoldenPattern>::iterator igps = theGPs.begin(); igps != theGPs.end(); ++igps) {
143 >      //if (!(thisKey==igps->first)) continue;
144 >      GoldenPattern & gp = igps->second;
145 >      GoldenPattern::Result result = gp.compare(pattern);
146 >      
147 >      std::cout <<"PATT KEY: "<<igps->first<<" "<<result<<std::endl;
148 >      if (bestMatching < result) {
149 >        bestMatching = result;
150 >        bestKey =  igps->first;
151 >        //      std::cout <<" ----"<<" pt: "<< bestKey.ptValue()<<std::endl;
152 >      }
153 >      //else std::cout <<std::endl;
154 >    }
155    }
156  
157   //  std::cout <<" ------------------ END COMPARE: " << std::endl;
158   //  std::cout <<"BEST KEY: "<<bestKey<<" "<< bestMatching<<std::cout <<" ######"<<" pt: "<< bestKey.ptValue()<<std::endl;
159 + //  abort();
160    if (bestMatching) {
161      candidate.pt = bestKey.ptValue();
162 <    candidate.eta = 1.;
162 >    candidate.eta = bestKey.etaValue();
163      candidate.phi = bestKey.phiValue();
164      candidate.q   = bestMatching.nMatchedTot();
165      candidate.type = L1Obj::OTF;
# Line 157 | Line 178 | void PatternManager::beginJob()
178    static ENTRY entry;
179    tree->SetBranchAddress("entry",&entry);
180    Int_t nentries = (Int_t) tree->GetEntries();
181 <  for (Int_t i=0; i<nentries; i++) {
181 >  for (Int_t i=0; i<nentries; ++i) {
182      tree->GetEntry(i);
183      GoldenPattern::Key key;
184      key.theDet =     entry.key_det;
185      key.thePtCode =  entry.key_pt;
186      key.thePhiCode = entry.key_phi;
187      key.theCharge =  entry.key_ch;
188 +
189 +    /*
190 +    if(entry.key_det!=637602109 ||
191 +       entry.key_pt!=7 ||
192 +       entry.key_phi!=166 ||
193 +       entry.key_ch!=-1) continue;
194 +    */
195 +
196      GoldenPattern::PosBenCase pat_Case = static_cast<GoldenPattern::PosBenCase>(entry.pat_Case);
197      if (theGPs.find(key)==theGPs.end()) theGPs[key]=GoldenPattern(key);
198      theGPs[key].add(pat_Case, entry.patDet, entry.posOrBend, entry.freq);
# Line 172 | Line 201 | void PatternManager::beginJob()
201    patternInpFile.Close();
202   }
203  
204 < void PatternManager::endJob()
176 < {
177 <  for (std::map< GoldenPattern::Key, GoldenPattern>::iterator igps = theGPs.begin(); igps != theGPs.end(); igps++) {
178 <    GoldenPattern & gp = igps->second;
179 <    gp.purge();
180 <  }
204 > void PatternManager::endJob(){
205  
206    if ( !theConfig.exists("patternOutFile") ) return;
207    std::string patternOutFileName = theConfig.getParameter<std::string>("patternOutFile");
208    TFile patternOutFile( patternOutFileName.c_str(),"RECREATE");
209 <
209 >  
210 >  if (theConfig.exists("patternInpFile") && theConfig.exists("patternOutFile")){
211 >    for (auto igps = theGPs.begin(); igps != theGPs.end();) {
212 >      GoldenPattern & gp = igps->second;      
213 >      if(!gp.purge()) {theGPs.erase(igps++); } else { ++igps; }
214 >    }
215 >  }
216 >  
217    static ENTRY entry;
218    TTree *tree = new TTree("FlatPatterns","FlatPatterns");
219    tree->Branch("entry",&entry,"key_det/i:key_pt/i:key_phi/i:key_ch/I:pat_Case/i:patDet/i:posOrBend/I:freq/i");
220  
221 <  for (std::map< GoldenPattern::Key, GoldenPattern>::const_iterator igps = theGPs.begin(); igps != theGPs.end(); igps++) {
221 >  for (std::map< GoldenPattern::Key, GoldenPattern>::const_iterator igps = theGPs.begin(); igps != theGPs.end(); ++igps) {
222      const GoldenPattern & gp = igps->second;
223      entry.key_det =  gp.theKey.theDet;
224      entry.key_pt =  gp.theKey.thePtCode;
225      entry.key_phi =  gp.theKey.thePhiCode;
226      entry.key_ch =  gp.theKey.theCharge;
227 <    for (unsigned int iCase =1; iCase <=5; ++iCase) {
228 <      entry.pat_Case = iCase;
229 <      const GoldenPattern::DetFreq * detFreq = 0;
230 <      if (iCase==GoldenPattern::POSRPC) detFreq = &gp.posRpc;
200 <      if (iCase==GoldenPattern::POSCSC) detFreq = &gp.posCsc;
201 <      if (iCase==GoldenPattern::BENCSC) detFreq = &gp.bendingCsc;
202 <      if (iCase==GoldenPattern::POSDT ) detFreq = &gp.posDt;
203 <      if (iCase==GoldenPattern::BENDT ) detFreq = &gp.bendingDt;
204 <      for (GoldenPattern::DetFreq::const_iterator idf = detFreq->begin(); idf != detFreq->end(); idf++) {
227 >    
228 >    for (auto it=gp.PattCore.cbegin();it!=gp.PattCore.cend();++it){
229 >      entry.pat_Case = it->first;
230 >      for (GoldenPattern::DetFreq::const_iterator idf = it->second.cbegin(); idf !=it->second.cend(); ++idf) {
231          entry.patDet = idf->first;
232 <        for (GoldenPattern::MFreq::const_iterator imf = idf->second.begin(); imf != idf->second.end(); imf++) {
232 >        for (GoldenPattern::MFreq::const_iterator imf = idf->second.cbegin(); imf != idf->second.cend(); ++imf) {
233            entry.posOrBend = imf->first;
234            entry.freq = imf->second;
235            tree->Fill();

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines